Ribbon:Spring Cloud负载均衡与服务调用组件
Ribbon:Spring Cloud负载均衡与服务调用组件
问题总结
- 负载均衡?
- Ribbon实现服务调用?
- Ribbon实现负载均衡?
- 切换负载均衡策略?
- 定制负载均衡策略?
问题答案
负载均衡
负载均衡(Load Balance),将用户的请求平分到多个服务器上运行,以扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。
- 服务端负载均衡
服务端负载均衡:在客户端和服务端之间建立一个负载均衡服务器(硬件设备:F5,软件:Nginx)。负载均衡服务器维护了一份可用服务端清单,然后通过心跳机制来删除故障的服务端节点,以保证清单中的所有服务节点都是可以正常访问。
客户端发送请求,全部交给负载均衡服务器(轮询、随机),选择一个服务端进行转发。、
特点:
(1)需要建立一个独立的负载均衡服务器。
(2)负载均衡在客户端发送请求后进行,客户端不知道那个服务器提供服务。
(3)可用服务端清单存储于负载均衡服务器中。
- 客户端负载均衡
- 客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上。客户端从服务注册中心获取服务端列表,并通过(轮询、随机)将请求分配给多个服务提供者。
- 服务端负载均衡VS客户端负载均衡
不同点 服务端负载均衡 客户端负载均衡 是否需要建立负载均衡服务器 是 否 是否需要服务注册中心 否 是 可用服务清单存储位置 负载均衡服务器上(nginx) 服务注册中心 负载均衡的时机 发送请求,再进行负载均衡 先负载均衡,再发送请求 客户端是否了解服务提供方消息 否 是
- Ribbon实现服务调用
- Ribbon可以与RestTemplate配合使用,以实现微服务之间的调用。
- RestTemplate是一个用于消费第三方的请求框架,实现了对HTTP请求的封装。例如HEAD、GET、POST、PUT、DELETE等类型的HTTP请求,分别对应RestTemplate中的headForHeaders()、getForObject()、postForObject()、put()、delete()方法。
- Ribbon实现负载均衡
Spring Cloud Ribbon提供了一个IRule接口,用于定义负载均衡策略。
序号 | 实现类 | 负载均衡策略 |
---|---|---|
1 | RoundRobinRule | 排序轮询 |
2 | RandomRule | 随机选取 |
3 | RetryRule | 先轮询,如果获取到的服务实例为null或已经失效,则再指定时间内不断地进行轮询重试,超过指定时间没有获取到则返回null |
4 | WeighedResponseTimeRule | RoundRobinRule的一个子类,对父类进行了扩展。根据平均响应时间,计算所以服务实例的权重,响应时间和服务实例的权重、选中概率成反比。刚启动,统计信息不足,使用轮询 |
5 | BestAvailableRule | 先过滤掉故障或者失效的服务实例,选择并发量最小的服务实例 |
6 | AvailabilityFilteringRule | 同BestAvailableRule |
7 | ZoneAvoidanceRule | 默认,根据服务所在区域的性能和服务的可用性,来选择服务实例(轮询) |
- 切换负载均衡策略
- 再客户端的配置类中,将IRule的其他实现类注入到容器中即可。
- 定制负载均衡策略
- 类似于4
Ribbon:Spring Cloud负载均衡与服务调用组件的更多相关文章
- Spring Cloud Feign 声明式服务调用
目录 一.Feign是什么? 二.Feign的快速搭建 三.Feign的几种姿态 参数绑定 继承特性 四.其他配置 Ribbon 配置 Hystrix 配置 一.Feign是什么? 通过对前面Sp ...
- Spring Cloud 负载均衡初体验
目录 服务搭建 1.注册中心--Eureka Server 2.服务提供方--Service Provider 3.服务消费方--Service Consumer 服务消费 Feign 与断路器 Hy ...
- Spring Cloud负载均衡:使用zuul作服务器端负载均衡
1.目的: 本文简述Spring Cloud负载均衡之服务器负载均衡模式,使用组件为zuul. zuul作为Spring Cloud中的网关组件,负责路由转发.身份验证.请求过滤等等功能,那么我们可以 ...
- Spring Cloud Feign声明式服务调用(转载)+遇到的问题
转载:原文 总结: 1.pom添加依赖 2.application中填写正确的eureka配置 3.启动项中增加注解 @EnableFeignClients 4.填写正确的调用接口 通过原文使用Fei ...
- Spring Cloud Alibaba(8)---Feign服务调用
Feign服务调用 有关Spring Cloud Alibaba之前写过五篇文章,这篇也是在上面项目的基础上进行开发. Spring Cloud Alibaba(1)---入门篇 Spring Clo ...
- Spring Cloud负载均衡:使用Feign作客户端负载均衡
有了一篇服务端负载均衡后,再来一篇客户端负载均衡,客户端负载均衡很简单,无需在zuul中做多余配置(本示例不引入zuul),只需要在客户端进行Feign引入和配置即可. 准备工作很简单,实现客户端负载 ...
- spring Cloud负载均衡Ribbon
Ribbon饥饿加载 默认情况下Ribbon是懒加载的.当服务起动好之后,第一次请求是非常慢的,第二次之后就快很多. 解决方式:开启饥饿加载 ribbon: eager-load: enabled: ...
- 笔记:Spring Cloud Feign 声明式服务调用
在实际开发中,对于服务依赖的调用可能不止一处,往往一个接口会被多处调用,所以我们通常会针对各个微服务自行封装一些客户端类来包装这些依赖服务的调用,Spring Cloud Feign 在此基础上做了进 ...
- Spring Cloud Feign 优雅的服务调用
Fegin 是由NetFlix开发的声明式.模板化HTTP客户端,可用于SpringCloud 的服务调用.提供了一套更优雅.便捷的HTTP调用API,并且SpringCloud整合了Fegin.Eu ...
- Spring Cloud 2-Feign 声明式服务调用(三)
Spring Cloud Feign 1. pom.xml 2. application.yml 3. Application.java 4. Client.java 简化RestTemplate调 ...
随机推荐
- 在线问诊 Python、FastAPI、Neo4j — 创建 饮食节点
目录 饮食数据 创建节点 根据疾病.症状,判断出哪些饮食不能吃,哪些建议多吃 饮食数据 foods_data.csv 建议值用""引起来.避免中间有,号造成误识别 饮食 " ...
- Flask框架——Flask脚本、flask知识点补充
文章目录 Flask_脚本 1 集成Python shell 1.1 flask-script的用法: 1.1.1 实例:flask-script的简单实现 1.1.1命令添加方式: 第一种(无参命令 ...
- Python来源介绍
python来源 1.1 Python来源 1989年的圣诞节,一位来自荷兰,名叫Guidio van Rossum的年轻帅小伙子,为了打发无趣的时光,决定改善他参与设计,不是很满意的ABC语言,随着 ...
- 计算机三级网络技术备考复习资料zhuan
计算机三级网络技术备考复习资料 第一章 计算机基础 分析:考试形式:选择题和填空题,6个的选择题和2个填空题共10分,都是基本概念 1.计算机的四特点:有信息处理的特性,有广泛适应的特性,有 ...
- 如何基于three.js(webgl)引擎架构,研发一套通过配置就能自动生成的3D机房系统
序: 这几年观察下来,大部分做物联网三维可视化解决方案的企业或个人, 基本都绕不开3D机房.包括前面也讲过这样的案例<使用webgl(three.js)创建自动化抽象化3D机房,3D机房模块详细 ...
- vcpkg manifest 的使用
最近项目上要使用 CMakeLists 管理,由于 Windows 版本有依赖到 vcpkg 提供的库,所以需要使用 vcpkg manifest 来统一设置库的版本,方便后续维护 推荐一个文章,介绍 ...
- 一文搞懂深度信念网络!DBN概念介绍与Pytorch实战
本文深入探讨了深度信念网络DBN的核心概念.结构.Pytorch实战,分析其在深度学习网络中的定位.潜力与应用场景. 关注TechLead,分享AI与云服务技术的全维度知识.作者拥有10+年互联网服务 ...
- 如何避免JavaScript中的内存泄漏?
前言 过去,我们浏览静态网站时无须过多关注内存管理,因为加载新页面时,之前的页面信息会从内存中删除. 然而,随着单页Web应用(SPA)的兴起,应用程序消耗的内存越来越多,这不仅会降低浏览器性能,甚至 ...
- 【PySide6】QChart笔记(一)—— 用QDateTimeAxis作为x轴绘制多条折线图
一.QDateTimeAxis简介 1. 官方描述 https://doc.qt.io/qtforpython-6/PySide6/QtCharts/QDateTimeAxis.html QDateT ...
- CSS 也能实现 if 判断?实现动态高度下的不同样式展现
最近在群里,有个小伙伴问了这么一道很有趣的问题: CSS 能否实现,容器再某个高度下是某种表现,一旦超出某个高度,则额外展示另外一些内容 为了简化实际效果,我们看这么一张示意效果图: 可以看到,当容器 ...