加入收藏 | 设为首页 | 会员中心 | 我要投稿 站长网 (https://www.023zz.com.cn/)- 高性能计算、物联设备、数据可视化、操作系统、基础存储!
当前位置: 首页 > 创业 > 点评 > 正文

创业搜索架构:流量、合规与运营三重突破

发布时间:2026-11-02 14:27:57 所属栏目:点评 来源:DaWei
导读:  凌晨三点二十,我盯着监控屏右下角那个跳动的「127.0.0.1」——不是本地环回,是某个被我们自己用 iptables 重定向了四层的流量兜底策略,早该下线,但没人动它。屏上贴着胶布,盖住去年十一月那次 DNS 劫持留下的报警弹窗

  凌晨三点二十,我盯着监控屏右下角那个跳动的「127.0.0.1」——不是本地环回,是某个被我们自己用 iptables 重定向了四层的流量兜底策略,早该下线,但没人动它。屏上贴着胶布,盖住去年十一月那次 DNS 劫持留下的报警弹窗截图,胶布边缘翘起来了,像张没合拢的嘴。


  四十来分钟前,老板在运维群发了个问号,后面跟个「搜素框全白了?」。客服小吴秒回:「用户说点搜索没反应,连输入法候选词都不出来」。我切过去看 Search API 的 Prometheus 面板,QPS 掉成一条横线,延迟曲线炸成毛刺,而 upstream_status 里 502 和 503 在疯狂换班——可 Nginx access log 里压根没记录这几分钟的请求。这不对。我立刻去查 Ingress Controller 的 pod 日志,grep 「upstream timed out」,空。又切到 ES 的 _cat/health,绿色。再切到自研的 query router,发现它根本没收到任何请求。不是后端挂了,是前端压根没发出来。


  我原以为是 CDN 缓存击穿,结果抓包一看,浏览器里连 search.js 都没加载——整个资源域名的 SNI 握手就卡在 ClientHello 之后。证书?我翻 Certbot 日志,renewal 成功。再看 Nginx 配置里的 ssl_certificate 指向路径,是 /etc/letsencrypt/live/search.xxx.com/fullchain.pem。但 ls -l 一查,这个 softlink 指向的是一个不存在的目录,上个月迁移 cert 存储时手动 mv 错了层级,软链断了四十三天,没人报警。Nginx reload 没报错,因为配置语法合法;OpenSSL 验证也过,因为私钥文件还在旧路径里,只是没被引用;连监控脚本都只 check 了 cert 文件存在性,没校验软链是否有效。我手抖着敲了三遍 openssl s_client -connect search.xxx.com:443 -servername search.xxx.com,第三次才意识到:TLS 握手失败那一刻,浏览器直接放弃了整个页面资源加载,连 preconnect 都没发。所以不是搜索崩了,是页面根本没活过来。


  窗外下雨,雨刮器声忽远忽近。值班室泡面桶堆在显示器旁,红烧牛肉味混着机房空调的冷霉味。我听见隔壁组老张隔着门喊:“谁把 k8s 节点磁盘占到 97% 还不吭声?”——其实不是他,是我们侧的 cronjob 在每小时 dump 一次未压缩的 query log 到宿主机 /var/log/search,但没人改过它的 logrotate。这事和今晚没关系,但每次听到磁盘告警我都想踹自己一脚。


文章配图,仅供参考

  我跑去查 TLS 报错的具体时间线:02:48 第一次超时,02:51 Nginx error log 出现 “no shared cipher”,02:53 我们自己的健康检查脚本(check-https.sh)跑完,exit code 0,因为它只 curl -I,没加 --insecure;02:55 客服电话开始爆满,小吴孩子打来视频,镜头晃着问“妈妈你什么时候回家”;03:07 手动重建软链,reload nginx;03:09 页面恢复,搜索框重新亮起来,连候选词都出来了——但流量只回到正常值的六成。不是没修好,是用户已经走了。他们不是等你修,是转头搜竞品去了。


  上一次搬家是在去年冬天。我们把搜索从 PHP-FPM 搬到 Go 写的 router,测了三个月,全量后第二天,发现用户搜“发票”能出来三万条结果,但搜“发_票”(中间加下划线)直接 500——原来 Go 正则默认不识别 \\u4E00-\\u9FFF 外的 Unicode 类别,而分词器传过来的 query 里藏了用户复制粘贴的乱码格式符。没人复现,因为测试用例都是手打的。最后是财务部王姐在群里说:“怎么搜报销单编号总跳出‘无法识别字符’?我复制的是 Excel 里的”。我查了她发的截图,那串编号末尾有 U+200B(零宽空格)。这个 bug 活了十一天。现在想起来,比今晚还后怕:不是技术多烂,是所有人默认“搜得出来就等于搜得对”。


  合规的事儿也在这塌。上周法务邮件抄送我,问搜索结果页的「广告」标是不是必须带小号灰色斜体、字号不能大于正文 75%、且必须出现在首条结果上方 16px 以内——我们没动,因为“前端说太丑”。今天早上运营又来催:“能不能让‘创业公司’这个词优先推我们自家课程?”我答:“可以,但推完半小时内,用户搜索‘创业公司 合规风险’,我们首页会飘出三个律师咨询入口——这是算法写的,不是人调的。”没人接话。我盯着那个胶布,忽然明白什么叫“优胜劣汰”:不是比谁代码写得漂亮,是比谁先感知到漏斗在哪一层断了、谁敢在老板问“为什么没流量”之前,先把证书路径 ln -sf 一遍。


  小吴后来补了句:“其实上午十点就有用户反馈,说搜索慢,但工单系统没标‘紧急’,归到‘前端性能优化’队列里了。”我没回。因为我知道,就算那天标了紧急,我们也查不到软链断裂——监控只盯服务进程、磁盘、CPU、证书过期日,没人盯软链的有效性。它太小了,小到不配进监控大盘,但大到能勒死整条搜索链路。


  我现在手还凉。不是因为冷,是那种胃里突然失重的感觉——就像电梯往下掉半层,你知道它没坠毁,但你知道刚刚差一点。不是没预案,是所有预案都假设“故障有形态”,而这次故障没有形态:没日志、没告警、没错误码,只有三万用户默默关掉标签页。我删掉了草稿里那句“建议建立证书软链健康检查 SOP”,光打字就反胃。


  明天先把告警阈值调了。不是调 CPU 或 QPS,是给所有 SSL 证书相关路径加一层 realpath 校验,用 bash 就行,五分钟后部署。其它的事,等天亮再说。

(编辑:站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!