先来看《Implementing distributed applications with 0MQ and some other bad guys...》。用0MQ去实现分布应用,或者用其它坏东西。
我们希望应用的伸缩性以及复杂度的关系,分布应用从单线程到多线程到多节点,复杂度是平滑收敛的。得实际上是指数增长,多节点下极复杂。
0MQ意味 0中间人(Message broker),0迟延(尽可能),0管理(服务),0成本,0浪费。
网上尤其是百度搜出一堆国内的贴,欢喜将0MQ和其它Message Broker产品混在一起比较,并评价适应性最差没有他们想要的功能。因为0MQ压根就不是Message Broker,并且明确宗旨是Zero Broker和Zero administration,你要的功能请自行实现。0MQ在软件构架中不是扮演Broker的角色。
更高层次的sokcet。为什么不是Message Broker,又要强调Message Queue,首先Queue在异步中需要。然后Message Queue是为了设计高并发模型,erlang中进程(纤程)之间不共享数据,以消息形式进行通讯。0MQ旨在定义高层次上的通讯模型,线程间,进程间,节点间都是以同一种协议进行消息(队列)通讯。目标成为linux内核一部分。其中0MQ内部使用mailbox进行(io)线程间,内部对象间的消息通讯。详细请参看前面的文章《0MQ底层队列设计》。
当然地,0MQ就必须是跨平台的,多(编程)语言支持的,并且是开源的。
后面就是简单展示0MQ如何支持基本的消息模型(Message Patterns).
0MQ之于sockets好比python之于c++。
https://www.slideshare.net/fcrippa/europycon2011-implementing-distributed-application-using-zeromq