[目录]
1. 再谈谈什么是高性能
2. Netty 如何实现高性能
3. Netty 网络程序优化
4. 典型应用:API 网关
5. 自己动手实现 API 网关
6. 第 5 课总结回顾与作业实践
1.高性能
高并发 + 高吞吐量 | QPS(每秒请求次数) TPS(每秒交易数) | + 低延迟
响应时间:用户角度
延迟时间:业务处理时间
缺点:系统复杂度 + 建设维护成本 + 故障的破坏性
应对策略:容量 + 爆炸半径 + 工程积累与改进
2.Netty
概览
从事件处理机制到Reactor模型
事件驱动
Reactor -> Netty NIO
分成两部分:Boss连接处理,Worker请求处理
Netty运行原理
关键对象
Bootstrap: 启动线程,开启 socket
EventLoopGroup
EventLoop
SocketChannel: 连接
ChannelInitializer: 初始化
ChannelPipeline: 处理器链
ChannelHandler: 处理器
3.Netty 网络程序优化
粘包与拆包
ByteToMessageDecoder 提供的一些常见的实现类:
- FixedLengthFrameDecoder:定长协议解码器,我们可以指定固定的字节数算一个完整的报文
- LineBasedFrameDecoder:行分隔符解码器,遇到\n 或者\r\n,则认为是一个完整的报文
- DelimiterBasedFrameDecoder:分隔符解码器,分隔符可以自己指定
- LengthFieldBasedFrameDecoder:长度编码解码器,将报文划分为报文头/报文体
- JsonObjectDecoder:json 格式解码器,当检测到匹配数量的“{” 、”}”或”[””]”时,则认为是一个完整的 json 对象或者 json 数组
Nagle 与 TCP_NODELAY
优化条件:
- 缓冲区满
- 达到超时
MTU: Maxitum Transmission Unit 最大传输单元 | 一般为 1500Byte
MSS: Maxitum Segment Size 最大分段大小 | 一般为 1460Byte
连接优化(三次握手+四次挥手)
减少Time-Wait时间
复用参数
Netty优化
- 不要阻塞 EventLoop
- 系统参数优化
ulimit -a /proc/sys/net/ipv4/tcp_fin_timeout, TcpTimedWaitDelay - 缓冲区优化
SO_RCVBUF/SO_SNDBUF/SO_BACKLOG/ REUSEXXX - 心跳周期优化
心跳机制与断线重连 - 内存与 ByteBuffer 优化
DirectBuffer与HeapBuffer - 其他优化
- ioRatio
- Watermark
- TrafficShaping(流控机制)
4.典型网关
网关结构和功能?
分类:流量网关(Nginx) 和 业务网关(Zuul)
各自特点
典型网关Zuul、Zuul2、Spring Cloud Gateway
5.动手实现API网关
待补充