从未降级的搜索技术

jopen 9年前

  在搜索我经历过全部的双 11,12 年和 13 年这 2 次大促,GN 是开发总指挥,我是在礼台上看各种新武器实弹表演。过去 6 年里,我们的引擎体系每年做到 100% 的性能提升,以淘系搜索为例,从最初 3000 台机器翻倍到现在区区 6000 台,但搜索服务却从 6 千 qps 增长了 40 倍到现在的 32 万 qps,同时还填补了算法欲壑(算法数据占用内存从最初的 10% 到了现在的 50%),转化率持续攀升,目前大搜索 GMV 已经是全网的主体了。搜索工程师的双 11 历来是实弹各种新武器的大机遇,而常规的技术保障已经成为踩在脚下的底线。实施任何一种降级预案都被我们视为耻辱,因为预案都是以伤害用户体验为代价的。在技术保障部双 11 总指挥群里此起彼伏的降级通告里面,从来没有过搜索的身影!

  14 年双 11 大促总指挥是 YF,搜索焦点集中在要检阅的 5 件新武器上:

  1. 天猫售罄率预估,商品加购和交易后及时预测它的售罄时间,通过降权或者加权提升搜索结果页每一个位置的价值,搜索 GMV 可提升 10%。
  2. 天猫 SKU 搜索,颜色尺码等 sku 属性参与检索。引擎平台实现了子文档检索功能,将原来集群拓展五倍规模才能做到的天猫 SKU 在原有基础上增加 60% 即可实现。
  3. Hippo 引擎在线管理系统,机群变为可灵活流动的三维架构,第一维度是根据商品质量或类目划分子机群,下面才是传统的二维行列架构,这带来的好处是查询性能的巨幅优化。
  4. 离线集群 HBase 升级 0.98,近 700 台机器的离线集群上各业务线分头开发累积导致集群效率底下,支持售罄率预估也要求我们把调优经验更厚实的 0.98 版本升级上去。
  5. 搜索分层优化 GMV,借助 Hippo 系统主搜根据商品质量划分子机群然后在业务服务层聚合,搜索 GMV 可提升6%,整体性能大幅提升 80%。

  10/17,离双 11 还有段日子,下午我常规心血来潮找 XD 了解 Hippo 的进展,结果却触动了我的神经,我们都希望看到 Hippo 在双 11 上线主搜和天猫实战检验,但 GD 坚持把统一到 A8 机器的运维工作一并完成(稍显保守),因为这需要补充近 300 台 A8 的机器,而机器已经拖延几个星期了,本该 9 月底完成上线的 Hippo 到了 10/17 看来机会渺茫,引擎体系奔向世界级的路上焉能贻误战机!更有甚者,售罄率预估与天猫 SKU 搜索这两个业务项目都依赖 Hippo,业务项目要是延误可是要掉脑袋的,念及此处我没有心情观礼了。要知道,主搜天猫加上这些 A8 升级后,还要退出来低配机器给其它搜索服务扩容,上下游一系列连锁依赖都嗷嗷待哺需要时间呀。紧急状态,不得不对搜索工程各相关团队发起动员了。 Hippo 必须不能够等待 A8 的到来尽快上线检验,要打破常规的水平分工来一场混战了。我直接请 YL 担任紧急状态下引擎端的负责人,飞行时更换引擎是我们起步时代的杀手锏,今天必须成为我们的底线。

  10/27 日,紧急状态的第 10 天,ZY 和 GD 在各应用集群间辗转腾挪,终于完成了 Hippo 上线和天猫 SKU 搜索上线;插件小组完成了售罄率预估上线,把主搜性能提升了 30%;LT 和 XY 在 QA 小组的陪伴下解决了各组件的 core 与慢,CS 也分批交付了 A8 机器。淘宝搜索、天猫搜索、店铺内搜索、店铺搜索共四个核心应用的淘系搜索达到了 40 万 qps 服务能力。这火热的十天,恰好也是 CS 和 GD 的陪产假。

  现在我是不是可以高枕无忧重上观礼台了呢?此次要实弹的新武器只有 Hippo 和天猫 SKU 搜索踏实了,而售罄率预估所需离线集群 HBase 升级后鲜有指标超越升级以前,全链路压测未能成功。更为甚者,TM 根据 10 月份无线端流量情况,把对搜索的要求从 10 万 qps 提升到了 15 万 qps,也就是说现有的 40 万 qps 整体能力必须提升到 45 万 qps!而多出来的 5 万 qps 要求又只能实打实落在最大的主搜索集群上,目前的优化手段已经用尽,降级是容易的也是耻辱的,怎么办?崩溃前奏,我冷汗直冒,尽管现在是 YF 担任总指挥。

  搜索分层优化 GMV 成了救命稻草,尽管已经在无线全量上线并拿到了大部分性能成果,已经体在现有 40 万 qps 的服务能力里。但在 PC 端上线却因为对广告的负面影响而步伐迟缓,这里还有 100 台机器可以省下来。此外协同搜索是主搜的辅助引擎,这有 200 台机器不得已可以下线。分层优化 GMV 和协同检索一上一下恰好可以抵消 GMV 损失,同时又能节省 300 多台机器。紧急关头,老板给我们亮了黄灯,暂时下掉代表搜索体系技术一大进步的协同关系搜索是我此次最大的遗憾。

  11/7 日,紧急状态的第 20 天,大促准备的战场收尾之后,全淘系搜索在线服务规模达到了 2500 台机器,搜索服务能力推高到至 45 万 qps,此外还有推荐服务能力到了 12 万 qps,以及 4 万 qps 的 AE 引擎服务能力。已成为集团基础设施的 opensearch 在那个周末还有个插曲,HT 应淘点点要求紧急把集群扩容到 4 万 qps。至此万事俱备,欢度周末之后我准备上观礼台了。

  11/10 日 21 点到 11 日晚 12 点共 27 个小时,5 种新武器实弹表演渐入佳境,事后回顾流量高峰在最初的 4 小时就已经到来了,尽管 11 日白天来势汹汹比前一天高出一倍不止,但到了晚上涨幅回落基本和 10 日持平了。观礼过程最为惊险的在 11 号上午 8 点到 12 点这段期间,对 IC 销量字段的更新度预估不足,导致天猫引擎有约半小时的延迟,售罄率预估也无法开启;无线推荐因为上游降级而流量大损峰值只有 4 万 qps(上限 12 万 qps)。在这 27 个小时里,搜索峰值是 32 万 qps(上限 45 万 qps),其中最大的份额来自手淘搜索峰值 10 万 qps(上限 15 万 qps)。手淘 UV 只到了理想目标的 60%,真要是满负荷过来的话,手淘搜索峰值会突破上限 15 万 qps 而达到 16.7 万,那么等待我们的唯有耻辱降级一途!售罄率预估当天开启 12 个小时,对成交转化提升达到了 10 个百分点。Opensearch 的服务大大低于预期只跑到了 7 千 qps。最后 AE 的大促意外交出了完美的业务答卷,同时引擎后台服务真的一度达到了 3.2 万 qps(上限 4 万 qps)。

  迄今为止的每一次大促搜索在线服务都没有任何形式的降级,无论是天猫还是淘宝还是 SC/AE 还是 1688,这一次游走在天堂和地狱之间,我们更清醒的认识到,技术进步永无止境!