Netty:一种非易失堵塞client/server相框

Netty:一种非易失堵塞client/server相框

作者:chszs。转载需注明。博客主页:http://blog.csdn.net/chszs

Netty是一个异步事件驱动的网络应用框架,为Java网络应用的开发带来了一些新活力。Netty由协议server和client所组成。可用于高速开发可维护的高性能软件。Netty应用框架及其工具简化了网络编程,并且由Netty社区进行维护。

Netty还被归类为NIOclient/server框架。用它能够高速、简易地开发网络应用。使得TCP和UDP套接字server的网络编程得以简化和更加合理。

内建的HTTP协议支持WebSocket,同意框架运行在Servlet容器内。新版的Netty同一时候支持非堵塞I/O和堵塞I/O通信。

Netty的特性:

1、传输服务包含:套接字和数据报、HTTP通道、虚拟机内部管道

2、协议支持下面扩展:HTTP、Web Socket、Google Protocol Buffer、SSL-StartTLS、大文件传输、RTSP、Zlib或gzip压缩、二进制协议、其他遗留的文本格式

3、核心:可扩展的事件模型、统一通信API、零拷贝能力的富字节缓冲

Netty设计:

Netty在设计上针对多种传输类型,集成了一套统一的API、堵塞和非堵塞的套接字。Netty的事件模型是可扩展的。能够把关注点进行明白隔离。Netty的线程模型提供了在单线程或类SEDA这种线程池之间选择的灵活性。并且线程是高可自己定义的,对数据报的支持实现了真正的无连接通信,Netty的管道抽象与安全线程、动态可变性相结合,使得框架得到有力支撑。

注:SEDA,即Staged Event Driven Architecture,阶段化的事件驱动架构。

SEDA的思路是将原先由一个线程完毕的任务,切割为相对独立的多个阶段。每个阶段由专用的一组线程负责运行。阶段之间用过队列交互。

採用SEDA方式,仅仅有在并发量提高到一定程度。并发成为系统瓶颈时才干体现价值。

就单个操作而言,因为队列的传递。其延迟一定是有所上升的。

能够參考这篇论文《SEDA: an Architecture for Well-Conditioned, Scalable Internet Services

SEDA是加州大学伯克利分校研究的一套优秀的高性能互联网server架构模型,其设计目标是:支持大规模并发处理、简化系统开发、支持处理监測、支持系统资源管理。

两种眼下广泛使用的网络server架构模型:

1)多线程server(Threaded Server)

工作原理:对于每个request。dispatcher都会为其创建并分配一个线程,该线程负责这个请求的处理。此方式又名为(Thread-per-request)。

长处:运行粒度是整个完整的处理流程,处理逻辑清晰。易于开发。

缺点:当随着处理请求的不断添加。会导致并发运行的线程数量太多。过多的线程数量会导致系统在线程调度和资源争用上的开销过大。从而引起系统性能急剧下降。导致系统处理能力下降。

改进措施:引入线程池(Bounded Thread Pools)
系统最多仅仅能创建一定数量的线程。

当全部线程都饱和运行时。新到达的处理请求仅仅能等待。或者被抛弃。
缺点:运行粒度仍然是完整的处理流程。难以检測系统性能瓶颈的根源以及进行对应调整。

2)事件驱动并发处理(Event-Driven Concurrency)

将处理流程切割成多个步骤,每个步骤都实现为一个有限状态机(FSM)。
工作原理:全部的处理请求会作为Event进入系统。由Scheduler负责传递给对应FSM。

FSM的处理结果也以Event形式输出给Scheduler。新的Event会再次被Scheduler进行转发给下一个FSM,直至处理完毕。

长处:
1、随着处理量的添加,系统负荷是以线形增长。

当达到系统饱和处理能力后。系统的处理能力不会下降。
2、因为将各处理步骤独立实现,易于进行系统监測和调整。
缺点:
Scheduler的设计和实现过于复杂,针对于不同的应用和系统的逻辑变更须要不同的实现。

SEDA架构

(近似于Event-Driven Concurrency,可是没有当中的Scheduler)将每个处理步骤独立为一个Stage。

Stage结构:
1)一个接受输入的Event Queue;
2)一个应用开发人员编写的Event Handler;
3)一个Controller用于对运行过程进行控制。

包含并发线程数量、批处理数量等等;
4)一个Thread Pool用于并发处理;
Stage的输入通过Event Queue获得。Stage的输出会以Event形式推送到其他Stage的Event Queue中。Stage之间的这种连接关系由应用开发人员指定。
带来的问题:Event Queue虽然降低了模块间的耦合性,可是会降低响应速度。

性能及有效性:

Netty不仅提供了良好的稳定性,还提供了更好的吞吐量和更低的延迟性能,把内存复制限制到最低需求上,零拷贝能力富字节缓冲特性使内核能够管理DMA复制。这降低了CPU和系统总线的负担,提升了框架的有效性。

可扩展性与集成:

Netty有可扩展能力。支持扩展到上千种连接类型。并且在维持有效性的同一时候没有性能瓶颈。这些连接的可靠性都非常高,并且不会失效。Netty易于扩展和构建。Netty还提供了灵活的集成性能,能够与非常多环境比方Linux、Java、C#、C++、Python等环境集成。

安全:Netty提供了完整的SSL/TLS和StartTLS支持。

Netty官方提供了非常多指南、文档以及JavaDoc和样例供开发人员參考。

Netty眼下的最新稳定版是4.0.23版。

下载地址: http://dl.bintray.com/netty/downloads/netty-4.0.23.Final.tar.bz2

版权声明:这篇文章的博客chszs原创文章,博客,未经同意不得转载。

时间: 2024-08-09 00:48:50

Netty:一种非易失堵塞client/server相框的相关文章

非易失内存技术NVDIMM

从技术的角度来看,NAND Flash闪存介质虽然存在擦写次数寿命的问题,但是,配合软件算法.系统级的数据保护技术,NAND Flash的寿命问题变得不再是一个棘手的问题,而NAND Flash更多的优势成为该项技术向前推进的重要动力.采用NAND Flash构建的SSD正快速的替代传统磁盘,已经大面积的在互联网领域得到应用,并且不断向对数据可靠性有要求的企业级市场渗透. SSD和传统磁盘相比有几个非常独特的特性.第一个特点就是SSD的具有非常好的读写性能,特别在随机读写性能方面远远超过传统磁盘

展望由非易失性设备构成的未来存储

 展望由非易失性设备构成的未来存储 Edward Sharp "愿你生活的时代充满趣味".不知您是否注意到,而今的IT世界已然如此,充斥着诸如云.移动.大数据.内存数据库.NoSQL.远程直接内存访问(RDMA).叠瓦式磁记录(SMR)硬盘.非易失性存储(NVM)以及其他不胜列数的新技术.正是由于这些新科技与技术让使用者能以更精简的资源来实现更为强大的功能,我们面临的世界正经历着天翻地覆的变化.这样的变革对现有的行业既是一种威胁,但另一方面,对于敏捷.专注而果敢的公司而言,恰恰

“非易失性内存”嫁接“内存计算”——高速安全的大数据时代来临

“非易失性内存”嫁接“内存计算” ——高速安全的大数据时代来临 题记 数据库奠基人Jim Gray:“磁带已经死了,磁盘已经落伍,闪存成为存储,内存才是王道”.“不管磁盘是否消融,闪存都是将来的一个趋势.” 石油一直直接影响着世累经济的发展速度和发展水平,现在,信息将发挥同样的作用.<经济学人>表示:“数据和信息日益成为商业的新能源,是一种与资本.劳动力并列的新经济元素”. 数据保护 大数据时代的机遇和挑战 大数据“风华正茂” 大数据时代,每两天的数据量就达到2ZB,相当于20世纪前人类文明所

EVERSPIN非易失性MRAM具吸引力的嵌入式技术

相关研究指出,如果以嵌入式MRAM取代微控制器中的eFlash和SRAM,可节省高达90%的功耗:如果采用单一晶体管MRAM取代六个晶体管SRAM,则可实现更高的位元密度和更小的芯片尺寸,这些功率与面积成本优势将使MRAM成为边缘侧设备的有力竞争者.而相较于传统的NAND闪存,PCRAM或ReRAM存储级存储器更可提供超过10倍以上的存取速度,更适合在云端对资料进行存储. MRAM是一种非易失性存储技术,该技术具备接近静态随机存储器的高速读取写入能力,快闪存储器的非易失性.容量密度和与DRAM几

航空航天专用Everspin非易失性MRAM存储器

TAMU是由瑞典乌普萨拉的?ngstr?m航空航天公司(?AC)开发的高级磁力计子系统.TAMU的目的是提供地球磁场的磁力计数据,以便与子画面观测相关.实验性TAMU由使用领先技术制造的四种类型的设备组成:3轴地磁传感器,通过3D封装系统技术制造的MPU芯片,制造的4Mbit MRAM(磁性随机存取存储器)芯片由Everspin Technologies和IMU(惯性测量单元)芯片组成. ?ACMicrotec在其Tohoku-?ACMEMS单元(TAMU)(磁力计子系统)中使用了Everspi

基于pstore 和 ramoops实现在非易失性内存中保存panic日志

基于pstore和 ramoops实现在非易失性内存中保存panic日志 具体步骤如下 0.确定地址范围 需求提前知道用来保存panic日志的非易失性内存的起始地址和长度.比如笔者用到的那部分内存的起始地址是0x11ff000000,长度是16M. 2.修改内核 保证内核配置选项中选上了ramoops驱动支持: 生成驱动加载过程中,如果发现对独立的非易失性存储加载驱动失败,检查是否需要修改内核驱动,特别是fs/pstore/ram_core.c中的request_mem_region()函数,然

非易失性MRAM诞生过程

MRAM技术是以可沉积在标准逻辑制程上的磁性隧道结 (MTJ)储存单元为基础,MTJ中包含了一个维持单一极性方向的固定层,和一个通过隧道结与其隔离的自由层.当自由层被施予和固定层相同方向的极化时,MTJ的隧道结便会显现出低电阻特性.而当自由层被施予反方向的极化时,MTJ便会有高电阻.此一磁阻效应可使MRAM不需改变内存状态,便能快速读取数据.在MRAM存储器中有一个富含创造性的设计,这也是EVERSPIN的专利. 在MRAM的诞生过程中,设计的难点和关键节点,在于一个小电流通过"自由层"

在网络I/O模型方面Netty采用基于非阻塞I/O的实现

第一层:Reactor通信调度层.该层的主要职责就是监听网络的连接和读写操作,负责将网络层的数据读取到内存缓冲区中,然后触发各种网络事件,例如连接创建.连接激活.读事件.写事件等,将这些事件触发到Pipeline中,再由Pipeline充当的职责链来进行后续的处理. 第二层:职责链Pipeline层.负责事件在职责链中有序的向前(后)传播,同时负责动态的编排职责链.Pipeline可以选择监听和处理自己关心的事件. 第三层:业务逻辑处理层,一般可分为两类:a. 纯粹的业务逻辑处理,例如日志.订单

Netty:一个非阻塞的客户端/服务器框架

Netty:一个非阻塞的客户端/服务器框架 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs Netty是一个异步事件驱动的网络应用框架,为Java网络应用的开发带来了一些新活力.Netty由协议服务器和客户端所组成,可用于快速开发可维护的高性能软件.Netty应用框架及其工具简化了网络编程,而且由Netty社区进行维护. Netty还被归类为NIO客户端/服务器框架,用它能够快速.简易地开发网络应用,使得TCP和UDP套接字服务器的网络编程得以简化和