- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一个模拟的负载均衡系统的实现(复赛)
一个模拟的负载均衡系统的实现
一、标题
一个模拟的负载均衡系统的实现
二、题目
为了构建可伸缩的,高可用的网络服务,很多大型网站都采用了负载均衡技术。
利用负载均衡技术,可以将多台廉价的、低性能的服务器,组合成一台性能强劲的,高可用的虚拟服务器。
负载均衡的常见实现方式大致如下:
将网络服务的地址(如公网IP地址、tcp套接字等)部署在负载均衡器上,而不是真实的服务器上;
将负载均衡器作为网络服务的总入口,接收用户的所有访问请求;
负载均衡器接收到用户的访问请求后,将访问请求按照一定的策略分发给某一台真实的服务器进行处理;
真实服务器,对访问请求进行处理后,将处理结果发送给负载均衡器;
负载均衡器接收到真实服务器的处理结果,将他发送给用户。
下图展示了一个负载均衡系统的组网结构,图中包含了1台负载均衡器,3台真实的服务器。公网IP配置在负载均衡器上,负载均衡器与真实服务器之间,则通过私网地址进行通讯。
图1 负载均衡组网结构
有关负载均衡的技术原理及更多详细信息,请上网查阅相关资料或阅读相关书籍。
本题的任务,是在PC机上实现一个模拟的负载均衡系统。
他包含如下3个可执行程序:
服务端 (server.exe)――辅助程序,通过UDP端口,提供时间查询服务。
负载均衡器(LB.exe) ――核心程序,用于实现负载均衡功能。
客户端 (client.exe)――辅助程序,通过UDP端口,访问时间查询服务。
3个程序的协作关系如下图所示,其中客户端与服务端程序,需要起多个进程。
图2 系统协作
上图中,每一个方框表示一个进程。每一个进程拥有一个唯一的id(注意,这是由用户配置的id,并非操作系统为进程分配的pid),进程之间一律通过UDP协议进行通信。系统运行起来之后,客户端通过UDP协议向负载均衡器发送“时间请求”消息,负载均衡器通过UDP协议将消息分发给某个服务端进行处理。服务端返回“时间应答”消息给负载均衡器,负载均衡器将“时间应答”消息返回给客户端。
为了简化实现,本模拟系统中,所有消息,都采用如下结构体进行封装。通过msg_type字段的值,来区分不同类型的消息。
typedef struct
{
/* 消息的发送进程是谁,就填谁的id */
unsigned src_id;
/* 消息的接收进程是谁,就填谁的id */
unsigned dst_id;
/* 发送“时间请求”消息时填写,
回复“时间应答”消息时,其值要与请求消息保持一致。 */
unsigned usr_id;
/* 消息类型:0, 时间请求;1, 时间答应;2, 心跳请求;3, 心跳应答 */
unsigned msg_type;
/* 服务端回复“时间应答”消息时,
在data中填入当前时间的字符串,形式如“2013-06-20 13:56:28”即可 */
char data[32];
} t_msg;
三、复赛阶段要求
a)服务端程序
在原有功能的基础上,增加对 “心跳请求”消息的处理。对于接收到的心跳请求消息,如果消息中的dst_id等于自己的id,就向对端发送“心跳应答”消息。否则,就丢弃此消息。
b)负载均衡程序
之前的负载均衡程序,仅仅实现了轮转式的负载均衡算法。现在需要在原来的基础上,支持更多的负载均衡算法,同时还需要支持会话保持功能、服务端健康检测功能。
具体需要支持的功能如下:
服务端健康检测功能
负载均衡器每隔0.5秒,向每个服务端发送一个心跳报文。如果连续4次收不到某个服务端的心跳响应,就认为服务端出现了故障。后续对时间请求消息做负载均衡时,就不再分发给此服务端处理。
支持按比例分发的负载均衡算法
由于不同的服务器,配置不同,处理能力不同。因此,有时候将请求消息,根据各服务端的处理能力,按照一定的比例分发到各个服务端,会有更好的整体表现。
按比例分发的负载均衡算法,为每个服务端配置一个权重值(1到10之间的一个数字),在配置文件进行配置。
如果启用了此负载均衡算法,负载均衡程序,将按权重值比例,将时间请求消息分发到相应的服务端。
支持基于最快响应的负载均衡算法
某些情况下,对服务请求的响应速度非常重要。在这种情况下,将服务请求分发给响应速度最快的服务端处理比较合适。
为了支持该功能,负载均衡进程,需要对各个服务端响应心跳请求的速度进行跟踪,从而能够找出响应最快的服务端。
如果启用了此负载均衡算法,负载均衡程序,总是将时间请求消息分发到响应最快的服务端。
基于src_id的会话保持
启用此功能后,收到来自某个客户端的某条时间请求消息时:
如果发现没有与此客户端对应的会话条目,就认为
文档评论(0)