Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use round robin for happy eyeballs DNS responses (load balancing) #247

Merged
merged 1 commit into from
Sep 6, 2020

Conversation

clue
Copy link
Member

@clue clue commented Sep 4, 2020

The happy eyeballs algorithms tries to connect over both IPv6 and IPv4
at the same time. Accordingly, the hostname has to be resolved for both
address families which both may potentially contain any number of
records (load balancing).

This changeset randomizes the order of returned IP addresses per address
family. This means that if multiple records are returned, it will try to
connect to a random one from this list instead of always trying the
first. This allows the load to be distributed more evenly across all
returned IP addresses. This can be used as a very basic DNS load
balancing mechanism.

This is similar to what the old DnsConnector did (it always tried one random IP from the list of IPs). See also https://daniel.haxx.se/blog/2012/01/03/getaddrinfo-with-round-robin-dns-and-happy-eyeballs/ for some background information.

The happy eyeballs algorithms tries to connect over both IPv6 and IPv4
at the same time. Accordingly, the hostname has to be resolved for both
address families which both may potentially contain any number of
records (load balancing).

This changeset randomizes the order of returned IP addresses per address
family. This means that if multiple records are returned, it will try to
connect to a random one from this list instead of always trying the
first. This allows the load to be distributed more evenly across all
returned IP addresses. This can be used as a very basic DNS load
balancing mechanism.
@clue clue added this to the v1.7.0 milestone Sep 4, 2020
@jsor jsor merged commit 28fac70 into reactphp:master Sep 6, 2020
@clue clue deleted the round-robin-dns branch September 6, 2020 19:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants