网易数据传输服务NDC高可用实践

原创
新闻
NDC全称Netease data canal,即网易数据运河,是一个平台化的结构化数据传输系统,目的是解决结构化数据的实时迁移、同步、订阅、OLTP到OLAP的实时数据整合等问题。我们希望能够借此将数据库中的数据与其他系统打通,从而构建一个能够整合所有数据库的“数据运河”,任何系统都能够从“运河”中获取数据。此次由51CTO主办的2017WOTA全球架构与运维技术峰会上,网易资深工程师马进老师分享了主题为《网易数据传输服务NDC高可用实践》的演讲。

【51CTO.com原创稿件】NDC全称Netease data canal,即网易数据运河,是一个平台化的结构化数据传输系统,目的是解决结构化数据的实时迁移、同步、订阅、OLTP到OLAP的实时数据整合等问题。我们希望能够借此将数据库中的数据与其他系统打通,从而构建一个能够整合所有数据库的“数据运河”,任何系统都能够从“运河”中获取数据。

此次由51CTO主办的2017WOTA全球架构与运维技术峰会上,网易资深工程师马进老师分享了主题为《网易数据传输服务NDC高可用实践》的演讲。

应用场景

从应用方视角看来,可以将NDC的应用场景分为三类:***类是数据迁移,像DDB到Oracle这样的异构数字迁移,同时可以解决DDB内部在线扩容问题和迁移问题。第二类数据同步,场景较为复杂一些,如跨域甚至跨国的数据实时同步,一般不强调异构,需要解决的是高延迟,复杂拓扑管理的问题。第三类数据订阅,通过数据来驱动业务,实现业务间异步解耦。

***,通过这些应用场景可以总结出NDC的两个核心需求:***,获取数据库实时变更的能力。第二,数据快速发布的能力。如MySQL到Oralce的数据迁移,需要增量迁移的速度要比MySQL线上增量更新快,否则相迁移或者同步永远无法完成,这就考验NDC数据发布的速度。另外一点,是需要NDC提供完善的高可用方案,允许数据重复,但是不能丢,还要提供一个不停服务的能力。

产品形态

NDC的产品形态有两大特性:一是平台化,二是插件化。

平台化,网易自有一个平台化的Web管理工具,主要负责其资源管理和调度,以及平台化报警监控。

插件化,是对不同数据源、物理端通过applier插件进行的敏捷开发,以及账号系统插件化。NDC作为底层的中间件能够支撑不同平台,像网易的公有云,就会依赖到NDC。不同帐号系统之间也是不太一样的,当想要接入不同的帐号系统,却不做插件化的话,成本也就会比较高,而且会使系统变得比较复杂。所以NDC想到的方案就是系统本身不具备用户管理功能,更多是把用户作为一个类型存储到任务的属性里。然后在管理层向外部做数据用户认证。

系统架构

网易是有系统库的,但是不用来做用户管理,反而会在API服务里定义不同的用户监护插件,当不同平台的用户介入到API服务后,网易会调用不同的插件去认证所对应的用户。认证后会将用户打码,通过中心的Center记录到人物属性中去,在这里就能实现用户接入性的插件化。Center组件也就是调度监控中心,目前使用主备模式实现高可用。

运维管理的API管理组件图

迁移和订阅的执行节点图

通过给执行节点划分节点组,达到物理隔离的效果,类似于公有云可用域的概念。数据源NDC目前支持DDB、Oracle,SQL Server等,目的端除了关系型数据库以外还支持Hbase,Greenplum等支持数据更新的数据仓库。数据订阅就是把增量数据发布到Kafka,执行节点的每一个迁移都是独立的进程,这样就可以避免不同进程间的相互影响。

高可用实践

Center高可用,也就是网易调度中心的高可用。分享前,马进老师先同大家讲述了脑列问题。严格地说,通过zookeeper或keepalived方案实现的高可用,并不能避免死锁情况的发生,为此NDC通过又在数据库加锁的方式完全规避了脑裂的可能:具体做法是在每次做运维操作前先尝试把leader锁住,再把数据取出,对比和当前的ID是否一致,如果一致就可以做相应的运维操作。切主的时候,也是现场时把leader锁住再更新。通过锁的方式可以保证运维操作和切主的过程是互斥的,从而可以避免脑列问题的产生。但是在这之前也有两个基本前提:***个就是所有的Center是保持在系统库,其次就是系统库是高可用的。

任务高可用需要注意的是,需要主动检测源端是否活跃,如果发现源端断了,向Center上报,如果Center监测源端可用的话就可以将任务进行漂移,把原先Engine上的任务漂移到另一个Engine上;如果检测源端是不可用的,就会尝试将源端漂移到从库上。

高可用的设计原则:首先,监控要先于高可用。其次,高可用的分层不要过度设计。像考虑Center高可用的时候相当于做了层次划分,Center高可用首先依赖于系统库高可用。第三,高可用插件化,保持系统简洁。第四,多重验证,避免误切。***,源端漂移问题。如果说源端发生了漂移,那么怎么保证数据不丢?马进老师分享了一个非常简单的方案,就是依赖MySQL的GTID功能。还有基于触发器,通过触发器可以把增量数据直接导入表里,这样数据就是不会丢的。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:鸢玮 来源: 51cto
相关推荐

2017-05-05 10:35:57

WOT网易NDC

2020-06-12 07:50:15

大数据

2017-10-10 09:08:12

数据 系统 应用

2020-08-13 08:34:10

MySQL数据DTS

2010-04-07 14:54:38

2018-03-02 10:51:56

缓存服务器数据

2010-07-13 15:55:12

FTP数据传输模式

2015-10-14 09:44:55

TCP网络协议数据传输

2013-11-26 15:51:45

Android编程蓝牙数据传输

2023-04-12 16:20:00

同步数据异步数据传输

2021-10-08 08:37:38

数据传输数据调用网络协议

2009-07-07 16:46:33

数据传输铜缆结构

2009-12-08 11:17:41

WCF双向通信

2021-12-14 11:01:44

TCPUDP网络协议

2021-06-09 11:28:06

加密数据Jsencrypt

2019-09-06 09:11:36

以太网数据二层交换

2022-03-30 15:06:25

数据传输Harmony源码分析

2024-08-05 09:31:00

MySQLDTS数据

2011-03-02 11:23:48

2023-07-07 11:26:08

物联网5G光传输
点赞
收藏

51CTO技术栈公众号