揭开netty神秘面纱_MyNetty

三、揭开Netty的神秘面纱

目标:网络应用开发框架。

实现:异步、事件驱动。

特性:高性能、可维护、极速开发。

用途:服务端、客户端开发。

四、为何舍近求远、不直接使用JDK的NIO

Netty做的更多:

支持常用应用层协议;

解决了传输问题:沾包、半包;

支持流量整形;

完善的断连、Idle等异常处理机制。

Netty做的更好:

规避了JDK NIO部分bug: linux2.4 epoll bug之异常唤醒空转导致的CPU满载,Netty检测到空转次数到达阈值则重置Selector。

JDK12才解决的IP_TOS(IP包的优先级和QoS选项)使用时抛出的异常:Netty直接绕过,不支持该选项。

API更友好更强大:

JDK NIO的一些API不够友好,功能薄弱,Byte Buffer(只有一个索引,读写手动flip,基于数组不方便扩容) -> Netty‘s ByteBuf(读写两个索引,自动扩容);

除了NIO范畴,也做了一些其他增强:ThreadLoacal -> Netty’s FastThreadLoacal(高并发性能更好);

隔离了变化、屏蔽了细节:隔离了底层JDK从NIO到AIO以及后续升级,用户无感知。屏蔽了JDK NIO的实现细节。

开发者直接使用NIO的可能性:

Netty大概有18584行代码,已解决问题4347个,为解决问题400个,JKD NIO本身大约有5000个bug,这就意味着自己直接使用NIO开发一套成熟稳定的网络模块,付出的工作量大概也是这个级别。

Netty已经维护十五年,其沉淀积累极其宝贵。

五、为何孤注一掷:独选Netty

为何不选Apache Mina:Netty是Mina的重构版,提高了扩展性且解决了已知问题。

为何不选Sun的Grizzly:用户少、文档少、更新少。

为何不选Apple的SwiftNIO、ACE等:仅支持Apple系语言。

为何不选Cindy:生命周期太短。

为何不选Tomcat、Jetty、Undertow:它们有自己的网络通信层实现,但是并未独立出模块,其功能也主要针对Servlet容器,不具备通用开发框架的要素。

结论:Java网络编程,只选Netty。

六、Netty的前程往事

归属组织:

JBoss:4.0之前

Netty:4.0之后

版本演进:

2004-6:Netty2发布,号称Java社区第一个基于事件驱动的网络框架。

2008-10:Netty3发布。

2013-7:Netty4发布。

2013-12:Netty5Alphal。

2015-11:废弃Netty5。复杂度太高、没有显著的性能优势、版本太多维护不过来。不要在项目中用任何非稳定依赖。

与Apache Mina的关系?

同一作者开发,都还在维护:

2004年6月Netty2发布,后火。

2005年5月Mina发布,先火。

Mina受Apache管理,Netty受作者自己管理,作者的才能发挥更充分,所以作者推荐Netty。

七、Netty的现状与趋势

社区现状:

github指标反应很火很活跃。

22个贡献者,两个核心成员(Trustin Lee和Norman Maurer)。

分支:

4.1master,活跃。

4.0维护状态。

典型用例:

全文检索:ES;

开发框架:gRPC、Dubbo、Spring5;

分布式协调:Zookeeper;

工具:async-http-client;

特性持续更新:

流行协议:dns、haproxy、http、http2、memcache、maqq、redis、smtp、socks、stomp、xml;

紧跟JDK新功能的步伐;

易于使用、人性化:IP地址黑白名单、流量整形;

八、Netty怎么切换三种IO模式

三种IO模式:

BIO(jdk1.4之前):类似食堂排队打饭,在窗口等待,打好才走。

NIO(jdk1.4之后,2002年):类似餐厅点菜-被叫,等待被叫,好了自己取餐。

AIO(jdk1.7,2011年):类似包厢,点菜后在包厢干其他事,服务员送餐。

阻塞与非阻塞:

菜没做好,是否死等 -> 数据没就绪,要不要等待?

阻塞:数据未就绪,线程一直等待,直到数据来;缓冲区满时,写线程也会等待,直到缓冲区有空位;

非阻塞:线程遇到数未就绪或缓冲区满,直接返回。

同步与异步:

菜做好了,谁来端 -> 数据就绪了谁来完成对数据的操作。

同步:数据就绪后,客户端线程自己去读取。

异步:数据就绪后,服务端线程读取好,再回调客户端线程。

Netty对BIO的支持被声明为已废弃?

——因为,在连接数高的情况下:阻塞会导致大量线程等待 -> 资源占用严重、响应效率降低。

Netty为何删除了已实现对AIO的支持?

——Windows对AIO有成熟的实现,但很少作为服务器使用。

Linux服务器份额大,但是其AIO实现不成熟,且目前Linux的AIO与NIO相比,性能提升不明显。

为什么Netty在NIO的支持上分成了Common、Linux、macOS/BSD三种实现?Common实现的NIO在Linux上使用的也是epoll,为何还要单独实现一套Linux的epoll?

Netty实现了更好的epoll机制:

Netty暴露了更多的可控参数:JDK NIO默认水平触发,Netty则默认边缘触发更高效,也可水平触发。

Netty的实现GC更少,性能更佳。

BIO实现更简单,能保证连接数少的场景下性能也和高,但NIO能让系统更具扩展性。

九、Netty如何切换IO模式

EventLoopGroup:内部是一个无限循环,达到实时而永久监听时间的目的。

服务端:修改boss、worker之EventLoopGroup,serverSocketChannel的类型;但socketChannel不需要切换,原因是socketChannel对象由serverSocketChannel创建,其类型由serverSocketChannel决定。

切换原理:泛型 + 反射 + 对象工厂。

十、Netty如何支持三种Reactor?

饭店演变:

迎宾(接入)、点菜(请求)、做菜(业务处理)、上菜(响应)、送客(断开)

一个人(服务端线程)包揽所有 --> 单线程Reactor。

招几个伙计:所有人各自迎宾、点菜、做菜、上菜、送客 --> 多线程Reactor。

招几个伙计:精细分工 --> 主-从多线程Reactor。

三种默认是:

BIO:Thread-Per-Connection

NIO:Reactor

AIO:Proactor

Reactor处理流程:注册感兴趣的事件 -> 监听扫描是否有感兴趣的时间发生 -> 处理时间

不分工的线程池能免去线程初始化的消耗、能防止线程被耗尽,但不能解决阻塞等待问题。

Reactor三种模式:

处理流程:accept -> read -> decode -> compute -> encode -> send,其中read、send必然阻塞

单线程Reactor:单线程处理全流程;Netty中只初始化一个EventLoopGroup且将线程池容量设为1。

多线程Reactor:Reactor负责accept、read、send,其余流程交给线程池处理;Netty中只初始化一个EventLoopGroup线程池容量默认根据核数计算,或容量设为N。(N > 1)

主-从多线程Reactor:MainReactor专门负责accept,SubReactor负责read、send,其余流程交给线程池;Netty中只初始化两个EventLoopGroup,都不设容量,线程池容量都自动计算。

十一、解析Netty对Reactor模式支持的常见疑问

如何支持主-从Reactor模式的:

十二、Netty对TCP/IP的沾包和半包处理

什么是沾包和半包问题?

沾包:发送方一次写入数据 < 套接字缓冲区大小,或接收方读取套接字缓冲区不够及时。

半包:发送方一次写入数据 > 套接字缓冲区大小,或发送的数据大于协议的MTU,被迫拆包。

为什么会出现沾包和半包问题?

解决沾包和半包问题的几种常用方法?

Netty对三种常用封帧方式的支持?

源码解析Netty对沾包和半包问题的处理?

原文:https://www.cnblogs.com/JaxYoun/p/12896457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值