目前很多人对三级页面的质量分因子不是很了解,不知道有多少个权重,特此京涛老师从京东三级列表页架构师那获悉到京东三级类目权重架构开发工作。京东分类页面的入口
分类列表入口,可以通过京东首页首屏左侧导航进入,是用户购买商品的几大入口之一。
分类列表,展示各个分类的商品,有综合排序、价格排序、销量排序、上架时间排序、图书还有出版时间排序。可以按照品牌、价格和各种扩展属性筛选出想要的商品。下图以空调列表为例。
分类列表特点
-- 分类多,全站大概几千个分类;
-- 商品多,每个分类商品多,有的分类能达到上千万的商品;
-- 需求多样化,不同分类需求不一样,例如大家电、图书需求各不一样;
-- 请求量大,实时性要求高。
京东分类升级新架构权重
新架构设计目标
-- 分布式,数据可以做多个分片,服务各层可以做到水平扩容;
-- 高可用,双机房双活部署;
-- 响应迅速;
-- 数据闭环,线上服务主要数据不依赖于外部API;
-- 运维便捷,方便切换集群,方便分类管理配置;
-- 数据提升,通过优化排序算法,提升GMV、订单转化率、客单价等。
新架构功能模块如上图所示:
-- 页面渲染:采用OpenResty(Nginx+Lua)来作模板渲染,方便页面逻辑的调整;
-- 业务处理:采用golang,所有的筛选、过滤逻辑都是在这一层处理的;
-- 数据异构:页面渲染需要相关的数据、过滤筛选需要的数据,都是通过异构过来的;
-- 消息处理:通过接入MQ消息,可以实时处理商品上下架、库存更新、价格修改等消息;
-- 质量分计算:通过大数据平台计算商品质量分,为综合排序提供依据;
-- 配置管理中心:负责后台调度、分类配置等。
新架构功能模块上线情况
新架构离线数据流程如下图
其中:
-- 数据集市,使用的是京东的大数据平台;
-- JSS,是京东自研分布式文件存储系统;
-- JIMDB,是京东自研KV存储系统,可当分布式Redis使用。
详解各个模块的权重
* 质量分计算
由于每个分类的商品非常多,个别分类达千万量级的SKU,而用户浏览的SKU有限,我们需要将用户最可能买的商品排在前面;为每个分类的所有sku进行质量分计算,涉及到几十个指标(包括销量、评价、浏览、转化率等);根据质量分的高低进行排序;由于涉及数据量很大,所有计算都在大数据平台完成;将计算结果推送到JSS。
由于还有一些特殊规则,例如品牌穿插、店铺穿插、特殊排序等,这些规则的实现是通过worker实现,读取jss,并进行特殊规则处理。将处理后的数据推送到MYSQL。
* 异构服务
异构服务主要是异构过滤和展示需要的商品数据;调用外部各个接口,形成一张商品宽表。如下图所示:
业务处理子系统介绍
上图展示了列表各种筛选逻辑,排序逻辑。
业务处理子系统提供前端所需要的所有过滤筛选接口,以及展示数据。该系统采用golang开发,所有筛选数据都存在内存中,提高检索速度;展示的数据都放在jimdb中,目的减少占用内存大小,缩短golang的GC时间。下图展示了内存中存储的数据。
* 消息处理系统
该系统接收处理相关消息(商品变更,上下架,价格变更,库存变更),并实时更新到线上,如下图所示:
更多干货内容分享尽在京涛老师QQ:207331567分享!