BT

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

不可靠世界的事件溯源

| 作者 Jan Stenberg 关注 10 他的粉丝 ,译者 陈亮芬 关注 0 他的粉丝 发布于 2017年12月5日. 估计阅读时间: 3 分钟 | QCon北京2018全面起航:开启与Netflix、微软、ThoughtWorks等公司的技术创新之路!

亲爱的读者:我们最近添加了一些个人消息定制功能,您只需选择感兴趣的技术主题,即可获取重要资讯的邮件和网页通知

Lorenzo Nicora在最近的µCon London2017微服务讨论会上说明道:事件溯源系统的例子通常来自像电子商务这样的领域,这些领域生成事件的指令输入是面向过程的,同时这样的例子也常见于我们能够控制过程的地方。但有些领域是没有过程的,属于我们搜集外部事件的领域。这些领域的事件源本身就不可靠,传输也不可靠。这些领域涵盖物流运输领域、物联网领域以及依赖于不可靠网络、可能会暂时性中断的移动App领域。

Buildit@wipro digital的平台工程师Niraco指出,在这些不可靠的领域,事件发生在不可控的外部世界,这种情况下事件可能会丢失或者无序地到达。我们只需要在事件到达的时候将它们搜集起来,然后试着画出一个好理解的外部世界图。从本质上讲,我们必须放弃在面向过程的领域中所看到的命令和事件之间的区别,并开始接收所有传入的事件,同时尽可能快地验证存储它们,然后应用逻辑来建立读取模型。Nicora认为这种思维转换与数据存储世界中从ACID到BASE的思维转换是一样的,他称这种方法为:

先快速写入,后思考。(Write Fast, Think Later.)

在这种场景中,事件的验证主要是安全检查,以防止系统出现伪造或恶意的事件,而且这个验证是完全无状态的。 因此,事件的验证和存储可以并行运行,这从可伸缩性的角度来看是很棒的。通过使用微服务架构,单独的服务可以处理事件的写入,构建读取模型并提供查询服务,为我们提供了一种很好的可伸缩的解决方案,因为每个服务都是独立可伸缩的。

在这些不可靠的领域存储所有事件有以下几个优点:

  • 如果事件延迟或者无序到达的话,记录事件。
  • 预测丢失的事件。
  • 如果发现模型中有不一致的地方或者收到了延迟事件的话,重构读取模型。
  • 延迟读取模型,让事件有时间到达。

在给事件排序的时候,一个事件唯一有意义的时间戳是它在源中创建的时间。问题是,这个时间戳仅仅在每个设备发射事件的时间点具有可靠性,这意味着我们无法给全部事件做可靠的排序,而且要解决这个问题并不容易。 如果来自不同设备的事件之间的排序很重要,那么在事件存储好之后,我们必须在逻辑上处理这些事件。 Nicora还提到,使用这种设计的话,读取模型将总是被延迟,延迟时间长短取决于领域和实现难度。

Nicora最后指出,如果你在一个不可靠的世界中做事件溯源,同时又需要很高的可伸缩性,那么这个弱写一致性模型可能是一个很好的选择。 他强调说,在使用这个模型的时候,我们没必要确保事件写入的一致性,相反地,我们应该专注于构建一致的读取模型。

明年的会议将会在2018年11月5日至6日举办。

查看英文原文:Event Sourcing in an Unreliable World


感谢薛命灯对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个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