Ribbon负载均衡

2023-09-20 15:40:51

1. Ribbon
  • Spring Cloud Ribbon 是一套基于 Netflix Ribbon 实现的客户端负载均衡和服务调用工具。
  • Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡器,当我们将 Ribbon 和 Eureka 一起使用时,Ribbon 会从 Eureka Server(服务注册中心)中获取服务端列表,然后通过负载均衡策略将请求分摊给多个服务提供者,从而达到负载均衡的目的。
2.负载均衡原理
  • 将用户的请求平摊分配到多个服务器上运行,以达到扩展服务器带宽、增强数据处理能力、增加吞吐量、提高网络的可用性和灵活性的目的。
  • 常见的负载均衡方式有两种:服务端负载均衡、客户端负载均衡
1.服务端负载均衡

在这里插入图片描述

  • 当客户端发送请求时,该请求发送到负载均衡服务器,由负载均衡服务器按照某种算法(例如轮询、随机等),从其维护的可用服务清单中选择一个服务端,然后进行转发。
  • 服务端负载均衡的特点:
    • 需要建立一个独立的负载均衡服务器。
    • 负载均衡是在客户端发送请求后进行的,客户端并不知道是哪个服务端提供的服务。
    • 可用服务端清单存储在负载均衡服务器上。
2.客户端负载均衡

在这里插入图片描述

  • 客户端负载均衡是将负载均衡逻辑以代码的形式封装到客户端上。客户端通过服务注册中心获取到一份服务端提供的可用服务清单。负载均衡器会在客户端发送请求前通过负载均衡算法选择一个服务端实例再进行访问,以达到负载均衡的目的;
  • 客户端负载均衡的特点:
    • 负载均衡器位于客户端,不需要单独搭建一个负载均衡服务器。
    • 负载均衡是在客户端发送请求前进行的,因此客户端清楚地知道是哪个服务端提供的服务。
    • 客户端都维护了一份可用服务清单,而这份清单都是从服务注册中心获取的。
3.负载均衡流程

在这里插入图片描述

4.负载均衡策略
内置负载均衡规则类规则描述
RoundRobinRule简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则
AvailabilityFilteringRule对以下两种服务器进行忽略: (1)在“短路”状态服务器(2)并发数过高的服务器。
WeightedResponseTimeRule为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择
ZoneAvoidanceRule以区域可用的服务器为基础进行服务器的选择。而后再对Zone内的多个服务做轮询,默认的实现就是ZoneAvoidanceRule,是一种轮询方案
BestAvailableRule忽略那些短路的服务器,并选择并发数较低的服务器
RandomRule随机选择一个可用的服务器
RetryRule重试机制的选择逻辑
5.自定义负载均衡策略

通过定义IRule实现可以修改负载均衡规则,有两种方式:代码方式、配置文件方式

1.代码方式
  • 在order-service中的OrderApplication类中,定义一个新的IRule
    /**
     * 创建 RestTemplate 并注入 Spring 容器
     * @return
     */
    @Bean
    @LoadBalanced
    public IRule restTemplate(){
        return new RandomRule();
    }
2.配置文件方式
  • 在order-service的application.yml文件中,添加新的配置也可以修改规则
user-service: # 给某个微服务配置负载均衡规则
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

一般用默认的负载均衡规则,不做修改

6.饥饿加载
  • Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时

  • 在order-service的application.yml文件中,添加新的配置也可以修改规则,开启饥饿加载

ribbon:
  eager-load:
    enabled: true
    clients: user-service
更多推荐

Python文件操作和管理指南:打开、读取、写入和管理文件

文章目录文件(File)打开文件使用with...as语句打开文件读取文件内容读取大文件的方式逐行读取和读取全部行写文件操作文件定位seek()tell()关闭文件文件管理获取目录结构获取当前目录切换当前所在目录创建目录删除目录删除文件重命名文件总结python精品专栏推荐python基础知识(0基础入门)python

Tomcat多实例+Nginx动静分离、负载均衡

这里写目录标题Tomcat多实例+动静分离、负载均衡一、Tomcat多实例部署1、安装JDK2、安装启动tomcat二、Nginx+Tomcat负载均衡、动静分离1、Nginx负载均衡实现原理1.1原理1.2Nginx配置反向代理的主要参数2、Nginx动静分离实现原理2.1原理2.2Nginx静态处理优势3、动静分离

计网第五章(运输层)(四)(TCP的流量控制)

一、基本概念流量控制就是指让发送方的发送速率不要太快,使得接收方来得及接收。可以使用滑动窗口机制在TCP连接上实现对发送方的流量控制。注意:之前在讨论可靠传输时,讨论过选择重传协议和回退N帧协议都是基于滑动窗口的机制上进行实现的。二、具体实现接收方通过向发送方发送带有自己接收窗口值的报文段来控制发送方的发送窗口。注意:

详解TCP/IP协议第五篇:详细介绍网络传输中的地址

文章目录一:通信中地址简介1:地址的唯一性(一):唯一性狭义概念(二):唯一性广义概念2:地址的层次性(一):地址分层的意义(二):MAC地址优劣(三):IP地址的便利一:通信中地址简介通信传输中,发送端和接收端可以被视为通信主体。它们都能由一个所谓“地址”的信息加以标识出来。当人们使用电话时,电话号码就相当于“地址”

中手游上半年扭亏为盈,仙剑IP魅力不减?

你也曾有过江湖梦吗?你也曾因“为国为民、为友为邻”的侠者心无处可安而苦恼吗?那么,“仙剑”系列游戏或许可以成为你的灵魂寄托之所。而能让侠者的江湖梦具象化的幕后厂商,便是中手游。两年前,中手游斥巨资买下了仙剑IP的大陆地区权益,两年内,中手游不断推出仙剑系列游戏新作。其中,公司于今年6月上线的《新仙剑奇侠传之挥剑问情》,

TCP特性的滑动窗口,流量控制

目录一、TCP特性滑动窗口二、TCP特性流量控制(作为滑动窗口的补充)一、TCP特性滑动窗口提高传输效率(更准确的说,让TCP在可靠传输的前提下,效率不太拉跨)💛当然你要是想让TCP媲美UDP,也是痴人说梦,只能说减小差距。一次性发一组数据,发数据的过程中,不需要等待ACK,就直接往前发,此时相当于“一份等待时间”等

TCP socket && UDP && TCP协议 && IP协议 && 以太网等

第1题(编程题)题目名称:编写TCP版本的echoserver和echoclient题目内容:编写TCP版本的echoserver和echoclient第2题(编程题)题目名称:编写TCP版本的字典客户端和字典服务器题目内容:编写TCP版本的字典客户端和字典服务器第3题(编程题)题目名称:编写TCP版本的多线程服务器题

02_Bootstrap基础组件02

4排版使用Bootstrap的排版特性,您可以创建标题、段落、列表及其他内联元素,实际上它是把大部分在HTML的基本标签加了样式。所以这部分相对比较简单。4.1标题h1-h6重新定义样式,HTML中的所有标题标签,<h1>到<h6>均可使用。增加了.h1到.h6类,为的是给内联(inline)属性的文本赋予标题的样式。

远程连接PostgreSQL:配置指南与安全建议

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🐅🐾猫头虎建议程序员必备技术栈一览表📖:🛠️全栈技术FullStack:📚MERN/MEAN/MEVNStack|🌐Jamstack|🌍GraphQL|🔁RESTfulAPI|⚡WebSockets|🔄CI/CD|🌐Git&Versio

Linux安全加固:保护你的服务器

🌷🍁博主猫头虎(🐅🐾)带您GotoNewWorld✨🍁🦄博客首页——🐅🐾猫头虎的博客🎐🐳《面试题大全专栏》🦕文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺🌊《IDEA开发秘籍专栏》🐾学会IDEA常用操作,工作效率翻倍~💐🌊《100天精通Golang(基础入门篇)》🐅学会Gol

Cobra眼睛蛇-强大的Golang CLI框架,快速上手的脚手架搭建项目工具,详细安装和使用

Cobra眼睛蛇-强大的GolangCLI框架,快速上手的脚手架搭建项目工具,详细安装和使用。阅读过k8s源码的同学,应该都知道k8sScheduler、kubeadm、kubelet等核心组件的命令行交互全都是通过spf13写的Cobra库来实现。本文就来介绍下Cobra的相关概念及具体用法。关于Cobra是一个用于

热文推荐