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

板块导航

浏览  : 661
回复  : 1

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

[复制链接]
卖火柴的小公举的头像 楼主
发表于 2016-5-11 13:13:44 | 显示全部楼层 |阅读模式
本帖最后由 卖火柴的小公举 于 2016-5-11 13:14 编辑

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

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

  一、如何分解消息

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

1.png

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

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

  二、何时订阅

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

2.png

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

  三、对于数据仓库

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

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

3.png

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

  具体可以参考:

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

  四、对于实时分析平台

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

4.png

  后期需要改进的:

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

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

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

                                    原文作者:Louis Liu  来源:DBAplus
发表于 2016-5-11 13:36:31 | 显示全部楼层
赞一个
使用道具 举报

回复

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

本版积分规则

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