【问题标题】:Event store in AzureAzure 中的事件存储
【发布时间】:2020-08-10 20:04:20
【问题描述】:

据我了解,事件存储只是所有事件的数据存储。这可以是从关系数据库到 NoSQL 的任何东西,但应该针对存储和查询大量非关系数据进行优化。因此我们可以使用以下服务在 Azure 中存储事件:

  1. Azure 表存储
  2. Azure SQL 服务器
  3. Azure Cosmos DB
  4. Azure 事件中心

上述哪些服务适用于事件溯源?

【问题讨论】:

    标签: azure


    【解决方案1】:

    对于存储底层事件流,CosmosDbAzure 表存储 都是很好的解决方案 - 我广泛使用后者,但也有使用 JET 的 CosmosDb 的很好示例。 p>

    事件中心不适合作为后备存储,因为在事件溯源中,您希望永久存储事件。当然,您可以将事件中心事件转发到持久存储,但最终会使用该存储作为事件溯源的真实来源。

    SQL Server 上确实存在许多事件溯源的实现,但我不希望有一个锁定的事件架构,因为它会增加很多工作。

    对于 CosmsoDb,请查看: JAT/Equinox on GitHub

    对于 Azure 表存储,我有这个例子:EventsSourcing-on-Azure-Functions on GitHub

    【讨论】:

    • 我喜欢将 eventthub 用作临时事件存储,我将 eventthub 中的事件视为操作,偶尔会进行快照(例如 blob 存储、sql 等)。即 state = last snapshot + events(这是写模型部分)
    【解决方案2】:

    事件中心或多或少是一种“Pub-Sub”机制。您可以向它发送事件,它会将这些事件广播给正在收听的人。

    Azure 表存储、SQL 服务器和 CosmosDB 存储数据……它们各自以非常不同的方式存储数据,但归根结底,它们的工作是存储数据。这些技术中的每一种都有“更改馈送”通知(当文档或行中的数据发生更改时通知侦听器),但它不如实时生成事件的技术可靠。

    事件中心可以存储数据,但时间很短...例如,您可以将 EH 数据的 TTL 设置为 3 天。这意味着一条消息将在那里保存 3 天,以便订阅者获取该消息。

    您可以将事件中心连接到其他服务,例如:流分析...可以分析数据并对其进行处理...例如:将其发送到数据湖等存储机制。

    因此,在您询问的所有技术中,您可能想要一个事件中心来获取事件。

    我在我的架构中使用它们...我有一个中心,每天处理来自数千个客户端的数百万个事件,没有延迟或停机问题。在我看来,它们很棒。

    【讨论】:

    • 感谢您的回答..虽然有一个问题..如果事件中心可以存储数据,但时间很短,那么事件源模式的目的可能会被打破。如果事件没有保存在商店中,我如何重播事件或查询事件?
    • @ronit -- 这只是一个 pub-sub。我假设您会有一个侦听器,可以将事件实时拉到另一个长期的存储介质(可能是数据湖或仓库),然后从那里进行分析。事件中心的重点是快速向订阅者获取数据,而不是长期存储数据。
    【解决方案3】:

    我认为Event Grid 将是最适合event-driven architecture 的服务。

    但还有更多可能的组合。我发现使用 Cosmos DB 及其 Change Feed to trigger Azure Functions 是一种将事件构建到数据库中并通过特定操作响应任何数据更改的好方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-23
      • 2017-03-26
      • 1970-01-01
      • 2017-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      相关资源
      最近更新 更多