网易资深工程师马进 - 网易NDC高可用实践
2020-02-27 601浏览
- 1.
- 2.
- 3.网易NDC高可用实践 主讲人:马进
- 4.网易NDC高可用实践 主讲人:马进
- 5.NDC是什么? • NDC,直译为网易数据运河,为网易各大产品提供结构化数据实时迁移,同步和订阅 服务。功能包括异构数据库在线迁移,OLTP到OLAP的实时数据整合,数据库增量数据 实时订阅等。是网易分布式数据库DDB和大数据解决方案Mammut的依赖组件 支持MySQL,DDB,Oracle 的在线数据迁移 支持复杂的字段映 射,多租户等功能 2016年年9⽉月 V0.3 2017年年2⽉月 2016年年12⽉月 V1.0 支持MySQL,DDB,Oracle 的数据订阅功能 2017年年6⽉月 更多数据库和数据仓 库支持,集成猛犸
- 6.大纲 • 应用场景 why? • 产品形态 what? • 系统架构 how? • 高可用实践
- 7.NDC应用场景 • OLAP数据同步 - OLTP实时同步到OLAP系统(代表:Kudu, HBase, Greenplum) - OLTP同步到队列,定期merge到OLAP系统(代表:Hive,HDFS) 应用程序 分析程序 Greenplum Oracle kudu HBase Hive HDFS 流计算引擎 Database NDC
- 8.NDC应用场景 • DDB在线数据迁移 - 场景:在线扩容,机器迁移,更改均衡字段……
- 9.NDC应用场景 • 数据库第三方索引支持 - 全文索引,地图索引等 应用程序 歌曲落库 DDB NDC NDC订阅模式 NDC Engine Adapter SDK 应用程序 歌曲模糊查询 ElasLcSearch
- 10.NDC应用场景 • 多机房缓存淘汰 - 原则:同步先于淘汰 NDC delete binlog 滨江IDC (主机房) AppServer read write Cache read write DDB write ReplicaLon 萧山IDC AppServer read write Cache read write DDB delete NDC binlog
- 11.小结 • 应用方视角 - 数据迁移:异构数据库在线迁移,在线扩缩容 - 数据同步:跨机房,跨域,跨国的实时数据同步 - 数据订阅:数据驱动业务,业务间异步解耦 • 大数据视角 - 数据整合:OLTP到OLAP的数据整合 - 数据集成:“making all the data an organiza0on has available in all its services and systems” • 核心需求 - 获取数据库实时变更的能力 - 数据发布的能力
- 12.NDC产品形态 • 平台化 - 平台化的WEB管理工具 - 平台化的资源管理和调度 - 平台化报警监控 • 插件化 - 不同数据源extractor插件化 - 不同数据源applier插件化 - 账号系统插件化
- 13.NDC产品形态
- 14.NDC猛犸定位
- 15.系统架构 API服务 DDBAdmin 猛犸 调度监控 中心Center 迁移/订阅执行节点组 Migrate_1 M ig r a t e _ 2 … Subscribe_N 高可用组件 ......
- 16.系统架构 RDBMS DDB MySQL Oracle sqlserver postgres DB2 API service NDC Center NDC Engine extractor filter applier …… extractor filter applier Relay Log RDBMS DDB MySQL Oracle sqlserver postgres DB2 DW greenplum kudu Oracle HBase kaSa App Adapter NDC SDK
- 17.NDC原理 • 服务特色 - 无锁迁移 - 并发迁移 - 并发回放 - 断点续传 源库 NDC订阅进程 增量数据 丢入队列 下游应用 应用逻辑 数据回放 NDC迁移进程 源库 结构迁移 增量数据拉取 全量迁移 增量数据回放 目标库
- 18.高可用实践 Center高可用 Engine高可用 任务高可用
- 19.Center高可用 • 解决方案 - Zookeeper + Cruator - LeaderSelector - PathCache • 类似方案 - Keepalived • 存在问题 - Brain split
- 20.Center高可用 • 解决方案 - Zookeeper + Cruator - LeaderSelector - PathCache • 类似方案 - Keepalived • 存在问题 - Brain split
- 21.脑裂解决方案 • 基本前提 - Center状态存在系统库 - 系统库是高可用的 • 基本方案 - Lock leader为每个操作上锁 - Switch leader时先lock leader Lockleader:select id from leader for updatetable:leader id XX-XXX-XXXX Center operation lock leader; if (leader id matched) Operate; else return error; commit/rollback; Switch leader lock leader; update leader id; Commit; load meta data; IniLalize server ……
- 22.Center无脑裂
- 23.Engine高可用 Center Do nothing Migrate_engine_2 task2 task1 Migrate_engine_1 ZK • 要点 - 租约与ZK双重验证 - kick out先于fail over Center Alarm task2 Migrate_engine_2 task2 task1 Migrate_engine_1 ZK Kick out task1 Center Failover task2 Migrate_engine_2 task1,task2 Migrate_engine_1 ZK
- 24.任务高可用 • 要点 - 执行进程定期探活源端 - 探活失败后先本地重试N次再上报 • 基本前提 - 断点续传
- 25.任务高可用 • 要点 - Center再次探活源端,成功 - Job fail over到Engine2 • 基本前提 - 断点续传
- 26.源端漂移 • 要点 - Center再次探活源端,成功 - Job fail over到Engine2 • 基本前提 - 断点续传
- 27.小结 • 设计原则 - 监控先于高可用 - 高可用分层,不过度设计 - 高可用插件化,保持系统精简 - 多重验证,避免误切 • 源端漂移问题 - 如何保证数据不丢? - GTID, 基于触发器
- 28.Thank you !