搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > 零壹技术栈 > 浅谈读写分离和几种常见的开源数据库中间件

浅谈读写分离和几种常见的开源数据库中间件

零壹技术栈 2018-06-30

最近学习了阿里资深技术专家李运华的架构设计关于读写分离的教程,颇有收获,总结一下。


1 读写分离概述





基本架构图:


浅谈读写分离和几种常见的开源数据库中间件



2 适用场景



浅谈读写分离和几种常见的开源数据库中间件



读写分离不是银弹,并不是一有性能问题就上读写分离,而是应该先优化,例如优化慢查询,调整不合理的业务逻辑,引入缓存查询等只有确定系统没有优化空间后才考虑读写分离集群。


3 引入的系统复杂度问题


问题一 主从复制延迟



浅谈读写分离和几种常见的开源数据库中间件



问题二 分配机制


如何将读写操作区分开来,然后访问不同的数据库服务器?

解决方案1 客户端程序代码封装实现


基本架构图



浅谈读写分离和几种常见的开源数据库中间件





浅谈读写分离和几种常见的开源数据库中间件



业界开源实现


  • Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务。 它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。



浅谈读写分离和几种常见的开源数据库中间件



  • 淘宝TDDL淘宝根据自身业务需求研发了 TDDL ( Taobao Distributed Data Layer )框架,主要用于解决 分库分表场景下的访问路由(持久层与数据访问层的配合)以及异构数据库之间的数据同步 ,它是一个基于集中式配置的 JDBC DataSource 实现,具有分库分表、 Master/Salve 、动态数据源配置等功能。



浅谈读写分离和几种常见的开源数据库中间件



解决方案2 服务端中间件封装


基本架构图



浅谈读写分离和几种常见的开源数据库中间件





浅谈读写分离和几种常见的开源数据库中间件



业界开源实现


  • MySQL官方推荐的MySQL Router



浅谈读写分离和几种常见的开源数据库中间件



MySQL Router是轻量级的中间件,可在应用程序和任何后端MySQL服务器之间提供透明路由。它可以用于各种各样的用例,例如通过有效地将数据库流量路由到适当的后端MySQL服务器来提供高可用性和可伸缩性。可插拔架构还使开发人员能够扩展MySQL Router以用于自定义用例。

基于MySQL Router可以实现读写分离,故障自动切换,负载均衡,连接池等功能。


  • MySQL官方提供的MySQL Proxy


浅谈读写分离和几种常见的开源数据库中间件


  • 360开源的Atlas



浅谈读写分离和几种常见的开源数据库中间件







Atlas是由平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它是在mysql-proxy的基础上,对其进行了优化,增加了一些新的功能特性。


常见的开源数据库中间件对比:


功能 Sharding-JDBC TDDL Amoeba Cobar MyCat
基于客户端还是服务端 客户端 客户端 服务端 服务端 服务端
分库分表
MySQL交互协议 JDBC Driver JDBC Driver 前端用NIO,后端用JDBC Driver 前端用NIO,后端用BIO 前后端均用NIO
支持的数据库 任意 任意 任意 MySQL 任意


  • TDDL 不同于其它几款产品,并非独立的中间件,只能算作中间层,是以 Jar 包方式提供给应用调用。属于JDBC Shard 的思想,网上也有很多其它类似产品。

  • Amoeba 是作为一个真正的独立中间件提供服务,即应用去连接 Amoeba 操作 MySQL 集群,就像操作单个 MySQL 一样。从架构中可以看来,Amoeba 算中间件中的早期产品,后端还在使用 JDBC Driver。


  • Cobar 是在 Amoeba 基础上进化的版本,一个显著变化是把后端 JDBC Driver 改为原生的 MySQL 通信协议层。后端去掉 JDBC Driver 后,意味着不再支持 JDBC 规范,不能支持 Oracle、PostgreSQL 等数据。但使 

    用原生通信协议代替 JDBC Driver,后端的功能增加了很多想象力,比如主备切换、读写分离、异步操作等。


  • MyCat 又是在 Cobar 基础上发展的版本,两个显著点是: 
    (1)后端由 BIO 改为 NIO,并发量有大幅提高;
    (2)增加了对Order By、Group By、limit 等聚合功能的支持(虽然 Cobar 也可以支持 Order By、Group By、Limit 语法,但是结果没有进行聚合,只是简单返回给前端,聚合功能还是需要业务系统自己完成)。


本帐号将持续分享后端技术干货,包括虚拟机基础,多线程编程,高性能框架,异步、缓存和消息中间件,分布式和微服务,架构学习和进阶等学习资料和文章。

    

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《浅谈读写分离和几种常见的开源数据库中间件》的版权归原作者「零壹技术栈」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注零壹技术栈微信公众号

零壹技术栈微信公众号:ostenant

零壹技术栈

手机扫描上方二维码即可关注零壹技术栈微信公众号

零壹技术栈最新文章

精品公众号随机推荐