【四】Ribbon负载均衡

1、概述
1.1、是什么
  Spring Cloud Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具
  简单的说, Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load BalanCer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

1.2、能干什么
LB(负载均衡)

LB,即负载均衡( Load Balance ),在微服务或分布式集群中经常用的一种应用。
负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA。
常见的负载均衡有软件nginx , LVS ,硬件 F5 等。
相应的在中间件,例如:dubbo。和 SpringCloud 中均给我们提供了负载均衡,SpringCloud的负载均衡算法可以自定义。

 

两种LB

1、集中式LB(偏硬件)

集中式 LB
即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5,也可以是软件,如nginx ) ,由该设施负责把访问请求通过某种策略转发至服务的提供方;

 

2、进程内LB(偏软件)

进程内 LB
将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服各提供方的地址。

1.3、官方资料
https://github.com/Netflix/ribbon/wiki

2、Ribbon配置初步
1、修改microservicecloud-consumer-dept-80工程POM,添加:

2、修改YML,加入Ribbon配置
3、在cn.hfbin.springcloud.cfgbeans.ConfigBean.java中的getRestTemplate()方法上上加入注解@LoadBalanced
4、主启动类DeptConsumer80_App添加 @EnableEurekaClient
5、修改客户端的程序类DeptController_Consumer.java
6、测试

先启动单个eureka三个集群再启动8001,最后启动80

 

 

 

微服务化的核心就是将传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务做一件事,从技术角度看就是一种小而独立的处理过程,类似进程概念,能够自行单独启动或销毁,拥有自己独立的数据库。

 

Ribbon 在工作时分成两步第一步先选择 EurekaServer,它优先选择在同一个区域内负载较少的 server。
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。
其中Ribbon 提供了多种策略:比如轮询、随机和根据响应时间加权。

2、新建两个工程microservicecloud-provider-dept-8002和microservicecloud-provider-dept-8003,参考8001
2.1、将8001 POM 内容拷贝到8002 、 8003

2.2、将8001下的java代码拷贝到8002 、 8003,并修改主启动类的名称

2.3、将8001 YML复制到8002 、 8003资源文件下、修改部分如图:

Ribbon默认自带了七种算法,默认是轮询。

我们也可以自定义自己的算法。

4.1、修改访问服务的算法方式

4.2、自定义IRule算法
1、在主程序添加@RibbonClient(name=“MICROSERVICECLOUD-DEPT”,configuration=MySelfRule.class)

(注意:自定义算法不可以放在与注解 @ComponentScan 的同包或者子包下,否则不起作用 )

2、MySelfRule.java

3、自定义算法必须继承抽象类 AbstractLoadBalancerRule

 

文章知识点与官方知识档案匹配,可进一步学习相关知识云原生入门技能树首页概览8755 人正在系统学习中 相关资源:求解偏微分方程的数学软件Fastflo-教育工具类资源

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月1日
下一篇 2019年1月1日

相关推荐