一分钟了解负载均衡的一切

什么是负载均衡

负载均衡(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沈剑

来源:51CTO

时间: 2024-10-30 04:33:17

一分钟了解负载均衡的一切的相关文章

如何实施异构服务器的负载均衡及过载保护?

零.需求缘起 第一篇文章"一分钟了解负载均衡"和大家share了互联网架构中反向代理层.站点层.服务层.数据层的常用负载均衡方法. 第二篇文章"lvs为何不能完全代替DNS轮询"和大家share了互联网接入层负载均衡需要解决的问题及架构演进. 在这两篇文章中,都强调了"负载均衡是指,将请求/数据[均匀]分摊到多个操作单元上执行,负载均衡的关键在于[均匀]". 然而,后端的service有可能部署在硬件条件不同的服务器上: 1)如果对标最低配的服务

一分钟了解阿里云产品:负载均衡概述

阿里云的产品众多,今天让我们来了解下阿里云的负载均衡(Server Load Balancer).一起来关注下吧.   什么是负载均衡?简而言之,负载均衡就是对多台云服务器进行流量分发的服务.   负载均衡可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性.您可以根据业务需求实时添加或删减云服务器,从而实现无缝的业务伸缩.     相比于传统硬件负载均衡器,阿里云的负载均衡有着如下优势:   负载均衡支持删除和添加后端云服务器,实现无缝伸缩 ,伸缩过程不用更换任何设

一分钟了解阿里云产品:资源编排快速深度克隆负载均衡

关于资源编排的应用有很多,下面来给大家介绍一个.   在日常的开发过程中,我们可能需要经常的将负载均衡后面挂载的实例挂载到不同的负载均衡上进行开发测试或者ABTest.这个时候我们需要快速的克隆一个负载均衡,包括相应的监听设置,可能还会包含后端挂载的ECS实例.在通过开发或者测试之后释放.   通过资源编排的ALIYUN::SLB::LoadBalancerClone 我们可以快速的克隆一个已有的负载均衡. 基本属性       SourceLoadBalancerId 源负载均衡的Id Loa

一分钟了解阿里云产品:负载均衡五大热点技术问题分析

在上一篇文章中,我们为大家介绍负载均衡的概况,负载均衡就是对多台云服务器进行流量分发的服务,那在使用过程中,经常遇到的热门技术问题有哪些呢?     创建负载均衡实例:   https://help.aliyun.com/document_detail/slb/get-started/create-slb.html?spm=5176.product8314871_slb.6.92.w78Chv   负载均衡实例列表:   https://help.aliyun.com/document_deta

Oracle ARC负载均衡具体配置详解

本文详细介绍了Oracle负载均衡的具体配置.通过客户端和服务器端两方面进行配置,文中代码比 较全面,值得大家参考. 对于专业的数据处理存储的Oracle ARC而言,负载均衡的设置就更为重要了.那么如何对Oracle负 载均衡进行配置呢?就让我们一起看看本文来学习一下吧.我们将从客户端和服务器端来进行解说. Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工 作,在Oracle负载均衡中分为两种,一种是基于客户端连接的,另外一种是基于服务器端的,

Oracle ARC负载均衡

本文详细介绍了Oracle负载均衡的具体配置.通过客户端和服务器端两方面进行配置,文中代码比 较全面,值得大家参考. 对于专业的数据处理存储的Oracle ARC而言,负载均衡的设置就更为重要了.那么如何对Oracle负 载均衡进行配置呢?就让我们一起看看本文来学习一下吧.我们将从客户端和服务器端来进行解说. Oracle负载均衡主要是指新会话连接到RAC数据库时,如何判定这个新的连接要连到哪个节点进行工 作,在Oracle负载均衡中分为两种,一种是基于客户端连接的,另外一种是基于服务器端的,

章文嵩(正明)博士和他背后的负载均衡(LOAD BANLANCER)帝国

案首语: 阿里集团技术大牛,@正明,淘宝基础核心软件研发负责人.LVS创始人.阿里云首席科学家章文嵩博士从阿里离职,去追求技术人生另一段历程,让阿里像我一样的很多热爱技术的工程师都有一丝牵动和感触. 我个人作为一个平凡的一线技术工程师,对章博士是很敬佩的(虽然他还不认识我),国内IT业界这么多年,在底层基石技术层面有所建树,打到Linux标准内核模块层面的应该就LVS了吧,而且就广泛影响力方面,LVS在Linux逐渐取代IBM Aix, Sun Solaris,HPUX 这些Unix们的过程中,

架构分析、数据整合、负载均衡,梦想旅行解析云上实践

全面赋能,双11电商解决方案上新,全新75折:https://www.aliyun.com/solution/ecommerce/act/huhang1111 9月23日由阿里云主办的第三期<电商大咖直播:备战双11最佳实践>线上分享圆满结束,来自梦想旅行的CTO李帅分享了如何在大数据的云上实践过程中来把畅行全球的事做的更完美,主要介绍了分布式爬虫架构.数据整合与知识发现.遇到的阻碍.高可用与容灾. 本次视频直播的整理文章整理完毕,如下内容. 如何能够让云计算更好的帮助行业的发展.更好的服务行

MySQL双机高可用的负载均衡(读写分离、主从自动切换)架构设计

架构简介   前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上.于是设计了如下的架构.ps://www.centos.bz/wp-content/uploads/2014/12/%E5%8F%8C%E6%9C%BAha%E6%9E%B6%E6%9E%84%E5%9B%BE.png" /> 此架构主要是由keepalived实现双机高可用,维护了一个外网VIP,一个内网VIP.正常情况时,外网V