分享

Nginx的 UDP 负载均衡

 waitingnothing 2016-10-01

      

       

      

        我们很自豪地宣布,开源NGINX和我们的应用交付平台--NGINIX Plus增加了一个激动人心的新能力 - UDP负载均衡。这一新功能建立在我们现有的TCP和HTTP功能上,使得NGINX成为一个功能强大,易于使用,一致性的前端,为更广泛的互联网应用程序和设备提供服务。我们很高兴能扩展负载平衡功能,让世界上最繁忙的应用程序的一大半的功耗到一组新的物联网(IOT)用户中。


为什么要添加支持UDP负载均衡呢?

        大多数互联网应用依赖于HTTP进行网络通信。 像SOAP和REST高级协议是建立在HTTP的基础上,可以充分利用一些丰富的扩展功能的优势- 安全性上使用TLS,压缩数据上使用Gzip,性能增强上使用HTTP /2。

        然而,为不同的目的,许多应用程序需要使用多个协议,许多核心的互联网协议早于HTTP。由于这个原因,用于负载平衡的一个完整的解决方案和反向代理的需求来支持大范围的协议,这两者都是基于TCP和UDP的。

 

        UDP通常用于轻量级协议,本质上未涉及事务性,如DNS(用于解析域名地址),系统日志(用于轻质记录)和RADIUS(用于认证)。这些协议没有严格的可靠性要求-- 如果一个UDP消息(数据包)被丢弃,客户端可以安全地重新发送超时消息-- 但他们提供的服务是互联网服务的正确运行的关键所在。 UDP也正在成为新的物联网应用首选方案之一,其原因在于较低的带宽要求。

 

        一年前,NGINX为我们的技术社区用户和商业客户介绍TCP负载平衡。通过添加UDP负载均衡来扩展我们的负载均衡功能,对于这点,我们现在乐意这么做。使用NGINX或者NGINX Plus,用户现在可以提供基于可靠的,可扩展的以及高性能的UDP服务。


UDP负载均衡如何运作的呢?

2UDP负载均衡如何运作的呢

        NGINX监听基于管理员定义一个或多个地址(IP地址和端口)的UDP网络通信(协议如DNS,系统日志,和RADIUS)。这些地址被公布以便于让客户知道往哪里发送所需的服务请求。相对于HTTP和TCP负载均衡,UDP负载均衡的配置定义了一个上游分组-- 一组原始的服务器,这些服务器提供基于UDP的服务-- 当负载平衡的流量跨越服务器时,使用具体的算法(例如,循环赛使用,最少连接,或哈希基于源IP地址)。该配置还定义了基于每个UDP端口的虚拟服务器,具有proxy_pass指令命名那些提供了相关联的服务的上游分组:



# Load balanceUDP-based DNS traffic across two servers

stream {

upstreamdns_upstreams {

server192.168.136.130:53;

server192.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查询),它使用配置的负载均衡算法(在这里,默认轮循RoundRobin)选择哪个上游分组的服务器,将对其进行处理。在适当的地方,NGINX等待来自服务器的响应并转发该响应(以及超时周期内收到的任何后续数据包),回复应客户的请求。如果一个服务器对该请求无法响应,NGINX将其标记为“失败”,并暂时停止发送数据报给它。每隔几秒钟,NGINX检查服务器的健康状况,查看是否它通过发送直播在线信号表名自己已经恢复。

 

       NGINX Plus R9将包括应用恢复(也称为“异步”或“合成”)健康检查的UDP服务,类似于那些HTTP和TCP流量。您可以配置NGINX Plus去发送特殊UDP请求到上游服务器,并定义服务器必须返回被认定的健康。其它功能,如支持使用UDP负载均衡包括日志事务到一个web服务器式的访问日志,基于IP地址的访问控制列表,和一系列的限速功能。

        NGINXPlus R9由包括UDP指标的状态模块提供现场活动的监控数据集,你可以快速地配置UDP上游分组,使用基于HTTP的API和DNS,因为你现在可以用HTTP和TCP服务器。

 

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服务器到大数量的UDP服务器上以平衡请求。

 

    UDP负载NGINX和NGINX Plus平衡适用于任何基于UDP的应用程序,这些应用程序发送数据和可选择地期望的一种或多种响应。 NGINX也可以负载均衡专有的基于UDP的协议,如在物联网环境中找到协议。

 

UDP负载均衡开发时间表

 

        UDP的负载均衡的可用性在我们发布的具体时间安排如下:

·        今天 - 我们向开源软件NGINX库中提交了UDP负载均衡第一版本的代码。早期采用者和那些希望测试我们的实现功能可以克隆一份源码,并构建一个包含UDP负载均衡能力的NGINX二进制执行文件。我们欢迎您给nginx的邮件列中给予反馈。

·        2016年3月22日 - NGINX版本1.9.13将被释放,包括UDP负载均衡(如将根据该版本的预编译的二进制)。

·        2016年4月 - NGINX加版本9(R9)将包括UDP负载均衡。 NGINX此外,我们的商业应用交付平台,将扩大在开源与附加功能,为建设并监督基于UDP的服务的可靠性和可扩展性。

       NGINX和NGINX Plus提供一个完整的负载均衡和应用交付平台,用于浩如烟海的Internet协议中。无论您是提供基于HTTP的应用,低层TCP的应用程序,或基于UDP的协议,你可以依靠NGINX和NGINX Plus在一个单一的,轻量级的应用上提供高可用性,可靠性,可扩展性和高性能的服务。我们对新的UDP负载均衡功能和它的潜力带来高性能的负载均衡和完美无瑕的应用交付给一个全新的主机设备而非常兴奋。想熟悉NGINX Plus Release9上UDP负荷均衡吗?今天开始可以免费试用30天或为能够现场演示而联系我们吧。

 



原文: Announcing UDP Load Balancing in NGINX and NGINX Plus



欢迎加入我的微信公众号 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多