负载均衡的常用算法

在集群中,假设有五台服务器,他们之间的地位相同(主备模式不是我们要讨论的内容),都对外提供服务。当浏览器大量请求到达时,如何决定哪个请求到达哪个服务器上,这就是我们这次讨论的核心内容。

负载均衡的策略分为应用服务器和分布式缓存集群两种适应场景。

为什么这么分呢?简单的说,应用服务器只需要转发请求就可以了。但分布式缓存集群,比如redis、Memcached等,更多的是需要再次读取数据的。也正是因为这样,当新加入一台机器后,要尽量对整个集群的影响小。

1、应用服务器

NO.1—— Random 随机

这是最简单的一种,使用随机数来决定转发到哪台机器上。

优点:简单使用,不需要额外的配置和算法。
缺点:随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。

NO.2—— Round Robin 轮询

这个也很简单,请求到达后,依次转发,不偏不向。每个服务器的请求数量很平均。

缺点:当集群中服务器硬件配置不同、性能差别大时,无法区别对待。引出下面的算法。

NO.3—— Weighted Round Robin 加权轮询

这种算法的出现就是为了解决简单轮询策略中的不足。在实际项目中,经常会遇到这样的情况。

比如有5台机器,两台新买入的性能等各方面都特别好,剩下三台老古董。这时候我们设置一个权重,让新机器接收更多的请求。物尽其用、能者多劳嘛!

这种情况下,“均衡“就比较相对了,也没必要做到百分百的平均。

NO.4—— Least Connections 最少连接

这是最符合负载均衡算法的一个。需要记录每个应用服务器正在处理的连接数,然后将新来的请求转发到最少的那台上。

NO.5—— Source Hashing 源地址散列

根据请求的来源ip进行hash计算,然后对应到一个服务器上。之后所有来自这个ip的请求都由同一台服务器处理。

2、分布式缓存集群

好了,有了前面的基础,再看分布式缓存集群就简单多了。我们只需要多考虑两点就够了。

NO.1—— 取模

这是最简单但最不实用的一个。

以redis为例,假设我们有5台机器,要想取模肯定先得转换为数字,我们将一个请求的key转成数字(比如CRC16算法那),比如现在五个请求转换成的数字后对5取模分别为0、1、2、3、4,正好转发到五台机器上。

这时意外来了,其中一台宕机了,现在集群中还有4台。之后再来请求只能对4取模。问题就暴露出来了,那之前按照5取模的数据命中的机率大大降低了,相当于每宕机一台,之前存入的数据几乎都不能用了。

因此,不推荐此种做法。

NO.2—— 哈希

这种算法叫哈希有些笼统了,具体可以分为ip哈希和url哈希(类似原地址散列)。这里就不多说了。重点说下redis中的设计。

redis中引入了哈希槽来解决这一问题。16384个哈希槽,每次不再对集群中服务器的总数取模,而是16384这个固定的数字。然后将请求分发。这样就可以避免其中一台服务器宕机,原有数据无法命中的问题。

NO.3—— 一致性哈希

终于到重头戏了,不过有了前面的介绍,这个也就不难理解了。
一致性哈希在memcached中有使用,通过一个hash环来实现key到缓存服务器的映射。

这个环的长度为2^32,根据节点名称的hash值将缓存服务器节点放在这个hash环上。如下图中的node1、node2等。

这时要保存的数据key仍旧进行hash运算,运算之后的值会落在这个hash环上的某一处(图中粉色的节点),当然这还没结束,因为他还没有落到node上。之后这个粉色的节点会沿顺时针落到离他最近的node上,over。

这里写图片描述

改进

当其中某个结点宕机后,比如node4,这时如果有结点落在了node2和node4之间,本来应该归为node4的,但这时候他宕机了,就都放在了下一个node3中。

这时,每个结点的数据量就会有很大出入了,平衡性很难保证。因此,引入“虚拟结点”。

虚拟结点是实际结点在hash空间的复制品,为了保证平衡性,一个实际node被划分成了若干个虚拟node。

如下图所示:

服务器之间的交错关系会改变,每个虚拟node之间的相对关系是不一定的,比如每个node1的虚拟节点后面可以是node2的也可以跟node3的。

此时,如果红色的node宕机了,那么将要落在这台机器上的数据可能落到蓝色,也可能是绿色的。这就保证了一定程度的平衡性。

这里写图片描述

转载于:https://www.cnblogs.com/saixing/p/6730201.html

常用算法程序集(C语言描述)(第三版) 清晰PDF版,配完整源代码。 第1章 多项式的计算 1.1 一维多项式求值 1.2 一维多项式多组求值 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式相乘 1.7 多项式相除 1.8 复系数多项式相除 第2章 复数运算 2.1 复数乘法 2.2 负数除法 2.3 复数乘幂 2.4 复数的n次方根 2.5 复数指数 2.6 复数对数 2.7 复数正弦 2.8 复数余弦 第3章 随机数的产生 3.1 产生0到1之间均匀分布的一个随机数 3.2 产生0到1之间均匀分布的随机数序列 3.3 产生任意区间内均匀分布的一个随机整数 3.4 产生任意区间内均匀分布的随机整数序列 3.5 产生任意均值与方差的正态分布的一个随机数 3.6 产生任意均值与方差的正态分布的随机数序列 第4章 矩阵运算 4.1 实矩阵相乘 4.2 复矩阵相乘 4.3 一般实矩阵求逆 4.4 一般复矩阵求逆 4.5 对称正定矩阵的求逆 4.6 托伯利兹矩阵求逆的特兰持方法 4.7 求一般行列式的值 4.8 求矩阵的值 4.9 对称正定矩阵的乔里斯基分解与列式求值 4.10 矩阵的三角分解 4.11 一般实矩阵的QR分解 4.12 一般实矩阵的奇异值分解 4.13 求广义逆的奇异值分解法 第5章 矩阵特征值与特征向量的计算 5.1 约化对称矩阵为对称三对角阵的豪斯荷尔德变换法 5.2 求对称三对角阵的全部特征值与特征向量 5.3 约化一般实矩阵为赫申伯格矩阵的初等相似变换法 5.4 求赫身伯格矩阵全部特征的QR方法 5.5 求实对称矩阵特征值与特征向量的雅可比法 5.6 求实对称矩阵特征值与特征向量的雅可比过关法 第6章 线性代数方程组的求解 6.1 求解实系数方程组的全选主元高斯消去法 6.2 求解实系数方程组的全选主元高斯-约当消去法 6.3 求解复系数方程组的全选主元高斯消去法 6.4 求解复系数方程组的全选主元高斯-约当消去法 6.5 求解三对角线方程组的追赶法 6.6 求解一般带型方程组 6.7 求解对称方程组的分解法 6.8 求解对称正定方程组的平方根法 6.9 求解大型系数方程组 6.10 求解托伯利兹方程组的列文逊方法 6.11 高斯-塞德尔失代法 6.12 求解对称正定方程组的共岿梯度法 6.13 求解线性最小二乘文体的豪斯伯尔德变换法 6.14 求解线性最小二乘问题的广义逆法 6.15 求解病态方程组 第7章 非线性方程与方程组的求解 7.1 求非线性方程一个实根的对分法 7.2 求非线性方程一个实根的牛顿法 7.3 求非线性方程一个实根的埃特金矢代法 7.4 求非线性方程一个实根的连分法 7.5 求实系数代数方程全部的QR方法 7.6 求实系数方程全部的牛顿下山法 7.7 求复系数方程的全部根牛顿下山法 7.8 求非线性方程组一组实根的梯度法 7.9 求非线性方程组一组实根的拟牛顿法 7.10 求非线性方程组最小二乘解的广义逆法 7.11 求非线性方程一个实根的蒙特卡洛法 7.12 求实函数或复函数方程一个复根的蒙特卡洛法 7.13 求非线性方程组一组实根的蒙特卡洛法 第8章 插值与逼近 8.1 一元全区间插值 8.2 一元三点插值 8.3 连分式插值 8.4 埃尔米特插值 8.5 特金逐步插值 8.6 光滑插值 8.7 第一种边界条件的三次样条函数插值 8.8 第二种边界条件的三次样条函数插值 8.9 第三种边界条件的三次样条函数插值 8.10 二元三点插值 8.11 二元全区间插值 8.12 最小二乘曲线拟合 8.13 切比雪夫曲线拟合 8.14 最佳一致逼近的里米兹方法 8.15 矩形域的最小二乘曲线拟合 第9章 数值积分 9.1 变补长梯形求积法 9.2 变步长辛卜生求积法 9.3 自适应梯形求积法 9.4 龙贝格求积法 9.5 计算一维积分的连分式法 9.6 高振荡函数求积法 9.7 勒让德-高斯求积法 9.8 拉盖尔-高斯求积法 9.9 埃尔米特-高斯求积法 9.10 切比雪夫求积法 9.11 计算一维积分的蒙特卡洛法 9.12 变步长辛卜生二重积分方法 9.13 计算多重积分的高斯方法 9.14 计算二重积分的连分方式 9.15 计算多重积分的蒙特卡洛法 第10章 常微分方程组的求解 10.1 全区间积分的定步长欧拉方法 10.2 积分一步的变步长欧拉方法 10.3 全区间积分维梯方法 10.4 全区间积分的定步长龙格-库塔方法 10.5 积分一步的变步长龙格-库塔方法 10.6 积分一步的变步长基尔方法 10.7 全区间积分的变步长默森方法 10.8 积分一步的连分方式 10.9 全区间积分的双边法 10.10 全区间积分的阿当姆斯预报校正法 10.11 全区间积分的哈明方法 10.12 积分一步的特雷纳方法 10.13 积分刚性方程组的吉尔方法 10.14 二阶微分方程边值问题的数值解法 第11章 数据处理 11.1 随机样本分析 11.2 一元线性回归分析 11.3 多元线性回归分析 11.4 逐步回归分析 11.5 半对数数据相关 11.6 对数数据相关 第12章 极值问题的求解 12.1 一维极值连分式法 12.1 n维维极值连分式法 12.3 不等式约束线性规划问 12.4 求n维极值的单行条优法 12.5 求约束条件下n维极值的复形调优法 第13章 数学变换与滤波 13.1 傅立叶级数逼近 13.2 快速傅立叶变换 13.3 快速袄什变换 13.4 五点三次平滑 13.5 离散随机线性系统的卡尔曼滤波 13.6 α-β-γ滤波 第14章 特殊函数的计算 14.1 伽马函数 14.2 不完全伽马函数 14.3 误差函数 14.4 第一类整数阶贝塞尔函数 14.5 第二类整数阶贝塞尔函数 14.6 变形第一类整数阶贝塞尔函数 14.7 变形第二类整数阶贝塞尔函数 14.8 不完全贝塞尔函数 14.9 正态分布函数 14.10 t-分布函数 14.11 χ-分布函数 14.12 F-分布函数 14.13 正弦积分 14.14 余弦积分 14.15 指数积分 14.16 第一类椭圆积分 14.17 第二类椭圆积分 第15章 排序 15.1 冒泡排序 15.2 快速排序 15.3 希尔排序 15.4 堆排序 15.5 结构排序 15.6 磁盘文件排序 15.7 捉扑分类 第16章 查找 16.1 结构体数组的顺序查找 16.2 磁盘随机文本文件对分查找 16.3 有序数组的对分查找 16.4 按关键字成员有序的结构体数组的对分查找 16.5 按关键字有序的磁盘随机文本文件的对分查找 16.6 磁盘随机文本文件的字符串匹配
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值