文章目录

微服务负载均衡器Ribbon1.常见的负载均衡算法2. Spring Cloud Alibaba 引入ribbon3.LoadBalancer和Ribbon的区别?

微服务负载均衡器Ribbon

下图为微服务架构图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxLVH1xO-1660923544987)(…/blog_img/20220728161129.png)]

目前主流有两种负载均衡方案:

集中式负载均衡:在客户端和服务端中间使用独立的代理方式进行负载,有硬件的(比如 F5),也有软件的(比如Nginx)。客户端负载均衡:即在客户端就进行负载均衡算法来选择服务端。Ribbon就属于客户端负载均衡。

SpringCloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具。Ribbon先获取到提供的所有服务实例,之后Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。

什么是客户端负载均衡? 客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问。即在客户端就进行负载均衡算法分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwzYaRgg-1660923544991)(…/blog_img/ribbon20220804161456.png)]

什么是集中式负载均衡? 例如通过Nginx进行负载均衡,先发送请求,然后通过负载均衡算法,在多个服务器之间选择一个进行访问;即在服务器端再进行负载均衡算法分配。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mWzVaNom-1660923544993)(…/blog_img/ribbon20220804162054.png)]

1.常见的负载均衡算法

随机:通过随机选择服务进行执行,一般这种方式使用较少;轮询:负载均衡默认实现方式,请求进来之后排队处理;加权轮询:通过对服务器性能的分型,给高配置,低负载的服务器分配更高的权重,均衡各个服务器的压力;最小链接数:根据服务器的情况,比如请求积压数等参数,将请求分配到当前压力最小的服务器上。

2. Spring Cloud Alibaba 引入ribbon

ribbon的负载均衡方案主要是客户端负载均衡,即当客户端调用多个同名服务端集群时,可以通过ribbon来负载均衡。

① 引入ribbon:Nacos2.2.8版本内置了ribbon。当引入nacos依赖时,可不引入ribbon依赖。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDqt4Cqx-1660923544994)(…/blog_img/ribbon20220804164526.png)]

②:修改服务调用者的配置文件,注意这个配置idea没有提示。

# 针对某个这个服务提供者,ribbon使用的负载策略

# user-service是注册中心中某个服务提供者的服务名

# com.alibaba.cloud.nacos.ribbon.NacosRule 这个是基于权重&随机的负载策略算法

user-service.ribbon.NFLoadBalancerRuleClassName=com.alibaba.cloud.nacos.ribbon.NacosRule

③:运行服务,之后多次调用服务提供者user-service的某个接口,观察端口的变化。可以看出负载均衡生效。

//order和order2两个服务都在注册中心的注册名为user-service

//这两个服务的都有下面的接口。区别是各自占用的端口不同。

@RestController

@RequestMapping("/order")

public class orderController {

@Value("${server.port}")

private String port;

@RequestMapping("/get")

public String getOrder(){

return "order "+port;

}

}

3.LoadBalancer和Ribbon的区别?

Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客户端负载均衡器,用来替代已经闭源的Ribbon。

目前由于LoadBalancer只支持轮询的负载均衡策略,没有Ribbon强大,所以暂时不建议用LoadBalancer去替换Ribbon。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: