领事指南,为什么领事服务比预期花费更多时间?
Guide for consul, why consul service takes more time then expected?
我正在整合发现系统。我在 python 服务中使用 consulate,在 java 服务中使用 consul-api。
在我的架构中,我每次都在请求之前请求服务。 但是实际调用会增加 3-4 毫秒。代替 catalog/agent api 我正在使用健康 api 来获得健康的服务实例并进一步使用。
我只是想以正确的方式这样做,并想减少这个获取时间(3-4 毫秒)。请注意,我没有使用 docker。这是获取服务的代码。
service = self.consul_client.health.service(service_id=service_id, passing=True)
if not service:
return None
service = service[0]['Service']
service_url = str(service['Address'])+":"+str(service['Port'])
if "http" not in service_url:
service_url = "http://" + service_url
return service_url
额外的延迟是由于 API 调用 Consul 造成的。我想不出几种方法来改善这一点 -
缓存健康的 url 并定期更新它们,如果请求失败(需要重试机制)
使用已经实现它的 consul 支持的客户端负载平衡库
使用 consul 感知代理,例如 https://linkerd.io/
使用 Consul 的 DNS interface and DNS caching(要求您的服务将侦听已知端口或使用 SRV DNS 查询)
我正在整合发现系统。我在 python 服务中使用 consulate,在 java 服务中使用 consul-api。 在我的架构中,我每次都在请求之前请求服务。 但是实际调用会增加 3-4 毫秒。代替 catalog/agent api 我正在使用健康 api 来获得健康的服务实例并进一步使用。 我只是想以正确的方式这样做,并想减少这个获取时间(3-4 毫秒)。请注意,我没有使用 docker。这是获取服务的代码。
service = self.consul_client.health.service(service_id=service_id, passing=True)
if not service:
return None
service = service[0]['Service']
service_url = str(service['Address'])+":"+str(service['Port'])
if "http" not in service_url:
service_url = "http://" + service_url
return service_url
额外的延迟是由于 API 调用 Consul 造成的。我想不出几种方法来改善这一点 -
缓存健康的 url 并定期更新它们,如果请求失败(需要重试机制)
使用已经实现它的 consul 支持的客户端负载平衡库
使用 consul 感知代理,例如 https://linkerd.io/
使用 Consul 的 DNS interface and DNS caching(要求您的服务将侦听已知端口或使用 SRV DNS 查询)