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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 快速学习 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。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
|
5天前
|
负载均衡 Java Nacos
Ribbon负载均衡
Ribbon负载均衡
12 1
Ribbon负载均衡
|
3月前
|
开发框架 负载均衡 Java
当热门技术负载均衡遇上 Spring Boot,开发者的梦想与挑战在此碰撞,你准备好了吗?
【8月更文挑战第29天】在互联网应用开发中,负载均衡至关重要,可避免单服务器过载导致性能下降或崩溃。Spring Boot 作为流行框架,提供了强大的负载均衡支持,通过合理分配请求至多台服务器,提升系统可用性与可靠性,优化资源利用。本文通过示例展示了如何在 Spring Boot 中配置负载均衡,包括添加依赖、创建负载均衡的 `RestTemplate` 实例及服务接口调用等步骤,帮助开发者构建高效、稳定的应用。随着业务扩展,掌握负载均衡技术将愈发关键。
73 6
|
3月前
|
负载均衡 算法 架构师
Ribbon负载均衡
上一节就已经实现的负载均衡笔者并未深入探讨,本节通过分析负载均衡算法、Ribbon实现负载均衡的底层原理和实现过程,让大家对负载均衡有了一个大体认识,同时针对Ribbon自定义负载均衡策略,饥饿加载让大家对于Ribbon的了解又多一些。Ribbon实现的负载均衡只是方案之一,我们可以尽量多了解但不要局限于此。
|
2天前
|
负载均衡 监控 网络协议
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
25 15
|
2天前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
15 5
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
46 2
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
存储 设计模式 缓存
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
该文章主要介绍了如何在OpenFeign中集成Ribbon以实现负载均衡,并详细分析了Ribbon中服务选择和服务过滤的核心实现过程。文章还涉及了Ribbon中负载均衡器(ILoadBalancer)和负载均衡策略(IRule)的初始化方式。
OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
|
3月前
|
缓存 负载均衡 Java
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
下一篇
无影云桌面