基于C#自动生成PAC脚本实现服务器的负载均衡与冗余

时间:2022-10-22 10:39:27

基于C#自动生成PAC脚本实现服务器的负载均衡与冗余

摘 要:IPv4地址资源不足,共享IP一般采用NAT、、反向等方式,在客户端数量较多的情况下,一般要考虑负载均衡与冗余的情况。文章介绍一种通过定期轮询动态生成PAC脚本,从而达到数台服务器的负载均衡与冗余的程序设计,具有低成本、操作简单的特点。

关键词:CSharp;PAC脚本;服务器;负载均衡;冗余

中图分类号:TP393.06 文献标识码:A 文章编号:1006-8937(2015)06-0070-02

目前,IPv4的地址资源严重告急,在日常工作生活中,家庭或企业一般只能通过一个或几个互联网IP地址进行接入,其内部网络如需同时访问互联网,一般使用路由器的NAT(Network Address Translation网络地址转换)功能或服务器来实现私网对互联网的访问。但是当内部网络计算机数量过多时,NAT会极大的影响整台路由器的性能,单服务器也会因负载过大而经常宕机。此时,我们一般采用以下几种方式来解决这个问题:

①使用防火墙的NAT功能来替代路由器的NAT功能,防火墙的NAT功能是由硬件实现,性能远超路由器,可以支持大数量级的NAT。

②使用多台服务器实现负载均衡。将用户请求随机发送到不同的服务器,以实现负载均衡。

基于成本等因素考虑,我们选择方案2,通过部署多台服务器,并在客户端使用自动PAC脚本来实现服务器的负载均衡。

1 PAC脚本应用

自动脚本(Proxy auto-config Script),简称PAC脚本。一个PAC文件就是一个Javascript脚本,可放置在服务器上,通过远程WEB访问,客户端只需要在的使用自动检测脚本中输入PAC脚本的WEB地址,就可以使用该脚本,当服务器发生变化时,只需维护Web服务器上的PAC脚本,无需更改客户端配置,方便后期维护,减轻运维成本与负担。

PAC脚本包含一个FindProxyForURL函数,IE通过传入两个参数url(访问地址的完整URL)与host(访问地址的主机名)来判断是直接访问,还是通过函数返回的服务器地址与端口来访问。

PAC脚本可以通过取随机数轻松实现负载均衡,但是当其中一台服务器宕机时,脚本依旧有可能返回该服务器,从而导致客户端访问异常。于是我们考虑可以编写一个程序,运行在存放PAC脚本的WEB服务器,通过定时对各服务器进行轮询,根据服务器状态变化,重写PAC脚本。

2 程序总体设计

程序基于C#的Winform编写,分为两个模块。

2.1 监控模块

程序设置一个timer定时器,定期对各服务器进行轮询,根据轮询结果决定是否重写PAC脚本,并显示轮询结果,方便巡检查看。轮询采用TcpClinet.Connect方法来测试服务器是否正常工作,如图1所示。

2.2 配置模块

可对服务器地址、端口、轮询间隔、PAC文件存放路径与文件名等参数进行配置。配置文件采用XML格式保存,如图2所示。

3 技术实现

3.1 连接测试

如直接使用TcpClient.Connect连接测试端口,当服务器不连通或端口未打开时,需要很长时间才能返回结果,捕获So-

cketException异常。这里希望可以设定一个较短的时间获取结果,超时则判断连接失败。

这里使用了pleted.WaitOne(int millise-

condsTimeout,bool exitContext)函数,在millisecondsTimeout内未响应,则返回错误,退出线程。

3.2 文件写入

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,经常使用StreamRea-

der或StreamWriter执行这些功能。FileMode.Create表示当文件不存在时直接创建文件,而文件已存在时删除该文件,然后创建新文件。

3.3 XML读写

可扩展标记语言,简称XML,轻量级的数据存储文件,规范统一,易于阅读、扩展,可被几乎所有的语言所支持。

程序使用XmlDocument来读取XML文件。XML文件可视为由声明(Declare),元素(Element),属性(Attribute),文本(Text)等构成的一个树。第一个结点为根结点,每个结点均可以有自己的子结点。可以通过一系列属性或方法得到这个结点的值或其它一些属性。

3.4 功能控制

当监控未开始时,可以重新加载服务器,但不能手动轮询。当开始监控时,可以手动轮询,但不可以重新加载服务器。

4 后期功能扩展

后期可考虑对以下功能进行扩展,也可以根据实际需求,开发新的功能。

4.1 日志与备份

将轮询结果、文件生成、更改配置等操作记录在日志中备查,并在生成新的PAC文件与配置前,对原文件进行备份。

4.2 服 务

将程序安装为服务,可在WEB服务器启动时自动运行。设置为只运行一个实例,避免不同用户登录重复运行,造成资源浪费。

4.3 异常提醒

运维人员可以根据轮询显示结果及时发现故障。可考虑以发送短信等方式进行实时提醒,缩短故障发现周期,提高可靠性。

5 结 语

本文提供一种思路,使用自动脚本PAC实现服务器的负载均衡,再编写一个程序,通过定时轮询检测服务器的状态,根据状态变化,动态生成PAC文件,实现服务器的冗余,低成本地解决服务器的负载均衡与冗余。

参考文献:

[1] 董文江,胡轶,李健玲,等.PAC脚本在文献数据库中的应用[J].甘肃科技,2006,(9).

上一篇:大型资源型广告企业发展前景思考 下一篇:低压配电系统短路电流极端和保护配合问题研究