×

NDC系统设计与应用

消耗积分:2 | 格式:rar | 大小:0.8 MB | 2017-09-27

分享资料个

  NDC简介

  NDC全名Netease Data Canal,直译为网易数据运河系统,是网易针对结构化数据库的数据实时迁移、同步和订阅的平台化解决方案。

  在NDC之前,我们主要通过自研或开源软件工具来满足异构数据库实时迁移和同步的需求,随着云计算和公司业务的大力推进,公司内部,尤其是运维团队开始对数据迁移工具的可用性、易用性以及其他多样化功能提出了更多要求和挑战,NDC平台化解决方案便应运而生。NDC的构建快速整合了我们之前在结构化数据迁移领域的积累,于2016年8月正式立项,同年10月就已上线开始为我们的各大产品线提供在线数据迁移和同步服务。

  业界中与NDC类似的产品有阿里云的DTS、阿里开源产品DataX、Canal、Twitter的Databus,在传统领域有Oracle的GoldenGate、开源产品SymmetricDS。从产品功能、成熟度来看,NDC与阿里云DTS最为相似,都具有简、快、全三大特性:

  简,使用简单,有平台化的Web管理工具,配置流程简洁易懂。

  快,数据同步、迁移和订阅速度快,执行高效,满足互联网产品快速迭代的需求。

  全,功能齐全,NDC支持多种常用的异构数据库,包括Oracle、MySQL、SQLServer、DB2、PostgreSQL以及网易分布式数据库DDB,除了可以满足不同数据库之间在线数据迁移、实时同步之外,NDC也可以实现从数据库到多种OLAP系统的实时数据同步和ETL,目前同步目标支持的OLAP系统包含Kudu和Greeplum。另外,NDC支持对数据库做数据订阅,通过将数据库的增量数据丢入消息队列,使应用端可以自由消费数据库的实时增量数据,从而实现由数据驱动业务,复杂业务之间调用解耦。

  提炼场景和需求是做好产品的第一步,本文先通过三种典型应用场景介绍NDC的使用价值,之后从产品形态和系统架构两方面阐述NDC在产品交互、集群管理、资源调度以及跨机房部署上的设计理念,最后介绍NDC实现数据迁移、同步和订阅的一些原理和关键特性,可以为开发者在实现类似功能时提供思路和参考。

  应用场景

  下面通过三个真实案例分别说明NDC在数据迁移和数据订阅上的应用场景。

  DDB数据迁移

  分布式数据库DDB自2006年就开始为网易各大互联网产品提供透明的分库分表服务,在我们的知名互联网产品背后,几乎都可以看到DDB的身影,如考拉、云音乐、云阅读、教育等。

  DDB作为分库分表的结构化数据库,一张表的数据一般存储在多个数据节点中,每张表会选择一个或多个字段作为分区键,来决定数据在数据节点上的分布方式。以用户表为例,有用户ID作为主键,电话号码和邮箱作为唯一健,分区键一般会选择这三个字段中的任意一个或组合。分区键的选择决定了数据分布均匀与否,随着业务数据量的增长,可能会发现之前选择的分区键区分度不够高,而需要更改分区键的需求,分区键的修改涉及到数据重分布,并且修改过程要与业务的线上服务同时进行,这就要求DDB提供在线数据迁移的解决方案。

  与此类似,在业务发展过程中可能遇到表扩容或机房迁移的情况,都需要DDB的在线数据迁移功能,以表扩容为例,NDC解决DDB在线数据迁移方式如图1所示。

  NDC系统设计与应用

  图1 NDC解决DDB数据迁移问题

  当DBA发起一个修改分区键或扩容请求时,管理工具会统一将其解析成一个数据迁移命令,并向NDC服务发起相应的调度请求,NDC则根据调度规则选择一组执行节点执行具体迁移过程,每个源端数据节点都会有对应一个迁移进程来拉取该节点上的全量数据和增量数据,并将这些数据通过DDB的分库分表驱动重新应用到目标表。当目标端和源端的数据延迟在追赶到毫秒级范围内后,通过在DDB管理工具上执行切换表操作完成最后的迁移工作。

  应用缓存更新

  应用缓存更新是NDC数据订阅一类非常典型的应用场景,在没有使用数据订阅做缓存更新的应用环境中,缓存数据通常由应用服务器自己维护,但是由于缓存操作和数据库操作不具有事务性,简单的缓存操作可能带来数据不一致的情况,如图2所示。

  NDC系统设计与应用

  图2 缓存数据库不一致问题

  在图2场景中,线程2在将缓存更新到最新数据后,又被线程1异步滞后地更新成老数据,由于线程1和线程2没有任何状态共享,数据库中后操作的数据可能在缓存中被先操作的数据覆盖掉,导致缓存和数据库数据不一致。若这种情况出现,除非缓存主动淘汰,否则应用将始终读到脏数据。

  对上述的数据不一致问题,业界也有一种基于CAS的解决方案,但会对缓存增加至少一倍以上的压力。而通过NDC的数据订阅,可以比较完美地解决上述问题,NDC数据订阅将数据库中的增量数据丢入消息队列,应用读取消息队列的内容,并将其同步到缓存系统,在这个过程中,NDC执行节点和消息队列保障高可用,而数据库增量数据具有唯一性和时序性,可以避免缓存和数据库的状态不一致。

  如果说使用数据订阅只是缓存更新的一种优选方案的话,那对下面的多机房缓存淘汰,NDC的数据订阅功能就是必选方案了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !