一、 Ribbon客户端负载均衡

1. 负载均衡介绍

  ① LB,即负载均衡(Load Balance),负载均衡是微服务架构中经常使用的一种技术。负载均衡是我们处理高并发、缓解网络压力和进行服务端扩容的重要手段之一,简单的说就是将用户的请求平摊的分配到多个服务上,从而实现系统的高可用性集群。

② 服务端的负载均衡

springcloud日常学习_负载均衡

     实现负债均衡的硬件:LVS(Linux Virtual Server)、F5、A10

  ③ 客户端的负载均衡

在客户端负载均衡中,每个客户端服务都有一份自己要访问的服务端清单,这些清单统统都是从Eureka服务注册中心获取的。(排队做核算检测)

而在服务端负载均衡中,只要负载均衡器维护一份服务端列表(去医院就诊-导诊台)

2. Ribbon负载均衡实现流程

springcloud日常学习_负载均衡_02

实现过程:在客户端中注册/配置Ribbon负载均衡器,Riboon就可以从EurekaServer中获取微服务列表,根据Ribbon的负载均衡算法(默认是轮循算法)去调用微服务。

3. Ribbon客户端负载均衡实现步骤

 需求:在consumer消费者微服务中实现Ribbon的负载均衡

① 修改pom.xml文件,引入Eureka和Ribbon的依赖

springcloud日常学习_springcloud_03

springcloud日常学习_服务端_04

② 配置yml文件

   需要从Eureka中获取服务列表

springcloud日常学习_springcloud_05

③ 优化RestTemplate的访问

    A、让RestTemplate具有负载均衡的功能/开启负载均衡

B、把原有的ip+port的访问方式修改为服务名称(提供者yml中的spring.application.name值)的访问方式

可以通过注解@LoadBalanced来实现以上的两个功能。

在获取RestTemplate对象的配置类中添加@LoadBalanced注解即可:

springcloud日常学习_springcloud_06

④ 消费者微服务中修改访问url路径为提供者的应用名称

springcloud日常学习_负载均衡_07

     提供者yml中配置的应用名称:

springcloud日常学习_springcloud_08

⑤ 修改消费者启动类,加上Eureka客户端标识

springcloud日常学习_服务端_09

⑥ 启动服务

   启动顺序:

springcloud日常学习_负载均衡_10

⑦ 测试

springcloud日常学习_服务端_11

注意:Ribbon的客户端实现负载均衡需要服务端提供者实现集群

4. 微服务提供者的集群测试客户端的负载均衡

实现微服务提供者的集群,Ribbon客户端的负载均衡就会看到效果

springcloud日常学习_客户端_12

需求:创建服务提供者的集群,之前有一个8001的提供者,还需要创建一个8002的提供者实现集群

① 创建一个8002的服务提供者,和8001一致

② 8002的业务和8001完全一致,除了yml的配置文件需要修改:

   A、修改端口号为8002

   B、为了区分负载均衡访问的是集群中的哪个服务,所以通过数据库来进行区分

      修改8002的数据库为springcloude-db2

   C、服务名称需要同一个集群中各服务的名称要一致,所以8001和8002的服务名称都为ms-product

③ 启动服务测试

   A、先启动6001、6002注册中心集群服务

   B、再启动8001、8002服务提供者集群,启动后会注册到6001、6002注册中心中

springcloud日常学习_服务端_13

   C、测试8001、8002是否能正常访问到数据

springcloud日常学习_springcloud_14

   D、再启动80消费者负载均衡服务

springcloud日常学习_客户端_15

springcloud日常学习_负载均衡_16