• 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原创文章,博客,未经同意不得转载。

  • 相关阅读:
    3月2日 学习记录
    2月10日 体温APP开发总结
    2月8日 体温APP开发记录
    2月5日 体温APP开发记录
    2月4日 体温APP开发记录
    2月3日 体温APP开发记录
    2月2日 体温APP开发记录
    2月1日 体温APP开发记录
    Java并发编程之synchronized详解(锁优化、锁升级)
    mysql 中关于获取行号@rownum:=@rownum+1 需要进一步了解
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4829298.html
Copyright © 2020-2023  润新知