![]() |
1
18
这是我在过去两年中一直在做的研究主题。 我们发现了5种可用于处理模式演化的技术:
我们的论文《事件来源的黑暗面》对此进行了总结( https://www.movereem.nl/files/2017SANER-eventsourcing.pdf ) 我们还研究了周边地区:
最后一部分尚未公开。但你可以在这里找到我昨天在DDDEurope的演讲幻灯片: https://speakerdeck.com/overeemm/dddeurope-2018-event-sourcing-after-launch |
![]() |
2
8
你 设计 为了它。在确定事件模式时,您将向后兼容性作为首要考虑事项,并且您可以尽早做到这一点,以便以后的更改很容易。 看见 Versioning in an Event Sourced System ,作者:Greg Young。 基本理念:你 从不 改变模式元素的语义。您可以通过添加新的可选元素来扩展架构,也可以拒绝使用可选元素。 当这还不够时:创建一个设计更好的新模式,然后将数据迁移到新模式。
我认为那里的模式标识符是一个很好的起点,它们确实提供了与域无关组件共享消息的一些细节的可能性。例如,
所以,无论如何,在设计模式时要考虑到这些类型,并尽可能地与它们保持一致。 但当您出现分歧时,请为您的模式提供一个新的标识符。 |
![]() |
3
2
Use Avro! 它有 a well defined evolution process 用于何时可以添加、修改和删除字段。您可以将其视为JSON的更紧凑版本,它支持所有主要编程语言。 你可以把它和汇合平台的 Avro Schema Registry 这将允许您获得数据模式的真实性和验证来源。此外,您还可以使用Kafka Avro SerDes管理主题中的Kafka消息模式。 |
![]() |
4
0
简单的回答是采用事件版本控制和特定的迁移过程。请记住,这是两个不同的问题,尽管它们是相关的。 答案越长越好 the following article . 希望有帮助,干杯 |