业务系统的近实时数据同步,最常见的方式是通过数据库单向或者双向同步的方式增量实时进行,说句实话,个人感觉,双向方式还不错,单向方式就不太好说。
这取决于怎么定位同步?
从逻辑角度,我个人倾向定位于两个互不相关的同构系统在运行过程中的数据同步,每个系统只负责自己的数据更新,两个系统的同步由专门的模块负责,比如数据库同步,或者专门的同步服务。(这里想提一下Erlang编程语言,它的设计思路给了我很多启示。)双向同步碰到的最大问题,是两个系统信息之间的数据对应的问题。在不同的同步解决方案中,有不同的解决方式。由于个人对数据库同步不感冒,还是倾向于基于消息方式的同步概念,这就要求这种方式也要解决这个问题。
前天终于想明白这个是可以做到的,而且是两者之间可以唯一确定的。其实说穿了,也蛮简单的,最后的解决方案,有点类似于SSO的用户标识对应的方法,挺搞笑的。由此可见,只要面对类似的问题,基于相同的逻辑思维,必然得出近似的结论。
注:Erlang属于一种纯消息传递语言——即一种基于独立性很强的并行进程的语言,我们的编程模型广泛使用了速错(fail-fast)进程。这项技术在构建可容错系统的硬件平台中被普遍使用,但是在软件设计方面却用得不多。这主要是因为传统的编程语言并不允许不同的软件模块以彼此互不干扰的方式存在。当前普遍使用的是多线程的编程模型,该模型中资源是共享的,这样就造成了线程很难真正隔离起来,就可能导致一个线程中的错误会传播到另一个线程中,这就破坏了系统内部的坚固性。
Erlang的世界观可以归纳为如下的一些观念: