水平拆分的解决方案

  由于水平拆分牵涉的逻辑比较复杂,当前也有了不少比较成熟的解决方案。这些方案分为两大类:客户端架构和代理架构

客户端架构

通过修改数据访问层,如JDBC、Data Source、MyBatis,通过配置来管理多个数据源,直连数据库,并在模块内完成数据的分片整合,一般以Jar包的方式呈现。

这是一个客户端架构的例子:

可以看到分片的实现是和应用服务器在一起的,通过修改Spring JDBC层来实现

客户端架构的优点是:

  • 应用直连数据库,降低外围系统依赖所带来的宕机风险

  • 集成成本低,无需额外运维的组件

缺点是:

  • 限于只能在数据库访问层上做文章,扩展性一般,对于比较复杂的系统可能会力不从心

  • 将分片逻辑的压力放在应用服务器上,造成额外风险

代理架构

通过独立的中间件来统一管理所有数据源和数据分片整合,后端数据库集群对前端应用程序透明,需要独立部署和运维代理组件

这是一个代理架构的例子:

代理组件为了分流和防止单点,一般以集群形式存在,同时可能需要Zookeeper之类的服务组件来管理

代理架构的优点是:

  • 能够处理非常复杂的需求,不受数据库访问层原来实现的限制,扩展性强

  • 对于应用服务器透明且没有增加任何额外负载

缺点是:

  • 需部署和运维独立的代理中间件,成本高

  • 应用需经过代理来连接数据库,网络上多了一跳,性能有损失且有额外风险

各方案比较
 出品方架构模型支持数据库分库分表读写分离外部依赖是否开源实现语言支持语言最后更新Github星数
MySQL FabricMySQL官方代理架构MySQLpython无限制4个月前35
Cobar阿里巴巴代理架构MySQLJava无限制两年前1287
Cobar Client阿里巴巴客户端架构MySQLJavaJava三年前344
TDDL淘宝客户端架构无限制Diamond只开源部分JavaJava未知519
Atlas奇虎360代理架构MySQLC无限制10个月前1941
Heisenberg百度熊照代理架构MySQLJava无限制2个月前197
TribeDB个人代理架构MySQLNodeJS无限制3个月前126
ShardingJDBC当当客户端架构MySQLJavaJava当天1144
Shark个人客户端架构MySQLJavaJava两天前84
KingShard个人代理架构MySQLGolang无限制两天前1836
OneProxy平民软件代理架构MySQL未知无限制未知未知
MyCat社区代理架构MySQLJava无限制两天前1270
VitessYoutube代理架构MySQLGolang无限制当天3636
Mixer个人代理架构MySQLGolang无限制9个月前472
JetPantsTumblr客户端架构MySQLRubyRuby10个月前957
HibernateShardHibernate客户端架构无限制JavaJava4年前57
MybatisShardMakerSoft客户端架构无限制JavaJava11个月前119
GizzardTwitter代理架构无限制Java无限制3年前2087

如此多的方案,如何进行选择?可以按以下思路来考虑:

  1. 确定是使用代理架构还是客户端架构。中小型规模或是比较简单的场景倾向于选择客户端架构,复杂场景或大规模系统倾向选择代理架构

  2. 具体功能是否满足,比如需要跨节点ORDER BY,那么支持该功能的优先考虑

  3. 不考虑一年内没有更新的产品,说明开发停滞,甚至无人维护和技术支持

  4. 最好按大公司->社区->小公司->个人这样的出品方顺序来选择

  5. 选择口碑较好的,比如github星数、使用者数量质量和使用者反馈

  6. 开源的优先,往往项目有特殊需求可能需要改动源代码

按照上述思路,推荐以下选择:

  • 客户端架构:ShardingJDBC

  • 代理架构:MyCat或者Atlas

 

转载于:https://www.cnblogs.com/zhangxiaoliu/p/6323384.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值