【Netty】 Netty高并发应用实践


Netty介绍

Netty 是什么?

  1. Netty官网
  2. Netty 是由由 JBOSS 提供的一个 Java 开源框架 NIO 框架,Netty 提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
  3. Netty 通过 Future-Listener 机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
  4. Netty 的健壮性、功能、性能、可定制性和可扩展性在同类框架都是首屈一指的。它已经得到成百上千的商业/商用项目验证,如 Hadoop 的RPC框架 AvroRocketMQ 以及主流的分布式通信框架 Dubbo 等等。
  5. Netty 架构:

为什么选择 Netty ?

  • 功能强大

基于事件驱动,预制多种编码功能,支持多种主流协议,如HTTP、WebSocket等,支持SSL和HTTPS。

  • 高性能,传输快

更好的吞吐量,低延迟,减少不必要的内存拷贝,与其他主流NIO框架,Netty综合性能最优。

  • 开发简单,定制能力强

API使用简单,简化开发难度。通过对ChannelHandler的扩展,可以自定义各类业务拦截器。

  • 成熟稳定

社区活跃,经历大规模的商业应用考验,在互联网、大数据、网络游戏以及物联网行业得到成功商业。

Netty 有哪些特性?

  • 异步非阻塞通信

IO多路复用技术通过把多个IO的阻塞复用到同一个select的阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。

  • 内存零拷贝

接收和发送数据采用DirectBuffer,使用堆外直接内存读写。

  • 内存池

基于内存池的缓冲区重用机制,尽量重用缓冲区,减少内存的分配和回收。

  • Reactor多线程模型

通过Reactor的主从线程模型,通过多个NIO线程处理多个链路,防止线程阻塞和消息积压。

应用实践

搭建 Netty 服务需要思考的问题

  1. 如何快速响应,满足大量客户端同时在线?
  2. 如何保证用户身份甄别,身份校验?
  3. 如何保证服务器的稳定?
  4. 如何对客户端回传消息?
  5. 如何监控客户端状态?

Netty 服务注意事项

  1. 减少Netty响应时间

Netty服务只处理数据解析检验和分发,不在Netty的连接线程处理耗时任务。

  1. 横向部署Netty集群

通过搭建Netty集群,做好合理的负载均衡,扩展Netty的连接承载量,并提高服务器的容量和稳定性。

  1. 减少网络带宽消耗

选择合适的编解码方案,适时采用压缩等技术,减少网络带宽消耗。

  1. 任务异步处理

业务具体事件由任务线程或者异步消息进行异步处理,业务处理完成后再由Netty返回客户端。

  1. 安全策略

做好安全防范,通过加密和签名验证消息合法性,确保消息传递的安全性。

Netty 集群部署需要面临的问题

  1. 客户端连接哪台服务器?
  2. 怎么快速添加服务器或者下线服务器?
  3. 大量客户端递交的任务怎么保证有效处理?
  4. 如何快速定位客户端,并回应消息?
  5. 客户端的状态如何维护?

Netty 集群部署实践

服务注册

ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。
利用 Zookeeper 的临时节点特性+监视器(Watch)来实现分布式集群监控
Netty 服务器上线后,创建 Zookeeper 的临时节点,下线后临时节点或自动删除。负载均衡服务器通过订阅 Zookeeper 的节点变动事件,更改可用服务器列表

登录认证和Netty服务器负载均衡

客户端的登录验证通过 Web 服务器处理。
Web服务器采用 Nginx 和 Tomcat 集群的方式,保证连接的高容量。可用做为业务系统的一个子模块部署到业务系统中去。
在经过安全验证后,业务系统返回给客户端一个换取登录权限的 token
登录是通过负载均衡算法将空闲服务器连接信息返回客户端,由客户端连接相应的服务器实现负载均衡和安全校验。

异步任务

会话管理

客户端Session及在线信息集中管理,存放于Redis数据库。
在这里插入图片描述

通讯安全

登录HTTPS/SSL通讯
消息加密,双向签名验证
大数据压缩和分包发送

总体架构

注意事项
  • 连接超时:移动网络连接不稳定,在客户端闪断后服务器不一定收到断开事件,需要及时关闭会话超时的连接,并防止跨服务器重复登录。
  • 缓冲区容量:根据日常报文大小,设置缓冲区,尽量使缓冲区容量处于平均报文长度附近。
  • 心跳检测:根据业务特点,设置合理的心跳时间,避免频繁的客户端重连。
  • 共享内存池:使用Netty的共享内存池,可以避免频繁的GC,要注意进行内存泄漏监控。
  • 日志级别:在高并发情况下,日志记录量是惊人的,根据业务情况调整日志记录的级别, 并可根据需要采用kafka做分布式日志记录。
  • 系统调优:优化服务器的内核参数。

行业应用

Dubbo 阿里巴巴开源服务框架

Dubbo是阿里巴巴开源的分布式服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能。
Dubbo内部私有协议通讯使用 Netty 作为高性能异步通讯框架,为分布式服务接待直接提供高性能的NIO客户端和服务器通信。
Dubbo不仅仅在阿里巴巴使用,在国内各行业中也得到广泛应用。
从2017年开始,Dubbo又重新得到阿里巴巴官方维护。

Apache Avro

Apache Avro 是 Hadoop 的子系统之一,是 Apache 的顶级项目,是一个数据序列号框架,被设计用于大批量数据交换的应用。
Avro 的 RPC 框架基于 Netty 的 nettyServer 和 HttpServer 两种方式实现。

应用行业

Netty具有高并发和高性能的特点,资源消耗少,单台服务器即可实现上万级别的TCP长连接。同时安全性和扩展性都非常好,非常方便与第三方系统进行集成。在需要处理海量用户连接的领域都得到了广泛的应用,比如游戏、物联网、IM通讯等行业。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值