使用 Apache HTTP 客户端的客户端负载平衡
Client-side load-balancing with Apache HTTP Client
我们正在构建具有客户端负载平衡和故障转移功能的可扩展点对点微服务架构。基本思想是使用 DNS SRV 记录管理服务发现,就像 HashiCorps 的 Consul 所做的那样。
作为 HTTP 客户端,我们使用 Apache http-components。
我设想的算法看起来像这样:
- 在启动时,客户端会查找它想要使用的服务的 SRV 记录。
- 客户端将
HttpClient
的实例配置为通过可用服务循环。
- 客户端定期向 DNS 服务器查询更新(由 DNS 记录的 TTL 控制)并在添加或删除主机时更新
HttpClient
。
- 调用客户端的代码只使用绝对路径,没有方案、主机或端口。
约束条件:
- 尊重 SRV 记录的优先级和权重字段。
- 使用回退策略和临时主机禁用实现故障转移。
有没有一种我还没有找到的以这种方式配置 Apache 的 http 组件的好方法?有没有更好的库可以满足这种需求?
非常感谢您的意见和想法。
我发现 Ribbon by Netflix 完全符合我的需要。
我们正在构建具有客户端负载平衡和故障转移功能的可扩展点对点微服务架构。基本思想是使用 DNS SRV 记录管理服务发现,就像 HashiCorps 的 Consul 所做的那样。
作为 HTTP 客户端,我们使用 Apache http-components。
我设想的算法看起来像这样:
- 在启动时,客户端会查找它想要使用的服务的 SRV 记录。
- 客户端将
HttpClient
的实例配置为通过可用服务循环。 - 客户端定期向 DNS 服务器查询更新(由 DNS 记录的 TTL 控制)并在添加或删除主机时更新
HttpClient
。 - 调用客户端的代码只使用绝对路径,没有方案、主机或端口。
约束条件:
- 尊重 SRV 记录的优先级和权重字段。
- 使用回退策略和临时主机禁用实现故障转移。
有没有一种我还没有找到的以这种方式配置 Apache 的 http 组件的好方法?有没有更好的库可以满足这种需求?
非常感谢您的意见和想法。
我发现 Ribbon by Netflix 完全符合我的需要。