Dubbo SDK 默认采用随机的负载均衡策略,并通过失败重试的策略来保证调用的成功率。通过实践发现,生产环境中有时会出现少数 Provider 节点虽然已经处于不健康的状态(比如磁盘写满等),但是还是能与注册中心进行正常通信,这样 Consumer 端还是能发现这些实例,导致部分请求还是会被分发过去。这些请求由于实例本身的问题,可能会出现响应时间变慢或者错误率上升,从而引起整个服务质量的下降 (响应时间抖动或整体调用成功率下降)。 为了解决这样一个问题,我们的思路是引入客户端健康检查机制,即 Consumer 端会对每个 Provider 实 例的请求成功率进行统计,判断其是否健康;对于不健康的 Provider 实例,Consumer 端会对其进行隔离一段时间,后续的请求不再通过负载均衡策略发送到这些实例上。另外 Consumer 端会维护每个Provider 实例被隔离的次数,如果某个实例被多次隔离,每次隔离的时间也会相应变长。 我们的扩展机制中提供了默认的健康检查策略,包括检查最近一次调用是否出现服务端异常,或者一段时 间内是否有大量发出的请求未被返回。用户也可以通过扩展我们提供的接口来实现自己的检查策略。 为了避免因为网络抖动等造成的意外影响,我们还设计了一套兜底机制。即当 Provider 实例中不健康的 比例超过一定阈值时,Consumer 会忽略实例隔离的策略,避免集中的流量将剩余的实例打垮。
答复内容摘自《云原生技术与架构实践年货小红书》,这本电子书收录开发者藏经阁 下载连接:https://developer.aliyun.com/topic/download?id=1127
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。