LB

Haproxy 1.5-2.0特性整理

Posted by Mathew on 2018-12-14

haproxy 1.5

  1. 支持 SNI/NPN/ALPN 和 OCSP stapling 的原生 SSL;
  2. 支持 IPv6 和 UNIX sockets;
  3. full HTTP keep-alive for better support of NTLM and improved efficiency in static farms;
  4. HTTP/1.1 compression (deflate, gzip) to save bandwidth;
  5. PROXY protocol versions 1 and 2 on both sides;
  6. data sampling on everything in request or response, including payload;
  7. ACLs can use any matching method with any input sample maps and dynamic
  8. ACLsupdatablefrom the CLI stick-tables support counters to track activity on any input samplecustom format for logs, unique-id, header rewriting, and redirects;
  9. improved health checks (SSL, scripted TCP, check agent, …)
  10. much more scalable configuration supports hundreds of thousands of backends and certificates without sweating.

haproxy 1.6

Resources management :

  • dynamic buffer allocation
  • automatic maxconn setting
  • peers disable
  • peers process binding

Configuration management :

  • config support for quotes
  • config environment variables

Notification / reporting :

  • stats clean encoding in CSV
  • mailers
  • log-tag
  • log-format tags %H*

Server state management :

  • state keeping across reload
  • multiple redispatch
  • dns resolution
  • CLI server address change
  • external checker
  • tcp-check comment

High-level processing / scripting :

  • lua
  • variables
  • gpt0
  • 64-bit integer in samples
  • more flexible sample management
  • declared captures
  • http-response redirect
  • http-request capture
  • {url,body}_param supports any param
  • device identification
  • option http-buffer-request
  • arithmetic fetches and convs
  • new fetch/conv (query, json, field, …)
  • http-request set-{path,query,method,uri}
  • table lookups converters
  • header manipulation on status code 101

Client-facing SSL/TLS :

  • ECDSA client support detection
  • SSL cert forgery on the fly
  • TLS cert transparency (SCTL)
  • TLS ticket key load from file/CLI
  • custom SSL DH params

Server-facing SSL/TLS :

  • specify TLS sni to server
  • no-ssl-reuse

Performance :

  • HTTP server connection sharing
  • use pcre-study by default
  • stateless gzip/deflate compression
  • compression of 201-203
  • pattern cache

Reliability :

  • peers v2
  • TCP_USER_TIMEOUT

Integration :

  • linux namespaces
  • http-request set-src
  • HTTP/0.9 disabled by default
  • RTSP basic compatibility
  • option http-ignore-probes
  • max syslog line length

Documentation :

  • added more documentation (intro, management, lua)
  • removed obsolete and confusing docs
  • removed lots of obsolete config files

haproxy 1.8

  • http2的支持
  • 多线程的支持
  • hitless reload
  • HTTP小对象缓存(默认16KB)
  • 后端对微服务场景下的支持(动态修改server)
  • 支持Server-template的配置指令
  • 后端server支持dns发现
  • 对runtime api功能的改进和更多支持
  • 支持master/worker的工作模式,一个master管理多个worker进程
  • 对lua api的改进,支持 core class/ proxy class/ http class/ tcp class
  • 支持后端server变化的cookie保持

haproxy 1.9

  • 连接管理,HAProxy 1.9 中的连接管理获得了一些重大改进。新的实现已从面向回调的模型转变为异步事件模型(包含了完成回调)。这种新设计将会非常有用,并减少连接层中可能出现的 bug 数量。

  • 多线程改进,1.9 版本对线程进行了重大改进。这些改进使得 HAProxy 能够提供卓越的性能。为实现这一目标,我们对任务调度程序进行了重新设计。它现在的工作被分为三个级别:

    (1) 在所有线程之间共享的优先级感知级别;
    (2) 无锁、优先级感知级别;
    (3) 可用于 I/O 的已启动任务。

  • 缓存改进,在 HAProxy 1.8 中引入了小对象缓存(Small Object Cache)。当时,很多人希望获得这些功能,而我们也知道这只一个开始:代理层中的缓存。在内部,我们将其称为 favicon 缓存,因为它仅限用于缓存小于 tune.bufsize 的对象,默认为 16KB。此外,在第一个版本中,它只能缓存返回 HTTP 200 OK 响应码的对象。而在 HAProxy 1.9 中,你可以缓存最大为 2GB 的对象,使用 max-object-size 进行设置。total-max-size 用于指定缓存的总大小,最大为 4095MB。HAProxy 现在可以缓存返回以下状态码的响应:204、404、405、414 和 501。

  • Runtime API 改进,首先是修改了 master/worker 模型,简化 worker 的交互,并获得更好的进程可观察性。master 现在有自己的套接字,可以直接用这个套接字与它进行通信。而且套接字可以管理与每个 worker 之间的通信,甚至是那些正在退出的 worker。

  • 服务器队列优先级控制,允许你对队列中的连接进行优先级排序。例如,你可以让 JavaScript 或 CSS 文件优先于图像传给客户端。或者,你可以用它改善高级客户的加载时间。另外,可以用它给机器人安排较低的优先级。

  • 随机负载均衡算法,这个算法会选择一个随机数作为一致哈希函数的键。在这个模式下,会用到服务器权重。动态权重更改会立即生效,新添加的服务器也会立即生效。随机负载均衡算法对于大型服务器机群或经常需要添加和删除服务器的场景来说非常有用。使用多个负载均衡器可以降低所有流量被重定向到同一服务器的风险。

  • 云原生日志,HAProxy 1.9 提供了三种发送日志的新方法:将它们发送到文件描述符、stdout 或 stderr。可以使用标准的 log 语句添加这些新方法。

  • 缓冲区改进

haproxy 2.0

  • 7 层网络重试:可以从第 7 层的另一台服务器重试失败的 HTTP 请求。
  • 支持向 Prometheus 暴露 metric。
  • 多语言可扩展性:HAProxy 1.7 中引入了流处理卸载引擎(SPOE,Stream Processing Offload Engine)和流处理卸载协议(SPOP,Stream Processing Offload Protocol),目标是使用任何编程语言创建构建在 HAProxy 上所必需的扩展。最初的例子都是基于 C 的,现在已经支持 C、.NET Core、Lua 与 Python。
  • Traffic shadowing,可以将请求从一个环境镜像到另一个环境,这可以将一定比例的生产流量发送到测试或暂存环境,以在完全部署之前审核发布的情况。新的 Traffic Shadowing 守护进程被编写为流处理卸载代理(SPOA,Stream Processing Offload Agent),并利用 HAProxy 的 SPOE,允许使用任何编程语言扩展 HAProxy。
  • 完全支持 gRPC,允许双向数据流,检测 gRPC 消息和记录 gRPC 流量。
  • 此外还引入了 HAProxy Kubernetes Ingress 控制器和功能强大的 HAProxy 数据平面 API,它提供了一个用于配置和管理 HAProxy 的现代 REST API。

参考:

https://www.haproxy.com/blog/whats-new-in-haproxy-1-6/
https://www.haproxy.com/blog/whats-new-haproxy-1-8/
https://www.haproxy.com/blog/haproxy-1-9-has-arrived/
https://www.haproxy.com/blog/haproxy-2-0-and-beyond/
https://www.infoq.cn/article/tSi0918Y-9BJspyIWoRA