当前位置: 首页 > ops >正文

mysql -a_mysqlda

软件简介

1. 概述

1.1. 数据分布式切分方式

分布式架构中最难解决的是数据分布式问题,大部分数据库中间件都 以分库分表作为切分方式 ,好处是通用,但也存在以下问题:

扩容过程需要以切片为单位在库间移动数据。扩容规模受到切片数量限制,如果业务发展增长规模大大超出初期预估会导致切片数量不够用,陷入数据硬迁移的困境。

同一业务对象的数据分散在不同库中,无法做聚合、连接等复杂处理。

跨库意味着分布式事务,虽然现在有两阶段提交等解决方案,但理论上并不总是那么可靠,尤其是在金融行业苛求数据强一致性时。

以核心业务对象切分方式

则以产品线入口业务对象作为切分目标(比如互联网业务系统中的客户对象),开户交易途径数据库中间件,以手机号或其它入口字段作为核心字段做附带权重的客群切分,归属到数据库集群中的某个库中,并保存分配结果,以后该客户的所有交易都会被发往其归属库处理。当需要库存储扩容时,只需简单的增加MySQL归属库到数据库集群中,在数据库中间件系统中增加新归属库配置信息,并调大新库被分配权重,新客户分配归属到新库的概率变大,当新库存储增长到一定程度时调平分配权重,新客户分配归属到所有库的概率均等,直到下一次扩容。

以核心业务对象切分方式的好处是:

无需预估切片,其扩容过程无需移动任何数据。

由于同一业务对象的数据集中在其归属库中,所以可以进行任意聚合、连接等复杂处理。

每个库都是全业务库,同一业务对象的所有模块处理都在一个库中完成,不存在跨库分布式事务,数据强一致性丢还给数据库单库来保证。

但也存在以下硬伤:

产品线设计初期慎重挑选核心业务对象作为切分依据,后期很难变更。

有些业务系统存在多个核心业务对象,不适合使用这种切分方式,如银行线上线下整合核心。

以分库分表切分 和 以核心业务对象切分 是两种主流的数据分布式设计范式,各有优缺点,应在不同场景挑选合适的方式。

1.2. mysqlda

mysqlda是一款基于核心业务对象切分的Proxy模式的分布式MySQL数据库中间件。

mysqlda优势:

以核心业务对象切分方式的所有好处。

支持以核心业务对象定位MySQL归属库(如开户用手机号或邮箱),也支持核心业务对象的关联对象(如开户后的用户ID、用户名、账号)定位MySQL归属库。

归属库分配权重自动调整,扩容后新库与老库的分配权重也自动调整,无需人工介入,使得所有归属库的数据量尽量自动均衡增长。

已包含数据库网关高可用功能,当一个归属库当前MySQL主服务器不可用时自动切换到备服务器,支持多个备服务器。

与MySQL服务器之间的连接池机制,实现了连接复用和闲置清理,提高连接和切换性能。

通过在线重载配置文件,扩容新增MySQL归属库、调整MySQL服务器优先列表等完全无感。

单体系统的数据分布式改造过程尽量无感。

2. 架构与原理

2.1. 体系架构

14e6b2b57dfa0ba958790a76cb4cbf82.png

mysqlda数据库中间件完全遵循MySQL通讯协议桥接应用服务器集群和MySQL数据库集群。

mysqlda内部进程结构为“父-单子进程”。

2.2. 工作原理

全量数据以核心业务对象切分到多个归属库中,每个归属库包含全业务表。一个归属库由一个MySQL服务器列表(需部署为向下游同步数据)组成,当当前MySQL服务器不可用时自动切换到下一个。

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. 简易案例

部署了三个MySQL归属库,每个库有主备两台MySQL服务器组成。

A用户用手机号(核心业务对象)开户,应用服务器发送手机号13812345678给mysqlda请求定位归属库(”select library

13812341234”),mysqlda通过加权一致性哈希算法计算出该手机号(分配客户)归属库N并持久化到保存文件中,从归属库N连接池中取出一个连接,把该连接与应用服务器连接桥接,交换后面的所有SQL和处理结果。

开户业务逻辑中创建了账户331234567890,,应用服务器发送mysqlda扩展SQL给mysqla(”set correl_object

account_no 331234567890 13812345678”),mysqlda绑定两者关系并持久化到保存文件中。

A用户后续处理请求,可以送手机号(”select library 13812341234”)或账号(”select

library_by_correl_object account_no

331234567890”)给mysqlda定位、连接用户归属库,该用户的所有业务数据和业务处理都在该归属库中完成。

2.4. 内部数据实体和关系

6425b420538284175fb2b35d6e4d0c52.png

一个 MySQL归属库 (forward_instance)对应一个 MySQL数据库服务器有序列表 (forward_servers

list)。

一个 MySQL数据库服务器有序列表 (forward_servers list)下辖一个 空闲连接池

(unused_forward_session list)和一个 工作连接池 (forward_session list)。

一个 核心业务对象 可以绑定一个或多个 关联对象类 (forward_correl_object_class)、 关联对象

(forward_correl_object)。

一个 核心业务对象 或一个 关联对象类、关联对象 与 MySQL归属库 建立一个 归属关系

(forward_library)。

accepted_session是 应用服务器与mysqlda之间的通讯会话 ,forward_session是

mysqlda与MySQL数据库服务器之间的通讯会话 ,一旦一条连接上的MySQL归属库被选定或切换,这两个会话会被桥接起来。

http://www.xdnf.cn/news/11055.html

相关文章:

  • Oracle 9i所有版本的最新下载地址(已验证!)
  • 职场实录:我在盛大的日子
  • 外贸网站显示不安全警告怎么办?消除网站不安全警告超全指南
  • 一个快播倒下去,千千万万个快播站起来
  • 设置导航标题颜色以及导航条背景色
  • 回归线
  • oracle数据库分层,Oracle数据仓库的分层管理器解决方案开发者网络Oracle
  • 关于WindowsMobile6.0 手机系统
  • 深入剖析ARP地址欺骗病毒原理及欺骗过程
  • PHP设置header出现警告headers already sent by (output started at......
  • C/C++ MessageBox() 弹窗的用法
  • 未来宝宝长相预测在线工具好用吗?揭秘宝宝美丽奥秘的工具
  • 大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS
  • Dell 服务器安装方法介绍
  • 18个国外优质图片素材
  • 黑客编程hack/黑客入侵用什么编程语言_小白白帽子技巧
  • 黑客是怎么攻击网站的,管理员必知
  • C# Assembly 反射
  • android 推送功能
  • 推荐几个好用的网站导航
  • HttpWebResponse请求状态代码
  • css给文字设置背景色
  • GRIDVIEW内容详解
  • 超详细Lrc(Adobe Lightroom Classic)基础使用教程【0-1】
  • 多进程多线程详解
  • 什么是车载A2B音频总线?
  • 电脑创建无线网---完美软件connectify使用教程
  • 序列号大全,装机必备
  • 如何破解邮箱密码
  • 优优云验证码识别积累一二