BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

事件溯源与流处理的对比

| 作者 Jan Stenberg 关注 37 他的粉丝 ,译者 张卫滨 关注  他的粉丝 发布于 2016年6月3日. 估计阅读时间: 3 分钟 | ArchSummit北京2018 共同探讨机器学习、信息安全、微服务治理的关键点

事件溯源(event sourcing)CQRS是在领域驱动设计(Domain-Driven Design,DDD)社区出现的两个模式。流处理(Stream processing)构建在类似的理念上,但是它来源于不同的社区,Martin Kleppmann在今年的领域驱动设计欧洲会议的演讲中,将事件溯源与流处理进行了对比。

Kleppmann之前有在互联网公司构建大规模数据系统的背景,但是他目前就职于剑桥大学,在将企业级软件与互联网公司的系统进行对比的时候,Kleppmann指出,它们主要的差异在于复杂性所在的位置不同。在企业级软件方面,复杂性主要在于领域模型和业务逻辑。在互联网公司中,领域模型相对会比较简单,但是它会快速产生数量非常大的数据,这导致了数据基础设施的复杂性。尽管这两个方面都有其复杂性,而且产生的原因各异,但是Kleppmann发现它们的解决方案是类似的,在企业级领域采用的是事件溯源,而在互联网方面,采用的则是流处理或者不可变事件的序列(sequences of immutable events)。

Kleppmann提到了处理事件流的一个工具,那就是Kafka。最初开发它的目的在于聚集日志文件和处理事件。它是基于非常简单的理念构造的,Kleppmann将其类比为可以附加(append)日志内容的日志文件,不过这里不断添加的是新的消息或事件。这样会创建出按序排列的记录序列,它可以用来统一地处理任意事件流。Kafka一个很重要的特性就是在它跨服务器分布的时候,能够处理大量的事件。

使用Kafka实现的一个很有意思功能就是为数据库变更事件创建事件流,Kleppmann认为这与事件溯源非常类似,数据库每条记录的更新都会产生一个事件,如聚合状态或实体的更新。通过这种方式,在发布并应用更新到本地版本的数据时,客户可以读取到一个事件。Kleppmann指出这种使用场景类似于数据库复制(database replication),在数据库复制中,会首先写入到一个主数据库中,然后复制到备份数据库中。

在Kafka最初所设计的使用场景中,所有的消息出现一定百分比的丢失是可以接受的,但是随着运维经验的不断丰富和成熟,对持久化的预期也在提高,它的复制技术已经达到了很多关系型数据库复制系统的水准。为Kafka添加事务支持的工作正在进行之中,它允许以原子的方式自动发布消息到多个分区。Kleppmann指出,尽管事件流和处理是非常新的技术,但是毫无疑问这种趋势已经进入到很多数据库之中了。

在对比事件溯源与流处理的过程中,Kleppmann发现特别有意思的一点在于这两个类似的理念来源于两个差异性非常大的社区,而且这两个社区很少有交流。这表明在底层会有一些基础的理念,而这些理念是非常重要的。

QCon伦敦的演讲中,Kleppmann讨论了如何使用事件流和Kafka在异构的系统间保持数据同步。

Kleppmann演讲的slides可以在该地址获取

明年的领域驱动设计欧洲会议计划会在2017年的1月底举行。

查看英文原文Comparison of Event Sourcing with Stream Processing

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT