京东用户通过发送请求道blender,首先解析数据参数。如果命中blender page cache直接返回给用户。如果没有命中,则调取服务运营平台(OP)和QP,并将其传给Merger,Merge会检查是否命中Attr cache,如果命中并且恰好仅请求属性汇总的结果,直接返回给blender。否则进一步查看到是否命中merger page cahce,如果命中直接调用detail包装,返给blender。如果没有命中,则调用User Profile获取用户标签,将这这个传达给searcher(篇幅所限,图中只列了一个searcher,实际是多个)。Searcher接到请求,判断是否命中doc cache,如果命中doc cache,则拉取增量结果;如果没有命中doc cahe,则拉取全量和增量结果。然后依次进行排序、在线业务处理,把结果返给merger。Merger合并多个searcher结果,排序、在线业务处理,最后调用detail包装,最后将结果返给blender,blender合并多个搜索结果后返回给用户。
京东搜索作为一个高并发系统,为了保证高效召回率和低响应延时,我们把整个京东搜索服务流程的处理全部放在内存当中进行一个大量计算,多个searcher并发处理请求,同时单个searcher内部采用线程池技术,即所以线流程串行执行,保证并多个查询线路之间互不影响。此外通过合理的设置线程序池子的大小,我们可以保证CPU资源得到充分的利用。在上述两个方面对系统进行优化过程之后,整个搜索服务系统稳定性质很高,保证了很好的召回率,内存使用率,计算搜索排名速度等指标有大幅度的提高。
但是我们改进系统的步伐并没有停歇,因为通过实践发现基于内存和线程池的搜索服务仍然有几个瓶颈点亟需解决,主要包括:拉取倒排、排序和在线业务处理。针对这些问题,我们进行了二次优化,主要包括如下措施:
1. 多级缓存策略