使用微服务发件箱模式,我可以将事件写入磁盘而不是数据库吗?

With the microservices outbox pattern, can I write events to disk instead of a database?

我最近一直在阅读有关在微服务中处理事件的内容。有大量 material 引用发件箱模式来同时处理数据库更新和事件发布:

https://microservices.io/patterns/data/transactional-outbox.html

在我看来,简单地写入磁盘而不是 table 就足够了(甚至可能扩展得更好)。出于某种原因,我似乎找不到任何关于写入磁盘的资源,只能写入 table。此模式是否存在问题,还是我没有使用正确的关键字来找到它?

这里的重点是,将实体写入顺序table和将event/message写入这两个操作发件箱table在一个事务中执行(根据定义是原子的)。

这在文件系统上很难(如果不是不可能的话):如果您将实体写入一个文件并将 events/messages 写入另一个文件,这将不是原子操作。将两者写入同一个文件是不好的(因为消息中继进程只需要读取事件)并且您可能仍然无法保证这是原子的。

除此之外,行为取决于您使用的文件系统类型。

进一步阅读:

  • What filesystem operations are required to be atomic?
  • Implementing atomic file writes in a nontransactional filesystem