浅谈高性可以数据库集群——读写分离

作者 : 开心源码 本文共1287个字,预计阅读时间需要4分钟 发布时间: 2022-05-11 共76人阅读
作者 陈彩华文章转载交流请联络 caison@aliyun.com

读写分离

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

本文主要详情高性可以数据库集群读写分离相关理论,基本架构,涉及的复杂度问题以及常见地决方案。

1 读写分离概述

读写分离概述.png

基本架构图:

基本架构图.jpg

2 适使用场景

适使用场景.png

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

3 引入的系统复杂度问题

问题一 主从复制推迟

主从复制推迟.png

问题二 分配机制

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

处理方案1 用户端程序代码封装实现

基本架构图

程序代码封装实现分配基本架构图

程序代码封装

业界开源实现

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

Sharding-JDBC基本架构图

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

淘宝TDDL基本架构图

处理方案2 服务端中间件封装

基本架构图

服务端中间件封装实现分配基本架构图服务端中间件封装

业界开源实现

  • MySQL官方推荐的MySQL Router

MySQL Router架构图

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

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

  • MySQL官方提供的MySQL Proxy

    MySQL Proxy

  • 360开源的Atlas

Atlas架构图形象表示Atlas总体架构

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

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

功可以Sharding-JDBCTDDLAmoebaCobarMyCat
基于用户端还是服务端用户端用户端服务端服务端服务端
分库分表
MySQL交互协议JDBC DriverJDBC Driver前台使用NIO,后台使用JDBC Driver前台使用NIO,后台使用BIO前后台均使用NIO
支持的数据库任意任意任意MySQL任意

参考

从0开始学架构——李运华

Mycat原了解析-Mycat架构分析

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 浅谈高性可以数据库集群——读写分离

发表回复