搜索在线系统分为三个部分,从用户发起检索请求后,历经web前端、检索前端和检索后端。本文主要介绍检索前端的技术架构和关注点。
为了尽量排除笔者所在公司具体技术的相关名词,下文对各个检索前端模块进行了抽象,下图是检索前端模块示意图。
Web前端除了FE相关工作之外,还包括以下几项功能:
提供内容分发服务,并能够通过速度探测服务选取用户与IDC服务集群之间的映射表;
基于LVS网关,提供负载均衡、流量控制、防攻击等能力;
机房级别的流量调度,提供在机房故障情况下,能够快速将流量切走。
在检索前端架构中,主模块可以分解为接入、渲染和服务调度模块。
接入模块常用apache、nginx等作为反向代理服务,当前随着nginx高性能高并发特点,采用nginx作为接入模块成为主流。接入模块中嵌入的第三方模块,可以提供负载均衡(query签名+热词打散)、恶意流量打压及降级等功能。
渲染模块主要服务请求解析及页面渲染工作,这里涉及前端模板的开发。
服务调度模块首要工作是确定用户请求需要访问的多服务后端,而决策的依据是分词纠错模块,在该阶段,分词纠错模块提供需求激发功能:确定用户请求后端的类型;提供纠错功能,对用户query进行纠错处理。这里的其他服务指的是一些特有的模块,比如获取用户历史展现数据、历史行为数据及用户个性化数据等。
服务调度模块在完成需求激发后,请求后端服务,诸如自然结果、广告、特型结果服务后端等。
渲染模块和服务调度模块中都存在策略框架,对后端召回的结果进行策略微调、merge等操作,这里由策略RD负责。
其他后端服务包括广告,互联网变现的最大来源。此外,包括特型结果、垂类等,比如百度的阿拉丁、哥伦布等项目。
检索后端模块将单独做系列技术文章,在此不表。
检索在线系统中存在多种类型的缓存模块,在接入模块、服务调度模块都有缓存,缓存从功能上包括容灾cache、结果cache,从部署上可分为本地cache、远程cache等。缓存除了容灾功能外,主要提供优化请求响应时间的功能。
除以上描述之内容,检索在线系统中还包括诸如转码、摘要处理等服务,再次不表。但要说明的是:转码是wise端的产物,站长是否希望被转码,转码后的效果是否更利于用户体验,可以探讨。
作为架构RD,主要工作除了系统、模块架构重构和优化外,需要关注速度、稳定性、性能三个方面的指标。稳定性直接影响线上服务可用性,速度优化提高服务平均响应时间,性能提升能够节省服务器资源,概括来说,目标都是为了提供用户体验。
idea:
检索前端可以创建一条异步通路,异步通路可以通过将用户历史展现数据、点击数据、行为数据进行整合,在用户检索结束后,由异步请求通路携带用户历史数据请求后端服务,从而根据用户历史数据开发策略优化结果,提高用户体验。这里主要利用了移动互联网时代,手机首屏展现小,隐藏区域可以做的事情给我们更多的启发和创意。
再举个例子,比如用户语音搜索北京天气,那么搜索引擎就会返回北京天气,如果用户这时又想看看上海的天气,口语化的习惯是上海呢?如果没有用户历史数据的支持,上海呢的歧义太大,搜索引擎此刻一定是蒙逼状态。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。