Deprecated: Function get_magic_quotes_gpc() is deprecated in /home/www/wwwroot/jieqi/global.php on line 250
太空争霸之我来自未来- 第22章 不能抓的章面-都市言情-17模板网
第22章 不能抓的章面
    xc-0017不是用户发来的。

    它来自一位愤怒的站点管理员。

    上午九点,楼上五金店的传真机刚换完纸,机器便连续响了三声。老板以为是进货单,看到“造成拨号网关拥塞”几个字,直接拿着传真冲下楼。马飞正在给三个客户演示资料库,他只说了句抱歉,关掉投影,把抓取电话线先拔下来。

    客户问演示怎么办。

    “本地功能继续,联网部分延期。今天占用的时间不计费。”

    陈维明公司的技术员也在其中。他没有离开,反而把自己带来的插线板借给周成保存日志。

    传真纸从机器里吐出来时,字迹有些发虚,语气却非常清楚:

    “你方程序于凌晨一点至三点反复访问本校材料数据库,造成拨号网关拥塞。请立即停止。”

    马飞看完,把正在运行的抓取任务全部暂停。

    半地下室里那台新添的测试机刚完成一轮队列扩展。为了增加高校公开资料覆盖,程序把三所学校的镜像目录拆成数百个地址,再按失败次数自动重试。

    旧调度器有单站点间隔。

    新队列也有。

    问题出在断线恢复。

    每次拨号重连,程序会从磁盘载入未完成队列,却没有恢复各站点的上次访问时间。对它而言,所有地址都像第一次出现。某个站点响应缓慢,任务失败后又被放回队尾;重连一次,限频时钟便清零一次。

    “一晚上四百一十三次。”苏雨桐把日志推到马飞面前。

    正常预算是五十次。那四百一十三次里,最长间隔只有十二秒,最短不到一秒。周成把自己测试过的断点文件拿出来,页面内容确实没有重复下载;站点访问时钟却只存在内存里,一断线就归零。

    兼职程序员周成脸色发白:“我测过断点续传。”

    “你测的是文件。”马飞说,“没测对别人机器的影响。”

    “那套数据库本来就是公开的。”

    “公开不等于可以把门挤坏。”

    周成低头不说话。他是兼职程序员,按完成的功能拿补贴,这次队列扩展原本能让有效页面数在月底前多两成。覆盖数字写在他的阶段目标里。

    “这次不扣你的补贴。”马飞把目标表撕下来,“指标是我定的,只写了增加覆盖,没写重连后仍遵守频率。故障分析你主笔,修复要过苏雨桐的破坏性测试。”

    周成抬头:“如果两天修不好?”

    “抓取继续停。客户库先用现有资料交付。”

    马飞先回传真。

    他没有解释星辰的技术困难,只承认访问来自他们的程序,说明任务已经暂停,并留下电话和完整日志时间段,请对方确认网关恢复情况。

    二十分钟后,电话打了过来。

    管理员姓高,说数据库没有损坏,但夜间线路本就只有两条,星辰的重试占满了其中一条。

    “我们公开资料,是给人查的,不是给机器搬家的。”高老师说。

    电话背景里有人不断问网关能不能用。高老师每回答一句,语气就更硬一点。马飞拿笔记下对方两条拨号线、夜间值班和受影响时段,没有插话辩解自己的并发量其实只有一个。

    马飞停了一下:“您愿意规定机器怎么访问吗?”

    “什么意思?”

    “比如每天最多多少次,什么时段,哪些目录不能抓。我们把规则写进程序。”

    电话那头沉默片刻。

    “先把你们是谁写清楚。别再装成普通浏览器。”

    这句话击中了另一个问题。

    为了兼容几个老站点,周成让抓取程序使用了常见浏览器标识。这样成功率更高,却让管理员无法从日志中判断访问者是谁。

    马飞在木板上新增了xc-0017,又单独开了一张整改表。

    第一项:程序使用明确名称,附联系邮箱。

    第二项:限频状态写入磁盘,断线重启后不得清零。

    第三项:每个站点设置每日访问预算。

    第四项:站点提出退出后,二十四小时内停止并从后续队列排除。

    第五项:保留来源和最后抓取时间,不用复制内容冒充星辰自有资料。

    周成看着表:“这样会少很多页面。”

    “对。”

    “覆盖率会很难看。”

    “那就让它难看。”

    苏雨桐又把月度覆盖目标改成两行:新增有效页面数,以及因限频、退出和预算主动放弃的页面数。两行必须一起报,不能只把前一行贴在墙上。

    午饭没人有胃口。楼上老板还是送下来一锅西红柿鸡蛋面,锅底有些糊。周成端着碗蹲在测试机旁,忽然问:“如果管理员永远不让抓呢?”

    “就不抓。”马飞说。

    “那竞争对手抓了,结果比我们多。”

    “用户会看见他多,也会看见我们少。这个代价由公司承担,不由对方线路承担。”

    苏雨桐把第五项下面又加了一行:

    纠错不静默篡改。

    如果站点内容后来改变,星辰可以更新索引,但必须知道旧记录从哪里来、何时失效。增长不能成为抹掉历史的理由。

    他们用了两天重写调度器。

    苏雨桐故意在测试过程中拔线十九次,又把系统时钟往前拨、往后拨,模拟重启和跨日。周成的第一版在日期回退时重新获得预算,被她当场打回。第二版把最后访问时间和预算流水同时写盘,任何时钟异常都先暂停,等待人工确认。

    第三版测试结束时,四百一十三次访问被稳定压到四十八次。覆盖统计少了七百多个候选地址,问题木板上却没有再多出一封投诉。

    第三天晚上,程序重新连接材料数据库。新的访问标识出现在对方日志里,每次请求间隔三十秒,失败两次后自动暂停,等待下一日预算。

    覆盖速度降到原来的四分之一。

    电话费没有下降,因为连接时间更长。

    这是一笔真实成本。

    高老师收到测试日志后,只回了一句:

    “这样可以继续。”

    他随后发来一张目录边界表:论文摘要、实验室介绍可访问,学生临时页和内部检索结果禁止;每天凌晨一点到三点最多六十次。表格末尾还有网络中心值班电话。

    周成把它逐项录入站点配置,第一次运行前主动打电话请对方看日志。三十分钟后,高老师在电话里报出抓取程序的名称和联系邮箱,两个都能读出来。

    马飞把传真和整改表装订在一起。

    传真原件已经被热敏纸的温度烤得微卷,字迹以后还会变淡。苏雨桐让他复印一份,原件密封保存,退出目录则单独抄进只读配置。

    当天夜里一点,抓取程序按新预算启动。半地下室很安静,屏幕每隔三十秒才滚动一行。周成守到第二十次请求,确认断线重拨后计数从二十一继续,没有回到零。

    他在值班表上签字,关掉那条被禁止的学生目录,起身去洗已经凝了油的面碗。