我们很高兴地宣布,NGINX Open Source和我们的应用交付平台NGINX Plus新增了一项重要功能:UDP负载均衡。该功能以现有的TCP和HTTP功能为基础,使NGINX能够为更广泛的互联网应用和设备提供功能强大、易于使用且一致的前端。我们很高兴能将已为全球超过半数高流量应用提供支持的负载均衡功能扩展至构建物联网(IoT)的新用户群体。
为何增加对UDP负载均衡的支持?
大多数互联网应用依赖HTTP进行网络通信。SOAP和REST等高级协议以HTTP为基础,可利用多种丰富的扩展功能,包括使用TLS增强安全性、使用Gzip进行压缩,以及使用HTTP/2提升性能。
不过,许多应用需要针对不同用途使用多种协议,而且很多核心互联网协议早于HTTP出现。因此,完整的负载均衡和反向代理解决方案需要支持广泛的协议,包括基于TCP和基于UDP的协议。
UDP通常用于本质上不涉及事务的轻量级协议,例如DNS(用于将域名解析为地址)、syslog(用于轻量级日志记录)和RADIUS(用于身份验证)。这些协议没有严格的可靠性要求。如果UDP消息(数据报)丢失,客户端可以在超时后安全地重新发送该消息;但这些协议提供的服务对于互联网服务的正常运行至关重要。由于带宽要求较低,UDP也正逐渐成为新型物联网应用的常用协议之一。
一年前,NGINX推出了TCP负载均衡,面向我们的用户社区和商业客户。现在,我们很高兴通过新增UDP负载均衡来扩展负载均衡能力。借助NGINX和NGINX Plus,用户现在可以可靠地交付基于UDP的服务,并实现可扩展性和高性能。
UDP负载均衡如何工作?
NGINX按照管理员的定义,在一个或多个地址(IP地址和端口)上侦听UDP网络流量(例如DNS、syslog和RADIUS协议)。这些地址会对外公布,以便客户端知道应将所需服务的请求发送到何处。
与HTTP和TCP负载均衡类似,UDP负载均衡配置会定义一个上游组,即提供基于UDP的服务的一组源服务器;还会定义在这些服务器之间对流量进行负载均衡时使用的算法(例如轮询、最少连接或基于源IP地址的哈希)。该配置还会为每个UDP端口定义一个虚拟服务器,并通过proxy_pass指令指定提供相关服务的上游组:
# Load balance UDP‑based DNS traffic across two serversstream {
upstream 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查询)时,会使用配置的负载均衡算法(此处为默认的轮询算法),选择由上游组中的哪台服务器进行处理。在适用情况下,NGINX会等待服务器响应,并将该响应(以及在超时时间内收到的任何后续数据包)转发回客户端。
如果服务器未能响应请求,NGINX会将其标记为“失败”,并暂时停止向其发送数据报。NGINX每隔几秒会向该服务器发送少量实时流量,以检查其运行状况并确认是否已恢复。
NGINX Plus R9将为UDP服务提供应用层健康检查(也称为“异步”或“合成”健康检查),类似于针对HTTP和TCP流量的健康检查。您可以配置NGINX Plus向上游服务器发送特定的UDP请求,并定义服务器必须返回哪种类型的响应才会被视为健康。
UDP负载均衡还支持其他功能,包括将事务记录到Web服务器样式的访问日志、基于IP地址的访问控制列表,以及多种速率限制功能。
在NGINX Plus R9中,由Status模块提供的实时活动监控统计信息将包含UDP指标,并且可以动态重新配置UDP上游组,方式与目前针对HTTP和TCP服务器的操作相同,即使用基于HTTP的API和DNS。
UDP负载均衡用例
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协议进行负载均衡,例如IoT环境中使用的此类协议。
入门
UDP负载均衡在各版本中的具体可用时间如下:
- 目前,我们已将UDP负载均衡代码的首个版本提交到开源NGINX软件存储库。早期采用者以及希望测试我们实现方案的用户可以克隆源代码,并构建具备UDP负载均衡功能的NGINX二进制文件。欢迎通过nginx邮件列表提供反馈。
- 2016年3月28日当周,NGINX 1.9.13版将发布并包含UDP负载均衡功能(基于该版本的预构建二进制文件也将包含此功能)。
- 2016年4月,NGINX Plus Release 9 (R9)将支持UDP负载均衡。作为我们的商用应用交付平台,NGINX Plus将在开源版本的UDP负载均衡功能基础上,增加用于构建和监控可靠、可扩展的UDP服务的功能。
NGINX和NGINX Plus为多种互联网协议提供全面的负载均衡和应用交付平台。无论是交付基于HTTP的应用、较低层级的TCP应用,还是基于UDP的协议,都可以依靠NGINX和NGINX Plus,通过单一的轻量级应用实现高可用性、可靠性、可扩展性和高性能。我们对新的UDP负载均衡功能及其潜力深感振奋,它有望为更多类型的设备带来高性能负载均衡和顺畅的应用交付。
想在Release 9发布UDP负载均衡功能前提前熟悉NGINX Plus?立即开始30天免费试用,或联系我们,讨论您的用例。
关于作者
相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

