还在学socket编程吗?还在研究为何epoll比select更好吗?html
噢,没必要了!编程
在复杂的云计算环境中,咱们面临的难题远比这个复杂得多。安全
庞大的服务器集群做为计算云,对来来看或许只是一个简单的搜索框;而在云的内部,复杂的互联和海量的通信,加之不稳定的网络环境,廉价服务器的低可用性——构建一个高可用性且具有伸缩能力的云计算的环境,不是那么容易的!服务器
为何说ZeroMQ是云计算时代最好的通信库呢?咱们从ZeroMQ的特性来分析吧:网络
1.The socket library that acts as a concurrency framework.多线程
开起来像是并行开发框架的socket库。并发
为何一个通信的库不提供socket的风格,反而看起来像是一个并行的库?app
云计算不就是分布式计算嘛!框架
并行、多核、分布式,让计算能力不断的被扩展扩展,让数据不断地被分区分区,强大的计算能力就是这样堆出来的。运维
并发是目前云计算这个世界的主题,因此ZMQ提供了一个并发的库,正式咱们最最须要的。
如同广告所讲:客户要的不是一英寸的钻头,而是一英寸的洞。
咱们要的不是通信,而是分布式并行计算。
2. Carries messages across inproc, IPC, TCP, and multicast.
提供进程内、进程间、机器间和广播方式的消息通信。
能够说ZMQ提供了一种强大的复杂环境适应能力。
做为一个通信库,可能咱们以为进程内通信和进程间通信不是重要的。
然而,提供这些功能,使得ZMQ可以在特定的场景下提供特定的解决方案。且通信的配置至关的简单:inproc://, ipc://, tcp://这三个通信方案简单地在字符串中指定便可。开发者能够很容易开发出可运维的应用程序,在不一样的场景下,能够仅修改配置文件来适应复杂的部署环境。
3.Connect N-to-N via fanout, pubsub, pipeline, request-reply.
在多对多的网络环境中提供多对一,发布/订阅(one-to-many),管道(one-to-one),请求/响应等模型。
模式,仍是模式。
(对于fanout这个词,我没彻底理解,我以为在网络通信中,应该就是多对一这样的场景)
每天作网络的开发的人,可能会以为通信就那么三板斧,经典的模式不断在重复,但是咱们仍然在具体的问题上反复写着相似的代码。
而ZMQ提供的不单单是这个:ZMQ就像一堆水管的转接头,在复杂的自来水供水系统中,ZMQ在每一个关节灵活地适配,像水管同样接起来,把数据分开或是合并。
例如,先把数据按照pub/sub模式分发给多个服务器,每一个服务器上的进程在进程内用inproc,将请求分布到多个线程上处理,若是有特别的须要,还能够把数据用ipc方式转发给同一机器上的其余进程。而完成这一切复杂的工做仅须要少少的代码。
4. Fast enough for clustered products and supercomputing.
对服务器群集和超级计算来将都足够快了
超级计算都能作,你还想干啥?
5. Asynch I/O for scalable multicore message-passing apps.
对可扩展的多核消息传递应用程序提供异步I/O支持。
在ZMQ的inproc://模式中,库提供了线程安全的消息分发机制,能够简单地把请求分发给多线程处理。
6. Large and active open source community.
拥有超大而且活跃的开源社区
记住,你不是一我的在战斗!不是……
7. 20+ languages including C, C++, Java, .NET, Python.
有超过20种以上的开发语言绑定,诸如C, C++, Java, .NET, Python
8. Most OSes including Linux, Windows, OS X.
还支持绝大多数的操做系统,例如Linux, Windows, OS X
9. LGPL free software with full commercial support.
这是最重要的,不要钱,但也能够提供商业支持。
注:
Fan out:数电里很重要的概念,“一逻辑门的输出须要驱动多个等效门的输入,称输出端接的须要驱动的等效门数为扇出F”。
扇出(fan-out)是定义单个逻辑门可以驱动的数字信号最大输入量的术语。
from:http://hi.baidu.com/ah%5F%5Ffu/blog/item/fd73593ebb3dd6e8828b13a3.html
http://www.cnblogs.com/dkblog/archive/2011/05/12/2044095.html