Azure事件中心将多个使用者集中在一个应用程序中



上下文

我在Azure中部署了一个Azure函数应用程序,该应用程序需要处理来自事件中心的事件
在此应用程序中,我希望多个独立功能处理一些事件。

要求

我想避免的是,如果一个功能失败,所有其他功能也会失败
此外,我希望有一种简单的方法来重试特定功能的事件。

研究

在阅读了文档并浏览了互联网后,我遇到了消费者团体,这表明它们可以用于独立的并行处理。

然而,我觉得消费者群体并不适合我的情况,应该更多地被视为每个应用程序的一个消费者群体,而不是每个功能的一个消费群体
我的这种假设正确吗

经过更多的搜索,我还没有真正遇到任何人来解决这个问题,但我觉得这应该很常见
这通常是如何实现的

潜在的解决方案

我一直在考虑的一件事是拥有一个接收所有事件的单一Azure功能
当接收到事件时,此Azure功能将检查谁对该事件感兴趣,然后根据每个功能将同一事件发送到不同的事件中心,并指示应为哪个功能处理该事件(按功能分区)
这样就可以根据每个功能独立处理事件。

这是一个";正常的";通过事件中心处理事件的方式
我遗漏了什么陷阱吗

如果我正确理解您的场景,听起来您有多个独立的功能,每个功能都希望有一个流经系统的事件的唯一视图。每个功能都应该独立处理,并与其他功能隔离,以防止级联故障。假设这是正确的,我会首先从一个问题开始:

你是否看到事件以足够高的规模流动,以至于事件中心有意义?对我来说,订阅每个功能的服务总线主题可能是更自然的模式。除非你一直在处理大量的事件,否则它可能值得探索。

如果你确信事件中心是合适的,那么我会考虑从以下骨架开始探索,假设你也坚持使用函数:

  • 每个功能一个消费者组(注意:一个标准实例的消费者组限制为20个;如果您有20个以上的功能,则需要考虑在多个Event Hub实例之间进行分片,或者使用专用层)

  • 每个功能一个,绑定到相关的消费者组

消费者组将允许您获得所需的隔离,功能是独立的,并且能够在不影响其他功能的情况下恢复/重新处理。它还允许您通过功能管理更有效地横向扩展。

我不建议在所有情况下都使用一个函数。由于检查点和读取分区的状态存在于使用者组级别,因此为了独立跟踪每个功能的状态,您将不得不直接管理更多的复杂性。您还将在一个实例中做更多的工作,从而使有效扩展变得更加困难。您所能做的最好的事情是为事件中心的每个分区创建一个实例。

相关内容

最新更新