第 8 章 路由优化
8.1. 扩展 OpenShift Container Platform HAProxy 路由器
8.1.1. 基准性能
OpenShift Container Platform 路由器 是所有用于 OpenShift Container Platform 服务的外部流量的入站点。
当根据每秒处理的 HTTP 请求来评估单个 HAProxy 路由器性能时,其性能取决于多个因素。特别是:
- HTTP keep-alive/close 模式,
- 路由类型
- 对 TLS 会话恢复客户端的支持
- 每个目标路由的并行连接数
- 目标路由数
- 后端服务器页面大小
- 底层基础结构(网络/SDN 解决方案、CPU 等)
具体环境中的性能会有所不同,我们的实验室在一个有 4 个 vCPU/16GB RAM,一个单独的 HAProxy 路由器处理 100 个路由来提供后端的 1kB 静态页面的公共云实例中进行测试,其每秒的交易数如下。
在 HTTP 的 keep-alive 模式下:
Encryption | ROUTER_THREADS unset | ROUTER_THREADS=4 |
---|---|---|
none | 23681 | 24327 |
edge | 14981 | 22768 |
passthrough | 34358 | 34331 |
re-encrypt | 13288 | 24605 |
在 HTTP 关闭(无 keep-alive)情境中:
Encryption | ROUTER_THREADS unset | ROUTER_THREADS=4 |
---|---|---|
none | 3245 | 4527 |
edge | 1910 | 3043 |
passthrough | 3408 | 3922 |
re-encrypt | 1333 | 2239 |
TLS 会话恢复用于加密路由。使用 HTTP keep-alive 设置,单个 HAProxy 路由器可在页面大小小到 8 kB 时充满 1 Gbit NIC。
当在使用现代处理器的裸机中运行时,性能可以期望达到以上公共云实例测试性能的大约两倍。这个开销是由公有云的虚拟化层造成的,基于私有云虚拟化的环境也会有类似的开销。下表是有关在路由器后面的应用程序数量的指导信息:
应用程序数量 | 应用程序类型 |
---|---|
5-10 | 静态文件/web 服务器或者缓存代理 |
100-1000 | 生成动态内容的应用程序 |
取决于所使用的技术,HAProxy 通常可支持 5 到 1000 个程序的路由。路由器性能可能会受其后面的应用程序的能力和性能的限制,如使用的语言,静态内容或动态内容。
应该使用 路由器分片 为应用程序提供更多路由,并帮助水平扩展路由层。
8.1.2. 性能优化
8.1.2.1. 设置连接的最大数量
HAProxy 可扩展性最重要的可调整参数之一是 maxconn
参数,该参数将每个进程的最大并发连接数设置为给定数字。通过编辑 OpenShift Container Platform HAProxy 路由器部署配置文件中的 ROUTER_MAX_CONNECTIONS
环境变量来调整此参数。
连接包括 frontend 和 internal 后端。这表示两个连接。务必将 ROUTER_MAX_CONNECTIONS
设置为两倍,超过您要创建的连接数。
8.1.2.2. CPU 和中断关联性
在 OpenShift Container Platform 中,HAProxy 路由器以单一进程的形式运行。OpenShift Container Platform HAProxy 路由器通常在具有较少但频率较高的内核的系统上更好地执行,而不是在大量频率较高的对称多进程(SMP)系统中执行。
将 HAProxy 进程固定到一个 CPU 内核,而对另一个 CPU 内核的网络中断往往会提高网络性能。在相同的非统一内存访问(NUMA)节点上具有进程和中断,有助于通过确保共享的 L3 缓存来避免内存访问。但是,公共云环境中通常无法进行这种级别的控制。在裸机主机上,irqbalance
会自动处理外围组件互连(PCI)本地化,以及用于中断请求行(IRQ)的 NUMA 关联性。在云环境中,此类信息通常不提供给操作系统。
CPU 固定通过 taskset
或使用 HAProxy 的 cpu-map
参数来执行。此指令采用两个参数:进程 ID 和 CPU 内核 ID。例如,要将 HAProxy 进程 1
固定到 CPU 内核 0
,请将以下行添加到 HAProxy 配置文件的全局部分:
cpu-map 1 0
要修改 HAProxy 配置文件,请参阅部署 Customized HAProxy Router。
8.1.2.3. 增加线程数
HAProxy 路由器在 OpenShift Container Platform 中支持多线程。在多个 CPU 内核系统上,增加线程数量可帮助性能,特别是在路由器终止 SSL 时。
要指定 HAProxy 路由器的线程数量,请参阅启用 HAProxy 线程和路由器环境变量。
8.1.2.4. 增加缓冲的影响
OpenShift Container Platform HAProxy 路由器请求缓冲区配置限制了传入的请求和来自应用程序响应中的标头大小。可以增加 HAProxy 参数 tune.bufsize
以允许处理更大的标头,并允许具有非常大 Cookie 的应用程序正常工作,如许多公共云提供商提供的负载均衡器接受的应用程序。但是,这会影响内存使用总量,特别是在打开大量连接时。使用大量打开连接时,内存用量就与这个可调参数增长几乎成比例。
8.1.2.5. HAProxy Reloads 的优化
较长的连接(如 WebSocket 连接)与较长的客户端/服务器 HAProxy 超时和短暂的 HAProxy 重新加载间隔相结合,可能会导致许多 HAProxy 进程实例化。这些进程必须处理旧的连接,这些连接在 HAProxy 配置重新加载之前启动。大量这些进程不可取,因为它会对系统造成不必要的负载,并可能导致问题,如内存不足的情况。
影响此行为的路由器环境变量是 ROUTER_DEFAULT_TUNNEL_TIMEOUT
、ROUTER_DEFAULT_CLIENT_TIMEOUT
、ROUTER_DEFAULT_SERVER_TIMEOUT
以及 RELOAD_INTERVAL
。