zeromq与nanomsg比较

Tyler Treat是一名软件开发人员,他近日发表了一篇博文《为什么ZeroMQ不应该成为你的第一选择》。

文中,Tyler Treat对nanomsg和ZeroMQ进行了比较。nanomsg是一个套接字库,提供了多种常见的通信协议,其目标是使网络层更快、更具扩展性、更容易使用。它用C进行了彻底地重写,可以说是对ZeroMQ的重建。它构建在ZeroMQ的可靠性能之上,同时又提供了若干重要的改进。而且,它还试图消除ZeroMQ经常出现一些怪异行为。作者从以下几个方面对二者进行了比较:

用于新传输协议的API——对于ZeroMQ,人们经常抱怨的问题是它没有提供用于新传输协议的API,这从根本上把用户限制在TCP、PGM、IPC和ITC上。而nanomsg提供了一个可插拔的接口,用于新的传输(如WebSockets)和消息协议。POSIX兼容性——nanomsg完全兼容POSIX,而且API更简洁,兼容性更好。在ZeroMQ中,套接字用空指针表示,然后绑定到上下文;而在nanomsg中,只需要初始化一个新的套接字并使用它,一步即可完成。线程安全——ZeroMQ在架构上有一个根本性缺陷:其套接字不是线程安全的。在ZeroMQ中,每个对象都被隔离在自己的线程中,因此不需要信号量和互斥锁。并发是通过消息传递实现的。nanomsg消除了对象与线程间的一对一关系,它不再依赖于消息传递,而是将交互建模为一组状态机。因此,nanomsg套接字是线程安全的。内存和CPU使用效率——ZeroMQ使用一种很简单的Trie结构存储和匹配发布/订阅服务。当订阅数超过10000时,该结构很快就显现出不合理之处了。nanomsg则使用一种称为“基数树(radix tree)”的结构来存储订阅,并提供了真正的零复制API,允许内存从一台机器复制到另一台机器,而且完全不需要CPU的参与,这极大地提高了性能。负载均衡算法——ZeroMQ采用了轮转调度算法。虽然该算法可以平均分配工作,但也有其局限性。比如,有两个数据中心,一个在伦敦,一个在纽约。在理想情况下,一个位于伦敦数据中心的网站,其请求不应该路由到纽约。但在ZeroMQ的负载均衡算法里,这完全有可能。而nanomsg避免了这种情况的出现。

除此之外,文中还提到,nanomsg提供了一个名为nanocat的命令行工具,用于与系统进行交互。

作者继续写道,nanomsg旨在实现“可扩展协议(Scalability Protocols)”,用于构建可扩展的高性能分布式系统。当前,它定义了六种不同的可扩展协议:PAIR、REQREP、PIPELINE、BUS、PUBSUB和SURVEY。

既然nanomsg在ZeroMQ的基础上做了如此多的改进,那我们为什么还要用ZeroMQ呢?针对这个疑问,作者指出,nanomsg还相对年轻,它还没有达到ZeroMQ的成熟度,没有像ZeroMQ那样有一个繁荣的开发者社区。另外,ZeroMQ有丰富的文档及其它资源,可以帮助开发人员使用它,而nanomsg的文档非常少。

尽管如此,作者还是认为nanomsg所做的改进,尤其是它的可扩展协议,使它非常有吸引力。从技术上讲,从三月份开始,nanomsg就已经开始beta测试,因此,生产就绪版本已经指日可待。

参考连接: https://my.oschina.net/ifraincoat/blog/546584 ;

nanomsg 高性能通信库_zeromq与nanomsg比较相关推荐

  1. 基于Java的RDMA高性能通信库(六):SDP - Java Socket Direct Protocol

    目录 1.Java网络编程和套接字API的历史 2.InfiniBand 高速网络通信技术 3. Java 网络协议栈API 4.Java 7 SDP 远程直接内存存取(RDMA) 4.1 Java7 ...

  2. 基于Java的RDMA高性能通信库(五):JXIO

    JXIO 是 Mellanox 公司的RDMA中间件accelio在Java上的包装,JXIO使用类似于Java nio的ServerChannel方式,熟悉接口可以做好变换.AcceliO是针对硬件 ...

  3. 基于Java的RDMA高性能通信库(一):IBM jVerbs库

    目录 1. verbs API 2. endpoint API 3. jVerbs 应用程序系统和运行时需求(仅限 Linux) 4. Java Socket Over RDMA 与 jVerbs 比 ...

  4. 基于Java的RDMA高性能通信库(二):Java Socket Over RDMA

    目录 1.Comparing JSOR with Java TCP communications 2.Comparing JSOR to Java Sockets Direct Protocol (S ...

  5. 基于Java的RDMA高性能通信库(四):DaRPC

    DaRPC是一个用于Java的RPC框架和API,它使用RDMA在用户空间中实现RPC消息处理和网络处理之间的紧密集成. 自80年代初以来,远程过程调用(RPC)一直是分布式系统的基石. 最近,在数据 ...

  6. 基于Java的RDMA高性能通信库(三):Direct Storage and Networking Interface (DiSNI)

    The Direct Storage and Networking Interface (DiSNI) 是一个Java框架和API专门为了在用户空间进行存储和网络访问的(IBM的jVerbs的新开源代 ...

  7. Datenlord | Rust实现RDMA异步编程(二):async Rust 封装 UCX 通信库

    UCX 是一个高性能网络通信库,它作为 MPI 所依赖的通信模块之一在高性能计算领域得到广泛的使用.UCX 使用 C 语言编写,为了在 Rust 项目中使用它,我们需要将它的 C 接口包装成 Rust ...

  8. 深度|从Go高性能日志库zap看如何实现高性能Go组件

    导语:zap是uber开源的Go高性能日志库.本文作者深入分析了zap的架构设计和具体实现,揭示了zap高效的原因.并且对如何构建高性能Go语言库给出自己的建议. 作者简介:李子昂,美图公司架构平台系 ...

  9. libuv 高性能事件驱动库 简介

    libuv是一个高性能事件驱动库,屏蔽了各种操作系统的差异从而提供了统一的API.libuv严格使用异步.事件驱动的编程风格.其核心工作是提供事件循环及基于 I/O或其他活动事件的回调机制.libuv ...

  10. 消息通信库ZeroMQ 4.0.4安装指南

    一.ZeroMQ介绍 ZeroMQ是一个开源的消息队列系统,按照官方的定义,它是一个消息通信库,帮助开发者设计分布式和并行的应用程序. 首先,我们需要明白,ZeroMQ不是传统的消息队列系统(比如Ac ...

最新文章

  1. 计算机教案制作电子表格,人教版七年级信息技术上册《制作电子表格》教案
  2. HTML+JS弹出可移动DIV遮罩层
  3. 流畅的python读书笔记-第一章Python 数据模型
  4. 构建知识图谱,让自己更值钱
  5. 正则表达式验证问题(用户名、密码、email、身份证
  6. 【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)
  7. php判断是不是iphone访问,php基于http协议访问,判断访问来源iphone,android,微信浏览器,pc电脑...
  8. CMake笔记2 构建动态链接库
  9. xshell 登录kail拒绝了密码 已解决
  10. 百度阿里腾讯杀入语音识别,这家公司靠什么对抗巨头
  11. NLPCC 2021会议的“面向智能辩论的论辩文本理解”评测比赛综述报告
  12. 线程池原理_Java线程池实现原理
  13. Map的keyset() 方法和entrySet() 方法
  14. 阿里研究院安筱鹏:数字化,转型与原生并行
  15. odbc删除oracle驱动,恢复ODBC驱动程序(ODBC driver)
  16. CTF的区块链入门资料
  17. 起航---开发基于国产华为鸿蒙操作系统的APP
  18. 李宏毅作业七其三 Network Compression (Network Pruning)
  19. Pandas数据显示不全?快来了解这些设置技巧! ⛵
  20. 华硕飞行堡垒6打开tpm

热门文章

  1. CENTOS7安装搜狗输入法和PYCHARM光标跟随记录
  2. Android adb shell命令详解及实例
  3. 开发者需要什么样的技术社区?
  4. SpringBoot实现Excel、Word转换为PDF
  5. 结对-人机对战象棋游戏-结对项目总结
  6. Windows 4K低延时H265/H264硬编码直播
  7. ldap radius mysql_freeradius +ldap
  8. springboot图片验证码
  9. Android-APP 安全(六)之android取证
  10. NetApp存储方案及巡检命令