JGroups 增加基于 NIO2 的传输控制层

新的传输层完全是非堵塞的,与 TCP 不同的是 Socket 连接、读写都不会堵塞。使用 TCP_NIO2 最大的好处就是无需针对每个连接创建一个读者线程(如果启用发送队列还需要创建写线程)。

在一个有 1000 个节点的集群中,使用 TCP 方法每个节点都要维持 999 个连接和 999 个读线程。使用 TCP_NIO2 尽管也有 999 个 TCP 连接,但只有一个选择器线程用来服务所有连接。当数据可读取,我们可以无堵塞的读取尽可能多的数据,并将读取到的数据传递个相应方法处理。

也就是说相对于 TCP 而言,TCP_NIO2 更具备可伸缩性。

性能

我们在一个 9 个节点(每个节点有8核处理器和千兆网络)的集群中运行 UPerf 和 MPerf 测试,得到如下结果:

UPerf (500'000 请求/节点, 50 invoker 线程/节点):
TCP: 62'858 reqs/sec/node, TCP_NIO2: 65'387 reqs/sec/node

MPerf (1百万消息/节点, 50 个发送线程/节点):
TCP: 69'799 msgs/sec/node, TCP_NIO2: 77'126 msgs/sec/node

可见 TCP_NIO2 在两种情况下运行都更好,我对这个结果也非常惊讶,BIO 方法更快。

文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-07-31 17:48:25

JGroups 增加基于 NIO2 的传输控制层的相关文章

基于.Net Framework的N层分布式应用开发

分布式 主题:建立可维护.可扩展的站点,开发高效率.高伸缩性的应用程序.创建N层分布式应用程序.实现跨平台.跨Internet的应用集成,是摆在无数开发者面前的任务.传统开发方式及技术面临了困难. .Net Framework推出的许多新技术为上述任务的实现提供了相对简单的解决方案.其中,基于SOAP的Web Service在处理分布式应用时具有比传统的DCOM/CORBA明显的优点,结合基于Web的ASP.NET页面开发技术和SQL Server数据存储技术(或Xml文档),在.Net下开发N

Springboot 实现 Restful 服务,基于 HTTP / JSON 传输

"怎样的人生才是没有遗憾的人生?我的体会是:(1)拥有健康:(2)创造"难忘时刻":(3)尽力做好自己,不必改变世界:(4)活在当下." – <向死而生>李开复 基于上一篇<Springboot 整合 Mybatis 的完整 Web 案例>,这边我们着重在 控制层 讲讲.讲讲如何在 Springboot 实现 Restful 服务,基于 HTTP / JSON 传输. 一.运行 springboot-restful 工程 git clone

定制并发类(十)实现一个基于优先级的传输队列

声明:本文是< Java 7 Concurrency Cookbook>的第七章, 作者: Javier Fernández González 译者:郑玉婷 实现一个基于优先级的传输队列 Java 7 API 提供几种与并发应用相关的数据类型.从这里面,我们想来重点介绍以下2种数据类型: LinkedTransferQueue:这个数据类型支持那些有生产者和消费者结构的程序. 在那些应用,你有一个或者多个数据生产者,一个或多个数据消费者和一个被生产者和消费者共享的数据类型.生产者把数据放入数据

Symfony控制层深入详解_php实例

本文深入分析了Symfony控制层.分享给大家供大家参考,具体如下: Symfony中控制层包含了连接业务逻辑与表现的代码,控制层为不同的使用分成了几个不同的部分. 1. 前端控制器是指向应用的唯一入口 2. 动作包含了应用的逻辑,他们检查请求的完整性并准备好表示层需要的数据 3. 请求.响应和Session对象提供访问请求参数.响应参数以及持久的用户数据,这些数据在控制层使用的很普遍 4. 过滤器是每个请求都要执行的代码的一部分,无论在动作前还是在动作后.可以自创过滤器. 前端控制器 所有WE

Tiny快速入门之控制层开发

一.通过代码编写控制层逻辑 1.代码示例 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Controller() public class HelloAction implements WebContextAware{       private WebContext webContext;           public void setContext(WebContext webContext) {         this.webC

《MPLS和VPN体系结构(修订版)》一第3章 信元模式MPLS操作3.1 通过LC-ATM接口实现控制层的连通

第3章 信元模式MPLS操作 MPLS和VPN体系结构(修订版) 在第2章中,读者可以了解到三层交换设备(路由器)是如何通过帧模式接口来运行MPLS的.运行MPLS的路由器在同一个链路上既会交换纯IP的数据包(用于控制协议),也会交换打上了标签的数据包(转发过来的或者在本地生成的流量).这些路由器还会通过检查位于IP数据包初始位置的标签头部,并以此来执行标签交换. 若要套用MPLS架构来突破ATM技术的限制,就必须克服以下障碍. 没有一种机制可以在两个邻接的MPLS节点之间通过ATM接口直接交换

view层和控制层的设计,复杂表格如何解决?

问题描述 感谢各位百忙之中,进来看我的帖子.正题, 现在有一个需求,界面上是一个table 表格  大红框 是可以向右新增同样的表格,考核内容和考核标准 2个 可以累积增加子td的.就是子单元格.请问,这样的一个页面 怎么存储传给后台呢?控制层是springmvc ,界面打算使用jquery easyui 做表格谢谢各位 解决方案 提交的时候在前台拼接,在后台解析,比如 考核标准="标准1:60分;标准2:80分;标准3:70分",在后台根据前台规则处理后入库解决方案二:这明显是遵循了

基于C/S的4层架构 —— ESFramework介绍之(6)

    ESFramework的4层结构的4层分别是:客户端(Client).应用服务器(AS).功能服务器(FS).数据库服务器.它们之间的联系图示意如下:     FS (FunctionServer),功能服务器,处理并且仅处理所有的功能性请求,不参与用户管理.状态保持等,提供最纯粹的功能服务.    AS (ApplicationServer),应用服务器,转发所有的功能请求给FS,并处理所有的非功能请求,并管理终端用户.进行状态保持.日志记录等.    上图中的功能服务器FS的个数可能

一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-基于接口驱动的数据层

系列回顾          在前面的文章中,我用了大量的篇幅对UDA及ORM的使用进行了讲解和演示,我们已经知道并熟悉的使用UDA和ORM构建简单的应用,AgileEAS.NET在应用的纵向结构上建议使用分层结构,提出独立数据层,数据层构成以ORM技术为基础.UDA技术做为辅助,共同完成这一系列功能.   基于接口开发         关于基于接口驱动的开发请参考DoNET企业架构应用-基于接口开发介绍以及应用场景和案例一文,在此不做具体介绍. 接口驱动的数据层         基于DoNET企