网页搜索核心模块架构重构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
网页搜索核心模块重构2014.6~至今
网页搜索部& 工程效率部
冯上马波
C 模块-位置Web 服务器
上游模块…
召回控制器
C
召回控制器Query 分析搜索模块
搜索模块搜索模块搜索模块摘要
模块C
•多产品支持
•网页搜索
•移动搜索
•知道/贴吧/文库
•开发密集
•每周上线10-20个功能
•最近1.5年有206人贡献过代码
内容简介
项目背景
阶段性成果
我们如何做设计层面、编码层面、工具层面
项目背景
模块接连出现上线回滚一个月6次代码复杂难以维护复杂度高
系统性错误难以排查内存、指针、core
项目阶段性成果
Query分析交互部分全部OO化
面向对象的设计,接口清晰,职责明确
搜索控制器交互状态机重新设计
逻辑清晰化,复杂度降低,内存下降,性能提高
单元测试覆盖率提升、代码复杂度下降类平均大小降低25%,平均圈复杂度下降10%
清除无用代码2.6W+ lines
我们如何做
指导思想小步快跑、演进式设计、SOLID原则实现细节设计层面、编码层面、工具层面
设计层面
架构:混乱/messy →清晰/clear and focused 初级OO/basic OO →设计模式/design pattern
架构:混乱/messy 清晰/clear and focused
PackParse QueryControl QueryControl 不再参与词性分析交互与词性分析交互解析词性分析结果构造词性分析请求根据当前召回状态筛选要执行的query_type
QaResponseParser makeDaRequest_strategy()QaRequestBuilder get_normal_query_type get_next_query_type parseDaResponse_strategy()Queryanalyze.cpp
QueryAnalyzer 总控逻辑通过A 平台发送请求通过B 平台发送请求AsyncSubmitterA AsyncSubmitterB
AsyncSubmitter
RequestBuilder ResponseParser 词性分析请求控制框架
PackParser 退出与词性分析交互
ResultFetcher
search
-Cac******irer*-Ca******ta*-QueryTy********ata*-Req*****Array -_*******en_cache -Pack****ager -char buf[]-lost_bs_arr_t -_search*****ueryType -_nee***archCac****vel -_sendAn*********neBc -sen********ertOneDBArr -_sendA********ostDB …………后端查询Proxy
缓存查询Proxy StrategyQueue -search Normal Specific1Specific2
getResults::recall info
-RecallInfo*_m_recall_array[]check_*****_old_strategy check_db_****mask_*****sults Upd**********es_num modify_***results_layout merge_and_save_***_result processAfterRecall
-RecallInfo*_m_recall_array[]check_*****_old_strategy
check_db_****mask_*****sults Upd**********es_num modify_***results_layout merge_and_save_***_result XXCallback::on_success
-RecallInfo*_m_recall_array[]
check_*****_old_strategy
check_db_****
mask_*****sults
Upd**********es_num modify_***results_layout merge_and_save_***_result RecallInfo
-finish
Queue TypeResult RecallInfo
ResultFetcher RecallInfo
初级OO/basic OO 设计模式/design pattern
Template Method StrategyQueue
parse_response
QueryHighRisk
QueryHighRisk
QueryHighRisk
SpecialQueryB
SpecialQueryA
parse_response
AnotherStrategy find_query parse_response StrategyQueue find_query parse_response SomeStrategy find_query parse_response SomeStrategy find_query parse_response ElseStrategy find_query parse_response QueryDiyukuozhan find_query parse_da_response ElseStrategy find_query parse_response QueryDiyukuozhan find_query parse_da_response QueryDiyukuozhan find_query parse_da_response QueryDiyukuozhan find_query parse_da_response AnotherStrategy find_query parse_response
StrategyQueue parse_response SomeStrategy parse_response ElseStrategy parse_response AnotherStrategy parse_response QueryFinder find_query
NormalFinder find_query AnotherFinder find_query OtherFinder find_query
Bridge