写点什么

如何选取事件架构

  • 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:002953
用户头像

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

关注

评论

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

架构实战营模块1第3课 - 什么是面向复杂度架构设计

净意

爱不释手!阿里十几位大牛联玦整理—23年最全面试八股文合集

做梦都在改BUG

Java java面试 Java八股文 Java面试题 Java面试八股文

【我在京东做研发】揭秘支撑京东万人规模技术人员协作的行云DevOps平台

京东科技开发者

零基础如何学习Web 安全,如何让普通人快速入门网络安全?

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等

汀丶人工智能

自然语言处理 数据标注

手把手教你使用 Python 调用 ChatGPT-3.5-API

老表

Python GPT-3 ChatGPT

开源如何推动云计算的发展与创新 | 雨林开源行

开源雨林

开源 kubenetes OpenStack

在文心一言出生地,百度悄悄燃烧AI小宇宙

白洞计划

百度 文心一言

FL Studio2023免费中文版数字音频工作站软件

茶色酒

FL Studio2023

Spring Boot 整合流程引擎 Flowable,so easy

做梦都在改BUG

Java Spring Boot 流程引擎 flowable

会声会影2023中文最新版消息

茶色酒

会声会影2023

再有人问你什么是分库分表,直接把这篇文章发给他

做梦都在改BUG

Java 分库分表

堪称神级!GitHub上标星157K的Java教程,全程干货,只讲重点

做梦都在改BUG

Java

2022 IoTDB Summit:IoTDB PMC 田原《大规模并行处理与边缘计算在 Apache IoTDB 中的实践》

Apache IoTDB

数据库 IoTDB

MongoDB写入数据策略

NineData

nosql mongodb Journaling 写入策略 读策略

JDK 环境配置

流火

Java centos jdk window

Portraiture4中文免费ps滤镜磨皮插件

茶色酒

Portraiture3

新必应(New Bing)申请出错终极方案

kcodez

微软 ChatGPT New Bing

ChatGPT Turbo API 18元/100万个单词

kcodez

openai ChatGPT

字字珠玑!GitHub爆赞的网络协议手册,被华为大佬指定内部必学?

做梦都在改BUG

Java 计算机网络 网络协议

赞不绝口!仅靠阿里P9分享的 Redis 工作手册,拿到60W年薪Offer

做梦都在改BUG

Java 数据库 redis 缓存 面试

一文彻底弄清楚分布式锁

做梦都在改BUG

Java 分布式锁

老铁们看过来!2023首场昇腾AI开发者创享日来到“东北黑土地”沈阳

科技热闻

2022 IoTDB Summit:Apache IoTDB PMC 张金瑞《为物联网场景优化的时序数据库共识协议》

Apache IoTDB

大数据 IoTDB

图像的滤波与图像增强的Matlab实现

timerring

数字图像处理

人工智能+低代码,打通AI落地的最后“一公里”

明道云

SpringBoot+ThreadPoolTaskExecutor 批量插入百万级数据实测

做梦都在改BUG

Java Spring Boot 多线程 ThreadPoolTaskExecutor

2022 IoTDB Summit:IoTDB PMC 曹高飞《Apache IoTDB 秒级扩容能力与存算分离实践》

Apache IoTDB

数据库 IoTDB

ClickHouse 与 Amazon S3 结合?一起来探索其中奥秘

亚马逊云科技 (Amazon Web Services)

在深圳龙岗,看见空间智能化的潮水涌动

脑极体

全屋智能

得物供应链复杂业务实时数仓建设之路

小小怪下士

Java 程序员 后端

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