饿了么 陈永庭 - 饿了么异地多活数据实施-DRC

农文瑶

2017/12/18 发布于 技术 分类

在演讲中会重点介绍饿了么异地多活的数据基础实施项目DRC,分析如何实现MySQL异地实时双向数据复制,分析如何实现低延迟、高吞吐目标,分析如何实现和克服DRC中的难点。

文字内容
1. 饿了么异地多活的数据实施-DRC 饿了么框架工具部-陈永庭
2. 个人介绍 • 陈永庭 • 2016.6入职饿了么、框架工具部高级架构师 • 2016.9启动异地多活项目调研、有幸全程参入了多活 的设计和实施 • 目前主要服务于公司DRC项目的设计和研发,DRC组 件支撑多活项目、提供低延迟、高吞吐的异地数据复 制;以及为全产线业务服务提供数据变更消息通知服 务
3. 异地多活背景 • 饿了么异地双活 • 北京IDC:4000+服务器;灾备IDC:3000+ vm • 业务状况:千万级日订单,北京IDC无法扩容 ,单IDC 容量无法满足业务增长要求 • 上海IDC正在建设,2017.4月份结束 • 多活项目:2016.9月份开始调研和设计,2017.2启动 全员参入开发,5月份前需要生产灰度
4. 异地多活的底层数据同步实施
5. 异地多活对底层数据的要求
6. 数据集群规模(多活改造前) • 数据中心数量:1 • MySQL集群:250+(master: 250+实例,slave: 1000+实例) • Redis集群: 400+
7. 多活下MySQL的用途分类
8. DRC总体架构设计
9. DRC Replicator Server
10. DRC Applier Server
11. DRC防止循环复制 • MySQL核内解决 • binlog改造 • DRC自身解决 • session disable binlog • checkpoint table
12. DRC数据一致性保障 • 多活不等于多写 • IDC流量切分(uid\loc) • 订单在同一个IDC中完成流转、避免IDC多写 • 避免了数据冲突的发生 • 数据幂等处理 • 为什么需要幂等、幂等的重要性 • 应对重复数据处理(HA/运维场景) • 避免了数据丢失 • 数据更新冲突(数据最新优先原则)
13. DRC数据复制低延迟保 障 • Applier并发写 • 守住原则:事务的时序性和数据幂等处理 • 基于表/行级别的并发apply策略 • group commit: 合并多个小事务,一次commit,减少checkpoint table 操作次数 • 批量压缩数据传输 • 只传输必要的event logs,减少数据传输 • 批量log组包压缩,有效使用IDC间的专线带宽
14. DRC & MySQL Master切 换 Q:新master位置如何判定?保证数据不丢。 A:设定为一个相对旧的位置,DRC容忍重复数据处理
15. DRC线上运行状况(规模) • 复制链路:400+ • 消息订阅 • 目前共17个业务方接入订阅DRC消息 • 1亿+/天 DRC消息
16. DRC线上运行状况(性能)
17. 谢谢! email: yongting.chen@ele.me