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 是否适合;
- 我们需要一个负责及时通知所有人的中心人员。
- 我们需要能够通知不同类型的观察者。
- 我们需要能够即时注册和注销观察者。
- 我们需要能够检索到所有订阅了通知的人。
如果 SNS 完成了所有这些事情,我们就有了 bird quacking like a duck - 我的意思是,它可以是任何东西,但我知道它也是观察者模式的一种实现。
现在让我们看看what methods are available in SNS:
- 我们可以 create a topic - 拥有订阅观察者列表的核心人物。
- 我们可以 subscribe to this topic with different protocols. You should only know the interface used to communicate with these various endpoints,对于纯 HTTP 中的 SNS(以及其他)。
- 是的,我们可以管理谁正在使用订阅及其类似 unsubscribe 收听通知。
- 当您的应用程序发生事件时,我们可以 list everyone 愿意与您联系。
- 当然可以publish通知大家!
那我问你,为什么SNS不能算是观察者模式的横向扩展?它像鸭子一样嘎嘎叫!
观察者模式谈论的是发布者和订阅者。这不是真正接近 AWS SNS 的功能吗?向所有订阅者广播通知,可能是 SQS 队列、电子邮件地址等。 如果有的话,有哪些显着差异?
观察者模式通常是understood来包含一个维护依赖观察者列表的主题。如果您将 SNS 主题本身视为主题,那么是的,它非常适合该模式。然而,在这种理解下,SNS 主题不知道它自己的状态,也不代表它自己通知观察者——它是其他人的代理。
在基于事件的系统中,SNS 可能更好地理解为 multiplexer。
我一直认为 SNS 是观察者模式的分布式实现。这就是原因;想象一下,您必须将通知分发给工作流的不同参与者——很多人都想知道您的应用程序已达到某个状态。
如果您尝试在单个实例中实施观察者模式,您将受到内存和 CPU 约束的限制,无论您扩大多少,您都会随时达到限制。如果您碰巧有数十万条通知需要处理,那么您最终会延迟很多,有时甚至到了知道应用程序处于该特定状态不再有价值的程度。您最终将不得不扩展您的观察者模式实现 - 但嘿,似乎已经有人这样做了。
这就是观察者模式的样子,according to wikipedia:
我们现在可以尝试弄清楚 SNS 是否适合;
- 我们需要一个负责及时通知所有人的中心人员。
- 我们需要能够通知不同类型的观察者。
- 我们需要能够即时注册和注销观察者。
- 我们需要能够检索到所有订阅了通知的人。
如果 SNS 完成了所有这些事情,我们就有了 bird quacking like a duck - 我的意思是,它可以是任何东西,但我知道它也是观察者模式的一种实现。
现在让我们看看what methods are available in SNS:
- 我们可以 create a topic - 拥有订阅观察者列表的核心人物。
- 我们可以 subscribe to this topic with different protocols. You should only know the interface used to communicate with these various endpoints,对于纯 HTTP 中的 SNS(以及其他)。
- 是的,我们可以管理谁正在使用订阅及其类似 unsubscribe 收听通知。
- 当您的应用程序发生事件时,我们可以 list everyone 愿意与您联系。
- 当然可以publish通知大家!
那我问你,为什么SNS不能算是观察者模式的横向扩展?它像鸭子一样嘎嘎叫!