Skip to content

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
@clue clue requested review from WyriHaximus and jsor September 5, 2020 08:12
@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