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

2015-10-21 01:41林楠
企业技术开发·下旬刊 2015年2期
关键词:冗余负载均衡代理服务器

林楠

摘  要: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异常。这里希望可以设定一个较短的时间获取结果,超时则判断连接失败。

这里使用了ConnectorState.Completed.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).

猜你喜欢
冗余负载均衡代理服务器
拒绝改动锁定电脑的代理服务器设置
地铁信号系统中代理服务器的设计与实现
IP地址隐藏器
异构环境下改进的LATE调度算法
基于负载均衡的云资源调度策略研究
核电站核岛电气隔离准则研究
多站点同步更新系统的设计
模糊理论在Ad hoc网络通信领域的应用
一种容侵系统的设计