[目录]
1. 再谈谈什么是高性能 
2. Netty 如何实现高性能
3. Netty 网络程序优化
4. 典型应用:API 网关
5. 自己动手实现 API 网关
6. 第 5 课总结回顾与作业实践

1.高性能

高并发 + 高吞吐量 | QPS(每秒请求次数) TPS(每秒交易数) | + 低延迟

响应时间:用户角度
延迟时间:业务处理时间

缺点:系统复杂度 + 建设维护成本 + 故障的破坏性
应对策略:容量 + 爆炸半径 + 工程积累与改进

2.Netty

概览

java用netty实现与网关设备通信 netty api网关_java用netty实现与网关设备通信

从事件处理机制到Reactor模型

事件驱动

java用netty实现与网关设备通信 netty api网关_json_02

Reactor -> Netty NIO

分成两部分:Boss连接处理,Worker请求处理

java用netty实现与网关设备通信 netty api网关_json_03

Netty运行原理

java用netty实现与网关设备通信 netty api网关_java用netty实现与网关设备通信_04

关键对象

Bootstrap: 启动线程,开启 socket

EventLoopGroup

EventLoop

SocketChannel: 连接

ChannelInitializer: 初始化

ChannelPipeline: 处理器链

ChannelHandler: 处理器

java用netty实现与网关设备通信 netty api网关_java用netty实现与网关设备通信_05


java用netty实现与网关设备通信 netty api网关_json_06

3.Netty 网络程序优化

粘包与拆包

ByteToMessageDecoder 提供的一些常见的实现类:

  1. FixedLengthFrameDecoder:定长协议解码器,我们可以指定固定的字节数算一个完整的报文
  2. LineBasedFrameDecoder:行分隔符解码器,遇到\n 或者\r\n,则认为是一个完整的报文
  3. DelimiterBasedFrameDecoder:分隔符解码器,分隔符可以自己指定
  4. LengthFieldBasedFrameDecoder:长度编码解码器,将报文划分为报文头/报文体
  5. JsonObjectDecoder:json 格式解码器,当检测到匹配数量的“{” 、”}”或”[””]”时,则认为是一个完整的 json 对象或者 json 数组

Nagle 与 TCP_NODELAY

优化条件:

  • 缓冲区满
  • 达到超时

MTU: Maxitum Transmission Unit 最大传输单元 | 一般为 1500Byte
MSS: Maxitum Segment Size 最大分段大小 | 一般为 1460Byte

连接优化(三次握手+四次挥手)

java用netty实现与网关设备通信 netty api网关_sed_07


java用netty实现与网关设备通信 netty api网关_java用netty实现与网关设备通信_08


减少Time-Wait时间

复用参数

Netty优化

  1. 不要阻塞 EventLoop
  2. 系统参数优化
    ulimit -a /proc/sys/net/ipv4/tcp_fin_timeout, TcpTimedWaitDelay
  3. 缓冲区优化
    SO_RCVBUF/SO_SNDBUF/SO_BACKLOG/ REUSEXXX
  4. 心跳周期优化
    心跳机制与断线重连
  5. 内存与 ByteBuffer 优化
    DirectBuffer与HeapBuffer
  6. 其他优化
  • ioRatio
  • Watermark
  • TrafficShaping(流控机制)

4.典型网关

网关结构和功能?

java用netty实现与网关设备通信 netty api网关_分隔符_09


分类:流量网关(Nginx) 和 业务网关(Zuul)

各自特点

典型网关Zuul、Zuul2、Spring Cloud Gateway

5.动手实现API网关

待补充