多端异构数据集成方案

  1. 概述

多端异构,通常来讲这是数据集成系统最复杂的状况,而前面部分咱们将讨论多端同构场景下的作法,再逐渐延伸到文章主题部分,即多端异构的场景。数据库

  1. 多端同构

所谓多端同构,就是终端类型能够是多种,可是使用的数据库是相同的,好比都是MySQL。这种状况下,须要将终端的MySQL数据同步到统一数据平台,统一数据平台的数据库类型能够是任意的。这种场景的示意图以下:后端

通常来讲,有两种实现方式:服务器

  1. 按期将终端MySQL的bin log增量同步到统一数据平台,平台解析bin log后写入数据库,解析器独立于业务代码,反向亦然;网络

  2. 终端和统一数据平台的业务代码经过自定义的数据包协议来收发数据,解析后写入各自的数据库;架构

第一种方式的话,须要独立的解析器,即数据同步和业务逻辑是分开的,所以须要在数据到达时通知业务模块,通常是经过消息队列来实现,当解析器将数据写入数据库时,同时发送一个消息到消息队列,业务代码经过订阅消息来实时响应。示意图以下:工具

第二种方式其实就是将解析器逻辑放入到业务模块里边,这个时候就省去了消息队列。示意图以下:大数据

那么比较来看的话,第一种方式部署上须要多部署两个模块,可是业务模块更纯粹一些,没有数据集成逻辑,但业务模块仍是免不了须要接收消息而后进行数据处理。并且若是平台也有数据须要同步到终端,而且平台不是bin log采集增量数据的方式,解析器和接收器又变得更复杂了。所以,从这个角度看的话,第二种方式更经常使用也更省事。那第一种方式是否毫无用处呢?其实也不是。若是平台这边有多个独立的业务模块须要同步数据,第二种方式的话,每一个模块都须要跟终端进行直连并收发数据,这种状况下能够将两种方式结合起来获得第三种方式,示意图以下:阿里云

  1. 多端异构

多端异构,也就是各个终端不一样,使用的数据库也不相同,好比有的终端使用MySQL,有的终端使用Oracle,另外的使用SQL Server等,示意图以下:插件

这种状况下,只须要将多端同构的方案进行下变化,获得下面的图:设计

这时候,各个终端系统和平台采用统一的数据交换协议,每一个终端模块和平台模块都具备封装数据和解析数据协议的功能。

还有一种比较复杂的状况,就是各个终端模块由不一样的厂商开发,没有统一的数据协议,终端业务模块也不会直接经过TCP/IP和平台模块进行数据传输。这个时候,平台仍是须要终端的数据,怎么办?可使用第三方软件,经过监控终端和平台的数据库变化,捕获变化的数据发送给对方,对方解析后同步到数据库。这样的话,看起来和多端同构时咱们给的第一种解决方案相似,第三方同步软件就是一个独立的数据收发和解析器。

我曾经对比过各类数据同步工具,网上不少所谓的同步工具更多的是转换器,就是一次性的将某种数据库的数据转换成另一种数据库能识别的结构并导入目标数据库,但并不能进行增量同步。在支持增量同步方面,有个开源项目叫SymmetricDS,支持异构数据的双向增量同步,数据变化的捕获基于触发器。在上面的场景中,咱们须要将SymmetricDS安装到每一个终端系统中,同时平台端也须要安装。每一个数据库被看做SymmetricDS架构中的一个节点(Node),每一个节点属于一个组(Group),数据的同步规则是基于组的,即组和组之间的同步,组内的节点使用的是组的规则。

SymmetricDS在链接到某个数据库后,会在数据库中插入几十个表,用来记录数据变动、路由规则、组信息、节点信息等等。这些表也须要和咱们的业务表放在一块儿,触发器才能正常,所以这种方式对业务数据库是侵入式的。若是不喜欢这种方式,咱们能够将每一个终端的数据库结构,转换成平台端数据库对应的结构,而后在平台端新建一个数据库,将终端数据库的数据同步到刚刚专门为该终端创建的数据库,这个新建的数据库至关于终端数据库的备份。这样的话,新建的这个备份数据库和咱们平台端的业务数据库是分开的。那当数据从终端同步到平台端时,业务模块怎么知道呢?一样的,经过消息队列。咱们须要给在平台端安装的SymmetricDS服务安装插件,这个插件在终端数据同步到备份数据库时被调用,插件的功能就是将接收到的数据发送到消息队列,业务模块经过订阅消息来获取数据并进行相应的处理。整个系统的架构以下图所示:

从上面的架构图能够知道,每一个终端在平台端都有相应的备份数据库,当终端有新的数据同步到备份数据库时,SymmetricDS的插件将消息发送到消息队列,再通过消息处理服务解析后进入到业务数据库。反向的,业务模块有数据更新时,一样把相应的数据写入到消息队列,这时候消息处理服务将数据写入到备份数据库,由于有触发器,触发SymmetricDS将更改的数据先保存到数据表中,而后再同步到终端数据库,这样就实现了数据的双向增量同步集成。

  1. 后端集成

若是你的数据不是多端的,好比只是后端集成,能够考虑消息队列,我也建议你去看看阿里云的数加大数据平台,好比它提供将Apache Log数据抽取而后写入RDS数据库,又提供将RDS数据同步到Max Compute等存储系统,而后就能够配接DataV进行数据分析展现,这就是数加的一站式大数据服务。阿里云有一个数据同步工具叫DataX,貌似不支持多端增量同步,后来又演化成叫“数据集成”的产品,目前具体怎样没有再去了解了。若是你了解更多或者有其余的方案,也欢迎你在评论里跟你们分享分享!

  1. 多端离线

多端离线是指多端离线使用,写这个是由于前段有人问我这么个问题:在终端机刷他们的卡时,反应速度比较慢,由于要联网,网络很差的时候体验很很差。是否能够改进,将数据同时存储在终端机,而后刷卡时不链接服务器,还容许必定额度的透支。另外还有一个问题,这张卡是能够在多个终端机刷的,好比在这个窗口刷完,立刻能够去另一个窗口刷。

咱们能够先看下不容许多终端刷卡的状况下如何解决。这种状况就是把数据存储一份到终端,而后数据库里存放容许透支金额、已透支金额等数据就能够了。当用户刷卡时,若是没有超出范围就能够正常使用,等到网络条件好时,再同步数据到后端服务器。

可是当容许多终端刷卡时,可能第一次刷完数据尚未同步到服务器,第二次在另外的终端刷时,数据就不一样步了。这种状况就要看具体的软硬件条件了,若是能够,把须要的信息存储到卡上,这样在第2、三个终端刷时都没有问题。当各个终端将刷卡消费信息同步到服务器端时,服务器端设计成相似能够回放电影同样,把每次刷卡的动做回放,再结合具体记录下来的数据进行处理就能够了。这只是我根据对方粗浅描述的状况给的一个思路,也许了解了更多信息后,会有不同的答案。

延伸阅读: