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原创文章,博客,未经同意不得转载。
Netty:一种非易失堵塞client/server相框的更多相关文章
- Everspin非易失性MRAM切换技术
切换MRAM技术 切换MRAM使用1个晶体管,1个MTJ单元来提供简单的高密度存储器.Everspin使用获得专利的Toggle电池设计,可提供高可靠性.数据在温度下20年始终是非易失性的. 在读取期 ...
- 航空航天专用Everspin非易失性MRAM存储器
TAMU是由瑞典乌普萨拉的Ångström航空航天公司(ÅAC)开发的高级磁力计子系统.TAMU的目的是提供地球磁场的磁力计数据,以便与子画面观测相关.实验性TAMU由使用领先技术制造的四种类型的设备 ...
- Non-Volatile Register 非易失性寄存器 调用约定对应寄存器使用
非易失性寄存器(Non-volatile register)是它的内容必须通过子程序调用被保存的一个寄存器.如果一个程序改变了一个非易失性寄存器的值,它必须保存在改变这个寄存器之前堆栈中保存旧的值和在 ...
- MR25H40非易失性串行接口MRAM
Everspin 是设计,制造和商业销售离散和嵌入式磁阻RAM(MRAM)和自旋传递扭矩MRAM(STT-MRAM)的全球领导者,其市场和应用领域涉及数据持久性和完整性,低延迟和安全性至关重要.Eve ...
- 关于C#多线程、易失域、锁的分享
一.多线程 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,CLR(公共语言运行库)为该进程创建了一 ...
- C#易失域、锁的分享,多线程
C#多线程.易失域.锁的分享 一.多线程 windows系统是一个多线程的操作系统.一个程序至少有一个进程,一个进程至少有一个线程.进程是线程的容器,一个C#客户端程序开始于一个单独的线程,CLR(公 ...
- suging闲谈-netty 的异步非阻塞IO线程与业务线程分离
前言 surging 对外沉寂了一段时间了,但是作者并没有闲着,而是针对于客户的需要添加了不少功能,也给我带来了不少外快收益, 就比如协议转化,consul 的watcher 机制,JAVA版本,sk ...
- 【转】.NET+AE开发中常见几种非托管对象的释放
尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试 ...
- Spring框架是一种非侵入式的轻量级框架
摘自<Spring框架技术> Spring框架是一种非侵入式的轻量级框架 1.非侵入式的技术体现 允许在应用系统中自由选择和组装Spring框架的各个功能模块,并且不强制要求应用系统的类必 ...
随机推荐
- 【SPOJ 694】Distinct Substrings (更直接的求法)
[链接]h在这里写链接 [题意] 接上一篇文章 [题解] 一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i]) [错的次数] 0 [反思] 在这了写反思 [代码] #inclu ...
- mysql快速入门 分类: B6_MYSQL 2015-04-28 14:31 284人阅读 评论(0) 收藏
debian方式: apt-get install mysql-server-5.5 mysql -u root -p redhat安装方式 一.下载并解压 $ wget http://cdn ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- ZOJ 1796 Euchre Results 数学水题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1796 题意: 四个人玩游戏,已知三个人的输赢情况,求第四个人的输赢情况. ...
- Mybatis全面详解——上(学习总结)
原文地址:https://blog.csdn.net/ITITII/article/details/79969447 一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBat ...
- [Redis专辑][1]ubuntu12.04下安装php-redis的方法和步骤
首次公布路径:phpredis的安装 非常久非常久没有写博文了,好多博文都没有整理完成,今天才抽时间整理完这一篇博文,希望能对大家有一定的帮助 首先对redis做个简单的介绍: Redis 是全然开源 ...
- hdu 3306 Another kind of Fibonacci(矩阵高速幂)
Another kind of Fibonacci Time Limit: 3000/10 ...
- 细说CSS伪类和伪元素
原文 简书原文:https://www.jianshu.com/p/eae56b7fe7fe 大纲 1.伪元素 2.伪类元素 3.伪元素和伪类元素的区别 4.伪类和伪元素的使用 1.伪元素 伪元素在D ...
- ios开发Base64编码以及加密相关学习
一:.Base64补充 ```objc 1.Base64简单说明 描述:Base64可以成为密码学的基石,非常重要. 特点:可以将任意的二进制数据进行Base64编码 结果:所有的数据都能被编码为并只 ...
- iOS View自定义窍门——UIButton实现上显示图片,下显示文字
“UIButton实现上显示图片,下显示文字”这个需求相信大家在开发中都或多或少会遇见.比如自定义分享View的时候.当然,也可以封装一个item,上边imageView,下边一个label.但是既然 ...