深入理解负载均衡原理及算法

1. 前言

在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服务能力,用户的请求不管连接到哪台服务器,都能得到相同的相应处理。

另一方面,如何构建和调度服务集群这事情,又必须对用户一侧保持足够的透明,即使请求背后是由一千台、一万台机器来共同响应的,也绝非用户所关心的事情,用户需记住的只有一个域名地址而已。调度后方的多台机器,以统一的接口对外提供服务,承担此职责的技术组件被称为 负载均衡

2. 概念

负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务或者网络请求)进行平衡,分摊到多个操作单元(服务器或者组件)上进行运行。目的是尽量将网络流量 平均 发送到多个服务器上,以保证整个业务系统的高可用。负载均衡构建在原有网络结构上,它提供了一种透明且廉价有效的方法,扩展服务器和网络设备的贷款、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

图片

负载均衡

负载均衡主要有以下作用:

  • 高并发:通过采取一定的算法策略,将流量尽可能的均匀发送给服务端,以此提高集群的并发处理能力。

  • 伸缩性:根据网络流量的大小,增加或者减少后端服务器实例,由负载均衡设备进行控制,这样使得集群具有伸缩性。

  • 高可用:负载均衡器通过算法或者其他性能数据来监控候选实例,当实例负载过高或者异常时,减少其流量请求或者直接跳过该实例,将请求发送给其他可用实例,这使得集群具有高可用的特性。

  • 安全防护:有些负载均衡器提供了安全防护功能。如:黑白名单处理、防火墙等。

3. 分类

3.1 根据地域范围分类

负载均衡从其应用的地理结构上分为本地负载均衡(Local Load Balance)和全局负载均衡(Global Load Balance,也叫地域负载均衡)。

3.1.1 本地负载均衡

本地负载均衡是指对本地的服务器群做负载均衡。

本地负载均衡针对本地范围的服务器群做负载均衡,本地负载均衡不需要花费高额成本购置高性能服务器,只需利用现有设备资源,就可有效避免服务器单点故障造成数据流量的损失,通常用来解决数据流量过大、网络负荷过重的问题。同时它拥有形式多样的均衡策略把数据流量合理均衡的分配到各台服务器。如果需要在现在服务器上升级扩充,不需改变现有网络结构、停止现有服务,仅需要在服务群中简单地添加一台新服务器。

3.1.2 全局负载均衡

全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群间作负载均衡。

全局负载均衡主要解决全球用户只需一个域名或IP地址,就能访问到离自己距离最近的服务器获得最快的访问速度,它在多区域都拥有自己的服务器站点,同时也适用于那些子公司站点分布广的大型公司通过企业内部互联网(Intranet)来达到资源统一合理分配的目的。全局负载均衡具备以下特点:

  • 提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果;
  • 能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性;
  • 能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线路障引起的单点失效。

内容分发网络 CDN(Content Delivery Network)采用的就是全局负载均衡。假如我们将图片存储在CDN服务器上,且该CDN在北京、杭州均部署有服务器。那么:

  • 当天津用户下载图片的时候,会自动将流量请求转发至北京的CDN服务器;

  • 当江苏用户下载图片的时候,就会将流量请求转发至杭州的服务器;

3.2 根据载体类型分类

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

3.2.1 硬件负载均衡

硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,这种设备通常称之为负载均衡器,由于专门的设备完成专门的任务,独立于操作系统,整体性能得到极大提高,加上多样化的负载均衡策略,智能化的流量管理,可达到最佳的负载均衡需求。

这类设备性能强劲、功能强大,但价格非常昂贵,一般只有土豪公司才会使用此类设备,中小公司一般负担不起,业务量没那么大,用这些设备也是浪费。

目前业界领先的两款硬件负载均衡器:F5和A10。

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

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

相关文章

实验5-3 使用函数求奇数和 (15 分)

实验5-3 使用函数求奇数和 (15 分) 本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。 函数接口定义: int even( int n ); int OddSum( int List[], int N ); 其中函数even将根据用户传…

《在细雨中呼喊》阅读笔记

《在细雨中呼喊》阅读笔记 2023年2月5号在家读完,本书就是以作者者回忆的形式来写,男一号叫孙光林,有一个哥哥孙光平,一个弟弟叫孙光明,父亲叫孙光才。书中写了四篇故事。 第一篇写的就是作者对于老家生活的回忆 小的时…

2023年第四届“华数杯”数学建模思路 - 案例:随机森林

## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林? 随机森林属于 集成学习 中的 Bagging(Bootstrap AGgregation 的简称) 方法。如果用图来表示他们之…

Android 之 AudioManager ( 音频管理器 )

本节引言: 在多媒体的第一节,我们用SoundPool写了个Duang的示例,小猪点击一个按钮后,突然发出"Duang"的 一声,而且当时的声音很大,吓死宝宝了 ,好在不是上班时间,上班时间…

DBoW3库的编译与安装(亲测可用)

1. DBoW3库介绍 DBoW3是DBoW2的增强版,这是一个开源的C库,用于给图像特征排序,并将图像转化成视觉词袋表示。它采用层级树状结构将相近的图像特征在物理存储上聚集在一起,创建一个视觉词典。DBoW3还生成一个图像数据库&#xff0c…

【LeetCode】516. 最长回文子序列

文章目录 1. 思路讲解1.1 创建dp表1.2 状态转移方程1.3 不需考虑边界问题 2. 整体代码 1. 思路讲解 1.1 创建dp表 此题采用动态规划的方法,创建一个二维dp表,dp[i][j]表示s[i, j]中最大回文子序列的长度。且我们人为规定 i 是一定小于等于 j 的。 1.2…

【大数据】Flink 从入门到实践(一):初步介绍

Flink 从入门到实践(一):初步介绍 Apache Flink 是一个框架和分布式处理引擎,用于在 无边界 和 有边界 数据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行,并能以内存速度和任意规模进行计算。 1.架构 1…

C++、Java、JavaScript和Python数组对比

C、Java、JavaScript和Python数组对比 C、Java、JavaScript和Python都有数组的概念,但在不同的编程语言中,数组的实现方式和用法可能会有所不同。 1. C:使用C时,可以使用内置的数组来存储一组具有相同数据类型的元素。数组在…

Kubernetes——理论基础

Kubernetes——理论基础 一、Kubernetes 概述1.K8S 是什么?2.为什么要用 K8S?3.Kubernetes 主要功能 二、Kubernetes 集群架构与组件三、Master 组件1.Kube-apiserver2.Kube-controller-manager3.Kube-scheduler4.配置存储中心——etcd 四、Node 组件1.Kubelet2.Ku…

【Python】模块学习之locust性能测试

目录 背景 安装 测试代码 运行命令 资料获取方法 背景 locust是一个python的第三方库,用于做性能测试,可使用多台机器同时对一台服务器进行压测,使用其中一台机器作为主节点,进行分布式管理 博主测试接口的时候一直是使用p…

Zebec APP:构建全面、广泛的流支付应用体系

目前,流支付协议 Zebec Protocol 基本明确了生态的整体轮廓,它包括由其社区推动的模块化 Layer3 构架的公链 Nautilus Chain、流支付应用 Zebec APP 以及 流支付薪酬工具 Zebec payroll 。其中,Zebec APP 是原有 Zebec Protocol 的主要部分&a…

CentOS 虚拟机磁盘扩容(非常实用)

新手村的选手在刚开始安装使用 CentOS 虚拟机时,很多选项都会按照推荐操作来,比如:磁盘推荐大小为 20 GB;但随着后面的使用,总会因为“磁盘根目录不足”原因,而导致软件无法安装、虚拟机无法正常运行等&…

人工智能在计算机视觉中的应用与挑战

引言 计算机视觉是人工智能领域的一个重要分支,旨在让计算机能够像人一样理解和解释视觉信息,实现图像和视频的自动识别、理解和分析。计算机视觉技术已经在许多领域产生了深远的影响,如人脸识别、自动驾驶、医学影像分析等。本篇博客将深入…

vue3使用iframe引入其他网站,vue-router路由跳转后页面空白,刷新之后才展示页面内容乌龙事件

问题描述:vue3项目的页面A跳转到页面B时,页面B页面是空白的,需要手动刷新一下才能恢复正常,在页面A中用iframe引入了别的网站(后续事实证明,跟iframe没一毛钱的关系)。着急的童鞋可以直接拉到底…

Linux JDK 安装

文章目录 安装步骤1、卸载openJDK1.1 查看当前Linux系统是否安装java,卸载openjdk1.2 卸载系统中已经存在的openJDK 2、在/usr/local目录下创建java目录3、上传JDK到Linux系统4、解压jdk5、配置Jdk环境变量6、重新加载/etc/profile文件,让配置生效7、测试安装是否成…

【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解

PS:本要求基于华为的eNSP模拟软件进行 具体要求: 完成步骤: 1、根据要求,对网络进行IP设计,如下图 2、对已经设计好的IP思路,对每一个路由器进行IP配置 R1路由器上的IP配置: R6路由器上的IP…

Windows terminal 添加 git bash 解决git中文乱码显示问题

Windows terminal 添加 git bash 解决git中文乱码显示问题 在 windows terminal 中配置git 说明: 点击箭头选择设置 说明: 点击"添加新配置文件"配置名称命令行,可执行文件的具体语句 C:\Program Files\Git\bin\bash.exe启动目录…

Mock.js的基本使用方法

官网网址:Mock.js (mockjs.com) 当前端工程师需要独立于后端并行开发时,后端接口还没有完成,那么前端怎么获取数据? 这时可以考虑前端搭建web server自己模拟假数据,这里我们选第三方库mockjs用来生成随机数据&#xf…

Android性能优化—图片优化

图片优化是内存优化中很重要的一部分,加载Bitmap时往往需要消耗大量的内存,稍不注意就容易导致内存溢出(OOM)。 一、图片OOM问题产生 1、 一个页面一次加载过多图片; 2、加载大图片没有进行压缩(尺寸,质…

Maven打包可执行jar包方法大全

、 使用maven-assembly-plugin (推荐) maven-assembly-plugin可以将所有的东西都打包到一个jar包中。 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-assembly-plugin</artifactId><executions><execution…