我们很自豪地宣布 NGINX 开源和我们的应用交付平台NGINX Plus增加了一项令人兴奋的新功能 - UDP 负载均衡。 新功能以我们现有的 TCP 和 HTTP 功能为基础,使 NGINX 成为更广泛的互联网应用和设备的强大、易于使用且一致的前端。 我们很高兴能够将支持全球一半以上最繁忙应用的负载均衡功能扩展到构建物联网 (IoT) 的新用户。
大多数互联网应用依赖HTTP进行网络通信。 SOAP 和 REST 等高级协议建立在 HTTP 的基础上,可以利用许多丰富的扩展——使用 TLS 的安全性、使用 Gzip 的压缩以及使用HTTP/2 的性能增强。
然而,许多应用需要使用多种协议来实现不同的目的,并且许多核心互联网协议的出现都早于 HTTP。 因此,完整的负载均衡和反向代理解决方案需要支持多种协议,包括基于 TCP 和基于 UDP 的协议。
UDP 通常用于本质上非事务性的轻量级协议,例如 DNS(用于将域名解析为地址)、syslog(用于轻量级日志记录)和 RADIUS(用于身份验证)。 这些协议没有严格的可靠性要求——如果 UDP 消息(数据报)被丢弃,客户端可以在超时后安全地重新发送该消息——但它们提供的服务对于互联网服务的正常运行至关重要。 由于对带宽要求低,UDP 也正在成为新物联网应用的首选协议之一。
一年前, NGINX 向我们的用户社区和商业客户推出了 TCP 负载均衡。 我们现在很高兴通过添加 UDP 负载均衡来扩展我们的负载均衡功能。 借助 NGINX 和 NGINX Plus,用户现在可以提供具有可靠性、可扩展性和性能的基于 UDP 的服务。
NGINX 在管理员定义的一个或多个地址(IP 地址和端口)上监听 UDP 网络流量(DNS、syslog 和 RADIUS 等协议)。 发布这些地址是为了让客户端知道将所需服务的请求发送到哪里。
与 HTTP 和 TCP 负载均衡一样,UDP 负载均衡的配置定义了一个上游组(提供基于 UDP 服务的原始服务器集合),以及在服务器之间平衡流量负载时使用的算法(例如,循环、最少连接或基于源 IP 地址的哈希)。 该配置还为每个 UDP 端口定义了一个虚拟服务器,并使用proxy_pass
指令命名提供相关服务的上游组:
# 在两台服务器上对基于 UDP 的 DNS 流量进行负载平衡stream {
upstreams dns_upstreams {
server 192.168.136.130:53;
server 192.168.136.131:53;
}
server {
listen 53 udp;
proxy_pass dns_upstreams;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}
当 NGINX 在某个端口上接收到 UDP 数据报(此处为端口 53 上的 DNS 查询)时,它会使用配置的负载均衡算法(此处为默认的 Round Robin)来选择上游组中的哪个服务器来处理它。 在适当的情况下,NGINX 会等待服务器的响应,并将该响应(以及超时期限内收到的任何后续数据包)转发回客户端。
如果服务器无法响应请求,NGINX 会将其标记为“失败”并暂时停止向其发送数据报。 每隔几秒钟,NGINX 就会通过发送少量实时流量来检查服务器的运行状况,查看它是否已恢复。
NGINX Plus R9将包括针对 UDP 服务的应用(也称为“异步”或“合成”)健康检查,类似于针对HTTP 和 TCP 流量的检查。 您将能够配置 NGINX Plus 以向上游服务器发送特殊 UDP 请求,并定义服务器必须返回的响应类型才能被视为健康。
UDP 负载均衡支持的其他功能包括将交易记录到Web 服务器样式的访问日志、基于 IP 地址的访问控制列表以及一系列速率限制功能。
在NGINX Plus R9中,状态模块提供的实时活动监控统计数据将包括 UDP 指标,并且您将能够使用基于 HTTP 的 API 和 DNS动态重新配置 UDP 上游组,就像您目前对 HTTP 和 TCP 服务器所做的那样。
UDP 负载均衡解决了两个关键用例:高可用性和水平扩展。 根据设计,UDP 不保证端到端的数据传输,因此需要客户端软件处理网络级错误和重传。 基于 UDP 的协议通常会定义一对服务器;如果客户端无法连接到其首选服务器,则必须等待定义的超时期限,才能尝试连接另一台服务器。 这会导致 UDP 交易出现长时间的延迟。
在 UDP 服务器前部署 NGINX 或 NGINX Plus 作为高可用性和可靠性的负载均衡器可以消除或减少此类延迟。 客户端将 UDP 请求发送到 NGINX 或 NGINX Plus 负载均衡器,该负载均衡器监控 UDP 服务器的运行状况和可用性,并且不会向故障或过载的服务器发送请求。 客户端不会遇到连接或请求失败,因此不会遭受与重试请求相关的超时。
使用 NGINX 或 NGINX Plus 作为负载均衡器还可以扩展 UDP应用以处理大量流量。 在典型的 UDP 部署中,客户端最多可以知道两个 UDP 服务器,但为了满足高需求而扩展则需要更多的 UDP 服务器。 在这种情况下,客户端将其 UDP 请求发送到一个或两个已知的 NGINX 或 NGINX Plus 实例,这些实例在处理负载实际需要的大量 UDP 服务器之间对请求进行负载平衡。
NGINX 和 NGINX Plus 的 UDP 负载均衡适用于任何基于 UDP 的应用,该应用程序发送数据并可选择等待一个或多个响应。 NGINX 还可以对基于 UDP 的专有协议(例如物联网环境中的协议)进行负载均衡。
我们的版本中 UDP 负载均衡的可用具体时间如下:
NGINX 和NGINX Plus为广泛的互联网协议提供了完整的负载均衡和应用交付平台。 无论您交付的是基于 HTTP 的应用、低级 TCP应用还是基于 UDP 的协议,您都可以依靠 NGINX 和 NGINX Plus 在单个轻量级应用中提供高可用性、可靠性、可扩展性和性能。 我们对新的 UDP 负载均衡功能感到非常兴奋,它有可能为全新的设备带来高性能负载均衡和完美的应用交付。
想要在版本 9 中发布 UDP 负载均衡之前熟悉 NGINX Plus 吗? 立即开始您的30 天免费试用或联系我们讨论您的用例。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”