闲鱼技术2022年度白皮书-服务端主题-电商搜索里都有啥?详解闲鱼搜索系统(下)

简介: 闲鱼技术2022年度白皮书-服务端主题-电商搜索里都有啥?详解闲鱼搜索系统

接上篇:https://developer.aliyun.com/article/1225878?spm=a2c6h.13148508.setting.20.595d4f0eudDbz0


二、 然后,优化它:闲鱼搜索系统时效性优化

 

1. 差异化场景

 

上一章节提到的搜索系统架构适用于大部分电商平台,但闲鱼搜索场景与常规电商平台之间,又存在着显著差异。

 

image.png

其中,闲鱼商品单库存,无明显冷热差异且变更频繁的特性,对全链路的实时处理能力都提出较高的要求。试想一下,热门的商品被买下架后,并没有及时同步引擎。对买家、卖家和平台来说都是一种困扰与损失。

 

image.png

闲鱼搜索经年累月的业务迭代,累积了相当量级的实时增量。最严重的时期,引擎的增量延时一度达到8小时之久,对用户体验、成交效率形成了巨大冲击。因此过去的一段时间,我们开启了搜索时效优化的专项。

 

image.png

2. Searcher扩列

 

排查链路实时处理能力的瓶颈,如上文离线模块中对实时增量的描述(数据产出方实时生产的数据经中转Topic实时发送至Ha3,由Ha3引擎内的BS_lib构建出实时索引加载使用),在实时增量到达索引所在searcher列之前都未出现延时,因此瓶颈位于在线searcher的BS_lib的消费能力,最直接的方式是提升searcher的处理能力。因此,我们将searcher的列数从16列扩大至24列,提升了50%的实时增量处理能力,增量延时缓解。

 

3. 引擎架构治理

 

我们重新思考了闲鱼主搜引擎的架构与定位。在之前的架构中,倒排、正排、详情字段部署在同个引擎(Ha3引擎支持这种能力)。倒排、正排用作查询索引,详情字段补充商品详细信息,并对外提供信息补全服务。但查询的请求量是极其不对等的,详情字段的qps为索引字段的5.3倍。倒排与正排字段的数量远大于详情字段因此查询请求的机器要求是小CPU大内存,详情请求的机器则是大CPU,小内存。

 

两类字段部署在同一引擎,各自的资源短板被放大。同时,各字段实时增量是累加的。因此,我们拆分了查询引擎与详情引擎,缓解增量压力的同时,机器资源消耗也有所降低。

 

image.png


4. 增量分级

 

做了以上两个优化后,增量延迟有所缓解,但整体的增量量级并没有下降多少。因此在离线链路中,我们开发了增量Profile插件,用来统计字段修改的频率。

 

image.png

image.png

其中两个字段合计占到修改量的37%(总400+字段),经排查,两个字段并不需要秒级的实时性。引擎的离线链路中,虽然设定了批次增量与实时增量,但事实上所有开启的增量都会走实时增量通道,挤占优先级更高的增量的吞吐量。因此,进入引擎的增量务必根据业务诉求再做一次分级。

 

由此,我们在buildService上开发了增量分级插件,提供增量分级处理的能力,对于准实时性要求的增量仅做批次增量(1小时进引擎),不挤占核心实时增量的通道,保障商品核心特征的实时性。

 


image.png

5. 辅表写扩散问题

 

优化增量量级的另一个重要关注点就是辅表写扩散问题。商品以item_id为主键分列部署,离线阶段,当辅表有驱动增量时,跟主表join后增量翻倍增长。例:商品上挂载用户在线状态的特征,当用户状态变化时,该用户的所有商品都会发出实时增量消息。量级将远大于用户在线状态的实际消息量级。解决方式是将这一类字段,单独改造成在线辅表,通过在线join的方式查询。

 

image.png


经过以上系列的优化后,我们最终把引擎延迟抹平,达到真正实时化搜索的定义基本无延迟红框部分为全量后追增量阶段采用逐行Rolling模式切换中机器不服务,对用户体验无感知

 


image.png

三、 最后

 

电商平台的搜索是一项系统性工程,经过多年发展,已沉淀出一套通用性的框架。里面不仅包含对搜索引擎的理解,也体现服务端架构设计的可伸缩、平行扩展等概念。但仅有框架的认知还不足以支撑快节奏的互联网业务发展。在通用框架的基础上,深刻理解搜索业务,关注稳定性、研发效能,找到应用场景的痛点,有针对性的做出架构调整,才能构建出真正助力业务发展的搜索系统。

 

相关文章
|
9月前
|
数据采集 缓存 监控
闲鱼 item_get - 商品详情接口对接全攻略:从入门到精通
闲鱼item_get接口可精准获取二手商品详情,支持商品ID查询标题、价格、成色、卖家信息等全量数据,适用于比价、运营、风控等场景。本文提供从权限申请、签名认证到生产优化的全流程对接指南,确保稳定高效调用。
|
9月前
|
XML 算法 安全
详解RAG五种分块策略,技术原理、优劣对比与场景选型之道
RAG通过检索与生成结合,提升大模型在企业场景的准确性与安全性。分块策略是其核心,直接影响检索效果与生成质量。本文系统解析五种主流分块方法:固定大小、语义、递归、基于文档结构及LLM分块,对比其优缺点与适用场景,并探讨RAG在金融、医疗等高风险领域的可验证性挑战与前沿优化路径。
|
JSON API 开发者
shopee商品列表API接口获取步骤
虾皮(Shopee)商品列表 API 接口用于获取平台商品信息,支持按店铺 ID、类目、关键词等筛选条件查询商品数据,包括商品基本信息、图片、描述等。接口具备灵活性、数据丰富及分页机制等特点,满足电商数据分析与管理需求。示例代码展示了通过 Python 请求 API 获取某店铺商品列表的过程,包含请求头设置、参数定义及异常处理等功能,便于开发者快速上手使用。
|
存储 移动开发 自然语言处理
|
前端开发 Ubuntu 开发者
【Docker系列】Docker-核心概念/常用命令与项目部署实践
【4月更文挑战第1天】 Docker是容器化技术,打包应用及依赖,实现快速部署。核心概念包括镜像、容器和仓库。镜像是只读模板,容器是镜像运行实例,仓库用于存储和分发镜像。常用命令如`docker search`、`docker pull`、`docker images`、`docker ps`等。安装Docker在Ubuntu上涉及`apt-get update`、`install docker-ce`等步骤。了解这些基础,开发者能更高效地部署和管理应用。Docker简化了环境配置,增强了软件的可移植性和扩展性,是现代开发的必备技能。
1016 3
|
容灾 算法 数据可视化
闲鱼技术2022年度白皮书-服务端主题-电商搜索里都有啥?详解闲鱼搜索系统(中)
闲鱼技术2022年度白皮书-服务端主题-电商搜索里都有啥?详解闲鱼搜索系统
859 0
|
并行计算 PyTorch 算法框架/工具
Anaconda 安装并使用 PyTorch(PyCharm)
Anaconda 安装并使用 PyTorch(PyCharm)
1680 1
|
数据库 数据安全/隐私保护
什么是行级锁和表级锁
什么是行级锁和表级锁
730 0
|
安全 网络安全 API
实战小结 | 使用objection快速绕过SSL Pinning(https强认证)
实战小结 | 使用objection快速绕过SSL Pinning(https强认证)
5645 0