Spring Cloud 微服务 Ribbon 负载均衡算| 学习笔记

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习 Spring Cloud 微服务 Ribbon 负载均衡算。

开发者学堂课程【Spring Cloud 微服务架构设计与开发实战  Spring Cloud 微服务 Ribbon 负载均衡算】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/60/detail/1088


Spring Cloud 微服务 Ribbon 负载均衡算

 

内容介绍:

一、Ribbon 负载均衡与底层算法

二、Ribbon 负载均衡算法


一、Ribbon 负载均衡与底层算法

Ribbon 是做微服务机群的负载运算,前面做的练习是客户端经过出租通信的交互找到自己的服务完成匹配服务的交互,但是在实际上像订单服务、评论服务、支付服务是不定数量的服务器实例,但也是微服务机群。

对于订单服务如果有两台或以上的实例,客户端调用时要体现出均衡的思想。

如果机群里有多台服务实例但是只调用了一台实例是存在问题的,因为其他服务器都会被浪费,另一种情况是在高并发场景下订单服务可能有多台,如果客户端不能把压力均匀的分散到后台的服务上,后台服务就会出现巨大的问题。

负载机群算法在大规模 web 机群中是非常常见的,Ribbon 技术组件本身也支持很多主要的算法。Ribbon 默认已经在 flix 里集成,它使用简单的轮询程。

1. Spring Cloud 客户端负载均衡器 Ribbon

2. Ribbon 是 Netflix 发布的开源项目。

3. Ribbon 主要功能是提供客户端的软件负载均衡算法,

4. Ribbon 将 Netflix 的中间层服务连接在一起。

5. Ribbon 客户端组件提供许多配置如连接超时,重试等。

6.配置文件中列出后台所有的机器,

7. Ribbon 会自动(如简单轮询,随即连接等)去连接这

些机器。

8. Spring Cloud 使用 Ribbon 实现自定义的负载均衡算

法。

 

二、Ribbon 负载均衡算法

当多数据中心部署时,区域感知可以就近根据客户端的IP地址就近轮询到某个数据中心里,是一种更优秀的跨多数据中心的算法。

1.默认规则:轮训 RoundRobin

2. 简单轮询负载均衡( RoundRobin )

3.随机负载均衡( Random )随机选择 UP 的 Server

4.加权响应时间负载均衡  WeightedResponseTime

5. 区域感知轮询负载均衡( ZoneAware )

策略名

策略描述

BestAvailableRule

选择一个最小的并发请求 server

AvailabilityFilteringRule

过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server, 并过滤掉那些高并发的后端 server (active connections超过配置的阈值)

WeightedResponseTimeRule

根据相应时间分配一个weight,相应时间越长,weight 越小,被选中的可能性越低。

RetryRule

对选定的负载均衡策略机上重试机制。

RoundRobinRule

roundRobin 轮询选择 server

RandomRule

随机选择一个 server

ZoneAvoidanceRule

复合判断 server 所在区域的性能和 server 的可用性选择 server

负载均衡的 Ribbon 知识的算法以及如何使用的实战代码:

@SpringBootApplication

Public class JavaSpringCloud0000FeignClientDemoApplication {

@Bean

public IRule createRule() {

return new RandomRule();

}

public static void main(String[] args) {

SpringApplication.run( JavaSpringCloud0000FeignClientDemoAppl:)

}

}

实际已经拥有了一个调用客户端,项目里已经拥有了一个调用中心、一个微服务和一个 FeignClient,停掉 FeignClient 并改造它。复制一份 FeignClient 并加入一个 Ribbon 的扩展并复制一份来验证负载均衡组件。

package com. alibaba ;

import org.springframework.web.bind.annotation. RequestMapping;

@RestController

public class OrderController {

@RequestMapping(" /he1lo")

public String getOrder() {

return "Hello Spring Cloud 1";

}

}

spring. application.name=order- microservice

server. port=8001

eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

eureka.client.fetch-registry=false

eureka.client.register-with-eureka=true

体现微服务可以创建实例叫“Spring Cloud service 1”,把他复制两份分别叫“Spring Cloud service 2”、“Spring Cloud service 3”,将二号服务器端口改为8002,三号改为8003。将三台服务器的返回字符串分别改为“Hello Spring Cloud 1”、“Hello Spring Cloud 2”、“Hello Spring Cloud 3”每一个微服务返回一个不同的字符串,但他们实际都叫订单服务,当实际部署时主要是为了追踪是哪一台服务器返回的。将二号、三号服务器启动,在注册中心里会有微服务的实例状态信息。

刷新注册中心服务里会有三台服务器,代理服务器已经停用。

spring. application. name=FeignClient

server. port=9001

eureka.client.service-url.defaultzone=http://localhost:8761/eureka/

eureka.client.fetch-registry=true

eureka.client.register-with-eureka=true

#loadbalance

ribbon.eureka.enabled=true

import org.springframework.boot. SpringApplication;

@EnableDiscoveryClient

@EnableFeignClients

@SpringBootApplication

Publicclass JavaSpringCloud00000FeignClientDemoApplication {

public static void main(String[] args) {

SpringApplication.run(JavaSpringCloud000000FeignClientDemoApp:)

}

}

将 Ribbon 项目启动,再把新的客户端项目启动,其他东西都不变。再次启用服务器时会发现在三台服务器间轮询。 

@Bean

public IRule createRule(){

return new RandomRule() ;

}|

构建一个 Bean,构建一个 IRule 类来创建路由规则,Bean 会注入进来替代默认的 RondRobin。

重新加后会发现调用客户端变成了随机顺序。这是一个自定义的高级扩展方法,叫自定义扩展替换负载均衡算法。也可以自定义扩展,只需要输入一个 Bean。

相关实践学习
小试牛刀,一键部署电商商城
SAE 仅需一键,极速部署一个微服务电商商城,体验 Serverless 带给您的全托管体验,一起来部署吧!
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
打赏
0
0
0
0
216
分享
相关文章
|
4月前
|
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 身份和权限认证
本文介绍了 Apache Shiro 的身份认证与权限认证机制。在身份认证部分,分析了 Shiro 的认证流程,包括应用程序调用 `Subject.login(token)` 方法、SecurityManager 接管认证以及通过 Realm 进行具体的安全验证。权限认证部分阐述了权限(permission)、角色(role)和用户(user)三者的关系,其中用户可拥有多个角色,角色则对应不同的权限组合,例如普通用户仅能查看或添加信息,而管理员可执行所有操作。
157 0
微服务——SpringBoot使用归纳——Spring Boot中集成 Shiro——Shiro 三大核心组件
本课程介绍如何在Spring Boot中集成Shiro框架,主要讲解Shiro的认证与授权功能。Shiro是一个简单易用的Java安全框架,用于认证、授权、加密和会话管理等。其核心组件包括Subject(认证主体)、SecurityManager(安全管理员)和Realm(域)。Subject负责身份认证,包含Principals(身份)和Credentials(凭证);SecurityManager是架构核心,协调内部组件运作;Realm则是连接Shiro与应用数据的桥梁,用于访问用户账户及权限信息。通过学习,您将掌握Shiro的基本原理及其在项目中的应用。
155 0
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
125 0
基于 Spring Cloud 的微服务架构分析
Spring Cloud 是一个基于 Spring Boot 的微服务框架,提供全套分布式系统解决方案。它整合了 Netflix、Zookeeper 等成熟技术,通过简化配置和开发流程,支持服务发现(Eureka)、负载均衡(Ribbon)、断路器(Hystrix)、API网关(Zuul)、配置管理(Config)等功能。此外,Spring Cloud 还兼容 Nacos、Consul、Etcd 等注册中心,满足不同场景需求。其核心组件如 Feign 和 Stream,进一步增强了服务调用与消息处理能力,为开发者提供了一站式微服务开发工具包。
153 0
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——发布/订阅消息的生产和消费
本文详细讲解了Spring Boot中ActiveMQ的发布/订阅消息机制,包括消息生产和消费的具体实现方式。生产端通过`sendMessage`方法发送订阅消息,消费端则需配置`application.yml`或自定义工厂以支持topic消息监听。为解决点对点与发布/订阅消息兼容问题,可通过设置`containerFactory`实现两者共存。最后,文章还提供了测试方法及总结,帮助读者掌握ActiveMQ在异步消息处理中的应用。
139 0
微服务——SpringBoot使用归纳——Spring Boot中集成ActiveMQ——ActiveMQ集成
本文介绍了在 Spring Boot 中集成 ActiveMQ 的详细步骤。首先通过引入 `spring-boot-starter-activemq` 依赖并配置 `application.yml` 文件实现基本设置。接着,创建 Queue 和 Topic 消息类型,分别使用 `ActiveMQQueue` 和 `ActiveMQTopic` 类完成配置。随后,利用 `JmsMessagingTemplate` 实现消息发送功能,并通过 Controller 和监听器实现点对点消息的生产和消费。最后,通过浏览器访问测试接口验证消息传递的成功性。
128 0
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
122 0
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
127 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问