社区
C语言
帖子详情
设计一个中转的消息服务器的负载均衡算法
hzhxxx
2009-11-12 12:30:13
//一个中转的消息服务器下面挂了很多(1~N)业务服务器,设计一个负载均衡算法
//1。 N 个服务器中的任何一台服务器可能死机,死机的机器不能分发(死机的机器会被通知,复活后也会通知)
//2。 N 个服务器中的其中任何一台都可以分配负载 0~100,可以比例对各台业务服务器分配负载
//3。 能快速的选择到一台负载机器进行分配并能快速的响应负载机器的退出和加入
//4。 可用 java 和 C++ 实现
...全文
317
28
打赏
收藏
设计一个中转的消息服务器的负载均衡算法
//一个中转的消息服务器下面挂了很多(1~N)业务服务器,设计一个负载均衡算法 //1。 N 个服务器中的任何一台服务器可能死机,死机的机器不能分发(死机的机器会被通知,复活后也会通知) //2。 N 个服务器中的其中任何一台都可以分配负载 0~100,可以比例对各台业务服务器分配负载 //3。 能快速的选择到一台负载机器进行分配并能快速的响应负载机器的退出和加入 //4。 可用 java 和 C++ 实现
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hzhxxx
2009-11-27
打赏
举报
回复
这个算法还有个问题,
如果有K台机器,则M=(K和max的最小公倍数).
这样算出的 M 并不是一个很合适的值,不能很好的保证每个服务器最小能分到 1/M
WingForce
2009-11-26
打赏
举报
回复
DHT
Blue_may
2009-11-26
打赏
举报
回复
用一致性hash怎么样。即使死机数据便宜量也很小。
aizibion
2009-11-26
打赏
举报
回复
不知道楼主考虑过一条消息不能构成一次完整业务得情况没有,如果每条消息确定是一个完整流程,当我啥都没说。
哇呜
2009-11-26
打赏
举报
回复
[Quote=引用 12 楼 zsxcn 的回复:]
把业务服务器的编号放在一个队列当中,每次取出队列头部的业务服务器,把消息转发给他,同时把该服务器放到队列尾部。当服务器死机的时候,从队列中删除该服务器,当服务器重启的时候,加入队列尾部。
[/Quote]
--------------------------------------
比较同意这个算法,简单。
也可以不用队列,用一个数组也可以,比如固定100个元素的数组(假设服务器数量远小于100台),然后按各服务器的权重,将各服务器的标识填到数组中即可。如果有服务器加入或退出,更新一下这个数组就可以。
至于消息的分发,可以考虑轮询的方式一个一个数组元素来;也可以考虑按消息类型或其他信息计算出一个0~99的HASH值;当然还可以根据需要选用各种各样的方法。
虽然效果不一定是最好,但应该是很容易实现的。先做出来用着,然后再想其他更好的方案,呵呵:)
至于故障检测,应该有现成的网络协议或者其它检测手段,比如常见的HELLO机制等。
thy38
2009-11-26
打赏
举报
回复
这有啥啊?不就是建个堆呗
icosagon
2009-11-26
打赏
举报
回复
权重是小数,都乘个100000之类的变成整数
icosagon
2009-11-26
打赏
举报
回复
说清楚点
比如服务器1权重 43
2的权重 89
3的权重54
取随机数 对43+89+54取模, 如果得66,则在 43-(43+88)的范围内, 当然就扔给服务器2了。
icosagon
2009-11-26
打赏
举报
回复
算出每个服务器的权重,所有权重加起来,取一个随机数,取模,看在哪个服务器的权重范围里。
或者直接使用使用权重作随机种子的随机函数。
hzhxxx
2009-11-26
打赏
举报
回复
* 一个服务集群,负载算法是全部的load balance值N相加得到一个分母M,创建一个元素个数是
* M的分配数组A,A里面存储单个服务器的配置.如果某个服务器的N值是N1,则占数组里面的N1份.由一个随机数模除M,得到一个A的索引值INDEX
* ,A[INDEX]就是所要的服务配置.设定每个服务器 N后,可以得到N里面的最大的那个值max,如果有K台机器,则M=(K和max的最小公倍数).
更新一下描述,大家更容易理解
owenlzb2004
2009-11-26
打赏
举报
回复
楼主不用那么失望
hzhxxx
2009-11-26
打赏
举报
回复
一个服务集群,负载算法是全部的load balance值相加得到一个分母M,用这个分母值创建一个元素个数是M的分配数组,每个load
* balance是这个数组里面的一分子,如果load balance
* 是N(1<=N<=MAX),则占数组里面的N份,由一个随机数模除N,得到一个数组的索引值INDEX
* ,取出INDEX里面的服务。如果有K台机器,则M=(K和MAX的最小公倍数)。
还是自己设计一个算法吧,对 csdn 有点失望了..........
hzhxxx
2009-11-15
打赏
举报
回复
还没有一些好的算法和思路啊
do_fork
2009-11-13
打赏
举报
回复
[Quote=引用 11 楼 hzhxxx 的回复:]
这个只是设计算法,不是设计架构,哈,各位多心了,其实一个消息服务器器下面挂100 个业务服务器也算非常多了,实际情况也就2台到5台
[/Quote]
把调度和负载均衡的部分封装起来,先用最简单的方式实现,不能满足性能的时间再改进
lijuntao1027
2009-11-13
打赏
举报
回复
关注
zsxcn
2009-11-13
打赏
举报
回复
把业务服务器的编号放在一个队列当中,每次取出队列头部的业务服务器,把消息转发给他,同时把该服务器放到队列尾部。当服务器死机的时候,从队列中删除该服务器,当服务器重启的时候,加入队列尾部。
hzhxxx
2009-11-13
打赏
举报
回复
这个只是设计算法,不是设计架构,哈,各位多心了,其实一个消息服务器器下面挂100 个业务服务器也算非常多了,实际情况也就2台到5台
hzhxxx
2009-11-12
打赏
举报
回复
各位只是提供了一点思路,其实并没有大家说的那么大规模,你想一个消息分发下面能挂多少业务服务器,最多 10000 台了吧,所以其实是小规模。
猫已经找不回了
2009-11-12
打赏
举报
回复
大规模检测的模型,一般都是以堆为基础。
jackyjkchen
2009-11-12
打赏
举报
回复
所谓负载均衡,就是链接池+排序算法,根据链接池里的链接量排序,找出最空闲的链接
加载更多回复(7)
Web代理
服务器
RabbIT.7z
Web代理
服务器
RabbIT.7z
MyQQ.rar_CSharp udp_UDP CSharp _udp 发送
消息
_udp通讯
UDP通讯 -实现类似QQ聊天功能-使用UDP通讯发送、接受
消息
(需中心
服务器
中转
)
去哪儿网机票搜索系统的高并发架构
设计
.pdf
去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf去哪儿网机票搜索系统的高并发架构
设计
.pdf
网络游戏-能量
中转
节点在无线传感器网络中的研究与应用.zip
网络游戏-能量
中转
节点在无线传感器网络中的研究与应用.zip
station:
一个
文件
中转
站
station:
一个
文件
中转
站
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章