票.今天的数据抓取
好久没写博客了。
回国了,放假了,也是时候写篇博客散散心了。
作为一个抓取数据的网站,抓取数据是最重要的一个环节。
piao.today是如何做到稳定抓取数据的呢?
余票趋势和实时余票功能 他们抓取数据的难点都分别在哪里呢?
让我们来盘点一下。
首先,说说余票趋势。
余票趋势最重要的是后台抓取,不可避免地需要谈到Worker进程。
本站的抓取分任务分发者和工作者。分发者负责从数据库中查找需要抓取的区间,然后分发给抓取的工作者。
在实践过程中,男性朋友们会遇到worker进程由于控制不当系统问题而提前射x停止工作(被系统莫名kill掉)。
所以,我们需要用crontab来进行一个小脚本,每隔一段时间查看worker数量,若不足则增加worker数量到一个数值。
这些脚本的用途就是用来获取当前运行了多少worker,若不足则重新添加。
因为Python的稳定性(而且作为后台运行的程序来说,只要内存足够,不管多少worker进程都放得下),所以没啥大问题。
但是,最近将实时余票功能升级了一下,改成允许用户抓取多日(预售期)余票(比如),发现服务器经常出现502(Bad Gateway)或者504(Gateway Timeout)错误。
这说明,我的php-fpm和Nginx的设置有问题,没有考虑到大并发和长连接的问题。
如果用户中途关闭了窗口,经常一个fpm进程就会卡在那里不知所措,被水淹没。
那么会导致整个站点因为fpm数量不够而卡死。
现在分散到多个vps上——四个服务器,三个在香港一个在日本,避免了把整个站带坏。
因为这些服务器距离国内都不远,所以抓取实时余票反馈给用户会很快。
以后应该研究一下对于这种情况的根本解决措施。
最近有时间先把筛选搞了吧。
总之吧,先mark下。
等着过两天驾照下来了好好研究研究。