一、Ribbon的简单介绍

(1)Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。
(2)Ribbon未来可能被Spring Cloud LoadBalacer替代

二、Load Balance负载均衡是什么?

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的高可用 (HA)。
常见的负载均衡软件有Nginx,LVS,硬件有F5等。

三、Ribbon本地负载均衡客户端与Nginx服务端负载均衡区别是什么?

(1)Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
(2)Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

四、集中式LB和进程内LB分别是什么?

(1)集中式LB即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx),由该设施负责把访问请求通过某种策略转发至服务的提供方;
(2)进程内LB将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
一句话,负载均衡 + RestTemplate调用

五、Ribbon的快速使用

Ribbon其实就是一个软负载均衡的客户端组件(消费者),它可以和其他所需请求的客户端结合使用,和Eureka结合只是其中的一个实例。
(1)在消费者引入下面依赖,可以忽略这一步

<!--可以忽略,因为spring-cloud-starter-netflix-eureka-client自带了spring-cloud-starter-ribbon引用-->
<dependency><groupld>org.springframework.cloud</groupld><artifactld>spring-cloud-starter-netflix-ribbon</artifactid>
</dependency>

(2)自定义配置类,不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的了(也就是说不要将Ribbon配置类与主启动类同包)。新建package - com.lun.myrule
(3)在com.lun.myrule下新建MySelfRule规则类

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MySelfRule {@Bean //lRule:根据特定算法中从服务列表中选取一个要访问的服务public IRule myRule(){return new RandomRule();}
}

(4)主启动类添加@RibbonClient

import com.lun.myrule.MySelfRule;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.ribbon.RibbonClient;@SpringBootApplication
@EnableEurekaClient
//添加到此处,name为提供这个应用名称
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE", configuration = MySelfRule.class)
public class OrderMain80
{public static void main( String[] args ){SpringApplication.run(OrderMain80.class, args);}
}

(5)测试

开启cloud-eureka-server7001,cloud-consumer-order80,cloud-provider-payment8001,cloud-provider-payment8002
浏览器-输入http://localhost/consumer/payment/get/1
返回结果中的serverPort在8001与8002两种间反复横跳。

六、Ribbon默认自带的负载规则

(1)IRule会根据特定算法中从服务列表中选取一个要访问的服务

(2)规则

  • RoundRobinRule 轮询
  • RandomRule 随机
  • RetryRule 先按照RoundRobinRule的策略获取服务,如果获取服务失败则在指定时间内会进行重
  • WeightedResponseTimeRule 对RoundRobinRule的扩展,响应速度越快的实例选择权重越大,越容易被选择
  • BestAvailableRule 会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
  • AvailabilityFilteringRule 先过滤掉故障实例,再选择并发较小的实例
  • ZoneAvoidanceRule 默认规则,复合判断server所在区域的性能和server的可用性选择服务器

七、Ribbon默认负载轮询算法原理

默认负载轮训算法: rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器位置下标,每次服务重启动后rest接口计数从1开始
List instances = discoveryClient.getInstances(“CLOUD-PAYMENT-SERVICE”);
如:
List [0] instances = 127.0.0.1:8002
List [1] instances = 127.0.0.1:8001
8001+ 8002组合成为集群,它们共计2台机器,集群总数为2,按照轮询算法原理:
当总请求数为1时:1%2=1对应下标位置为1,则获得服务地址为127.0.0.1:8001
当总请求数位2时:2%2=О对应下标位置为0,则获得服务地址为127.0.0.1:8002
当总请求数位3时:3%2=1对应下标位置为1,则获得服务地址为127.0.0.1:8001
当总请求数位4时:4%2=О对应下标位置为0,则获得服务地址为127.0.0.1:8002
如此类推…

八、Ribbon的负载均衡和Rest调用

(1)Ribbon在工作时图解

Ribbon在工作时分成两步:
第一步先选择EurekaServer ,它优先选择在同一个区域内负载较少的server。
第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。
其中Ribbon提供了多种策略:比如轮询、随机和根据响应时间加权。
(2)RestTemplate的使用
getForObject() / getForEntity() - GET请求方法
getForObject():返回对象为响应体中数据转化成的对象,基本上可以理解为Json。
getForEntity():返回对象为ResponseEntity对象,包含了响应中的一些重要信息,比如响应头、响应状态码、响应体等。
postForObject() / postForEntity() - POST请求方法

@GetMapping("/consumer/payment/getForEntity/{id}")
public CommonResult<Payment> getPayment2(@PathVariable("id") Long id)
{ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);if(entity.getStatusCode().is2xxSuccessful()){return entity.getBody();//getForObject()}else{return new CommonResult<>(444,"操作失败");}
}

Ribbon的简单介绍和使用相关推荐

  1. Apollo架构体系、Apollo运行原理、Apollo配置中心简单介绍(一)

    笔者在工作中遇到如下问题,随着程序功能越多,配置文件不断增加,一些功能的开关.服务器地址.接口地址.不同环境的一些配置文件不同,这些在每次发布不同环境.更新项目时都比较繁琐,后来学习微服务时接触到了S ...

  2. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  3. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  4. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  5. 2021年大数据ELK(二):Elasticsearch简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...

  6. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  7. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  8. LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍

    LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是 ...

  9. dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

最新文章

  1. 三种字符编码:ASCII、Unicode和UTF-8
  2. metrics-server最新版本有坑,慎用
  3. python os方法-Python os.lchflags() 方法
  4. Python:名片管理系统
  5. VMware ESXi 安装手记
  6. javascript --- event loop
  7. 基本数据类型的分类 0125
  8. grDevices | 如何在图形中使用数学表达式作为标注文本
  9. linux同内核覆盖,Linux内核代码覆盖率 – GCOV
  10. 未处理sqlexception中value_类 java.sql.SQLException 的使用 (Java Platform SE 6)
  11. python实现随机生成列表,得到列表中位数并以此划分源列表
  12. ChainIDE 3. 使用truffle部署合约
  13. Android Studio 如何添加悬浮提示
  14. python入侵个人电脑的步骤图解台式_入侵渗透专用的python小脚本脚本安全 -电脑资料...
  15. hermite插值法 matlab,分段三次Hermite插值Matlab实现
  16. 郑大计算机课程表,郑州大学研究生课程表.doc
  17. [置顶] 程序员面试之道(《程序员面试笔试宝典》)之程序员如何保持身心健康?
  18. 因为文件共享不安全,所以你不能连接到文件共享。此共享需要过时的SMB1协议
  19. “过关斩将”的第一台电脑
  20. Freeswitch 常用命令

热门文章

  1. _EPROCESS结构简单了解!
  2. GFW 三定律,太有创意了,太真实了,胆太大,竟敢光天化日下说实话!
  3. Leetcode 129求根节点到叶节点数字之和、104二叉树的最大深度、8字符串转换整数(atoi)、82删除排序链表中的重复元素II、204二分查找、94二叉树的中序遍历、144二叉树的前序遍历
  4. java url正则校验,Java正则验证
  5. money as debt 笔记
  6. pv=nrt_中学物理之pV=nRT应用总结篇
  7. 第六章 使用Direct3D绘制
  8. 【东哥视觉】做人做事禁忌
  9. 安恒信息网络空间测绘解决方案:Sumap全球网络空间超级雷达
  10. 过流保护的几种实现方式