【发布时间】:2020-08-10 20:04:20
【问题描述】:
据我了解,事件存储只是所有事件的数据存储。这可以是从关系数据库到 NoSQL 的任何东西,但应该针对存储和查询大量非关系数据进行优化。因此我们可以使用以下服务在 Azure 中存储事件:
- Azure 表存储
- Azure SQL 服务器
- Azure Cosmos DB
- Azure 事件中心
上述哪些服务适用于事件溯源?
【问题讨论】:
标签: azure
据我了解,事件存储只是所有事件的数据存储。这可以是从关系数据库到 NoSQL 的任何东西,但应该针对存储和查询大量非关系数据进行优化。因此我们可以使用以下服务在 Azure 中存储事件:
上述哪些服务适用于事件溯源?
【问题讨论】:
标签: azure
对于存储底层事件流,CosmosDb 和 Azure 表存储 都是很好的解决方案 - 我广泛使用后者,但也有使用 JET 的 CosmosDb 的很好示例。 p>
事件中心不适合作为后备存储,因为在事件溯源中,您希望永久存储事件。当然,您可以将事件中心事件转发到持久存储,但最终会使用该存储作为事件溯源的真实来源。
SQL Server 上确实存在许多事件溯源的实现,但我不希望有一个锁定的事件架构,因为它会增加很多工作。
对于 CosmsoDb,请查看: JAT/Equinox on GitHub
对于 Azure 表存储,我有这个例子:EventsSourcing-on-Azure-Functions on GitHub
【讨论】:
事件中心或多或少是一种“Pub-Sub”机制。您可以向它发送事件,它会将这些事件广播给正在收听的人。
Azure 表存储、SQL 服务器和 CosmosDB 存储数据……它们各自以非常不同的方式存储数据,但归根结底,它们的工作是存储数据。这些技术中的每一种都有“更改馈送”通知(当文档或行中的数据发生更改时通知侦听器),但它不如实时生成事件的技术可靠。
事件中心可以存储数据,但时间很短...例如,您可以将 EH 数据的 TTL 设置为 3 天。这意味着一条消息将在那里保存 3 天,以便订阅者获取该消息。
您可以将事件中心连接到其他服务,例如:流分析...可以分析数据并对其进行处理...例如:将其发送到数据湖等存储机制。
因此,在您询问的所有技术中,您可能想要一个事件中心来获取事件。
我在我的架构中使用它们...我有一个中心,每天处理来自数千个客户端的数百万个事件,没有延迟或停机问题。在我看来,它们很棒。
【讨论】:
我认为Event Grid 将是最适合event-driven architecture 的服务。
但还有更多可能的组合。我发现使用 Cosmos DB 及其 Change Feed to trigger Azure Functions 是一种将事件构建到数据库中并通过特定操作响应任何数据更改的好方法。
【讨论】: