在客户那边测试链路负载均衡设备,初时,一切访问正常。后来客户报障,说在访问淘宝时,有时在点击“评价详情”的时候,无法显示出内容,但有时又能够访问。
这种问题很容易被当作是因为网络拥塞或者淘宝服务器偶尔出现问题导致,然而当客户反映该问题的发生越来越频繁的时候,让人感觉到问题应该不是这么简单,一定有些深层的东西在影响。
于是去客户现场对该问题做深入的分析和诊断。
解决疑难问题,最有效的方式就是抓包分析,然而这次屡试不爽的抓包却没起到太大的效果,因为一些未知的原因,并没有在负载均衡设备上抓到客户端所访问的所有请求。
于是更换思路,既然是客户端点击的时候没有显示出内容,我们来分析客户端访问的时候发生了什么?考虑到这是Web访问,所以先不用专业的抓包工具,这里可以尝试更简单的方法:用HttpWatch来跟踪。
首先进入淘宝页面(注意需要先访问到一个没问题的页面,但从该页面可以点击“评价详情”),然后浏览器启动HttpWatch,接着点击“评价详情”。HttpWatch捕获内容如下:
分析一下浏览器所执行的URL,还真发现了问题。我们从头看来,首先是当点击了评价详情后,访问的URL是
http://www.atpanel.com/jsclick?cache=1328692645669&auc_detail=b_feedback,接着跳转到
http://rate.taobao.com/detail_rate.htm?...(看第二行黄色标注),但是当访问该页面时,被执行了一个重定向,重定向到了
http://www.taobao.com/home/deny.html这个链接,而在访问这个链接的时候,页面执行出现了Abort, 故我们点击评价详情后,一直显示“正在加载”的提示。
至此,真想大白了,淘宝告诉我们所用的IP地址访问过于频繁,所以暂时停止处理我们的访问。
是什么原因造成访问过于频繁呢?检查一下配置,原来配置中设定的是基于目的地址做hash来选择NAT地址,这样子所有访问同一个淘宝网站目的IP的客户端都会被翻译成同一个NAT IP,因此淘宝检测到这个NAT IP访问过于频繁,基于安全的处理,暂停响应该IP发出的请求。
知道了原因后,解决办法就很容易了:
既然是因为同一个NAT IP 访问次数过于频繁,那如果把不同的客户端分散映射成不同的NAT IP,把原来一个NAT IP的访问均摊到多个NAT IP进行访问,这样每个NAT IP的访问都不会太多,自然不会被禁了。于是修改配置,将原来基于目的地址做Hash选择NAT IP的方法改为用“源地址+目的地址”做Hash,这样不同的源地址访问同一个目的地址,根据Hash算法被映射成了不同的NAT
IP
,访问果然变得正常,问题再也没有出现。
(wyl)
本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/803380