18

从单体到事件驱动架构:找到新架构中的接缝

 3 years ago
source link: https://www.infoq.cn/article/xHbgKHIIFj9eKszyjbai
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
  • 单体应用程序并不总是单层的;分布式单体看起来跟微服务架构很像,但它们的行为却是单体行为;
  • 所谓的事件驱动架构,就是将事件作为变化的单元;
  • 在 CQRS 中,命令(Command)和查询(Query)之间的区别比分离(Separation)更为重要;
  • 事件溯源将事件与状态分离,为系统的转换状态提供必要的抽象;
  • 当遗留元素被移除后将出现目标状态架构,这就是过渡性架构中的接缝(Seam)。

为什么要进行迁移?

除了单层的单体架构之外,三层架构也是一种常见的架构模式,一般由表示层、业务层和数据层组成。但是,这些层之间的复杂性几乎是不成比例的。在某些情况下,我们会在表示层或数据层的存储过程中发现业务逻辑。而在其他情况下,应用程序层按照系统功能被分成很多个服务。有些人甚至称之为微服务,但如果分离不得当,它只是一个分布式的单体。

Y73eAz.png!mobile

图 1:一些架构模式的比较

当然,这些并非都是糟糕的架构风格,但每一种都存在风险。当做出变更的风险足够大或者无法控制时,说明该向新架构迁移了。搞清楚进行架构迁移的原因与在迁移之前进行可行性验证同样重要。

事件是 EDA 的核心

事件驱动架构(EDA)并不是新鲜事物,但我们可能会发现,我们在实现时所采用的实践经常与核心原则相背离,导致我们忽略了 EDA 实际上是关于将事件作为系统变更单元的实事。我们在 EDA 中所采用的实践 (如消息传递和异步消息) 可能会引入这种噪音。你也可以在一个单体系统中构建一个事件驱动的系统,就像在分布式系统中所做的那样,只要看看大多数操作系统内核 (如 Windows 或 Linux) 就知道了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK