This updates the behavior of the DNS resolver to have greater compatibility in the event that DNS results include both A (IPv4) and AAAA (IPv6) records. Due to how "httplb" treats each resolved address as a separate, distinct target, it cannot implement the "RFC 6555 Happy Eyeballs" algorithm for detecting dual-stack support. So, in practice, DNS results of this sort would cause problems when in a network environment without full support for IPv6.
This new version includes slight changes to the API when creating a new DNS resolver in order to make configuration more intuitive and also to provide more options. It also changes the default behavior to only use IPv6 addresses if DNS results contain only AAAA records (i.e. no IPv4 addresses).
What's Changed
Other changes
Implement address family affinity and prefer IPv4 by default by @jchadwick-buf in #66
This release includes some additions meant to help when using this client to communicate with servers that are behind a layer-3 TCP load balancer (which includes Kubernetes services when both client and server are in the same Kubernetes cluster).
In these cases, DNS may resolve only to a single IP address for the load balancer, and since it only balances connection establishment (since it's layer-3, not layer-7/HTTP) this could result in poor load distribution, such as all traffic being sent to a single backend.
When it is expected that the resolver (such as DNS) could return few addresses (or even only one), this will cause the client to create additional connections anyway. If the server is a layer-3 TCP load balancer, each connection created is likely to be connected to a different backend, to aid load distribution.
Add httplb.WithRoundTripperMaxLifetime, which causes connections to be periodically recycled by @jhump in #60
As connections organically come and go, like from backends being turned down and up (like during software deploys or when the backend servers are scaled up and down as traffic volume changes), it is possible for multiple connections through a layer-3 TCP load balancer to end up connected to a small number of actual backends (even potentially only one). To ensure connection diversity and mitigate this situation, this option can be used to cause connections to be continually re-established.
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps github.com/bufbuild/httplb from 0.1.0 to 0.3.0.
Release notes
Sourced from github.com/bufbuild/httplb's releases.
Commits
b9ed61b
Implement address family affinity and prefer IPv4 by default (#66)2635a48
Bump golang.org/x/net from 0.17.0 to 0.23.0 (#62)605a5a8
Eliminate test flakes in recently-added heap tests (#65)e1514ae
Minor optimization in recently-changed heap update operation (#63)0748894
Clarify WithProxy behavior with nil (#64)47d0968
Fix heap update operation for least-loaded picker (#61)90dd468
Bump Go version to v1.22 (#57)7463e81
Add support for recycling "leaf" connections (#60)d54bc5d
Bump actions/setup-go from 4 to 5 (#55)1bbe543
Add resolver.MinConnections (#58)Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show