Microservices 使用数据库CDC的事件源是否被认为是良好的体系结构?
当我们谈到事件源时,我们有一个简单的双写体系结构,在这个体系结构中,我们可以写入数据库,然后将事件写入类似Kafka的队列。其他下游系统可以读取这些事件并相应地采取行动/使用它们 但是,当试图使DB和事件同步时,就会出现问题,因为需要对这些事件进行排序才能使其有意义 为了解决这个问题,人们鼓励使用数据库提交日志作为事件源,并且有围绕它构建的工具,如Airbnb的Spinal Tap、Redhat的Debezium、Oracle的Golden gate等。。。它解决了一致性、顺序保证等问题 但是使用数据库提交日志作为事件源的问题是,我们与DB模式紧密耦合。微服务的DB模式是公开的,DB模式中的任何破坏性更改(如数据类型更改或列名更改)实际上都会破坏下游系统 那么,使用DB CDC作为事件源是一个好主意吗Microservices 使用数据库CDC的事件源是否被认为是良好的体系结构?,microservices,cqrs,software-design,event-sourcing,debezium,Microservices,Cqrs,Software Design,Event Sourcing,Debezium,当我们谈到事件源时,我们有一个简单的双写体系结构,在这个体系结构中,我们可以写入数据库,然后将事件写入类似Kafka的队列。其他下游系统可以读取这些事件并相应地采取行动/使用它们 但是,当试图使DB和事件同步时,就会出现问题,因为需要对这些事件进行排序才能使其有意义 为了解决这个问题,人们鼓励使用数据库提交日志作为事件源,并且有围绕它构建的工具,如Airbnb的Spinal Tap、Redhat的Debezium、Oracle的Golden gate等。。。它解决了一致性、顺序保证等问题 但是使
如果您正在使用事件源: 那么联轴器就不应该存在了。事件存储是通用的,它不关心事件的内部状态。在最坏的情况下,您将与事件存储本身的内部结构相耦合,但这并不是特定于特定的微服务的 如果不使用事件源:
在这种情况下,聚合的内部结构与CDC组件之间存在耦合(CDC组件捕获数据更改并将事件发布到消息队列或类似组件)。为了限制这种耦合对微服务本身的影响,CDC组件应该是它的一部分。这样,当微服务中聚合的内部结构发生变化时,CDC组件也会发生变化,外部世界不会注意到。这两项更改同时部署。扩展了康斯坦丁的答案: TLDR强> 事务日志跟踪/挖掘应该对其他人隐藏 严格来说,它不是一个事件流,因为您不应该直接从其他服务访问它。它通常用于将遗留系统逐渐过渡到基于微服务的系统时。流程可能如下所示: