浅谈CDC在微服务中的应用

CDC(Change Data Capture)是一种通过监测数据变更(变更包括新增、修改、删除等)而对变更的数据进行进一步处理的一种设计模式,通常应用在数据仓库以及和数据库密切相关的一些应用上,比如数据同步、备份、审计、ETL等。实际上,早在二十多年前,CDC就已经用来将应用系统的数据变更实时发送到数据仓库,进一步转换后传递到数据分析系统,这样能够在极小地影响生产的情况下,有效而及时地将数据传递到消费方。而在微服务架构逐渐流行的今天,这种古老的技术是否能够焕发新的生机?

不同类型的Event都会存到这个表中,在存储Event的具体内容(Content)的时候,因为每种Event的内容不尽相同,我们可以选择以Json的方式存储,也可能会直接序列化成二进制格式。而下游系统关心的可能是特定类型的Event的特定内容,如果不加修改就将这个表的变化广播出去,那么下游系统就会依赖于我们的存储结构了,而且需要自己进行数据加工才能得到自己想要的数据。换而言之,如果以后发生改变,那所有的订阅者都得跟着改,这个是一个很大的隐患,会使得服务间的集成相当脆弱。

那么,更好的做法是什么呢?我觉得DDD可能是解决事件驱动架构问题的一个好的途径,通过DDD的方式,我们需要思考清楚真正业务场景中的聚合与事件,建立正确的模型,从而隔离原始的数据存储,当服务底层发生变化时,只需要修改这一层的实现即可无缝迁移。

当前在Thoughtworks,有一些微服务的项目已经在使用CDC来解决实际问题。CDC本身是一项比较古老的技术,相对于新技术带给我们的激情而言,它带给我们更多的是一种启发。所谓万变不离其宗,不管是什么技术,归根结底,都是为了解决实际的问题,唯有通过不断的实践,才能找到解决特定问题的更好的方式,进一步积累出经验和加以改进,应用到更广的场景中。

文/ThoughtWorks李海峰

更多精彩洞见,请关注微信公众号:ThoughtWorks洞见

达到当天最大量