于洋博客 互联网点滴记忆

16Jun/110

GoDaddy空间错误Your request timed out. Please retry the request.

我的Magento订单集中处理系统使用了一个GoDaddy的Ultimate空间,昨天发现一个奇怪的现象,连续5笔订单没有被正常提交到订单中心。我这边的逻辑是Magento订单支付后,系统把订单详细信息提取出来,使用CURL POST发送到订单中心。我检查了一下返回信息,发现GoDaddy返回Your request timed out. Please retry the request. 按下F5之后又正常了。如果在Google里搜索下这句话,你会发现搜索结果基本都是与GoDaddy空间相关的,看来这个是GoDaddy特有的一个现象,这个主机应该是所谓的云主机,Web服务器之前有负载均衡(Load Balance)设备层,每个请求过去之后,设备会使用轮询算法寻找一个空闲服务器,然后把此服务器的hash码附带到请求URL上以301的形式通知客户端,然后客户端用新的URL请求命中分配的服务器。我猜测是后面的某台服务器宕机或者维护,而LB没有及时得到这个信息,于是偶然将我们的请求转发送到那台死掉的服务器,而为什么又按F5之后会正常呢?这里猜测是因为连续的两次请求之间的间隔很快,LB会均匀的分布这个请求到不同的服务器上,所以第二次请求被派发到活的服务器上了。这也可以解释在那一段时间内,如果超过一小段时间请求,又是错误,而紧跟着按F5又是好的。
我修改了代码,把订单发送的代码做了1次重试,重试如果依然失败,则把订单信息序列化存储到/tmp目录以备日后手工补单。测试了一段时间,目前一切都正常,当然这也有可能是这段时间那台死掉的服务器已经活过来了。总的来说我认为云主机的稳定性是很好的,所以选择它作为订单中心,但是对有效性较高的系统,依然需要程序有充分的容错机制,以及适当的错误恢复机制。

Filed under: Magento, PHP No Comments