一篇文章掌握负载均衡Ribbon作用和架构以及核心组件

目录

1、Ribbon是什么

2、Ribbon的作用

1.集中式LB

2.进程式LB

3、Ribbon负载均衡架构

总结:

4、Ribbon核心组件IRule


1、Ribbon是什么

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具

简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将

NetFlix的中间层服务连接在一起。

Ribbon的客户端组件提供一系列完整的配置项如:连接超时、重试等等。简单的说,就是在配置

文件中列出LoadBalancer(简称LB:负载均衡)后面所有的机器,Ribbon会自动的帮助你基于某

种规则(如简单轮询,随机连接等等)去连接这些机器。我们也很容易使用Ribbon实现自定义的

负载均衡算法!

2、Ribbon的作用

LB,即负载均衡(Load Balance),在微服务或分布式集群中经常用的一种应用。

负载均衡简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。

常见的负载均衡软件有 Nginx,Lvs 等等。

SpringCloud的负载均衡算法,可以自定义负载均衡简单分类:

1.集中式LB

  • 即在服务的消费方和提供方之间使用独立的LB设施

  • 如之前学习的Nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方!

2.进程式LB

  • 将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地 址中选出一个合适的服务器。

  • Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务 提供方的地址!

Ribbon的github地址 : GitHub - Netflix/ribbon: Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support. - GitHub - Netflix/ribbon: Ribbon is a Inter Process Communication (remote procedure calls) library with built in software load balancers. The primary usage model involves REST calls with various serialization scheme support.icon-default.png?t=N7T8https://github.com/NetFlix/ribbon

Ribbon和Eureka整合后Consumer可以直接调用服务而不用再关心地址和端口号!

3、Ribbon负载均衡架构

Ribbon在工作时分成两步:

  • 第一步,先选择EurekaServer,它优先选择在同一个区域内负载均衡较少的Server。

  • 第二步,在根据用户指定的策略,在从server去到的服务注册列表中选择一个地址。

其中Ribbon提供了多种策略,比如轮询(默认),随机和根据响应时间加权重等等

总结:

Ribbon其实就是一个软负载均衡的客户端组件,他可以和其他所需请求的客户端结合使用,和

Eureka结合只是其中的一个实例。

4、Ribbon核心组件IRule

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

  • RoundRobinRule轮询

  • RandomRule随机

  • AvailabilityFilterRule【会先过滤掉由于多次访问故障而处于断路器跳闸的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问】

  • WeightedResponseTimeRule【根据平均响应时间计算所有服务的权重,响应时间越快服务权重越大,被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等待统计信 息足够,会切换到WeightedResponseTimeRule】

  • RetryRule【先按照RoundRobinRule的策略获取服务,如果获取服务失败,则在指定时间内会进行重试,获取可用的服务】

  • BestAvailableRule【会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务】

  • ZoneAvoidanceRule【默认规则,复合判断server所在区域的性能和server的可用性选择服务器】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/323783.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

消失的水母-第15届蓝桥第三次STEMA测评Scratch真题精选

[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第165讲。 第15届蓝桥杯第3次STEMA测评已于2023年12月17日落下帷幕,编程题一共有6题,分别如下&…

【野火i.MX6NULL开发板】Linux系统下的Hello World

0、前言 参考资料: 《野火 Linux 基础与应用开发实战指南基于 i.MX6ULL 系列》PDF 第25章 本章比较抽象,涉及理论知识,不明白,可以看看视频讲解: https://www.bilibili.com/video/BV1JK4y1t7io?p29&vd_sourcef…

Day6 Qt

思维导图 1.数据库增删改查 头文件widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QSqlDatabase> //数据库管理类 #include <QSqlQuery> // 执行sql语句类 #include <QSqlRecord> //数据库记录类 #include <QSqlErro…

程序员的健康手册

大家好&#xff0c;我是 javapub。 马上迎来 2024 农历新年&#xff0c;这个是 COVID-19 后的第一个春节。用女朋友的话来说&#xff0c;这几年像在梦里一样&#xff0c;可能生活了几十年的人都想象不到会发生这样的事。不过不论世界怎么变&#xff0c;我们都要过生活、过好当…

leetcode 349 两个数组的集合

题目 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a…

LeetCode 0082.删除排序链表中的重复元素 II:模拟

【LetMeFly】82.删除排序链表中的重复元素 II&#xff1a;模拟 力扣题目链接&#xff1a;https://leetcode.cn/problems/remove-duplicates-from-sorted-list-ii/ 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字…

windows的换行符与linux风格的换行符不同的问题

问题展示&#xff1a; 说明&#xff1a; 出现这个错误的原因是脚本文件包含了windows风格换行符&#xff08;‘\r\n’&#xff09;&#xff0c;而在linux环境下&#xff0c;通常使用unix风格的换行符&#xff08;‘\n’&#xff09;.这个问题通常在windows环境下编辑脚本文件然…

leetcode 17 电话号码字母组合

题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits “23” 输出&#xf…

模拟瑞幸的购物车

是根据渡一大师课来写的&#xff0c;如有什么地方存在问题&#xff0c;还请大家在评论区指出来。ど⁰̷̴͈꒨⁰̷̴͈う♡&#xff5e; index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http…

《产业结构调整指导目录(2024年本)》发布,模糊测试首次纳入

近日&#xff0c;第6次委务会议通过了新版的《产业结构调整指导目录&#xff08;2024年本&#xff09;》&#xff0c;该目录自2024年2月1日起正式实施。 与之前的版本相比&#xff0c;本次目录在行业设置上进行了全面升级&#xff0c;新增了“网络安全”这一重要行业大类&#…

数据管理-首选项

文章目录 1 概述2 什么是首选项3 首选项运作机制4 常用接口介绍常用接口使用前提保存数据&#xff08;put&#xff09;获取数据&#xff08;get&#xff09;是否包含指定的key&#xff08;has&#xff09;数据持久化&#xff08;flush&#xff09;删除数据&#xff08;delete&a…

spring cloud nacos注册与配置中心

简介 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos: Dynamic Naming and Configuration Service Nacos就是注册中心&#xff0b;配置中心的组合 -> Nacos EurekaConfigBus docker安装 https://nacos.io/zh-cn/docs/quick-start-docker.html…

手把手教你如何搭建Spring本地编译环境

大家好&#xff0c;我是极客涛&#xff0c;不知道小伙伴有没有和我一样的情况&#xff0c;在阅读Spring源码时&#xff0c;只通过静态的代码阅读很难有更深刻的理解&#xff0c;所以建议通过写测试类进行debug的方式&#xff0c;对核心的代码进行运行时的状态调试&#xff0c;这…

Python简介-Python入门到精通

Python的创始人为荷兰人吉多范罗苏姆&#xff08;Guido van Rossum&#xff09;。1989年圣诞节期间&#xff0c;在阿姆斯特丹&#xff0c;Guido为了打发圣诞节的无趣&#xff0c;决心开发一个新的脚本解释程序&#xff0c;作为ABC语言的一种继承。之所以选中Python&#xff08;…

深入浅出Pytorch宝典1.0

文章目录 前言1. 张量操作2. 自动微分3. 数据加载和处理4. 模型构建和训练5. 预训练模型和迁移学习6. 调试和性能7. 高级特性总结 torch中主要的数据对象主要特点和功能张量的创建 数据处理和转换1.torch.tensor() 创建一个新的张量&#xff08;Tensor&#xff09;2.torch.zero…

数据结构学习 jz39 数组中出现次数超过一半的数字

关键词&#xff1a;排序 摩尔投票法 摩尔投票法没学过所以没有想到&#xff0c;其他的都自己想。 题目&#xff1a;库存管理 II 方法一&#xff1a; 思路&#xff1a; 排序然后取中间值。因为超过一半所以必定在中间值是我们要的结果。 复杂度计算&#xff1a; 时间复杂度…

【docker笔记】DockerFile

DockerFile Docker镜像结构的分层 镜像不是一个单一的文件&#xff0c;而是有多层构成。 容器其实是在镜像的最上面加了一层读写层&#xff0c;在运行容器里做的任何文件改动&#xff0c;都会写到这个读写层。 如果删除了容器&#xff0c;也就是删除了其最上面的读写层&…

ClientHttpRequestInterceptor报错Timeout waiting for connection from pool

restTemplate实现ClientHttpRequestInterceptor&#xff0c;报错org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool 代码如下&#xff1a; Configuration public class HttpConfig {private static final Integer RETRY_COUNT…

最新Win11系统怎么删除开机密码 Win11取消登录密码图文教程

将账户设置为自动输入微软账户的密码&#xff0c;就是省略了手动打密码的步骤而已变成自动化了。 教程如下&#xff1a; A方法↓第一步:打开设置——账户——登录选项 ↓第二步:登录选项——其他设置——为了提高安全性&#xff0c;这里选择关闭&#xff0c;这一步是为了降低…

Python-高阶函数

在Python中&#xff0c;高阶函数是指能够接收函数作为参数&#xff0c;或者能够返回函数的函数。这种特性使得函数在Python中可以被灵活地传递和使用。以下是一些关于Python高阶函数的详细解释&#xff1a; 函数作为参数&#xff1a; 高阶函数可以接收其他函数作为参数。这样的…
最新文章