DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

The software you build is only as secure as the code that powers it. Learn how malicious code creeps into your software supply chain.

Apache Cassandra combines the benefits of major NoSQL databases to support data management needs not covered by traditional RDBMS vendors.

Generative AI has transformed nearly every industry. How can you leverage GenAI to improve your productivity and efficiency?

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workloads.

Related

  • Automate Application Load Balancers With AWS Load Balancer Controller and Ingress
  • How to Configure an HTTPS Endpoint for Mule Applications With One-Way SSL
  • Auto-Scaling a Spring Boot Native App With Nomad
  • Troubleshooting HTTP 502 Bad Gateway in AWS EBS

Trending

  • Memory Leak Due to Time-Taking finalize() Method
  • Integrating Model Context Protocol (MCP) With Microsoft Copilot Studio AI Agents
  • The Full-Stack Developer's Blind Spot: Why Data Cleansing Shouldn't Be an Afterthought
  • Metrics at a Glance for Production Clusters
  1. DZone
  2. Coding
  3. Languages
  4. Announcing UDP Load Balancing in NGINX and NGINX Plus

Announcing UDP Load Balancing in NGINX and NGINX Plus

NGINX and NGINX Plus have both just introduced support for UDP load balancing. Read on to find out the why and the how about this new feature.

By 
Patrick Nommensen user avatar
Patrick Nommensen
·
Faisal Memon user avatar
Faisal Memon
·
Mar. 21, 16 · Analysis
Likes (3)
Comment
Save
Tweet
Share
7.2K Views

Join the DZone community and get the full member experience.

Join For Free

We are proud to announce the addition of an exciting new capability to open source NGINX and our application delivery platform, NGINX Plus – UDP load balancing. The new capability builds on our existing TCP and HTTP capabilities, making NGINX a powerful, easy-to-use, and consistent frontend for an even wider range of Internet applications and devices. We’re excited to extend the load balancing capabilities that power more than half of the world’s busiest applications to a new set of users building the Internet of Things (IoT).

Why Add Support for UDP Load Balancing?

Most Internet applications depend on HTTP for network communication. Advanced protocols like SOAP and REST are built on the foundation of HTTP, which can take advantage of a number of rich extensions – security using TLS, compression using Gzip, and most recently, performance enhancements using HTTP/2.

Nevertheless, many applications need to use multiple protocols for different purposes, and many of the core Internet protocols predate HTTP. For this reason, a complete solution for load balancing and reverse proxying needs to support a wide range of protocols, both TCP-based and UDP-based.

UDP is commonly used for lightweight protocols that are not transactional in nature, such as DNS (used to resolve domain names to addresses), syslog (used for lightweight logging), and RADIUS (used for authentication). These protocols don’t have strict reliability requirements – if a UDP message (datagram) is dropped, the client can safely resend the message after a timeout – but the services they provide are critical for the correct operation of Internet services. UDP is also emerging as one of the protocols of choice for new IoT applications due to its low bandwidth requirements.

A year ago, NGINX introduced TCP load balancing to our community of users and commercial customers. We’re now pleased to extend our load balancing capabilities with the addition of UDP load balancing. With NGINX and NGINX Plus, users can now deliver UDP-based services with reliability, scalability, and performance.

How Does UDP Load Balancing Work?

NGINX listens for UDP network traffic (protocols such as DNS, syslog, and RADIUS) on one or more ports, as defined by the administrator. These ports are published (for example, as NS records in DNS) so that clients know where to send requests for the desired service.

As for HTTP and TCP load balancing, the configuration for UDP load balancing defines an upstream group – the set of origin servers that provide the UDP-based service – and the algorithm to use when load balancing traffic across the servers (for example, Round Robin, Least Connections, or Hash based on source IP address). The configuration also defines a virtual server for each UDP port, with a proxy_pass directive naming the upstream group that provides the associated service:

# Load-balance UDP DNS traffic across two servers
stream {
  upstream dns_upstreams {
    server 192.168.136.130:53;
    server 192.168.136.131:53;
  }
  server {
    listen 53 udp;
    proxy_timeout 1s;
    proxy_pass dns_upstreams;
    error_log logs/dns.log;
  }
}

When NGINX receives a UDP datagram on a port, it uses the configured load balancing algorithm to select which server in the upstream group will process it. Where appropriate, NGINX waits for a response from the server and forwards that response (and any subsequent packets received within the timeout period) back to the client.

If a server fails to respond to a request, NGINX marks it as ‘failed’ and temporarily stops sending datagrams to it. Every few seconds NGINX retries the server, sending it a client datagram to see if it has recovered.

NGINX Plus R9 will include an application (also called synthetic) health checks for UDP services, similar to those for HTTP and TCP traffic. You’ll be able to configure NGINX Plus to send special UDP requests to the upstream servers, and define the type of response the servers must return to be considered healthy.

Other features supported with UDP load balancing include logging of transactions to a web-server–style access log, IP address-based access control lists and a range of rate-limiting features.

In NGINX Plus R9 the set of live activity monitoring statistics provided by the Status module will include UDP metrics, and you’ll be able to reconfigure UDP upstream groups on the fly, using an HTTP-based API and DNS, as you currently can for HTTP and TCP servers.

Use Cases for UDP Load Balancing

UDP load balancing addresses two key use cases: high availability and horizontal scaling. By design, UDP does not guarantee end-to-end delivery of data and therefore requires the client software to deal with network-level errors and retransmissions. UDP protocols typically define a pair of servers; if a client cannot connect to its preferred server, it must wait a defined timeout period before trying the other server. This can introduce lengthy delays into UDP transactions.

Deploying NGINX or NGINX Plus as a highly available and reliable load balancer in front of your UDP servers can eliminate or reduce delays of this kind. Clients send UDP requests to NGINX or NGINX Plus, which monitors the health and availability of UDP servers and does not send requests to failed or overloaded servers. Clients don’t experience connection or request failures and so don’t suffer the timeouts associated with retrying requests.

Using NGINX or NGINX Plus as a load balancer also makes it possible to scale a UDP application to handle heavy traffic. In a typical UDP deployment, clients are aware of at most two UDP servers, but scaling up to satisfy high demand requires many more UDP servers. In this scenario, clients send their UDP requests to the one or two known NGINX or NGINX Plus instances, which load balance the requests across the larger number of UDP servers actually required to handle the load.

UDP load balancing with NGINX and NGINX Plus is suitable for any UDP-based application that sends data and optionally expects one or more responses. NGINX can also load balance proprietary UDP-based protocols such as those found in IoT environments.

Getting Started

The specific timing of availability of UDP load balancing in our releases is as follows:

  • Today – We have committed the first version of the code for UDP load balancing to the open source NGINX software repository. Early adopters and those looking to test our implementation can clone the source and build an NGINX binary with UDP load balancing capabilities. We welcome your feedback on the Nginx mailing list.
  • March 22, 2016 – NGINX version 1.9.13 will be released and include UDP load balancing (as will the prebuilt binaries based on that version).
  • April 2016 – NGINX Plus Release 9 (R9) will include UDP load balancing. NGINX Plus, our commercial application delivery platform, will extend the UDP load balancing features in open source with additional features for building out and monitoring reliable, scalable UDP-based services.

NGINX and NGINX Plus provide a complete load-balancing and application-delivery platform for a broad array of Internet protocols. Whether you’re delivering HTTP-based applications, lower-level TCP applications, or UDP-based protocols, you can rely on NGINX and NGINX Plus to deliver high availability, reliability, scalability, and performance in a single, lightweight application. We’re very excited about the new UDP load balancing feature and it's potential to bring high-performance load balancing and flawless application delivery to a whole new host of devices.

Want to familiarize yourself with NGINX Plus in advance of the release of UDP load balancing in Release 9? Start your free 30-day trial today or contact us for a live demo.

UDP (Networking) Load balancing (computing) Plus (programming language) application

Published at DZone with permission of Patrick Nommensen, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Automate Application Load Balancers With AWS Load Balancer Controller and Ingress
  • How to Configure an HTTPS Endpoint for Mule Applications With One-Way SSL
  • Auto-Scaling a Spring Boot Native App With Nomad
  • Troubleshooting HTTP 502 Bad Gateway in AWS EBS

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!