【Spring Cloud系列】-负载均衡(Load Balancer,LB)

news2024/12/30 1:41:44

【Spring Cloud系列】-负载均衡(Load Balancer,LB)

文章目录

  • 【Spring Cloud系列】-负载均衡(Load Balancer,LB)
    • 一、什么是负载均衡(Load Balancer,LB)
    • 二、负载均衡的主要作用:
    • 三、负载均衡的优点
    • 四、负载均衡的分类
      • 4.1 载体维度分类
        • 4.1.1 硬件负载均衡
        • 4.1.2 软件负载均衡
      • 4.2 网络通讯进行分类
        • 4.2.1 四层负载均衡
        • 4.2.2 七层负载均衡
    • 五、负载均衡算法
      • 5.1 轮询(Random)
      • 5.2 随机
      • 5.3 动态均衡算法
      • 5.4 源地址哈希
      • 5.5 一致性哈希
    • 六、总结

在这里插入图片描述

当前大多数的互联网系统都使用了服务器集群技术,集群是将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等等。

一、什么是负载均衡(Load Balancer,LB)

LB,既负载均衡(Load Balancer),是高并发、高可用系统必不可少的关键组件,其目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

二、负载均衡的主要作用:

  1. 高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中的各结点的工作量。从而提升整个应用集群处理并发的能力(吞吐量)
  2. 伸缩性:添加或减少服务器数量,然后由负载均衡分发控制。使集群具备伸缩性。
  3. 高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳转,将请求分发给可用的服务器。使服务集群具有高可用特性。
  4. 安全防护:负载均衡软件或硬件提供了安全性功能;如防护墙,黑名单、防攻击。

三、负载均衡的优点

  1. 减少公网IP数量,节省IP支出成本。
  2. 异常内部服务器IP,提高内部服务器安全性。
  3. 解决单机故障问题,提供高并发下高可用的策略。
  4. 在用户无感知情况下,做WEB服务器的动态水平拓展。
  5. 支持四层和七层负载,对四层性能更好,支持服务器的动态上下线。
  6. 性能强,并发数可达数万至数十万。
  7. 配置简单,有固定格式的配置文件。

四、负载均衡的分类

负载均衡已出现很久的技术,并不是什么黑科技,根据不同的维度可以进行不同的分类。

4.1 载体维度分类

从支持负载均衡的载体来看,可以将负载均衡分为两类:硬件负载均衡软件负载均衡;

4.1.1 硬件负载均衡

硬件负载均衡:一般是在定制处理器上运行的独立负载均衡服务器,价格昂贵,土豪专属。

硬件负载均衡的主流产品:F5Big-IP,Citrix(思杰)Netscaler

硬件负载均衡优点

  • 功能强大:支持全局负载均衡并提供较全面的、复杂的负载均衡算法。
  • 性能强悍:硬件负载均衡由于是在专用处理器上运行,因此吞吐量大,可支持单机百万以上的并发。
  • 安全性高:往往具备防火墙,防 DDos 攻击等安全功能。

硬件负载均衡缺点

  • 成本昂贵:购买和维护硬件负载均衡的成本都很高。
  • 扩展性差:当访问量突增时,超过限度不能动态扩容。

4.1.2 软件负载均衡

软件负载均衡从软件层面实现负载均衡,一般可以在任何标准物理设备上运行,

软件负载均衡主流产品:Nginx、HAProxy、LVS。

  • LVS可以作为四层负载均衡器,其负载均衡的性能优于Nginx。
  • HAProxy可以作为HTTP和TCP负载均衡器。
  • Nginx、HAProxy可以作为四层或七层负载均衡器。

软件负载均衡优点

  • 成本低廉:只要每个Liunx服务器,然后装上Nginx或其他负载均衡软件即可。
  • 灵活:7层和4层负载均衡可以根据业务进行选择,有可以根据业务进行比较方便的扩展,比如:由于业务特殊需要做一些定制化的功能。
  • 扩展性好:适应动态变化,可以通过添加软件负载均衡实例,动态扩展到超出初始容量的能力

软件负载均衡缺点

  • 性能一般:比起硬件来说支撑并发数不大。
  • 功能没有硬件强大
  • 安全性没有硬件负载均衡高

4.2 网络通讯进行分类

软件负载均衡从通信层面来看,又可以分为四层和七层负载均衡。

4.2.1 四层负载均衡

基于 IP 地址和端口进行请求的转发,可基于IP的负载均衡及其基于MAC地址ID负载均衡。

4.2.2 七层负载均衡

基于HTTP头部请求、URL 信息将请求转发到特定的主机。主要方式有:DNS负载均衡、HTTP负载均衡、反向代理负载均衡、IP负载均衡、 数据链路层负载均衡等。

DNS负载均衡:负载均衡工作,交给 DNS 服务器处理,省掉了负载均衡服务器维护的麻烦;性能方面可以支持基于地址的域名解析,解析成距离用户最近的服务器地址(类似 CDN 的原理),可以加快访问速度,改善性能。

HTTP负载均衡:根据用户的 HTTP 请求计算出一个真实的服务器地址,将该服务器地址写入 HTTP 重定向响应中,返回给浏览器,由浏览器重新进行访问。

反向代理负载均衡(Reverse Proxy):指以 代理服务器 来接受网络请求,然后 将请求转发给内网中的服务器,并将从内网中的服务器上得到的结果返回给网络请求的客户端。反向代理负载均衡属于七层负载均衡。主流产品:NginxApache

正向代理与反向代理有什么区别?

正向代理:发生在客户端,是由用户主动发起的。翻墙软件就是典型的正向代理,客户端通过主动访问代理服务器,让代理服务器获得需要的外网数据,然后转发回客户端。

反向代理:发生在 服务端,用户不知道代理的存在。

IP负载均衡:在内核进程完成数据分发,较反向代理负载均衡有更好的从处理性能。但是,由于所有请求响应都要经过负载均衡服务器,集群的吞吐量受制于负载均衡服务器的带宽。

数据链路层负载均衡:数据链路层负载均衡是指在通信协议的数据链路层修改 mac 地址进行负载均衡。在 Linux 平台上最好的链路层负载均衡开源产品是 LVS (Linux Virtual Server)。LVS 是基于 Linux 内核中 netfilter 框架实现的负载均衡系统。netfilter 是内核态的 Linux 防火墙机制,可以在数据包流经过程中,根据规则设置若干个关卡(hook 函数)来执行相关的操作。

五、负载均衡算法

负载均衡算法是负载均衡服务核心中的核心。负载均衡产品多种多样,但是各种负载均衡算法原理是共性的。负载均衡算法有很多种,分别适用于不同的应用场景,本文仅介绍最为常见的负载均衡算法的特性及原理:轮询随机最小活跃数源地址哈希一致性哈希

5.1 轮询(Random)

将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。

优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;

缺点:没有考虑机器的性能问题,集群性能瓶颈更多的会受性能差的服务器影响。

5.2 随机

将请求随机分配到各个节点。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。

5.3 动态均衡算法

  • 最小连接数法

    根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。

    优点:动态,根据节点状况实时变化;

    缺点:提高了复杂度,每次连接断开需要进行计数;

    实现:将连接数的倒数当权重值。

  • 最快响应速度法

    根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。

    优点:动态,实时变化,控制的粒度更细,跟灵敏;

    缺点:复杂度更高,每次需要计算请求的响应速度;

    实现:可以根据响应时间进行打分,计算权重。

  • 观察模式法

    观察者模式是综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配

5.4 源地址哈希

根据客户端的IP地址,通过哈希计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。

优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向;

缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。

5.5 一致性哈希

主要的特点就是Hash环,我们的请求可以构建成一个Hash环,按照顺时针记录hash和请求。当我们的服务挂了A时,我们只需要将A的请求交给A后面的B处理;当我们需要增加服务器C时,我们只需要在Hash环上划一块范围,然后交给C;这样就可以实现动态的扩容和缩容。一致性哈希用于解决分布式缓存系统中的节点选择和在增删服务器后,节点减少带来的数据缓存的消失与重新分配问题。

六、总结

本文讲解了什么是负载均衡、负载均衡常用的方式、负载均衡分类及其算法。下一章基于进程中的负载均衡Ribbon使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/698471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】MySQL中SQL执行流程

文章目录 一、MySQL语句执行流程1.1、主要的原因有以下几点1.2、具体执行流程图如下 二、存储引擎三、MySQL的架构与内部模块四、崩溃恢复时如何判断事务是否需要提交 一、MySQL语句执行流程 连接器(Connector): 当客户端发送一个连接请求时…

设计模式学习之观察者模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式设计模式学习之工厂方法模式设计模式学习之抽象工厂模式设计模式学习之策略模式和简单工厂模式的对比 这是设计模式系列的第7篇文章,在这之前我们已经介…

React函数式组件

1. 创建函数式组件 我们可以通过所定义的函数来进行react中组件的定义。首先我们可以定义一个函数,然后通过函数的返回值来进行相关组件的定义。例如下面这张写法,我们可以通过调用一个函数,通过其返回值来进行相关的操作。 function Test()…

chatgpt赋能python:Python遍历A到Z:SEO优化的关键

Python遍历A到Z:SEO优化的关键 对于任何一家网站来说,SEO (Search Engine Optimization, 搜索引擎优化)都是至关重要的,特别是在当今数字时代,人们常常会在搜索引擎中查找信息并浏览不同网站。其中一个重要的SEO策略是为每个网站…

笔记本安装双系统ubuntu时踩的坑——戴尔

如果你遇到以下的这些问题,不要直接装了,无解!!! 建议看我另一篇教程,把硬盘取出来在另外的电脑上装好系统再放回去,这样嘎嘎快。 移动硬盘中安装Ubuntu 20.04系统——立省99%的问题_放风筝的…

水质监测的重要性及应用

水质监测是保障水环境安全和人民健康的重要手段。随着城市化进程的加速和工业化程度的提高,水污染问题日益严重,水质监测的重要性也越来越凸显。水质监测是指对水体中的各种物理、化学和生物参数进行监测和分析,以评估水体的质量和污染程度。…

概率论--随机事件与概率--贝叶斯公式--随机变量

目录 随机事件与概率 概念 为什么要学习概率论 随机事件与随机事件概率 随机事件 随机事件概率 贝叶斯公式 概念 条件概率 概率乘法公式 贝叶斯公式 举个栗子 随机变量 随机变量的定义 随机变量的分类 离散型随机变量 连续型随机变量 随机事件与概率 概念 …

和Git相关的一些问题

1. Git拉取项目的两种方式以及区别 方式 Http:通过http方式的clone项目,不需要在git上手动绑定ssh,只需要在clone的时候输入账号,密码即可;SSH:通过ssh方式clone项目,需要手动绑定ssh密钥 区别 …

Linux——从零到精通

目录 前言: 一.Linux介绍 二.Linux基础命令 三.链接和文章从零到实战 基本信息介绍 Linux 操作系统的诞生、发展和成长过程始终依赖着五个重要支柱: 桌面环境 Linux为什么象征着企鹅 命名与读法 前言: 本篇文章结合所有从零到精通 Linux…

如何在jupyter notebook 中添加虚拟环境

一&#xff0e;如何在jupyter notebook 中添加虚拟环境 假设在D:\tf_training\envTraining创建了名为env_training的虚拟环境。 1.安装IPykernel < python2 > pip install ipykernel < python3 > pip install ipykernel 说明&#xff1a;最好进入到虚拟环境…

STM32单片机(九)USART串口----第九节:STLINK Utility

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

第24天-订单服务(订单确认、订单接口幂等、订单验价、锁定库存)

f# 1.Docker安装RabbitMQ docker run -d --name rabbitmq \ -p 5672:5672 -p 25672:25672 -p 15672:15672 \ -e RABBITMQ_DEFAULT_USERadmin -e RABBITMQ_DEFAULT_PASSadmin \ --restartalways \ rabbitmq:management5672&#xff1a;AMQP端口25672&#xff1a;集群端口15672&…

和Cookie相关的一些问题

目录 1. Cookie储存在哪里&#xff1f; 2. 不同网站可以互相访问对方的Cookie吗&#xff1f; 3.二级域名能够读到一级域名的Cookie吗&#xff1f; 1. Cookie储存在哪里&#xff1f; Cookie是前后端共享的&#xff0c;故肯定是存在浏览器的。 在浏览器开发者工具中可以找到C…

### 4.1 Hadoop生态系统

狭义的Hadoop VS 广义的Hadoop 广义的Hadoop&#xff1a;指的是Hadoop生态系统&#xff0c;Hadoop生态系统是一个很庞大的概念&#xff0c;hadoop是其中最重要最基础的一个部分&#xff0c;生态系统中每一子系统只解决某一个特定的问题域&#xff08;甚至可能更窄&#xff09;…

UE5.2 Mobile安卓游戏 Graphics Profile工具使用总结

Android Graphics Profile工具 Android游戏Profile 图形帧的常用工具有: snapdragon profiler, renderdoc, 手机游戏APP环境 (1)opengl es3.1/3.2或者vulkan (2)UE5 Android 打Debug包 (3)USB连接电脑的设置: 手机连接电脑&#xff0c;开启USB传输文件模式&#xff0c;开…

全志V3S嵌入式驱动开发(解决32M spi-nor无法复位问题)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前制作spi-nor image的时候&#xff0c;就发现v3s存在无法复位的问题。只要进入linux之后&#xff0c;不管是console输入reboot指令&#xff0c;…

【C/C++解决读者-写者问题】

目录 一、问题描述二、问题分析三、三种策略实现1.读者优先策略2. 读写公平策略3.写者优先策略&#xff08;后续更新&#xff09; 一、问题描述 有读者和写者两组并发进程&#xff0c;共享一个文件&#xff0c;当两个或两个以上的读进程&#xff08;只是读数据&#xff0c;不会…

将数据转化为创新机会:8 种业务分析模型指南

当我们想要创新时&#xff0c;往往需要有实际的依据来支撑我们的想法。商业咨询顾问通常被认为是聪明的人&#xff0c;他们拥有模型化的分析思维&#xff0c;这种思维方式可以帮助他们更好地理解市场、竞争对手和客户需求。商业分析思维是一种系统性的思考方式&#xff0c;它可…

力扣 222. 完全二叉树的节点个数

题目来源&#xff1a;https://leetcode.cn/problems/count-complete-tree-nodes/description/ C题解1&#xff1a;层序遍历计算节点。 时间复杂度&#xff1a;O(n)空间复杂度&#xff1a;O(n) /*** Definition for a binary tree node.* struct TreeNode {* int val;* …

已开源!网易云信的热点探测平台实践

背景 对于一个互联网平台&#xff0c;特别是 toB 的 PaaS/SaaS 平台&#xff0c;热点 key 是一个绕不过去的问题。作为一个开放的系统&#xff0c;平台每天要承载来自大量的外部系统或者海量终端的请求&#xff0c;虽然所有的请求都需要满足开放平台定义好的鉴权规则&#xff0…