还在学socket编程吗?还在研究为什么epoll比select更好吗?

噢,不必了!

在复杂的云计算环境中,我们面临的难题远比这个复杂得多。

庞大的服务器集群作为计算云,对来来看或许只是一个简单的搜索框;而在云的内部,复杂的互联和海量的通讯,加之不稳定的网络环境,廉价服务器的低可用性——构建一个高可用性且具备伸缩能力的云计算的环境,不是那么容易的!

为什么说ZeroMQ是云计算时代最好的通讯库呢?我们从ZeroMQ的特性来分析吧:

1.The socket library that acts as a concurrency framework.

开起来像是并行开发框架的socket库。

为什么一个通讯的库不提供socket的风格,反而看起来像是一个并行的库?

云计算不就是分布式计算嘛!

并行、多核、分布式,让计算能力不断的被扩展扩展,让数据不断地被分区分区,强大的计算能力就是这样堆出来的。

并发是目前云计算这个世界的主题,所以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

ZeroMQ:云计算时代最好的通讯库的更多相关文章

  1. ZeroMQ:云时代极速消息通信库

    ZeroMQ:云时代极速消息通信库(大规模|可扩展|低成本|高效率解决之道,大规模分布式|多线程应用程序|消息传递架构构建利器) [美]Pieter Hintjens(皮特.亨特金斯)著   卢涛 李 ...

  2. 【ZeroMQ】2、高性能的通讯库-zeroMQ

    首先,让我来介绍一下什么是ZMQ(全称:ZeroMQ): 官方: “ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加 ...

  3. TXSQL:云计算时代数据库核弹头——云+未来峰会开发者专场回顾

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海内外业 ...

  4. 高手问答精选:Go 语言 —— 云计算时代的 C 语言(类似于一个FAQ)

    Go 语言被称为云计算时代的 C 语言,它在软件开发效率和运行效率之间做出了绝佳的权衡.这使得它既适应于互联网应用的极速开发,又能在高并发.高性能的开发场景中如鱼得水.正因如此,许多互联网公司,尤其是 ...

  5. DevOps是云计算时代的开发与运营

    DevOps(英文Development和Operations的组合)是一组过程.方法与系统的统称,用于促进开发(应用程序/软件工程).技术运营和质量保障(QA)部门之间的沟通.协作与整合.[1] 它 ...

  6. Server SAN:弄潮儿云计算时代

    最初发表于<程序猿>2014年7每月一次. 4月30日本.Redhat公布1.71十亿收购Ceph开发商Inktank公司,加上之前2011年10月1.36十亿收购Gluster,Redh ...

  7. pcommlite串口通讯库使用

    MFC下串口编程使用最多的两种方法是读取注册表和使用mscomm组件,都有着或多或少的缺陷,调用系统SDK比较麻烦,而MSCOMm组件最多支持16个串口,串口号大于16的时候无法打开,遇到这种情况,可 ...

  8. C# 串口操作系列(5)--通讯库雏形

    C# 串口操作系列(5)--通讯库雏形 标签: 通讯c#数据分析byteclassstring 2010-08-09 00:07 21378人阅读 评论(73) 收藏 举报  分类: 通讯类库设计(4 ...

  9. 云计算时代,传统企业 IT 从业者如何做好转型?

    本文来源于国外社区 DZone,作者 Dennis O'Reilly 撰写过多篇关于云计算.混合云等内容的文章,本文内容围绕云计算时代,企业纷纷上云,传统 IT 从业者如何做好转型. 本文由“数梦工场 ...

随机推荐

  1. arm:c语言和汇编混合编程

    仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...

  2. 数据库基础学习3-T-SQL语句

    一.语句操作的基本方法 1.选中执行. 2.注释的方法‘--’. 二.数据类型 整数:int,bigint,smallint 小数:float,decimal(长度,精度) 字符:char(n),va ...

  3. 01-IOSCore - NSString、NSFileManager、NSBundle、StringAndObjectConvert

    模型 1 将数据存储到硬盘,将硬盘上的数据在读回内存 2 文件存储: NSFileHandle 对文件的读写 NSData 二进制数据 NSString 表示文件路径 NSFileManager(对文 ...

  4. Windows Service的官方描述,抄下来(不写obj就是LocalSystem)

    How to create a Windows service by using Sc.exe Email Print Support for Windows XP has ended Micro ...

  5. MUI 列表页面绑定接口数据

    1.我们先看效果 2.功能分析 主要分为3步 数据初始化 下拉刷新 上拉加载 接口数据示例: { "List": [ { "Id": 9, "Orde ...

  6. js open() 与showModalDialog()方法

    此方法可通用,项目开发中经常要用到: //w:宽,h:高,url:地址,tag:标记 function showWin(w, h, url, tag) { var t = (screen.height ...

  7. libvirt命令行文档

    Libvirt有两种控制方式,命令行和图形界面 图形界面: 通过执行名virt-manager,启动libvirt的图形界面,在图形界面下可以一步一步的创建虚拟机,管理虚拟机,还可以直接控制虚拟机的桌 ...

  8. javascript真的是异步的吗?且看setTimeout的实现原理以及setTimeout(0)的使用场景

    在今天之前我一直以为setTimeout这个函数是异步的,无意中看到了一篇关于setTimeout的文章.发现自己曾经的认识全是错误的,赶紧总结下. 先看一段代码: var start = new D ...

  9. bin文件格式分析

    xip 的 bin 文件分析 一个bin 文件在存储上是按以下的结构存储的 组成:标记(7)+Image開始地址(1)+Image长度(1)            记录0地址+记录0长+记录0校验和+ ...

  10. tomcat加载时报The web application [/dmscs] created a ThreadLocal with key of type

    严重: The web application [/dmscs] created a ThreadLocal with key of type [com.opensymphony.xwork2.inj ...