使用微服务发件箱模式,我可以将事件写入磁盘而不是数据库吗?
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
我最近一直在阅读有关在微服务中处理事件的内容。有大量 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