Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践
基于核心营业对象切分的Proxy模式的分布式MySQL数据库中心件
1. 概述
1.1. 数据分布式切分方法
分布式架构中最难解决的是数据分布式问题,大年夜部分数据库中心件都以分库分表作为切分方法,好处是通用,但也存在以下问题:
- 扩容过程须要以切片为单位在库间移动数据。扩容范围受到切片数量限制,如不雅营业成长增长范围大年夜大年夜超出初期预估会导致切片数量不敷用,陷入数据硬迁徙的困境。
- 同一营业对象的数据分散在不合库中,无法做聚合、连接等复杂处理。
- 跨库意味着分布式事务,固然如今有两阶段提交等解决筹划,但理论上并不老是那么靠得住,尤其是在金融行业苛求数据强一致性时。
当须要库存储扩容时,只需简单的增长MySQL归属库到数据库集群中,在数据库中心件体系中增长新归属库设备信息,并调大年夜新库被分派权重,新客户分派归属到新库的概率变大年夜,当新库存储增长到必定水日常平凡调等分派权重,新客户分派归属到所有库的概率均等,直到下一次扩容。
2.1. 体系架构
以核心营业对象切分方法的好处是:
- 无需预估切片,其扩容过程无需移动任何数据。
- 因为同一营业对象的数据集中在其归属库中,所以可以进行随便率性聚合、连接等复杂处理。
- 每个库都是全营业库,同一营业对象的所有模块处理都在一个库中完成,不存在跨库分布式事务,数据强一致性丢还给数据库单库来包管。
但也存在以下硬伤:
- 产品线设计初期慎重遴选核心营业对象作为切分根据,后期很难变革。
- 有些营业体系存在多个核心营业对象,不合适应用这种切分方法,如银行线上线下整合核心。
以分库分表切分和以核心营业对象切分是两种主流的数据分布式设计范式,各有优缺点,应在不归并景遴选合适的方法。
1.2. mysqlda
mysqlda是一款基于核心营业对象切分的Proxy模式的分布式MySQL数据库中心件。
2. 架构与道理
mysqlda数据库中心件完全遵守MySQL通信协定桥策应用办事器集群和MySQL数据库集群。
mysqlda内部过程构造为“父-单子过程”。
2.2. 工作道理
以核心营业对象切分方法则以产品耳目口营业对象作为切分目标(比如互联网营业体系中的客户对象),开户交易门路数据库中心件,以手机号或其它人口字段作为核心字段做附带权重的客群切分,归属到数据库集群中的某个库中,并保存分派结不雅,今后该客户的所有交易都邑被发往其归属库处理。
全量数据以核心营业对象切分到多个归属库中,每个归属库包含全营业表。一个归属库由一个MySQL办事器列表(需安排为向下流同步数据)构成,当当前MySQL办事器弗采取时主动切换到下一?。
一个核心营业对象或一个接洽关系对象类、接洽关系对象 与 MySQL归属库 建立一个归属关系(forward_library)。
MySQL数据库集群预创建雷同的连接用户名、暗码,雷同的数据库名和应用表构造,mysqlda预创建雷同的连接用户名、暗码。
启动mysqlda,大年夜设备文件(etc/mysqlda.conf)中装载连接用户名、暗码,大年夜保存文件(etc/mysqlda.save、etc/mysqlda.接洽关系对象类.save)中装载已存在的核心营业对象、接洽关系对象 与 MySQL数据库集群库 归属库关系信息。
应用办事器调用标准MySQL连接函数/办法连接mysqlda,mysqlda会遵守MySQL通信协定处理MySQL用户登录和暗码校验。
登录成功后,所有DSL、DML操作前,应用办事器发送mysqlda扩大SQL选择核心营业对象("select library (核心营业对象)")或接洽关系对象类、接洽关系对象("select library_by_correl_object (接洽关系对象类) (接洽关系对象)")以连接MySQL归属库,mysqlda会萌芽其已分派的MySQL库核心营业对象或接洽关系对象类、接洽关系对象(如不雅没有分派过则根据加权一致性哈希算法分派一个归属库并持久化到保存文件中),大年夜该MySQL归属库对应数据库办事器有序列表中选择第一个有效MySQL办事器及其连接池中拔取余暇连接(如没有缓存连接则新建一条连接),然后桥接对外和对内连接结对,开端处理后续所有DSL、DML操作。
后续操作中可以也发送mysqlda扩大SQL再选择核心营业对象或接洽关系对象类、接洽关系对象声调剂MySQL归属库办事器连接。
MySQL归属库对应一个数据库办事器列表,如由MySQL数据库1A(MASTER)、1B(SLAVE)、1C(SLAVE)、1D(SLAVE)构成,1A同步复制数据给1B、1C和1D,如不雅1A出现故障不克不及被mysqlda连接,mysqlda会依次测验测验连接1B、1C和1D,实现体系可用性。
应用办事器发送mysqlda扩大SQL绑定接洽关系对象类和接洽关系对象和核心营业对象("set correl_object 接洽关系对象类 接洽关系对象 核心营业对象"),mysqlda会保存该关系并持久化到保存文件中,供今后直接用接洽关系对象类、接洽关系对象定位MySQL归属库。
2.3. 简略单纯案例
mysqlda优势:
- 以核心营业对象切分方法的所有好处。
- 支撑以核心营业对象定位MySQL归属库(如开户用手机号或邮箱),也支撑核心营业对象的接洽关系对象(如开户后的用户ID、用户名、账号)定位MySQL归属库。
- 归属库分派权重主动调剂,扩容后新库邮攀老库的分派权重也主动调剂,无需人工介入,使得所有归属库的数据量尽量主动均衡增长。
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 【51CTO.com原创稿件】提起BlackBerry,信赖很多人都邑想到手机,想到那个曾经风光无穷的商务手机品牌。然>>>详细阅读
本文标题:分布式MySQL数据库中间件MySQLDA深入介绍
地址:http://www.17bianji.com/lsqh/38774.html
1/2 1