绕开万网防火墙

从今年7月开始,在被无奈的服务器网络问题郁闷了很久之后,终于让我找到真正的原因,确实在于防火墙的问题。我发现问题原因的过程如下:

公司有2台服务器在万网机房,而且在同一子网中,两台服务器上有同样的两套服务器端程序。我通过ab,对指定的URL发出10个并发总计1000个请求,两台服务器都在200个请求之后,就不能连接了。其中有一台是Windows服务器,我当时还开着远程桌面,ab刚打印出“Completed 200 requests”,远程桌面立刻变灰,随即右上角显示出断开图标,闪烁之后便告诉我链接被终止。另一台是Linux服务器,我开着Putty链接在上面,通过ab测试的时候,到200个请求之后,Putty便报警说链接断开。

至于万网要这样进行限制的原因还不得知,至少即便我打电话,他们不会去改正这个问题更不会承认他们有问题。那么如果我们有放在万网或者类似机房的服务器(比如叫A),又需要在另外的地方放一个反向代理服务器到这个服务器(比如叫B),那么怎么办才能解决这个问题?在这里我找到两种解决方案:

  1. 把A的服务器端移动到服务器B,让A做专门的数据库服务器,B通过长连接(或称持久链接,persistant connection)连接到A。当然如果服务器端应用使用了短链接也是没用的。现在的很多框架如Rails能很好地利用长连接。另外,Memcached的客户端链接一般也是长链接,
  2. 架设一个VPN,然后A,B都接入这个VPN中,并只使用VPN分配的地址进行交互,这个可以完全解决前面出现的问题。

两个方案都可以尝试,复杂程度相当。

就这个问题上,我得出的结论是,压力测试是必须的,如果以后公司再托管服务器,我会先利用工具从外部测试一下其是否满足要求。

2008-03-04更新:

经过长久的深思熟虑之后,我觉得如果服务器分布在不同机房,有必要使用数据加密来防止数据包被嗅探,VPN方案可以采用加密的方式,长链接的方式也可以配置使用ssl。MySQL的SSL配置请参考:http://dev.mysql.com/doc/refman/5.0/en/secure-connections.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注