首页 > 其他分享 >负载均衡-Ribbon-微服务核心组件【分布式微服务笔记03】

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

时间:2024-07-17 16:29:23浏览次数:6  
标签:03 负载 服务 server 均衡 LB Ribbon

负载均衡-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 {
    
    //    配置注入负载均衡算法
        @Bean
        public 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 调用 的

标签:03,负载,服务,server,均衡,LB,Ribbon
From: https://www.cnblogs.com/zydevelop/p/18305297/zy_springcloud03

相关文章

  • 解决React Warning: Can't perform a React state update on an unmounted component.
    在写react程序时遇到警告:Warning:Can'tperformaReactstateupdateonanunmountedcomponent.Thisisano-op,butitindicatesamemoryleakinyourapplication.Tofix,cancelallsubscriptionsandasynchronoustasksinauseEffectcleanupfunction.我们......
  • Nacos(二)源码分析Nacos服务端注册示例流程
    上回我们讲解了客户端配置好nacos后,是如何进行注册到服务器的,那我们今天来讲解一下服务器端接收到注册实例请求后会做怎么样的处理。首先还是把博主画的源码分析图例发一下,让大家对整个流程有一个大概的理解:图示流程地址:https://www.processon.com/view/link/5f7e895......
  • 购买一台云服务器,安装nvm,能够将配置全局命令链接js文件执行
    全局安装@vue/cli为什么会添加命令vuelinux或者MAC系统中通过whichvue查看vue地址,通过进入该地址查看文件发现软链接指向真实文件,真实文件同级别下的package.json中的bin字段中的名决定了输入命令vue2.全区安装@vue/cli时将包放在了node安装位置的node_modules下并且在包中的p......
  • Day 15 二叉树part03
    110.平衡二叉树classSolution{publicbooleanisBalanced(TreeNoderoot){if(root==null)returntrue;returnisBalanced(root.left)&&isBalanced(root.right)&&Math.abs(hight(root.left)-hight(root.right))......
  • HDU1000,HDU1001,HDU1002,HDU1003,HDU1004
    目录HDU1000——A+BProblem题目描述运行代码代码思路HDU1001——SumProblem题目描述运行代码代码思路HDU1002——A+BProblemII(高精度加法)题目描述运行代码代码思路高精度加法模板HDU1003——MaxSum题目描述运行代码代码思路HDU1004——LettheBall......
  • AndroidQ 打通应用层到HAL层---(HIDL服务实现)
    什么是HIDLHIDL全称为HALinterfacedefinitionlanguage(发音为“hide-l”)是用于指定HAL和其用户之间的接口的一种接口描述语言(IDL),AndroidO开始引入了HIDL这个概念,HIDL和应用层AIDL差不多,AIDL常用于连接App和Framework,HIDL则是用来连接Framework和HAL,AIDL使用Binder通信,HI......
  • P1031 [NOIP2002 提高组] 均分纸牌
    简单贪心题。如果每个数相等时的数为sum,考虑一个数不等于sum,最好的情况通过一次转移使它变为sum。所以按顺序处理,当前数少从后面拿,当前数多向后面扔,中间记录次数即可。考虑正确性,有人会觉得,如果后面的数不够拿成为了负数,需要从更后面拿,就不止一次转移了。其实,如果遇到上述情......
  • 手把手教你基于华为云鲲鹏弹性云服务器部署Node.js环境
    本文分享自华为云社区《华为云之使用鲲鹏弹性云服务器部署Node.js环境【玩转华为云】》,作者:江湖有缘。一、本次实践介绍1.1实践环境简介本次实践环境使用华为KooLabs云实验平台。本次实践基于基于华为云鲲鹏弹性云服务器。在HCE系统上安装、部署、测试Node.js项目。1.3本......
  • 构建基于Spring Cloud和Consul的服务注册与发现系统
    构建基于SpringCloud和Consul的服务注册与发现系统大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!一、引言在微服务架构中,服务注册与发现是关键组件。SpringCloud与Consul的结合可以帮助我们轻松实现服务注册与发现功能。本文将介绍如何使用SpringCl......
  • 从基础到高级应用,详解用Python实现容器化和微服务架构
    本文分享自华为云社区《Python微服务与容器化实践详解【从基础到高级应用】》,作者:柠檬味拥抱。Python中的容器化和微服务架构实践在现代软件开发中,容器化和微服务架构已经成为主流。容器化技术使得应用程序可以在任何环境中一致运行,而微服务架构通过将应用拆分成多个独立的服务......