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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 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)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
17天前
|
Java 对象存储 开发者
解析Spring Cloud与Netflix OSS:微服务架构中的左右手如何协同作战
Spring Cloud与Netflix OSS不仅是现代微服务架构中不可或缺的一部分,它们还通过不断的技术创新和社区贡献推动了整个行业的发展。无论是对于初创企业还是大型组织来说,掌握并合理运用这两套工具,都能极大地提升软件系统的灵活性、可扩展性以及整体性能。随着云计算和容器化技术的进一步普及,Spring Cloud与Netflix OSS将继续引领微服务技术的发展潮流。
31 0
|
3天前
|
数据采集 监控 Java
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
本文是关于SpringBoot日志的详细教程,涵盖日志的定义、用途、SLF4J框架的使用、日志级别、持久化、文件分割及格式配置等内容。
12 0
SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......
|
3天前
|
存储 开发框架 Java
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
文章详细介绍了Spring、IOC、DI的概念和关系,解释了控制反转(IOC)和依赖注入(DI)的原理,并提供了IOC的代码示例,阐述了Spring框架作为IOC容器的应用。
5 0
什么是Spring?什么是IOC?什么是DI?IOC和DI的关系? —— 零基础可无压力学习,带源码
|
3天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
17 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
4天前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
13 1
|
4天前
|
安全 Java 对象存储
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
安全性考量:Spring Security与Netflix OSS在微服务安全中的作用
13 1
|
15天前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
28 5
|
16天前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
33 2
|
17天前
|
Java API 对象存储
微服务魔法启动!Spring Cloud与Netflix OSS联手,零基础也能创造服务奇迹!
这段内容介绍了如何使用Spring Cloud和Netflix OSS构建微服务架构。首先,基于Spring Boot创建项目并添加Spring Cloud依赖项。接着配置Eureka服务器实现服务发现,然后创建REST控制器作为API入口。为提高服务稳定性,利用Hystrix实现断路器模式。最后,在启动类中启用Eureka客户端功能。此外,还可集成其他Netflix OSS组件以增强系统功能。通过这些步骤,开发者可以更高效地构建稳定且可扩展的微服务系统。
34 1