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

本文涉及的产品
服务治理 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。

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
23小时前
|
消息中间件 Java 数据安全/隐私保护
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
|
1天前
|
负载均衡 监控 Java
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
我把Spring Cloud的超详细资料介绍给你,面试官不会生气吧?geigei
|
1天前
|
负载均衡 Java 应用服务中间件
Spring Cloud 负载平衡的意义什么?
负载平衡是指将网络流量在多个服务器之间分布,以达到提高系统性能、增强可靠性和提供更好用户体验的目的。在负载平衡的架构中,多个服务器被组织成一个集群,共同处理用户的请求。
24 4
|
2天前
|
缓存 负载均衡 算法
【微服务 SpringCloud】实用篇 · Ribbon负载均衡
【微服务 SpringCloud】实用篇 · Ribbon负载均衡
9 0
|
2天前
|
监控 安全 Java
Spring cloud原理详解
Spring cloud原理详解
18 0
|
2天前
|
消息中间件 负载均衡 Java
【Spring Cloud 初探幽】
【Spring Cloud 初探幽】
16 1
|
2天前
|
安全 Java Docker
|
2天前
|
Java 开发者 微服务
Spring Cloud原理详解
【5月更文挑战第4天】Spring Cloud是Spring生态系统中的微服务框架,包含配置管理、服务发现、断路器、API网关等工具,简化分布式系统开发。核心组件如Eureka(服务发现)、Config Server(配置中心)、Ribbon(负载均衡)、Hystrix(断路器)、Zuul(API网关)等。本文讨论了Spring Cloud的基本概念、核心组件、常见问题及解决策略,并提供代码示例,帮助开发者更好地理解和实践微服务架构。此外,还涵盖了服务通信方式、安全性、性能优化、自动化部署、服务网格和无服务器架构的融合等话题,揭示了微服务架构的未来趋势。
36 6
|
2天前
|
JSON Java Apache
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
Spring Cloud Feign 使用Apache的HTTP Client替换Feign原生httpclient
|
2天前
|
负载均衡 Java 开发者
Spring Cloud:一文读懂其原理与架构
Spring Cloud 是一套微服务解决方案,它整合了Netflix公司的多个开源框架,简化了分布式系统开发。Spring Cloud 提供了服务注册与发现、配置中心、消息总线、负载均衡、熔断机制等工具,让开发者可以快速地构建一些常见的微服务架构。