三分钟看懂负载均衡

什么是负载均衡

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。

 

常见的负载均衡方案


常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求/数据【均匀】分摊到多个操作单元上执行”。

 

【客户端层->反向代理层】的负载均衡


【客户端层】到【反向代理层】的负载均衡,是通过“DNS轮询”实现的:DNS-server对于一个域名配置了多个解析ip,每次DNS解析请求来访问DNS-server,会轮询返回这些ip,保证每个ip的解析概率是相同的。这些ip就是nginx的外网ip,以做到每台nginx的请求分配也是均衡的。

 

【反向代理层->站点层】的负载均衡


【反向代理层】到【站点层】的负载均衡,是通过“nginx”实现的。通过修改nginx.conf,可以实现多种负载均衡策略:

1)请求轮询:和DNS轮询类似,请求依次路由到各个web-server

2)最少连接路由:哪个web-server的连接少,路由到哪个web-server

3)ip哈希:按照访问用户的ip哈希值来路由web-server,只要用户的ip分布是均匀的,请求理论上也是均匀的,ip哈希均衡方法可以做到,同一个用户的请求固定落到同一台web-server上,此策略适合有状态服务,例如session(58沈剑备注:可以这么做,但强烈不建议这么做,站点层无状态是分布式架构设计的基本原则之一,session最好放到数据层存储)

4)…

 

【站点层->服务层】的负载均衡


【站点层】到【服务层】的负载均衡,是通过“服务连接池”实现的。

上游连接池会建立与下游服务多个连接,每次请求会“随机”选取连接来访问下游服务。

上一篇文章《RPC-client实现细节》中有详细的负载均衡、故障转移、超时处理的细节描述,欢迎点击link查阅,此处不再展开。

 

【数据层】的负载均衡

在数据量很大的情况下,由于数据层(db,cache)涉及数据的水平切分,所以数据层的负载均衡更为复杂一些,它分为“数据的均衡”,与“请求的均衡”。

数据的均衡是指:水平切分后的每个服务(db,cache),数据量是差不多的。

请求的均衡是指:水平切分后的每个服务(db,cache),请求量是差不多的。

业内常见的水平切分方式有这么几种:

一、按照range水平切分


每一个数据服务,存储一定范围的数据,上图为例:

user0服务,存储uid范围1-1kw

user1服务,存储uid范围1kw-2kw

这个方案的好处是:

(1)规则简单,service只需判断一下uid范围就能路由到对应的存储服务

(2)数据均衡性较好

(3)比较容易扩展,可以随时加一个uid[2kw,3kw]的数据服务

不足是:

(1)请求的负载不一定均衡,一般来说,新注册的用户会比老用户更活跃,大range的服务请求压力会更大

 

二、按照id哈希水平切分


每一个数据服务,存储某个key值hash后的部分数据,上图为例:

user0服务,存储偶数uid数据

user1服务,存储奇数uid数据

这个方案的好处是:

(1)规则简单,service只需对uid进行hash能路由到对应的存储服务

(2)数据均衡性较好

(3)请求均匀性较好

不足是:

(1)不容易扩展,扩展一个数据服务,hash方法改变时候,可能需要进行数据迁移

 

总结

负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。

(1)【客户端层】到【反向代理层】的负载均衡,是通过“DNS轮询”实现的

(2)【反向代理层】到【站点层】的负载均衡,是通过“nginx”实现的

(3)【站点层】到【服务层】的负载均衡,是通过“服务连接池”实现的

(4)【数据层】的负载均衡,要考虑“数据的均衡”与“请求的均衡”两个点,常见的方式有“按照范围水平切分”与“hash水平切分”

作者:58神剑

【完】

欢迎加入“架构师微信”群,与更多专家、技术同行进行热点、难点技术交流。请添加微信:geekmainland或者扫描以下二维码加群主微信,申请入群,务必注明「姓名+公司+职位」。

全网最详细的负载均衡原理图解 负载均衡由来 在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。 基于上述需求,我们要使用统一的流量入口来对外提供服务,本质上就是需要一个流量调度器,通过均衡的算法,将用户大量的请求流量均衡地分发到集群中不同的服务器上。这其实就是我们今天要说的负载均衡。 使用负载均衡可以给我们带来的几个好处: 提高了系统的整体性能; 提高了系统的扩展. 阅读详情

相关推荐

负载均衡(Load Balancing)

负载均衡是计算机网络中用于优化资源使用、最小化响应时间、最大化吞吐量,并确保没有单一资源过载的一种技术。它通过在多个计算资源(如服务器、计算机或网络链路)之间智能分配工作负载,来维持应用程序的高可用性和可靠性。

Davina_yu的博客 939

负载均衡的原理和架构

1 为什么需要负载均衡? 从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决了,但不同的机器面临的业务压力不尽相同,为了使各机器均匀的分担业务处理压力,需要在集群前面增加负载均衡设备,实现业务被平均分发到各业务处理单元。 图1 负载均衡架构 2 负载均衡原理 系统的扩展可分为纵向(...

destiny的专栏 3110

三分钟看懂一致性哈希算法

另外,这个时候如果只算出三个哈希值,那再跟数据的哈希值比较的时候,很容易分得不均衡,因此就引入了虚拟节点的概念,通过把三个节点加上ID后缀等方式,每个节点算出n个哈希值,均匀的放在哈希环上,这样对于数据算出的哈希值,能够比较散列的分布(详见下面代码中的replica)最关键的区别就是,对节点和数据,都做一次哈希运算,然后比较节点和数据的哈希值,数据取和节点最相近的节点做为存放节点。这样就保证当节点增加或者减少的时候,影响的数据最少。一致性哈希算法,作为分布式计算的数据分配参考,比传统的取模,划段都好很多。

专注基础架构领域 779

负载均衡最全详解

对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。1)四层的负载均衡就是基于IP+端口的负载均衡:在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡。

huang714的专栏 3458

告别QWebEngineView!用QtLocation+SQLite打造离线地图应用(附完整源码)

本文详细介绍了如何利用QtLocation模块与SQLite数据库构建高性能离线地图引擎,解决传统QWebEngineView方案在网络依赖、内存占用和定制化方面的不足。通过多级缓存机制、异步写入优化和纹理压缩技术,实现工业级应用的稳定运行和高效渲染,特别适合车载导航和野外勘探等场景。

weixin_30431445的博客 363

s9keaz128 UART Bootloader 单片机篇(上)

网络上充斥着各种各样的串口升级方案,基本都是基于Y-Mode协议下载。采用这种升级方案学习还是可以,用在产品上还是有点欠缺。如下载完成后,需要把时间发送到设备就不好搞了。如下这个设备返回的信息,最后一项就是固件更新时间。固件名称: KEA128编译时间固件版本: 1.0.3硬件版本: 1.0.3产品序列号功能名称: App固件更新时间串口升级演示视频。

一人科技 1795

干货 | 三分钟带你挑选专属负载均衡

干货 | 三分钟带你挑选专属负载均衡 原创:京东云IaaS产品部京东云开发者社区今天 对于云厂商来说,在提高系统可用性、扩展系统服务能力方面,负载均衡可谓是重要一环。 负载均衡可将用户的业务请求按照一定策略自主分发给多台后端服务器处理,从而调整资源利用情况,消除由于单台后端服务器故障对系统的影响。 LB? ALB? NLB? DNLB? 傻傻分不清楚 负载均衡的使用场景众多, ...

weixin_30251587的博客 112

docker安装fastdfs+nginx配置

docker安装fastdfs+nginx,实现图片或文件的上传与下载

weixin_47325126的博客 2193

快马AI三分钟搞定Windows版Nginx配置:从入门到负载均衡实战

实际体验下来,最惊喜的是SSL证书配置——以往需要半天的工作,现在勾选几个选项就能自动生成包含证书路径、HTTPS重定向和HSTS头的完整配置。对于需要快速搭建Windows测试环境的开发者,这绝对是提升效率的神器。最近在Windows服务器上折腾Nginx配置时,发现手动编写配置文件既容易出错又费时间。尤其是负载均衡和SSL证书这些复杂场景,每次都要反复查阅文档。的AI生成功能,整个过程变得异常简单——从选择场景到获得可用的配置文件,最快只要三分钟。特别适配Windows的配置:调整。

GreyWolf12的博客 847

DrMOS电路仿真

将驱动电路与功率MOS集成化后既是DrMOS。把驱动芯片以及上下桥MOSFET封装在一起,这样每一相供电就有了单独的驱动芯片,并且这种高度整合的MOSFET可以通过更高的电流、发热比传统的MOSFET也小很多且更节能 自举升压同步BUCK高低侧栅驱动电路原理及仿真 ...

Srambler的博客 5039

Unity 编辑器篇|(四)编辑器拓展GUI类 (全面总结 | 建议收藏)

GUI 类是 Unity GUI 的接口,并且具有手动定位功能。“即时模式”GUI 系统(也称为 IMGUI)是一个完全独立的功能系统,不同于 Unity 基于游戏对象的主 UI 系统。IMGUI 是一个代码驱动的 GUI 系统,主要用作程序员的工具。为了驱动该系统,需在实现脚本上调用 OnGUI 函数即时模式 GUI 系统常用于:创建游戏内调试显示和工具。为脚本组件创建自定义检视面板。创建新的编辑器窗口和工具以扩展 Unity 本身。

游戏开发小Y的博客 12万+

Nacos 入门指南:三分钟看懂“服务注册+配置中心”到底在做什么

摘要: Nacos是阿里开源的服务发现与配置管理平台,解决微服务架构中"服务动态注册发现"和"配置集中管理"两大痛点。作为"滴滴调度中心"实时管理健康服务实例,并通过"云端遥控器"实现配置秒级推送与版本回滚。相比Eureka、Consul等工具,Nacos兼具服务发现(AP/CP混合)与配置中心功能,支持中文界面与热更新,是Spring Cloud Alibaba官方推荐方案。通过简单命令即可快速搭建,帮助开发者告别人工维护IP

一个UI、前端爱好者。 505

TC3XX - MCAL知识点(三十三):基于EB Tresos配置Tc3xx的MCAL代码如何产生中心对称的三相六路发波波形

本文用于记录如何在英飞凌 tc3xx 芯片的应用开发中,借助 EB Tresos 配置工具生成的配置代码与 MCAL 源码相结合,进而实现三相六路中心对称互补的 PWM 输出效果。外部资源需求:EB Tresos23.0以上、Tasking\Hightec编译器、示波器\逻辑分析仪。

梦想技术家 1212

Spring Cloud微服务架构入门(三分钟看懂)

前言 Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。 Spring Cloud中各个组件在微服务架...

爱琴孩的博客 517

YOLOv8【第七章:损失函数篇·第1节】一文搞定,IoU系列损失函数!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1199

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【TKE】三分钟用TKE部署一个redis

在 TKE(腾讯云容器服务)上弄一个开发环境可以访问的简易的 redis 实例,这里有几个要点: dockerhub 的 redis 镜像 内网 LB TKE 的配置如下图: 内网 LB 的作用是要在公司内网访问,没有考虑用个 Helm(应用),因为配置很复杂,单独部署一个 Deployment 三分钟搞定。 ...

runzhliu大数据/容器日记 703

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

三分钟读懂ZeroMQ

为什么需要ZeroMQ ZeroMQ可以分开来看Zero MQ,MQ就是Message Queue消息队列。Zero是零,它代表零中间件(None-Broker)、零延迟,同时,它又有了新的含义:零管理、零成本、零浪费。总的来说,零表示最小、最简,这是贯穿于该项目的哲理。致力于减少复杂程度,提高易用性。 消息队列有四个典型应用场景: 异步处理:任务并行,减少响应时间 应用解耦:无上下文,无状态,...

weixin_43465618的博客 2882

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Fast-GitHub 加速插件:三分钟装好,GitHub 克隆提速几倍

如果你每天在 GitHub 上 clone 仓库、下载 Release 包、翻 Issue 讨论,多半被龟速折磨过:进度条爬到一半就断,仓库页面白屏好几秒。**Fast-GitHub** 是一款免费的开源浏览器插件,它把 GitHub 的克隆与下载请求自动转发到加速节点,装完只要三步,终端里的速度数字就会肉眼可见地变大。这篇指南带你从零装好它,并验证提速是否真的生效。 ## 插件到底改变了哪一步

gitblog_00471的博客 231

Istio流量治理原理之负载均衡(内含福利)

流量治理是一个非常宽泛的话题,例如: 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持; 同一个服务有两个版本在线,将一部分流量切到某个版本上; 对服务进行保护,例如限制并发连接数、限制请求数、隔离故障服务实例等; 动态修改服务中的内容,或者模拟一个服务运行故障等。 在Istio中实现这些服务治理功能时无须修改任何应用的代码。较之微服务的SDK方式,Istio以一种更轻便、透...

京东科技开发者 1313

Istio流量治理原理之负载均衡

流量治理是一个非常宽泛的话题,例如: 动态修改服务间访问的负载均衡策略,比如根据某个请求特征做会话保持; 同一个服务有两个版本在线,将一部分流量切到...

359
上一篇: 程序员的江湖,黑话一定要牢记
下一篇: 程序员、架构师、技术经理、技术总监和CTO都是干什么的?
yangactive
博客等级 码龄15年 15粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值