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

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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

react中hooks分享

一. HOOKS是什么 在计算机程序设计中,钩子一词涵盖了一系列技术,这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…

【Python】PySpark 数据计算 ⑤ ( RDD#sortBy方法 - 排序 RDD 中的元素 )

文章目录 一、RDD#sortBy 方法1、RDD#sortBy 语法简介2、RDD#sortBy 传入的函数参数分析 二、代码示例 - RDD#sortBy 示例1、需求分析2、代码示例3、执行结果 一、RDD#sortBy 方法 1、RDD#sortBy 语法简介 RDD#sortBy 方法 用于 按照 指定的 键 对 RDD 中的元素进行排序 , 该方…

细讲一个 TCP 连接能发多少个 HTTP 请求(一)

一道经典的面试题是从 URL 在浏览器被被输入到页面展现的过程中发生了什么,大多数回答都是说请求响应之后 DOM 怎么被构建,被绘制出来。但是你有没有想过,收到的 HTML 如果包含几十个图片标签,这些图片是以什么方式、什么顺序、建…

Arthas GC日志-JVM(十八)

上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM(十七) Arthas介绍 因为arthas完全是java代码写的,我们直接用命令启动: Java -jar arthas-boot.jar 启动成功后,选择我们项目的进程。 进入我们可用dashboard…

django实现部门表的增删改查界面

1、前期准备 部署好mysql数据库,创建好unicom数据库下载好bootstap的插件下载好jquery的插件下载好mysqlclient-1.4.6-cp36-cp36m-win_amd64.whl的安装包,根据python的版本下载 2、创建项目 在pycharm中创建项目 在pycharm的终端创建虚拟环境 py -m v…

【Docker】Docker安装Elasticsearch服务的正确方式

文章目录 1. 什么是Elasticsearch2. Docker安装Elasticsearch2.1 确定Elasticsearch的版本2.2. Docker安装Elasticsearch2.3. 给Elasticsearch安装中文分词器IKAnalyzer(可选) 点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Na…

Django使用uwsgi+nginx部署,admin没有样式解决办法

Django使用uwsginginx部署,admin没有样式解决办法 如果使用了虚拟环境则修改nginx.conf文件中的/static/路径为你虚拟环境的路径,没有使用虚拟环境则改为你python安装路径下的static server {listen 8008;server_name location; #改为自己的域名,没域名…

mybatisplus实现自动填充 时间

mybatisplus实现自动填充功能——自动填充时间 数据库表中的字段 创建时间 (createTime)更新时间 (updateTime) 每次 增删改查的时候,需要通过对Entity的字段(createTime,updateTime)进行set设置,但是,每…

途乐证券|俄罗斯宣布9月削减石油出口量

当地时间周四,美股兜售潮仍在持续,三大股指连续第二个交易日团体收跌。到收盘,道指跌落0.19%,标普500指数跌落0.25%,纳指跌幅为0.10%。 美国ISM7月非制造业PMI下滑 数据面上,美国供应办理协会ISM周四发布的…

电力巡检无人机助力迎峰度夏,保障夏季电力供应

夏季是电力需求量较高的时期,随着高温天气的来临,风扇、空调和冰箱等电器的使用量也大大增加,从而迎来夏季用电高峰期,电网用电负荷不断攀升。为了保障夏季电网供电稳定,供电公司会加强对电力设施设备的巡检&#xff0…

mmap函数详解

1、什么是mmap mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。 实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存&#x…

Android入门教程||Android 架构||Android 应用程序组件

Android 架构 Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。 Linux内核 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设…

Android 面试题 应用程序结构 十一

🔥 Framework主要包含以下模块 🔥 ActivityManagerService 这是一个Activity的管理者,负责管理所有Activity的生命周期。WindowManagerService 它是手机屏幕的的管理者,管理着屏幕的详细情况,所有对屏幕的操作最终都…

express学习笔记4 - 热更新以及express-boom

我们每次改动代码的时候都要重启项目,现在我们给项目添加一个热更新 npm install --save-dev nodemon # or using yarn: yarn add nodemon -D 在package.json添加一行代码 "dev": "nodemon ./bin/www" 重启项目 然后随便做改动&#xff…

【初阶C语言】学会结构体

1.结构体类型的声明 2.结构体初始化 3.结构体成员访问 4.结构体传参 前言:结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 一、结构体类型的声明 1.结构的声明 结构体声明的模板: struct tag {member-li…

Java版工程行业管理系统源码-专业的工程管理软件-em提供一站式服务

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目…

sqlyog导出mysql数据字典

1.打开sqlyog执行sql获取字典数据 SELECTt.COLUMN_NAME AS 字段名,t.COLUMN_TYPE AS 数据类型,CASE IFNULL(t.COLUMN_DEFAULT,Null) WHEN THEN 空字符串 WHEN Null THEN NULL ELSE t.COLUMN_DEFAULT END AS 默认值,CASE t.IS_NULLABLE WHEN YES THEN 是 ELSE 否 END AS 是否…

docker的使用

docker安装 https://docs.docker.com/engine/install/debian/ 设置国内镜像 创建或修改 /etc/docker/daemon.json 文件,修改为如下形式 {"registry-mirrors": ["https://registry.hub.docker.com","http://hub-mirror.c.163.com"…

音频光耦合器

音频光耦合器是一种能够将电信号转换为光信号并进行传输的设备。它通常由发光二极管(LED)和光敏电阻(光电二极管或光敏电阻器)组成。 在音频光耦合器中,音频信号经过放大和调节后,被转换为电流信号&#xf…

opencv基础40-礼帽运算(原始图像减去其开运算)cv2.MORPH_TOPHAT

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能够获取图像的噪声信息,或者得到比原始图像的边缘更亮的边缘信息。 例如,图 8-22 是一个礼帽运算示例,其中: 左图是原始图像。中间的图是开运算图像。右图是原始图像减开运…