springcloud(十二):Ribbon客户端负载均衡介绍

Ribbon简介

使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型。既然有多个服务实例,那么调用的时候应该如果选择呢?这就需要实现一定的负载均衡策略。

实现负载均衡主要有两种方式,第一种是通过服务端进行负载均衡,第二种是通过客户端进行负载均衡。服务端方式的实现原理是通过反向代理并按照某种负载均衡策略把客户端请求分发到可用的服务端节点上,如Nginx。客户端方式的实现原理是在客户端先获取所有可用的服务端节点,再通过某种负载均衡策略选择其中一个节点进行访问。

Ribbon就是一种客户端负载均衡的实现,它是有Netflix发布的一个基于HTTP和TCP的客户端负载均衡工具。服务消费者继承Ribbon后,只需要配置服务提供者地址,Ribbon就可以基于指定的负载均衡算法,自动帮服务消费者分配请求。Ribbon提供了很多常见的负载均衡算法,入轮询、随机、权重等。作为Spring Cloud体系中的一员,Ribbon可以和Eureka方便地集合使用,可以直接从Eureka Server中获取所有服务提供者的节点地址,然后根据指定的负载均衡策略选择某个节点进行访问。

Ribbon是一个在云服务中久经沙场的客户端IPC库,它提供以下的一些特性:

  1. 负载均衡
  2. 故障容错
  3. 在异步和动态的模型中支持多协议通讯(HTTP、TCP、UDP)
  4. 缓存与批处理

引入Ribbon依赖

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

Ribbon所包含的模块

  1. ribbon:在其他Ribbon模块和Hystrix上集成负载均衡、容错、缓存/批处理的api
  2. ribbon-loadbalancer:可以独立或与其他模块一起使用的负载均衡器的api
  3. ribbon-eureka:使用Eureka客户端为云提供动态服务器列表的api
  4. ribbon-transport:使用带有负载均衡功能的RxNetty支持HTTP、TCP和UDP协议的传输客户端
  5. ribbon-httpclient:构建在Apache HttpClient之上,与负载均衡器集成的REST客户端
  6. ribbon-example:提供了一些示例
  7. ribbon-core:客户端配置api和其他共享api

负载均衡器组件

Ribbon提供的基本功能

  1. 向通信客户端提供公共DNS名称或单个服务器的IP
  2. 根据特定的逻辑选择服务器

Ribbon提供的高级功能

  1. 通过将客户端划分为区域(如数据中心的机架),在相同区域中减少服务器延迟,从而在客户端和服务器之间建立关联
  2. 保持服务器的统计信息,避免出现高延迟或频繁故障的服务器
  3. 保持区域的统计信息,避免可能出现停机的区域

负载均衡器的三大子模块

  1. Rule:确定从列表返回哪个服务的逻辑组件
  2. Ping:在后台运行的组件以确保服务的活跃度
  3. ServerList:这可以是静态的或动态的。如果它是动态的(由DynamicServerListLoadBalancer使用),后台线程将在特定的时间间隔刷新和过滤列表

创建Ribbon程序

如架构图所示,Ribbon充当负载均衡器的作用,能够让我们的服务消费者调用到自己想使用的服务,服务消费者不用关心中间具体的操作,只需要将要调用的服务信息告诉负载均衡器,Ribbon就会从相应的服务集群中选择一个可以使用的服务器,供服务消费者调用。

负载均衡策略

  1. WeightedResponseTimeRule:根据响应时间分配一个weight(权重),响应时间越长,weight越小,被选中的可能性越低。
  2. RoundRobinRule:轮询选择服务节点(此为默认的负载均衡策略)。
  3. RandomRule:随机选择一个服务节点。
  4. ZoneAvoidanceRule:综合考虑服务节点所在区域的性能和服务节点的可用性来选择服务节点。
  5. RetryRule:重试机制。在一个配置时间段内,当选择服务节点不成功时会一直尝试重新选择。
  6. BestAvailableRule:选择一个并发请求最小的服务节点。
  7. AvailabilityFilteringRule:过滤掉那些因为一直连接失败而被标记为circuit tripped的服务节点和那些高并发的服务节点(active connections 超过配置值)

转载请注明出处:https://blog.csdn.net/MrSpirit/article/details/80182508

springcloud(十二):Ribbon客户端负载均衡介绍的更多相关文章

  1. springcloud(十三):Ribbon客户端负载均衡实例

    一.采用默认的负载均衡策略:RoundRobinRule 轮询策略 1.修改提供者原的控制类 在之前的eureka-client-provider项目的CenterController.java中加入 ...

  2. SpringBoot(三) - Ribbon客户端负载均衡,Zuul网关,Config配置中心

    1.Ribbon客户端负载均衡 1.1 依赖 1.2 配置信息 # feign默认加载了ribbon负载均衡,默认负载均衡机制是:轮询 # 负载均衡机制是添加在消费端(客户端)的,如果改为随机,指定服 ...

  3. spring cloud --- Ribbon 客户端负载均衡 + RestTemplate + Hystrix 熔断器 [服务保护] ---心得

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 当超大并发量并发访问一个服务接口时,服务器会崩溃 ,不仅导致这个接口无法 ...

  4. spring cloud --- Ribbon 客户端负载均衡 + RestTemplate ---心得【无熔断器】

    spring boot      1.5.9.RELEASE spring cloud    Dalston.SR1 1.前言 了解了 eureka 服务注册与发现 的3大角色 ,会使用RestTem ...

  5. ③SpringCloud 实战:使用 Ribbon 客户端负载均衡

    这是SpringCloud实战系列中第三篇文章,了解前面第两篇文章更有助于更好理解本文内容: ①SpringCloud 实战:引入Eureka组件,完善服务治理 ②SpringCloud 实战:引入F ...

  6. SpringCloud实战-Ribbon客户端负载均衡

    前面我们已经完成了注册中心和服务提供者两个基础组件.接着介绍使用Spring Cloud Ribbon在客户端负载均衡的调用服务. ribbon 是一个客户端负载均衡器,可以简单的理解成类似于 ngi ...

  7. springcloud 之Ribbon客户端负载均衡配置使用

    pom.xml添加配置说明:这里服务注册与发现用的是Eureka,所以消费者端需要引入eureka,使用EurekaClient来调用服务 <dependency> <groupId ...

  8. Spring Cloud入门教程(二):客户端负载均衡(Ribbon)

    对于大型应用系统负载均衡(LB:Load Balancing)是首要被解决一个问题.在微服务之前LB方案主要是集中式负载均衡方案,在服务消费者和服务提供者之间又一个独立的LB,LB通常是专门的硬件,如 ...

  9. 笔记:Spring Cloud Ribbon 客户端负载均衡

    Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,基于 Netflix Ribbon 实现,通过Spring Cloud 的封装,可以让我们轻松的将面向服 ...

随机推荐

  1. Shell脚本下条件测试(eq.ne.....)(转载)

    转载:http://cxj632840815.blog.51cto.com/3511863/1168709 Shell编程中的条件测试 在Linux编程中经常会用到判断数值的大小,字符串是否为空这样或 ...

  2. 0623-TP框架整理一(下载、入口文件、路由、创建控制器、调用模板、系统常量、命名空间)

    一.下载解压后用ThinkPHP(核心)文件 核心文件夹(ThinkPHP)不要改,是作用于全局的,有需要可以改应用目录(Application) 二.创建入口文件: 运行后出现欢迎界面,在说明系统自 ...

  3. P4576 [CQOI2013]棋盘游戏

    传送门 很显然,除非白子和黑子相邻,否则必然是黑子获胜虽然我并没有看出来 那么现在对黑子来说它要尽可能快的赢,对白子它要多苟一会儿 然后就是这个叫做对抗搜索的东西了 //minamoto #inclu ...

  4. robotframework - 框架做接口自动化post请求

    1.做get请求之前先安装 Request库,参考github上链接 :https://github.com/bulkan/robotframework-requests/#readme 2.请求&a ...

  5. java 并发编程 Executor框架

    http://blog.csdn.net/chenchaofuck1/article/details/51606224 demo package executor; import java.util. ...

  6. Java 创建Excel并逐行写入数据

    package com.xxx.common.excel; import java.io.File; import java.io.FileInputStream; import java.io.Fi ...

  7. [ 东莞市选 2008 ] GCD&LCM

    \(\\\) \(Description\) 给出两数的\(GCD\)和\(LCM\),求合法的两数之差的绝对值最小是多少. \(GCD\times LCM\le10^{18}\) \(\\\) \( ...

  8. js中true和false判断

    布尔类型里只有这6参数个返回false,其它都为true Boolean(false) // false Boolean(undefined) // false Boolean(null) // fa ...

  9. Memcached通信协议

    英文水平很烂,做梦都想着能把英语学习,可以使用一口流利的英文和洋鬼子交流,顺便忽悠下自己的同胞.没有地方学习英语,看还可以,网上有很多关于计算机的英文文献,写还行,说就完全不可能了.在以后的工作中慢慢 ...

  10. MyEclipse 快捷键方法

    MyEclipse企业级工作平台(My Eclipse Enterprise Workbench,简称MyEclipse)是对EclipseIDE的扩展,利用它可以在数据库和J2EE的开发.发布,以及 ...