弹性负载均衡(弹性服务)
弹性服务是一种去中心化的智能负载均衡组件,也是 Dubbo-go 3.0 版本中的一项重大新特性。弹性服务目前仍处于早期实验阶段,该特性将在后续版本中持续优化,我们将与 Dubbo 社区一起探索一套适合微服务场景的最佳实践。
传统的负载均衡算法是通过随机节点、RoundRobin 等算法实现的,它们的局限性在于不了解当前服务提供者的负载情况,算法总是尽可能公平概率地调用不同的服务提供者。而在实际情况中,公平并不意味着高性能,集群服务性能还与服务负载、任务复杂度等多方面因素相关。为了解决传统负载均衡算法的 shortcomings,Dubbo-go 在 3.0 版本中引入了弹性服务,实现了动态的容量评估和分配功能。
容量评估是弹性服务的核心,能够动态地评估服务器的容量水位。在容量评估的过程中,两个核心指标是 TPS 和响应时间。需要平衡系统利用率和系统性能之间的关系,使整体处于最佳状态。
- TPS 从服务提供者的角度反映了系统利用率,在系统压力未饱和前,请求量越大,系统利用率越高。但如果请求量进一步加大,直至系统过饱和,就会出现过载问题,导致整体效率呈下降趋势。
- 响应时间从服务调用者的角度反映了系统性能,在系统压力未饱和前,响应时间随请求量的增加线性增长,但当请求量进一步加大,直至系统过饱和,响应时间与请求量将呈指数级增长。
弹性服务在调用过程中进行采集
在 Dubbo-go 3.0 版本中,支持了服务弹性负载均衡。在微服务场景下,客户端会在调用过程中采集服务下游服务器实例的硬件资源消耗情况,并通过容量评估和筛选策略,选择最合适的下游实例进行调用,从而提升整体系统性能。
服务弹性将在后续迭代中持续优化,寻求与 Dubbo 社区一起探索最佳实践。