Spring Cloud之(九)基于Ribbon实现负载均衡

九、基于Ribbon实现负载均衡

ribbon入门篇我们已经简单的实现了负载均衡策略,那么负载均衡策略在ribbon上是如何实现的呢?下面我们一起来探究一下吧!

9.1 负载均衡概述

什么是负载均衡?

在网站搭建时,如果单节点的web服务性能和可靠性都无法达到要求,或者是在使用外网服务时,经常担心被人攻击,一不小心就会有打开外网端口的情况,通常这个时候加入负载均衡就能有效解决服务问题。

负载均衡是一种基础的网络服务,其原理是通过运行在前面的负载均衡服务,按照指定的负载均衡算法,将流量分配到后端服务集群上,从而为系统提供并行扩展的能力。

负载均衡的应用场景包括流量包、转发规则以及后端服务,由于该服务有内外网个例、健康检查等功能,能够有效提供系统的安全性和可用性。

在这里插入图片描述

小贴士:
Ribbon是客户端负载均衡工具!所以应该配置在客户端!!

9.2 客户端负载均衡与服务端负载均衡

  • 服务端负载均衡

    先发送请求到负载均衡服务器或者软件,然后通过负载均衡算法,在多个服务器之间选择一个进行访问。即在服务器端就进行负载均衡算法分配。

  • 客户端负载均衡

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

9.3 负载均衡策略

Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接口为:com.netflix.loadbalancer.IRule,实现方式有以下几种:

  1. com.netflix.loadbalancer.RoundRobinRule :以轮询的方式进行负载均衡。
  2. com.netflix.loadbalancer.RandomRule :随机策略
  3. com.netflix.loadbalancer.RetryRule :重试策略。
  4. com.netflix.loadbalancer.WeightedResponseTimeRule :权重策略。会计算每个服务的权重,越高的被调用的可能性越大。
  5. com.netflix.loadbalancer.BestAvailableRule :最佳策略。遍历所有的服务实例,过滤掉故障实例,并返回请求数最小的实例返回。
  6. com.netflix.loadbalancer.AvailabilityFilteringRule :可用过滤策略。过滤掉故障和请求数超过阈值的服务实例,再从剩下的实力中轮询调用。

在消费者方application.yml配置文件中修改负载均衡策略:

##需要调用的微服务名称
ebuy-product:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡策略

策略选择:
1、如果每个机器配置一样,则建议不修改策略(推荐);
2、如果部分机器配置强,则可以改为WeightedResponseTimeRule。

9.4 Ribbon中的关键组件

在这里插入图片描述

  1. ServerList:可以响应客户端的特定服务的服务器列表。
  2. ServerListFilter:可以动态获得的具有所需特征的候选服务器列表的过滤器。
  3. ServerListUpdater:用于执行动态服务器列表更新。
  4. Rule:负载均衡策略,用于确定从服务器列表返回哪个服务器。
  5. Ping:客户端用于快速检查服务器当时是否处于活动状态。
  6. LoadBalancer:负载均衡器,负责负载均衡调度的管理。

9.5 @LoadBalanced注解

使用Ribbon完成客户端复杂均衡往往是从一个注解开始的:

/**
 * 配置RestTemplate交给spring管理
 * 基于Ribbon的服务调用与负载均衡
 * @return
 */
@Bean
@LoadBalanced
public RestTemplate restTemplate()
{
	return new RestTemplate();
}

通过注解可以知道@LoadBalanced注解是用来给RestTemplate做标记,方便我们对RestTemplate添加一个LoadBalanceClient,以实现客户端负载均衡。

当然,除了已有的负载均衡策略之外,还可以自定义负载均衡算法,但需要注意的是:
自定义的Ribbon算法类不能放在主启动类所在的包及子包下,否则会被全局应用到Ribbon服务中。 应该把自定义算法类放在另外新建的包下,且这个类应该是为【配置类】即加上注解@Configuration。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值