spring cloud 之 ribbon

Ribbon概念

Spring Cloud Ribbon 是基于 Netflix Ribbon 实现的一套客户端负载均衡的工具,主要功能是提供客户端负载均衡算法和服务调用。简单的说,就是在配置文件中列出 Load Balance( LB:将用户的请求平摊的分配到多个服务上)后面的所有机器,Ribbon 会自动的帮助我们基于某种规则(如简单的轮询,随机、权重等)去连接这些机器。我们很容易使用 Ribbon 实现自定义的负载均衡算法

Nginx和Ribbon的区别

集中式 LB(Load Balancer)

即在服务的消费方和提供方之间使用独立的 LB 设备进行负载均衡,比如nginx,由该设施负责把访问请求通过某种策略转发至服务的提供方。
进程内 LB(Load Balancer)

Ribbon 属于进程内 LB,将 LB(Load Balancer)逻辑集成到消费方,消费方从注册中心那里获知有哪些地址可以使用,然后自己再从这些地址中选择出一个合适的服务器。

Nginx 是服务器负载均衡,客户端所有请求都会交给 Nginx,然后由 Nginx 实现转发请求

Ribbon 是本地负载均衡,在调用微服务接口的时候,会在注册中心上获取注册信息服务列表之后通过策略调用服务

 Ribbon的负载均衡策略

Ribbon一共有7个负载均衡策略

RoundRobinRule :轮询(默认规则)

RandomRule: 随机

RetryRule:重试(先按照 RoundRobinRule(轮询)的策略获取服务,如果获取服务失败则在指定时间内会进行重试来获取可用服务)

WeightedResponseTimeRule:对 RoundRobinRule 的扩展,响应速度越快的实例选择权重越大,越容易被选择

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

AvailabilityFilteringRule:先过滤掉故障实例,再选择并发量较小的实例

ZoneAvoidanceRule:复合判断服务所在区域的性能和服务的可用性选择服务器

 默认的轮询负载均衡原理

轮询的负载均衡算法:rest接口第几次请求数量%服务器集群总数量= 实际调用的服务位置下标, 每次服务重启动后rest接口计数从1开始

自定义负载均衡策略

注意:需要单独建立一个包,不能与主启动类在同一个包以及子包下

这个自定义配置类不能放在@ComponentScan所扫描的当前包下以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,达不到特殊化定制的目的


@Configuration
public class MyTestRule {@Beanpublic IRule myRule(){return new RandomRule();   // 定义为随机策略}
}

在主启动类上加 @RibbonClient 注解:


// name:指明需要调用的服务名
// configuration:在启动该微服务的时候就能去加载我们的自定义 Ribbon 负载均衡策略配置类
@RibbonClient(name = "cloud-test-service", configuration = MyTestRule.class)
public class TestMainApplication{public static void main(String[] args) {SpringApplication.run(TestMainApplication.class, args);}
}

openfeign和nacos以及eureka都已经自带ribbon依赖,可以在客户端负载均衡

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

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

相关文章

【C++】 Qt-事件(上)(事件、重写事件、事件分发)

文章目录 事件重写事件事件分发 事件 事件(event)是由系统或Qt本身在不同的时刻发出的。比如,当用户按下鼠标,敲下键盘,或窗口需要重新绘制的时候,都会发出一个相应的事件。一些事件是在对用户操作做出响应…

Leetcode---351周赛

周赛题目 2748. 美丽下标对的数目 2749. 得到整数零需要执行的最少操作数 2750. 将数组划分成若干好子数组的方式 2751. 机器人碰撞 一、美丽下标对的数目 这题没什么好说的,按照题目的要求直接暴力求解,代码如下 bool gcd(int x,int y){if(x1||y1)…

钡铼技术多功能RTUS475:稳定可靠的油田数据采集解决方案

标题:S475在油田数据采集中的应用 摘要:本文介绍了钡铼技术多功能RTUS475在油田数据采集中的应用。该设备基于高性能微处理器MCU和嵌入式实时操作系统,支持Modbus Slave和Modbus Master功能,并能通过无线网络实现短信报警和数据传…

Springboot项目使用原生Websocket

目录 1.启用Websocket功能2.封装操作websocket session的工具3.保存websocket session的接口4.保存websocket session的类5.定义websocket 端点6.创建定时任务 ping websocket 客户端 1.启用Websocket功能 package com.xxx.robot.config;import org.springframework.context.a…

机器学习优化器和SGD和SGDM实验对比(编程实现SGD和SGDM)

机器学习优化器和SGD和SGDM实验对比 博主最近在学习优化器,于是呢,就做了一个SGD和SGDM的实验对比,可谓是不做不知道,一做吓一跳,这两个算法最终对结果的影响还是挺大的,在实验中SGDM明星要比SGD效果好太多…

springBoot配置多环境

在代码中一般有3个环境,为了避免频繁的每次上线需要手动更改环境的问题。 test 本地测试环境,代码调试的 dev 服务端开发环境-用来验证用 prod 服务端正式环境 我创建2个做示例,里面写的不同配置 点运行的项目会有一个Edit Configurations…

​浅谈大型语言模型

大型语言模型(Large Language Models,LLMs)是一类强大的人工智能模型,具有出色的自然语言处理能力。它们在许多任务中表现出色,如机器翻译、文本摘要、对话生成和情感分析等。下面我们将介绍大型语言模型的训练和生成过…

智谱AI-算法实习生(知识图谱方向)实习面试记录

岗位描述 没错和我的经历可以说是match得不能再match了,但是还是挂了hh。 面试内容 给我面试的是唐杰老师的博士生,方向是社交网络数据挖掘,知识图谱。不cue名了,态度很友好的 ,很赞。 date:6.28 Q1 自…

【码银送书第一期】通用人工智能:初心与未来

目录 前言 正文 内容简介 作者简介 译者简介 目录 前言 自20世纪50年代图灵在其划时代论文《计算机器与智能》中提出“图灵测试”以及之后的达特茅斯研讨会开始,用机器来模仿人类学习及其他方面的智能,即实现“人工智能”(Artificial …

ORA-31664: unable to construct unique job name when defaulted

某个环境备份不足空间问题处理后,手动执行expdp备份的脚本,报错如下 Export: Release 11.2.0.4.0 - Production on Tue Jul 4 11:46:14 2023 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. Connected to: Oracle D…

获取移动设备的电池信息

通过BatteryManager来获取关于电池的信息 实例 package com.example.softwarepatentdemo;import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.BatteryManag…

2023年大学计算机专业实习心得14篇

2023年大学计算机专业实习心得精选篇1 20__年已然向我们挥手告别而去了。在20__年初之际,让我们对过去一年的工作做个总结。忙碌的一年里,在领导及各位同事的帮助下,我顺利的完成了20__年的工作。为了今后更好的工作,总结经验&…