资讯专栏INFORMATION COLUMN

应对恶劣网络环境,为php-curl设置超时限制,防止服务器卡死

Faremax / 3488人阅读

摘要:引发什么问题了呢最核心的问题是香港处在国际网络环境,访问大陆服务器时经常会出现网络抖动的现象,非常无解。其中,负责配置,则负责执行即真正发送请求。

挖洋货这项目,因为没有公司的名头,也就无法备案,所以前端机放在阿里云香港ECS,另配一台阿里云杭州ECS来跑crontab——执行爬虫、保存图片到阿里云OSS等。最近觉得杭州ECS有点多余了(原本还有个杭州RDS的,统一搬到香港RDS了),打算撤掉,就把杭州ECS上的crontab全部搬回香港ECS来跑,这下就引发不少问题了。
引发什么问题了呢?最核心的问题是香港ECS处在国际网络环境,访问大陆服务器时经常会出现网络抖动的现象,非常无解。具体一点来说,比如香港ECS向阿里云杭州open searchopen search没有香港节点呀亲 ╥﹏╥...)查询的时候,经常报错;又比如香港ECS抓到图片后上传杭州OSS(OSS是有香港节点,问题是没有图片处理的服务啊,你们说这不是坑死人吗),慢是其次,经常卡住一段时间后才报错,这使得上传的效率极其低下(我会告诉你就因为这个原因,积压了好几千爬回来的商品等着上传图片才能上架吗)。

open search的问题还是很好解决的,SDK有提供超时的配置,我把超时限制设大了一点(5秒),基本上就不会报错了。
而OSS的SDK根本没有提供这方面的配置,为了解决这个问题,我决定深入到这SDK来修改源码。
OSS的SDK是通过php-curl来请求api的,经调查后,我发现此SDK有个名为requestcore.class.php的文件中定义了一个RequestCore类,很明显,这个类就是负责发送请求的。其中,prep_request()负责配置curl,send_request($parse = false)则负责执行curl(即真正发送请求)。
首先来看看prep_request(),其中包含两个php-curl的两个超时配置:CURLOPT_TIMEOUT以及CURLOPT_CONNECTTIMEOUT

curl_setopt($curl_handle, CURLOPT_TIMEOUT, 5184000);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 120);

CURLOPT_TIMEOUT好理解,就是整个curl请求过程(http request & response)的超时限制,以秒为单位,设置为0则无限制。
CURLOPT_CONNECTTIMEOUT比较难理解,目前确认的是,这是curl请求过程中的一小部分,因此必须要设得比CURLOPT_TIMEOUT小,不然CURLOPT_TIMEOUT无意义。网上的资料是这么说的:

CURLOPT_CONNECTTIMEOUT 在发起连接前等待的时间,如果设置为0,则无限等待。

这个发起连接前等待的时间比较模糊,我倾向于这指的是完成TCP三次握手过程前所耗费的时间,或者换句话说,TCP三次握手的整个过程必须要在CURLOPT_CONNECTTIMEOUT内完成,否则就超时。TCP三次握手无法在指定时间内完成表示服务器正处在繁忙/奔溃的状态或网络异常,这正符合本文所提到的场景。
基于这一猜想下,我把CURLOPT_CONNECTTIMEOUT设成3秒:

curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 3);

如此,就不需要在网络抖动的时候等待2分钟(SDK设定的CURLOPT_CONNECTTIMEOUT是120秒)才报错了。

PS:如果想要设置超时时间少于1秒,需要用到CURLOPT_TIMEOUT_MS,但此配置据鸟哥说有bug,未测试,留个心眼:《Curl的毫秒超时的一个”Bug”》

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21271.html

相关文章

  • 大话微服务架构故障隔离及容错处理机制

    摘要:优雅的服务降级微服务架构最大的优点之一就是当组件出现故障时,能隔离这些故障并且能做到优雅地服务降级。 本文首先介绍微服务架构存在的风险,然后针对如何避免微服务架构的故障,提出了多种有效的微服务架构中的方法和技术,其中例如服务降级、变更管理、健康检查和修复、断路器、限流器等。 目录 1、微服务架构的风险 2、优雅的服务降级 3、变更管理 4、健康检查和负载均衡 5、自我修复 6、故障转移...

    Binguner 评论0 收藏0
  • 大话微服务架构故障隔离及容错处理机制

    摘要:优雅的服务降级微服务架构最大的优点之一就是当组件出现故障时,能隔离这些故障并且能做到优雅地服务降级。 本文首先介绍微服务架构存在的风险,然后针对如何避免微服务架构的故障,提出了多种有效的微服务架构中的方法和技术,其中例如服务降级、变更管理、健康检查和修复、断路器、限流器等。 目录 1、微服务架构的风险 2、优雅的服务降级 3、变更管理 4、健康检查和负载均衡 5、自我修复 6、故障转移...

    Youngdze 评论0 收藏0
  • 温湿度传感器

    摘要:由于温湿度传感器对时间要求比较高,所以延时函数,我这边采用的是大佬正点原子编写的。根据时序图可知应答信号为低电平,高电平。后续会逐步分块更新,并会在最后一篇文章上传源代码。若是该文章对你有作用或是觉得文章写得还行,帮忙点点赞,三连 ...

    mushang 评论0 收藏0
  • [译] 设计一个容错的微服务架构

    摘要:微服务架构的风险微服务架构将应用程序逻辑移动到服务,并使用网络层在它们之间进行通信。在微服务架构中,服务依赖于彼此。您始终只能部署其中一个,并且在验证新版本是否符合预期之后才,将负载均衡器指向新的。 [译] 设计一个容错的微服务架构 摘要:本文属于原创,欢迎转载,转载请保留出处:https://github.com/jasonGeng88/blog 原文地址 https://blog....

    raledong 评论0 收藏0

发表评论

0条评论

Faremax

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<