写点什么

如何选取事件架构

  • 2017-08-29
  • 本文字数:1109 字

    阅读完需:约 4 分钟

如果你要设计一个分布式系统,它可能是基于微服务的,并且你在考虑采用事件架构(Event Architecture),那么目前存在多种的模型和技术可供使用。 David Dawson 近期在的博客帖子中介绍了 [多种风格类型的事件架构,并指出,非功能性需求是影响架构实现选择的一个主要因素。

Dawson 是一位自由职业的系统架构师,他将事件架构简单地定义为一种基于事件的软件架构。鉴于事件也是数据模型的一部分,因此事件架构也是一种数据架构。他强调指出,事件架构并非定义服务交互方式的一系列技术或特定模型。

分阶段事件驱动架构(SEDA,Staged Event-Driven Architecture)是一种简单并很好确立的模型。SEDA 本质上是一个工作流过程,其中各个组件根据自身的处理情况发出事件去驱动整个过程,而事件通常使用某种消息总线进行传输。Dawson 指出,SEDA 模型的一个重要问题是事件的生存期很短,因而在会在传输或组件离线过程中丢失。因此与其让系统采纳最终一致性,不如实现一种Dawson 所称的“期许一致性”(Hopeful Consistency)。只要所有组件工作正常,系统就是一致的。一旦有组件崩溃,那么最终将会得到不一致的系统,这时必须做手工恢复去回到一致性状态。Dawson 称其为“面向实体的微服务”,并强烈建议不要采纳这种架构。

为重建一致性状态,Dawson 给出的最优解决方案是将事件看作是一种数据,并持久化事件流。这样我们就可以在任一时刻重放(Replay)流以恢复状态,并且借助此得到真正的最终一致性系统。从中我们还可以得到其它一些优点,例如可以对同一事件流给出多个视图。

从Dawson 的经验来看,尽管通常称持久化事件流为“事件溯源”,但是他坚信这并非正确的,因为它不是去重建一个实体的状态,而是对不受限实体集创建视图。鉴于此,他更愿意称其为“类型流处理”(Style Stream Processing)。他认为 Kafka 正是使用了这样的架构。Kafka 客户按流的顺序依次读取事件,但在重放事件时可以从头开始,或是从所需的特定事件处开始。

用 DDD 的术语解释,聚合(aggregate)是处于一致性范畴内的一系列实体。通过对一个聚合的所有更改发出和持久化事件,并通过重放而获取的同一事件而构建同一聚合的状态,我们可以得到经事件溯源的聚合根,Dawson 称其为“真实事件溯源”。Daswon 指出,具有独立单一事件流在重建聚合过程中是非常重要的。对于创建视图等其它一些需求,必须要创建独立的流。

为辅助构建基于事件架构模型的系统,Dawson 创建了 Muon Stack 项目。它是一系列面向消息和事件的软件库和服务,用于构建分布式系统。其中包括了一个事件流 API 客户端,以及一个名为“ Photon ”的事件存储。目前他正致力于构建 Muon Stack 对 Kafka 的接口。

查看英文原文: Selecting an Event Architecture

2017-08-29 19:002909
用户头像

发布了 391 篇内容, 共 135.9 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

架构实战营 - 模块 3 - 作业

Vincent

#架构实战营

【架构训练营】模块三作业

zclau

深入浅出Node.js第一章阅读总结

Alex

JavaScript node.js

告别尴尬-找回MySQL数据库密码

龙眼果

MySQL

抖音引流获客APP系统开发

获客I3O6O643Z97

抖音霸屏 抖音、快手获客系统

模块3作业“学生管理系统”架构设计

王小森

悲剧!IDEA 突然找不到类了?

楼下小黑哥

Java 后端 IDEA

鸿蒙轻内核定时器Swtmr:不受硬件和数量限制,满足用户需求

华为云开发者联盟

鸿蒙 定时器 OpenHarmony LiteOS-M 软件定时器

Vue进阶(幺玖肆):keep-alive 实现页面缓存

No Silver Bullet

Vue 7月日更 keep-alive 动态组件

十大自动化测试工具,你在用哪些?

禅道项目管理

测试 自动化测试

NumPy之:多维数组中的线性代数

程序那些事

Python 数据分析 Numpy 程序那些事

如何用Camtasia给视频添加字幕?

淋雨

视频剪辑 Camtasia 录屏软件

OPPO小布助手算法系统的探索、实践与思考

OPPO小布助手

人工智能 深度学习 对话 智能助手 智能对话

测评EasyRecovery的数据恢复效果与多种功能

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

Tensorflow小技巧(一)

毛显新

Python tensorflow pandas

智汇华云 | Wireguard VPN 介绍与使用

华云数据

初学者入门知识图谱必看的能力:推理

华为云开发者联盟

知识图谱 图谱 推理 知识推理 知识纠错

架构实战营模块三作业

tt

架构实战营

模块三作业

VE

架构实战营

Load and preprocess images

毛显新

Python 深度学习 tensorflow 计算机视觉

模块三 作业

SAKIN

矿机矿池挖矿系统开发

获客I3O6O643Z97

挖矿矿池系统开发案例 PHA矿机挖矿

架构实战营 毕业设计

netspecial

架构实战营

模块三:学生管理系统架构详细设计

柱林

架构实战营模块 3 作业

zlz

技术人生第5篇——浅谈如何成为技术一号位?

阿里巴巴中间件

云计算 阿里云 云原生 中间件 技术人生

Python OpenCV 学习轻松点,复习一下模板匹配吧

梦想橡皮擦

Python 7月日更

未雨绸缪最好,亡羊补牢也行|靠谱点评

无量靠谱

顶级高手改变模型|靠谱点评

无量靠谱

Vue进阶(幺捌陆):异步请求导致页面数据渲染错误问题解决

No Silver Bullet

Vue 异步请求 7月日更 $set

带你探索CPU调度的奥秘

华为云开发者联盟

cpu 操作系统 工作负载 调度器 调度

如何选取事件架构_语言 & 开发_Jan Stenberg_InfoQ精选文章