一分钟读懂MySQL分布式消息的处理

Louis Liu 2016-04-15 09:47:00

在很多MYSQL环境中,对于MYSQL的分布式事物处理一直是个难题,在当前互联网环境中,大多数应用系统是基于SOA的很多复杂接口之间的调用,并且事物之间的处理优先级也是有先后的,所以对于实际入库的数据而言,不同的系统,对于当前入库的处理方式是不一样的,这样就衍生出了对于订阅MYSQL消息的需求。

 

在公司内部,这套分布式消息系统负责了各个子接口之间数据的衔接,同时肩负后端DW数据仓库的实时消息计算,多数的RDBMS数据,被分解成各种子消息队列,通过不同的topic被各种消费者订阅。

 

一、如何分解消息

 

 

后端订阅程序(基于阿里巴巴的canal)通过解析不同应用的binlog (mysql线上产生的二进制日志) 通过模拟slave的行为,将binlog顺序的订阅到本地,通过内部解析程序,将binlog events解析成对应的消息,通过MetaQ 固化解析完成的消息,自定义存放时间,从而让consumer 自行订阅到对应的系统,进行相关处理。

 

 

具体roma文档可以参考我的blog:

http://www.vmcd.org/docs/roma_system.pdf

 

二、何时订阅

 

 

通常当支付系统需要做异步分布式事务调用的时候,可以采用roma消息。采用水平拆分DB而需要一些统计类的需求的时候(合表) 可以订阅合并的topics。当需要一个汇总的数据仓库,执行跨库join查询的时候 可以订阅roma消息。

 

 

上图中,各类系统通过RPC框架进行异步调用,同时将订阅到的消息(roma异步消息)进行相处理,将操作类型,操作细节发送给对应子系统,从而实现了操作的异步化(而roma对于前端数据库日志的实时解析保证了事物消息的实时性)。

 

三、对于数据仓库

 

在我们的系统中,很多核心表被水平拆分成了N份,对于后端实时数据仓库来说,希望通过合并所有的拆分表,进行多维度的查询工作 (对job来说,可以通过定期任务抽取水平拆分的表,但是实时性是滞后的)。

 

在中转服务器上,使用java程序直接订阅roma的消息,拼接成相应的SQL在后端DW上直接执行。

 


 

通过订阅同步消息,将前端更新实时同步到后端的数据仓库,从而达到实时分析的需求。后期结合binlog server的改进还可以进行所有系统的binlog 集中化分层订阅。

 

具体可以参考:

https://www.mariadb.com/blog/binlog-server

 

四、对于实时分析平台

 

 

同样可以订阅前端RDBMS操作到后端大数据平台,通过流式计算实现秒级的分析。

 

 

后期需要改进的:

 

 
 
 
  • roma的订阅能力,对于前端log并发解析的粒度

  • 智能的存储策略 动态调整没有被订阅消息的保存时间

 
 
 

 

作者介绍  Louis Liu(www.vmcd.org)

  • 平安健康互联网数据库架构师。

  • 主要负责核心rdbms、分布式数据库、分布式缓存的架构设计及运维工作。


 

全球敏捷运维峰会【北京站】

 
 

 

北京站蓄势待发:2016年6月11日,DBA+社群联合运维帮、Linux中国开启全球敏捷运维峰会第二站:北京站!

 

技术大咖云集:峰会力邀来自百度、新浪、58到家、小米、搜狐畅游、浙江移动、新炬网络、日志易等互联网与传统企业的资深大咖,汇聚500+行业精英!

 

互联网 VS 传统的碰撞:共同探讨互联网前沿技术应用心得、传统企业技术转型的实践与困境、全程拒绝无营养的广告,绝对干货,精彩不容错过!

 

北京站限时优惠

 

原价

门票:169元

VIP票:599元

(含VIP坐席、午餐)

 


 

优惠价

(5月12日前)

门票:免费

VIP票:199元

(优惠码:dbavip)

 

↓↓ 购票通道 ↓↓

扫描二维码

最新评论
访客 2023年08月20日

230721

访客 2023年08月16日

1、导入Mongo Monitor监控工具表结构(mongo_monitor…

访客 2023年08月04日

上面提到: 在问题描述的架构图中我们可以看到,Click…

访客 2023年07月19日

PMM不香吗?

访客 2023年06月20日

如今看都很棒

活动预告