UDN-企业互联网技术人气社区

板块导航

浏览  : 1030
回复  : 0

[讨论交流] 一分钟读懂MySQL分布式消息的处理

[复制链接]
大脸猫爱吃鱼的头像 楼主
发表于 2016-4-15 11:03:28 | 显示全部楼层 |阅读模式
本帖最后由 大脸猫爱吃鱼 于 2016-4-15 11:04 编辑

  来源:Louis Liu DBAplus社群

  在很多MYSQL环境中,对于MYSQL的分布式事物处理一直是个难题,在当前互联网环境中,大多数应用系统是基于SOA的很多复杂接口之间的调用,并且事物之间的处理优先级也是有先后的,所以对于实际入库的数据而言,不同的系统,对于当前入库的处理方式是不一样的,这样就衍生出了对于订阅MYSQL消息的需求。在公司内部,这套分布式消息系统负责了各个子接口之间数据的衔接,同时肩负后端DW数据仓库的实时消息计算,多数的RDBMS数据,被分解成各种子消息队列,通过不同的topic被各种消费者订阅。

  一、如何分解消息

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

0.png


  具体roma文档可以参考我的blog:http://www.vmcd.org/docs/roma_system.pdf

  二、何时订阅

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

1.jpg


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

  三、对于数据仓库

  在我们的系统中,很多核心表被水平拆分成了N份,对于后端实时数据仓库来说,希望通过合并所有的拆分表,进行多维度的查询工作(对job来说,可以通过定期任务抽取水平拆分的表,但是实时性是滞后的)。在中转服务器上,使用java程序直接订阅roma的消息,拼接成相应的SQL在后端DW上直接执行。

2.png


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

  四、对于实时分析平台

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

3.png


  后期需要改进的:

  roma的订阅能力,对于前端log并发解析的粒度智能的存储策略动态调整没有被订阅消息的保存时间

  作者介绍LouisLiu平安健康互联网数据库架构师。主要负责核心rdbms、分布式数据库、分布式缓存的架构设计及运维工作。

 
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部