负载均衡-Ribbon-微服务核心组件【分布式微服务笔记03】

负载均衡-Ribbon-微服务核心组件【分布式微服务笔记03】

负载均衡-Ribbon

基本介绍

  1. Spring Cloud Ribbon 是基于Netflix Ribbon 实现的一套客户端负载均衡的工具。
  2. Ribbon 主要功能是提供客户端负载均衡算法和服务调用
  3. Ribbon 客户端组件提供一系列完善的配置项如连接超时,重试等。
  4. Ribbon 会基于某种规则(如简单轮询,随机连接等)去连接指定服务
  5. 程序员很容易使用 Ribbon 的负载均衡算法实现负载均衡
  6. 一句话: Ribbon == 负载均衡 + RestTemplate 调用

LB(Load Balance 负载均衡)分类

集中式LB

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

进程内LB

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

Ribbon机制

负载均衡算法

策略名 描述
BestAvailableRule 选择一个最小的并发请求的server。逐个考察Server,如果Server被tripped(跳闸)了,则忽略,再选择其中ActiveRequestsCount最小的server。
AvailabilityFilteringRule 过滤掉那些因为一直连接失败的被标记为circuittripped的后端server,并过滤掉那些高并发的的后端server(active connections超过配置的阈值)。
WeightedResponseTimeRule 根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。
RetryRule 对选定的负载均衡策略加上重试机制。在一个配置时间段内当选择server不成功,则一直尝试使用subRule的方式选择个可用的server。
RoundRobinRule【默认】 轮询index,选择index对应位置的server。
RandomRule 随机选择一个server。在index上随机,选择index对应位置的server。
ZoneAvoidanceRule 复合判断server所在区域的性能和server的可用性选择server。

替换默认的负载均衡算法

  1. 编写配置类

    //配置自己的负载均衡算法
    @Configuration
    public class RibbonRule {//    配置注入负载均衡算法@Beanpublic IRule myRibbonRule(){return new RandomRule();//new 的就是负载均衡算法 ,自己选择,这里是随机算法}
    }
    
  2. 在主启动类指定负载均衡用的配置类

    @EnableEurekaClient
    @SpringBootApplication
    @EnableDiscoveryClient//启动服务发现
    @RibbonClient(name="MEMBER_SERVICE_PROVIDER_URL",configuration = RibbonRule.class)//指定负载均衡的名字和配置
    public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class,args);}
    }
    

在之前的笔记,消费者远程调用提供者底层就是用的 负载均衡 + RestTemplate 调用 的

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建第一个flask程序,读取本地static静态文件

需要安装flask :  pip install flask 项目目录结构: 代码: from flask import Flaskapp = Flask(__name__,static_url_path=/static,static_folder=static)@app.route(/)def hello_world(): return Hello World!if __name__ == __main__: app.run(host="0.0.0.…

ComfyUI进阶:Comfyroll插件 (二)

ComfyUI进阶:Comfyroll插件 (二)前言:学习ComfyUI是一场持久战,而Comfyroll Studio 是一款功能强大的自定义节点集合,专为 ComfyUI 用户打造,旨在提供更加丰富和专业的图像生成与编辑工具。借助这些节点,用户可以在静态图像的精细调整和动态动画的复杂构建方面进行深入探…

zr 摆烂记

你说得对,我也不知道怎么整合到数数论论里。 \((a,b)=1\) 是 \(ax\equiv 1(\bmod b)\) 有解的充要条件。 首先,对于 \(x=0\rightarrow b-1\),\(ax\equiv y(\bmod b)\),\(y\) 互不相同。 证明考虑加加减减。 考虑求出这个解,得到 \(ax=by+1\)。 不难有推论:若 \((a,b)=1\)…

WKCTF RE

WKCTF so_easy 安卓逆向,关键的check逻辑都在native层里面主要是很多层的异或操作除了Z3和爆破想不到其他方法了 from z3 import *src = [ 0xAE, 0x81, 0xBA, 0xC1, 0xF0, 0x95, 0x0A, 0x54, 0x14, 0x03, 0x4A, 0xE2, 0x52, 0x4E, 0x84, 0xF8, 0xC9, 0x3E, 0x14, 0x98, 0x8F,…

Java - 多线程

ThreadLocalhttps://www.cnblogs.com/fsmly/p/11020641.html 为了线程安全,每个线程改的都是自己本地的副本,从而不会影响其它线程。多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,一般使用者在访问共享变量的…

OpenAI 创始成员创办「AI+教育」公司;谷歌发布 Magic Insert:让人物完美融入新背景丨 RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点…

云屏设备整机软件升级方案

最近时间稍微空闲,整理下云屏整机设备的OTA流程及方案。之前开发时有过定义/设计,这里稍微整理总结下 整机软件有很多模块,系统及外设固件、Windows服务、Windows应用,比如系统点屏9969、摄像头固件、触摸框固件、显卡驱动、Windows一些自研服务(用于通信以及系统修复等)…

土地利用规划与城市发展:绘就未来城市的蓝图

在快速城镇化进程中,土地利用规划作为城市建设与管理的基石,其科学性与前瞻性直接影响着城市的可持续发展。本文旨在深入探讨土地利用规划如何在引导城市空间布局、优化资源配置、促进经济发展、保障社会公平及环境保护等方面发挥关键作用,进而推动城市的全面进步。 一、土地…

js 将table转成Excel

1.情景展示 如何使用js将网页中的表格转成Excel文件?2.具体分析 通过SheetJS的xlsx.js文件实现。 3.解决方案 下载地址:https://github.com/SheetJS/sheetjs/archive/refs/tags/v0.18.5.zip 打开压缩包,找到dis目录下的xlsx.full.min.js将该文件解压出来,放到项目当中。在需…

ASP.NET Core -NLog

1.安装NuGet包2.准备Nlog的配置文件 nlog.config<?xml version="1.0" encoding="utf-8" ?> <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"autoReloa…

idea中项目树中展示在java类的成员方法,变量

如图所示,点击齿轮,勾选show Members即可

购买一台云服务器,安装nvm,能够将配置全局命令链接js文件执行

全局安装@vue/cli为什么会添加命令vue linux或者MAC系统中通过which vue查看vue地址,通过进入该地址查看文件发现软链接指向真实文件,真实文件同级别下的package.json中的bin字段中的名决定了输入命令vue 2.全区安装@vue/cli时将包放在了node安装位置的node_modules下并且在包…