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

时间:2015-12-22 17:27:47

标签: amazon-web-services design-patterns amazon-sns

观察者模式谈论出版商和订阅者。这不是真正贴近AWS SNS的吗?向所有订户广播通知,可能是SQS队列,电子邮件地址等。 有什么值得注意的差异?

2 个答案:

答案 0 :(得分:3)

观察者模式通常是understood,以包括维护从属观察者列表的主题。如果您认为SNS主题本身是主题,那么它是适合该模式的。但是,在这种理解中,SNS主题不知道它自己的状态,并且没有代表自己通知观察者 - 它是其他人的代理。

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

答案 1 :(得分:2)

我一直认为SNS是观察者模式的分布式实现。而继承人就是为什么;想象一下,你必须将通知分发给工作流的不同演员 - 很多人都有兴趣知道你的应用程序中已经实现了某个状态。

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

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

Observer pattern according to Wikipedia

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

  1. 我们需要一个能够及时通知所有人的中心人员。
  2. 我们需要能够通知不同类型的观察者。
  3. 我们需要能够即时注册和取消注册观察员。
  4. 我们需要能够检索订阅被通知的所有人。
  5. 如果SNS完成所有这些事情而不是bird quacking like a duck - 我的意思是,它可以是任何东西,但我知道它也是观察者模式的实现。

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

    1. 我们可以create a topic - 拥有订阅观察者名单的中心人物。
    2. 我们可以subscribe使用不同的协议来讨论这个主题。您应该只知道interface used to communicate with these various endpoints,在SNS的情况下使用普通HTTP(以及其他)。
    3. 是的,我们可以管理谁正在使用subscribe及其类似的unsubscribe收听通知。
    4. 我们可以list everyone在您的应用发生事件时愿意接触。
    5. 当然,我们可以publish通知所有人!
    6. 然后我问你,为什么SNS不能被视为观察者模式的扩展版本?它像鸭子一样嘎嘎叫!