【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞?
前人云,不患寡而患不均。
可以看到,所有的节点都是以同样的概率供给办事,即没有推敲到节点的差别,也许同样数量标请求,高配的机械CPU才20%,低配的机械CPU已经80%了
在计算机的世界,这就是大年夜家耳熟能详的负载均衡(load balancing),所谓负载均衡,就是说如不雅一组计算机节点(或者一组过程)供给雷同的(同质的)办事,那么对办事的请求就应当平均的分摊到这些节点上。负载均衡的前提必定是“provide a single Internet service from multiple servers”, 这些供给办事的节点被称之为server farm、server pool或者backend servers。
这里的办事是广义的,可所以简单的计算,也可能是数据的攫取或者存储。负载均衡也不是新事物,这种思惟在多核CPU时代就有了,只不过在分布式体系中,负载均衡更是无处不在,这是分布式体系的天然特点决定的,分布式就是应用大年夜量计算机节点完成单个计算机无法完成的计算、存储办事,既然有大年夜量计算机节点,那么均衡的调剂就异常重要。
负载均衡的意义在于,让所有节点以最小的价值、最好的状况对外供给办事,如许体系吞吐量最大年夜,机能更高,对于用户而言请求的时光也更小。并且,负载均衡加强了体系的靠得住性,最大年夜化降低了单个节点过载、甚至crash的概率。不难想象,如不雅一个体系绝大年夜部分请求都落在同一个节点上,那么这些请求响应时光都很慢,并且万一节点降级或者崩溃,那么所有请求又会转移到下一?节点,造成雪崩。
思惟很简单,就是供给同质办事的节点逐个对外供给办事,如许能做到绝对的均衡。Python示例代码如下
事实上,网上有很多文┞仿介绍负载均衡的算法,大年夜多都是大年夜同小异。本文更多的是本身对这些算法的总结与思虑。
一分钟懂得负载均衡的一切

数据层的负载均衡,在我之前的《带着问题进修分布式体系之数据分片》中有具体介绍。
算法衡量
在我看来,当我们提到一个负载均衡算法,或者具体的应用处景时,应当推敲以下问题
- 第一,是否意识到不合节点的办事才能是不一样的,比如CPU、内存、收集、地舆地位
- 第二,是否意识到节点的办事才能是动态变更的,高配的机械也有可能因为一些突发原因导致处理速度变得很慢
- 第三,是否推敲将同一个客户端,或者说同样的请求分发到同一个处理节点,这对于“有状况”的办事异常重要,比如session,比瘸愧布式存储
- 第四,谁来负责负载均衡,即谁充当负载均衡器(load balancer),balancer本身是否会成为瓶颈
下面会结合具体的算法来推敲这些问题
负载均衡算法
轮询算法(round-robin)
- SERVER_LIST = [
- '10.246.10.1',
- '10.246.10.2',
- '10.246.10.3',
- ]
- def round_robin(server_lst, cur = [0]):
- length = len(server_lst)
- ret = server_lst[cur[0] % length]
- cur[0] = (cur[0] + 1) % length
- return ret
加权轮询算法(weight round-robin)
加权轮训算法就是在轮训算法的基本上,推敲到机械的差别性,分派给机械不合的权重,能者多劳。留意,这个权重的分派依附于请求的类型,比如计算密集型,那就推敲CPU、内存;如不雅是IO密集型,那就推敲磁盘机能。Python示例代码如下
- WEIGHT_SERVER_LIST = {
- '10.246.10.1': 1,
- '10.246.10.2': 3,
- '10.246.10.3': 2,
- }
- def weight_round_robin(servers, cur = [0]):
- weighted_list = []
- for k, v in servers.iteritems():
- weighted_list.extend([k] * v)
推荐阅读
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 大年夜多半云平台的软件都是弗成知的,这些平台闪开辟人员可以决定若何精确地设计和解决问题。但谷歌的做法>>>详细阅读
本文标题:关于负载均衡的一切:总结与思考
地址:http://www.17bianji.com/lsqh/40284.html
1/2 1