老谭调出网络抓包记录:“都是合法的 HTTP请求,没有恶意代码,就是量太大,每秒 200个请求,把连接池占满了,数据库查询又拖慢了处理速度,形成恶性循环。”
Jackson敲着桌子:“是伪造请求的 DDoS,肯定沈剑锋收买了信浪的核心技术人员,知道我们接口的参数格式。”
那天我们试了临时方案:重启 Apache释放连接,把 MySQL的查询超时设为 5秒,没用——刚清完连接,新的请求又涌进来,数据库还是卡。
陈建仁每隔半小时就来催一次,技术部的气氛像闷在罐子里的火药。
接下来的一个星期,我们几乎住在技术部。
Jackson提出“堵源头、优处理、分负载”的三层方案,每一步都得抠 2001年的技术极限。
那时候还没有云防护,CDN只在少数门户网站试用,一切都得靠自己动手。
第一层是“堵源头”。
老谭发现攻击请求的 IP虽然分散,但有 30%来自北京海淀区的固定网段,正好是信浪总部所在的区域。
我们找运维借了台华为的 Quidway路由器,在 ACL规则里加了“拒绝 123点125点0点0/16网段访问 80端口”的配置。
又写了个简单的 Shell脚本,每 10秒扫描一次 Apache的访问日志,把每分钟请求超过 50次的 IP自动加入黑名单。
第一天下来,攻击请求量降了 40%。
第二层是“优处理”。
针对数据库卡顿,我把 sms_queue表拆成两个:sms_pending(待发送)和 sms_history(历史记录),只在 sms_pending上加 user_id索引。
还把“SELECT *”改成“SELECT id, phone, content”,减少数据传输量。
老谭更绝。
他在应用层加了个“请求过滤”模块:用户发送短信前必须验证手机号格式,伪造的随机手机号直接在应用层拦截,不传入数据库。
改完之后,MySQL的慢查询从每分钟 200条降到 10条以内,CPU占用率从 98%掉到 50%。
第三层是“分负载”。
我们把服务器分成两组:A组处理游戏短信(移动 QQ、游戏通知),B组处理资讯订阅。每组 4台服务器,用硬件负载均衡器分流。
Jackson还亲自去移动梦网总部,说服他们调整接口协议:增加“请求方 IP +时间戳”的验证,同一 IP每分钟最多发送 30次请求,超过就返回“429 Too Many Requests”。
移动的工程师帮我们在短信网关加了特征识别——伪造请求的“User-Agent”字段都是“Mozilla/4.0”,真实用户的则是“Nokia6100”“MotorolaV3”等手机型号,网关直接过滤掉异常 User-Agent的请求。
12月 5日凌晨,我们上线了全套方案。
监控屏上的连接数稳定在 300左右,短信发送队列积压量以每分钟 100条的速度减少。
早上八点,投诉电话第一次出现了空闲。
陈建仁走进技术部时,手里拎着两袋豆浆油条:“你们几个,总算把这窟窿填上了。”
我咬着油条看向窗外,冬阳照在服务器的指示灯上,红光灯变成了柔和的橙黄色。
老谭戳了戳我的胳膊:“我问了下王蒙,沈剑锋那公司好像还没开张。”
我打开手机,看到沈剑锋发了条短信过来:“江湖路远,总有新机会。”
确实有新机会。
短信业务这块蓝海,除了我们和信浪,还有不少公司在摩拳擦掌。
我摸了摸服务器的外壳,温度已经降到 32℃。
但我知道,这只是第一轮攻防战的结束——只要蛋糕还在,就永远有人想拿着刀冲进来。
喜欢人生何处是归途:花城网事三十年请大家收藏:(m.xtyxsw.org)人生何处是归途:花城网事三十年天悦小说网更新速度全网最快。