上篇文章,我们用客服公司的例子来简单介绍什么是分布式系统。

今天,我们继续我们的创业游戏。(本系列,打算类似于打怪升级的游戏模式来讲解一些深奥的内容,喜欢严肃古板的同学,可以选择离开 )。

由于我们的业务越来越好,有些客户也越来越喜欢我们的客户小姐姐,哦,不对,越来喜欢我们的服务。有些客户就问了,你们除了订机票,还能不能订酒店啊?

做老板的你,第一时间,眼睛冒出两个¥¥。有钱赚,傻子才拒绝。

两话不说,开干,招人!

再招一组小姐姐,专门从事订酒店。你指示下属,加紧联系相关酒店,经过一段时间,你们的酒店业务也跑起来了。

这个时候,我们就有了两个不同的业务,这就是:垂直拆分。

所谓,垂直拆分,就是不同的业务或服务,拆分开来,独立也一组,为外面提供服务。

当然随着业务规模发展越来越大,一个客服小姐姐做为转接员,也忙不过来,我们就设立了一个小姐,统一做电话转接的工作。

因为转接业务,是同时为后面两个业务服务的,这种独立设立或拆分的方式,就是水平拆分。

所谓,水平拆分,就是把公共的服务,拆分出来,独立成组,为外界提供服务。

现在我们的公司业务大概是这样的,如下图:

我们来说说转接业务组,这个业务组因为直接面向客户,当然工作量最大,责任最大。

她们每天接到酒店的电话,就把电话转接到酒店 业务组。

如果接到机票的电话,就转接到机票业务组。

有一天,一位转接业务组的小姐姐突然跑到你的办公室。

小姐姐:老板,我有一个提议。可以帮你省很多钱。

你:请说。

小姐姐:转接组只是接了电话,就把酒店的业务电话转给酒店组,机票电话就转给机票组。那我们能否直接在我们的热线电话上设置:订机票请按1,订酒店讲按2,就直接转给相关组了,不需要我们业务组再转接了。

你:对啊!好意见!这个月开始,你的工资涨一倍。任命你为业务经理。你去重新规划分配转接组的工作安排。

现在转接组的业务,就自动让电话软件代替了,这就叫自动化。当然,自动化,也不属于分布式系统中一个关键的概念,但是在软件开发或架构设计中,它是极其重要的思维方式或工作原则。

这个原则就是:能自动化的尽量自动化。

我们再跳回到游戏中。

自动化处理后,业务越来越好,客户的电话越来越多。现在问题来了。

比如,10个酒店的订单电话,分配给10个小姐姐去处理。我们应该怎么处理呢?

有同学说,谁有空谁接,随机处理好了。这就是负载均衡的随机法:

随机法

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,

其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

那如果,有的小姐姐能力强一点,有的能力弱一点,又怎么处理呢?

有同学说,那就让能力强的多干点活,工资提成也多给点就行。对的,这就是负载均衡的加权随机法

加权随机法

加权随机法也根据后端机器的配置,系统的负载分配不同的权重。它是按照权重随机请求后端服务器。

那能否做到公平一点呢?每人接尽量分配一些工作。

有同学说,这好办,第1个给编号1,第2个给编号2,等等,如此类推。

那,20个电话呢?

同学说,也好办,1,3给编号1;2,4给编号2,等等,如此类推。

那,30个,40个呢?

同学:这.......

怎么办?

很简单,学过数学 的你,很自然想到用整除求余函数mod。

比较,有10个小姐姐,30个电话,就是:21mod10=1,  22mod10=2,等等,如此类推。

那每个电话都可以平均分配到每个小姐姐。这个就是:负载均衡的轮询法

轮询法

  将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

当然轮询法中,也同样可以让能力强的干多点活,多拿点钱。这个就是,负载均衡的加权轮询法

加权轮询法

  不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

这时,有个VIP客户,每次电话都特别喜欢找2号的小姐姐。不是2号的小姐姐,他就不订票,客户就是上帝,当然要满足客户需求,怎么办呢?

简单,把这个客户的电话记下来,编号为2,软件设置一下,下次编号2的客户就直接转接到编号2的小姐姐。

这个就是负载均衡中的源地址哈希法

源地址哈希法

源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

现在,又有一个情景,每个小姐姐都有很多电话等待处理,但有点小姐处理快,等待电话就少了。如果现在又有新电话进来,如何处理?

简单,把电话转给等待电话少的小姐姐。

这就是:负载均衡的最小连接数法

最小连接数法

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前

积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

以上就是我们今天要讲得负载均衡算法 。

转载于:https://www.cnblogs.com/gyc567/p/11057523.html

轻松学习分布式|系列2|负载均衡算法。相关推荐

  1. Nginx系列之负载均衡算法策略

    负载均衡实际上是一种网络技术,主要是基于现有的网络结构,增加吞吐量.加强网络数据处理能力.提高应用系统的灵活和可用性.利用Nginx可实现负载均衡,Nginx支持加权Round-Robin负载均衡算法 ...

  2. 分布式架构的负载均衡算法

    轮询(Round Robin)法 将请求按顺序轮流分配到后台服务器上,均衡的对待每一台服务器,而不关心服务器实际的连接数和当前的系统负载 缺点:当集群中服务器硬件配置不同.性能差别大时,无法区别对待 ...

  3. springCloud学习笔记系列(1)-负载均衡Ribbon

    2019独角兽企业重金招聘Python工程师标准>>> Ribbon是一个客户端IPC库,在云中经过实战测试.它提供以下功能 负载均衡 容错 异步和反应模型中的多协议(HTTP,TC ...

  4. 轻松学习分布式|系列3|分布式数据库。

    我们继续来讲分布式,回到我们的创业游戏. 我们的业务规模上来了,客户也越来越忠诚了.很多客户都通过我们的订票服务,来方便自己的行程. 那对这些老客户,我们的宗旨是:要不断超越客户的期待. 所以,我们要 ...

  5. 集群,分布式,负载均衡,负载均衡算法

    集群 集群的概念 计算机集群通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作.在某种意义上,他们可以被看作是一台计算机.集群系统中的单个计算机通常称为节点,通常通过局域网连接, ...

  6. 大型网站架构系列:负载均衡详解(4)

    原文:大型网站架构系列:负载均衡详解(4) 本文是负载均衡详解的第四篇,主要介绍了LVS的三种请求转发模式和八种负载均衡算法,以及Haproxy的特点和负载均衡算法.具体参考文章,详见最后的链接. 三 ...

  7. Windows平台分布式架构实践 - 负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 http://www.cnblogs.com/jesse2013/p/dlws-loadbalancer.html 最近.NET的世界开始闹腾了, ...

  8. 自古帝王多短命,假如皇帝也懂负载均衡算法...

    " 大家都知道古代皇帝各个都是后宫佳丽三千,而皇帝身上都天然的带着雨露均沾的精神,不想单独的宠爱一人! 来自:51cto技术栈 弱水三千,又怎舍得只取一瓢饮?据传皇帝们晚上睡觉个个都怕冷,因 ...

  9. 大型网站系统架构系列:负载均衡详解(一)

    大型网站系统架构系列:负载均衡详解(一) 2016-03-20 架构说 面对大量用户访问.高并发请求,海量数据,可以使用高性能的服务器.大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比 ...

  10. 算法高级(17)-SpringCloud中的负载均衡算法

    前面讲的负载均衡技术实际上都是服务端负载均衡,一个请求需要被发送到哪台服务器做出响应,是由我们的服务器决定的.而在SpringCloud中,采用的缺是客户端负载均衡技术.那么客户端负载均衡的优势到底在 ...

最新文章

  1. Visual Entity 下载列表(最新版为 2.0.0 ,已支持Visual Studio 2013)
  2. MATLAB三维曲面绘图你不得不知道的...
  3. Python装饰器执行顺序详解
  4. 单一职责原理讲解coding
  5. mysql没加引号导致全表扫描_mysql隐蔽的索引规则导致数据全表扫描
  6. 【转载】一个通过JSONP跨域调用WCF REST服务的例子(以jQuery为例)
  7. g++是什么_路由器信号分为2.4G和5G,有什么区别?怎么选?
  8. 华为交换机将端口由trunk更改为access报错解决方法
  9. GG 。B的搜索技巧?
  10. 如何在ionic官网打包自己的App
  11. 制作一个全盘搜索器 ,能搜索整个磁盘所有目录
  12. ARM架构与系列简介
  13. pathon的安装与环境部署,数据类型
  14. 基于Java毕业设计智慧茶园综合管理系统源码+系统+mysql+lw文档+部署软件
  15. 黑盒测试技术中的等价类划分法、边界值分析法、因果图法和决策表法进行测试用例设计
  16. Android横向滚动卡片,Android仿探探卡片式滑动效果实现
  17. Compose学习笔记1-compose、state、flow、remember
  18. 个人常用命令集锦 持续更新
  19. 数据增强:具有自预测表示的数据高效强化学习
  20. UE5发布时出现SDK NOT Setup错误解决方法

热门文章

  1. Quartus II 自带Simulaiton 与 Modelsim Simulaiton功能仿真
  2. 「leetcode」51. N皇后【回溯算法】详细图解!
  3. leetcode[232]用栈实现队列/Implement Queue using Stacks
  4. poj 2096 Collecting Bugs 概率dp入门题
  5. 7台不同配置M1 MacBook Pro真实测试
  6. 专业FTP服务器Rumpus for Mac
  7. 如何在 Mac、iphone 中快速清除已完成的提醒?
  8. HDU1325 Is It A Tree?
  9. 微信内置浏览器 长按识别二维码 功能的两三个坑与解决方案
  10. java对象结构 对象头 Markword