这个就更好懂得了,随机选择一个节点办事,按照概率,只要请求数量足够多,那么也能达到绝对均衡的效不雅。并且实现简单很多
- def random_choose(server_lst):
- import random
- random.seed()
- return random.choice(server_lst)
加权随机算法(random)
如同加权轮训算法至于轮训算法一样,也是在随机的时刻惹人不合节点的权重,实现也很类似。
- def weight_random_choose(servers):
- import random
- random.seed()
- weighted_list = []
- for k, v in servers.iteritems():
- weighted_list.extend([k] * v)
- return random.choice(weighted_list)
在这篇文┞仿中提到,负载均衡是一种推模型,必定会选出一个办事节点,然后把请求推送过来。而换一种思路,应用消息队列,就变成潦攀拉模型:余暇的办事节点主动去拉取请求进行处理,各个节点的负载天然也是均衡的。消息队列比拟负载均衡好处在于,办事节点不会被大年夜量请求冲垮,同时增长办事节点加倍轻易;缺点也很明显,请求不是事实处理的。
当然,如不雅节点列表以及权重变更不大年夜,那么也可以对所有节点归一化,然后按概率区间选择
- def normalize_servers(servers):
- normalized_servers = {}
- total = sum(servers.values())
- cur_sum = 0
- for k, v in servers.iteritems():
- normalized_servers[k] = 1.0 * (cur_sum + v) / total
- cur_sum += v
- return normalized_servers
- def weight_random_choose_ex(normalized_servers):
- import random, operator
- random.seed()
- rand = random.random()
- for k, v in sorted(normalized_servers.iteritems(), key = operator.itemgetter(1)):
- if v >= rand:
- return k
- else:
- assert False, 'Error normalized_servers with rand %s ' % rand
哈希法(hash)
根据客户端的IP,或者请求的“Key”,计算出一个hash值,然后对节点数量取模。好处就是,同一个请求可以或许分派到同样的办事节点,这对于“有状况”的办事很有须要
- def hash_choose(request_info, server_lst):
推荐阅读
【限时免费】岁尾最强一次云计算大年夜会,看传统、社区、互联网企业若何碰撞? 大年夜多半云平台的软件都是弗成知的,这些平台闪开辟人员可以决定若何精确地设计和解决问题。但谷歌的做法>>>详细阅读
本文标题:关于负载均衡的一切:总结与思考
地址:http://www.17bianji.com/lsqh/40284.html
1/2 1