AWS SNS 是观察者模式的横向扩展版本吗?

Is AWS SNS a scaled out version of the observer pattern?

观察者模式谈论的是发布者和订阅者。这不是真正接近 AWS SNS 的功能吗?向所有订阅者广播通知,可能是 SQS 队列、电子邮件地址等。 如果有的话,有哪些显着差异?

观察者模式通常是understood来包含一个维护依赖观察者列表的主题。如果您将 SNS 主题本身视为主题,那么是的,它非常适合该模式。然而,在这种理解下,SNS 主题不知道它自己的状态,也不代表它自己通知观察者——它是其他人的代理。

在基于事件的系统中,SNS 可能更好地理解为 multiplexer

我一直认为 SNS 是观察者模式的分布式实现。这就是原因;想象一下,您必须将通知分发给工作流的不同参与者——很多人都想知道您的应用程序已达到某个状态。

如果您尝试在单个实例中实施观察者模式,您将受到内存和 CPU 约束的限制,无论您扩大多少,您都会随时达到限制。如果您碰巧有数十万条通知需要处理,那么您最终会延迟很多,有时甚至到了知道应用程序处于该特定状态不再有价值的程度。您最终将不得不扩展您的观察者模式实现 - 但嘿,似乎已经有人这样做了。

这就是观察者模式的样子,according to wikipedia:

我们现在可以尝试弄清楚 SNS 是否适合;

  1. 我们需要一个负责及时通知所有人的中心人员。
  2. 我们需要能够通知不同类型的观察者。
  3. 我们需要能够即时注册和注销观察者。
  4. 我们需要能够检索到所有订阅了通知的人。

如果 SNS 完成了所有这些事情,我们就有了 bird quacking like a duck - 我的意思是,它可以是任何东西,但我知道它也是观察者模式的一种实现。

现在让我们看看what methods are available in SNS:

  1. 我们可以 create a topic - 拥有订阅观察者列表的核心人物。
  2. 我们可以 subscribe to this topic with different protocols. You should only know the interface used to communicate with these various endpoints,对于纯 HTTP 中的 SNS(以及其他)。
  3. 是的,我们可以管理谁正在使用订阅及其类似 unsubscribe 收听通知。
  4. 当您的应用程序发生事件时,我们可以 list everyone 愿意与您联系。
  5. 当然可以publish通知大家!

那我问你,为什么SNS不能算是观察者模式的横向扩展?它像鸭子一样嘎嘎叫!