京东云开发者|mysql基于binlake同步ES积压解决方案( 二 )


开启并行数理论上增加(并行数/批量数)的倍数并发处理能力要求数据无序,针对乱序,数据存储,不影响业务
4.2.2 并行有序的方案1)实现数据幂等性,增加缓存,并行消费策略
方案流程

京东云开发者|mysql基于binlake同步ES积压解决方案

文章插图
基础实现流程:
1)根据binlake发送mq,在mq端开启并行消费,确保并行消费2)根据业务单号对,单号加锁(如麦哲伦对运单号加锁,即对单号加分布式锁),根据对应的ID获取ES数据 。3)校验数据是否有效,若查询无数据,则直接新增;若查询的数据状态大于当前数据状态,则直接抛弃,若查询状态小于当前数据状态,则直接更新数据4)更新缓存并释放锁
优点
  • 指定资源情况下,增大消费端并发
  • 可以开启并行消费,且保证顺序消费
  • 可以使得资源充分利用,增加消费性能
缺点
  • 增加毫秒级缓存额外开销
实践:麦哲伦运单中心针对此方案实现binlake数据同步ES
2)binlake主题分发子主题,显示增大并发策略
京东云开发者|mysql基于binlake同步ES积压解决方案

文章插图
优点:
  • 逻辑相对简单,不需要开发复杂逻辑,无需引入额外中间件
  • 预估转发消息速率即是实际处理速率
提升速率计算:
  • 原主题单线程处理一条数据存储到ES时间为es_time,举例为50ms,每秒吞吐量是20条
  • 现单线程转发MQ一条数据时间为trans_time,举例为20ms,每秒转发吞吐量50条
  • 假设转发topic为N个子主题,则吞吐量理论为n*20实际小于转发吞吐量50,此处多子主题对cpu核数竞争
  • 提升吞吐量为=(1000ms/trans_time )转发吞吐量 - (1000ms/es_time)原有吞吐量
缺点
  • 扩展性不好,实际结果有待验证,小于预估值
实践:跨境赤道分发中心实现类似功能实践,消息转发,其他MQ实现
3)俩种方案对比
主题较少一个俩个主题情况下,且业务处理比较耗时情况下,不想额外开发,可选方案二长期方案选择方案一,并行消费策略,可伸缩性,可扩展,支持动态扩容
5.总结针对MQ积压问题,并行消费可以是解决问题的一大利器,本文从binlake同步ES进行分析,同时针对积压推荐俩种方案,并从性能合理利用及扩展性分析,简要介绍方案二并行有序消费策略,希望能够帮助大家,如有问题,请随时指出!
作者:任洪波【京东云开发者|mysql基于binlake同步ES积压解决方案】

经验总结扩展阅读