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

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

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于C#自动生成PAC脚本实现代理服务器的负载均衡与冗余.doc

基于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异常。这里希望可以设定一个较短的时间获取结果,超时则判断连接失败。   这里使用了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 功能控制   当监控未开始时,可以重新加载

文档评论(0)

lnainai_sj + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档