IceStorm 是一个高效的publish/subscribe服务。程序需要分发给多个信息的情况很多。比如一个天气监控程序,它从气象塔收集风速和温度情况然后定期的把他们分发到天气监控站,架构如下图
但是,这种架构的缺点就是,collector和monitor耦合在一起。这种耦合使得collector的实现变得复杂,因为他需要处理monitor的注册,投递,和错误恢复等等。
有了Ice我们可以摆脱这些,新架构如下图
通过解耦,IceStorm简化了collector的实现。它作为collctor(publisher)和monitor(subscriber)的中介者,提供了几个优点:
1当collector准备提交一批新的数据时,他只需要发送一条请求给IceStorm server。server会负责将请求分发给monitor,包括处理其中产生的各种异常。collector不用再感知到monitror,甚至不用知道当时是否有monitor存在。
2 同样,monitor也不再需要处理订阅,取消订阅之类的事,它可以专注与程序业务本身。
3 为了使用IceStorm,monitor和collector需要改动的代码很少。
IceStorm Concepts
下面介绍几个概念对于理解IceStorm的能力非常重要。
Message
IceStorm message是强类型的,他代表了Slice操作。操作的名字确定message的类型,操作的参数确定message的内容。message一般被用来发布,subscriber回调函数接受message.IceStorm使用push模型来进行