为什么不使用单体事件驱动架构?

8
我一直在构建事件驱动的微服务。后来,我想知道为什么不能构建事件驱动的单体应用。
现在的缺点是可扩展性问题。我将无法为特定的高流量域创建副本。
但除此之外,我还可以得到许多其他好处,例如:
  1. 最终一致性
  2. 有了正确的设置,我个人认为更容易进行调试,因为我可以重放事件。
  3. 减少复杂性。域之间解耦(我们仍然将域管理在文件夹中)
此外,我们还有单体应用程序的好处:主要是简化了DevOps。
当应用程序变得受欢迎(从而产生更多流量)时,我们可以轻松地将其转换为微服务。我认为将代码从非事件驱动转换为事件驱动是最具挑战性的部分,因为它会显着改变整体架构。
我能想到的一个批评是,管理事件总线只为单体应用是否值得? 如果我使用像Apache Kafka这样的东西,这相当昂贵且难以管理,那可能不值得。
但是,如果我使用像NATS Streaming或Redis Stream这样的东西,则更或多或少执行与Apache Kafka相同的工作,但是轻便且更易于管理,那么我认为这不会成为问题。
当我在谷歌上搜索时,我找不到关于这种想法的文章,因此我想知道是否有重要的东西我忽略了。

4
需要考虑的一件事是领域事件——它们与单体应用程序/微服务无关,只是模拟在您的领域中发生的事件。它们可以在单体应用程序中很好地使用。 - Alex Buyny
谢谢!我很确定我没有用正确的关键词进行搜索。 - Sihoon Kim
1个回答

1
在我的新项目中,我尝试了“事件驱动的模块化单体架构”,目前为止开发体验非常棒。我还制作了一个npm库event-driven,以便轻松实现“事件驱动架构”。消息代理上有一个相当复杂的层,以使发布/订阅具有无缝重放功能和死信队列。它仍然很基础,但如果有人感兴趣,请随时查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接