# 《高性能Polaris网关》负载均衡-第03节:基于SPI扩展加权随机算法负载均衡策略

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本节难度:★★★☆☆
  • 本节重点:基于自定义SPI扩展实现加权随机算法负载均衡策略,深入理解高性能Polaris网关负载均衡策略的核心设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

截止到目前,我们已经完成了网关最基础和最核心的功能,也对通过网关访问后端服务进行了实现。在注册中心篇章,已经对注册中心的通用SPI接口进行了设计与定义,也基于SPI扩展实现了Nacos注册中心和Zookeeper注册中心,同时,也给小伙伴们留了基于SPI扩展实现Etcd注册中心和Consul注册中心的作业。设计并实现完各种注册中心后,也对网关的启动容器整合注册中心实现服务注册与发现进行了设计和实现。

同时,在负载均衡篇章,已经完成了负载均衡通用SPI接口与顶级抽象类的设计与实现,并基于自定义SPI扩展实现了随机算法负载均衡策略。

# 一、背景

截止到目前,我们已经实现了网关的最基础与最核心的功能,主要包括:需求设计、总体架构设计、环境搭建、通用模型设计与实现、基于自定义SPI设计与实现通用过滤器、高性能BatchEvent模式与MPMC模式缓冲队列通用处理器的设计与实现、HTTP核心处理器的设计与实现和网关核心启动容器的设计与实现。

为了能够让网关自动发现后端服务,在注册中心篇章,我们已经对注册中心的通用SPI接口进行了设计与定义,也基于SPI扩展实现了Nacos注册中心和Zookeeper注册中心,同时,也给小伙伴们留了基于SPI扩展实现Etcd注册中心和Consul注册中心的作业。设计并实现完各种注册中心后,也对网关的启动容器整合注册中心实现服务注册与发现进行了设计和实现。

设计并实现完各种注册中心后,接下来,我们就将重心放到网关的负载均衡上。在负载均衡篇章,我们会基于SPI动态扩展机制实现各种负载均衡策略。目前,已经完成了负载均衡通用SPI接口与顶级抽象类的设计与实现,并基于自定义SPI扩展实现了随机算法负载均衡策略。接下来,我们就基于自定义SPI扩展实现加权随机算法负载均衡策略。

# 二、本节重点

基于自定义SPI扩展实现加权随机算法负载均衡策略,深入理解高性能Polaris网关负载均衡策略的核心设计与实现。重点掌握整体调用链路的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

基于自定义SPI扩展实现加权随机算法负载均衡策略的类图如图3-1所示。


可以看到,基于自定义SPI扩展实现加权随机算法负载均衡策略主要由RandomServiceLoadBalancer类实现。

注意:本节只给大家展示网关负载均衡策略设计与实现的核心逻辑,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

# 四、编码实现

本节,就对基于自定义SPI扩展实现加权随机算法负载均衡策略进行编码实现,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

(1)实现RandomWeightServiceLoadBalancer类

RandomWeightServiceLoadBalancer类是基于自定义SPI扩展实现加权随机算法负载均衡策略的核心实现类,主要从服务实例列表中通过加权策略随机选择一个服务实例返回。

源码详见:polaris-loadbalancer-random-weight工程下的io.binghe.polaris.loadbalancer.random.weight.RandomWeightServiceLoadBalancer。

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码