朝花夕拾

京东三级列表页架构变迁 —— 孙元涛

孙元涛 GolangNginx+LuaRedis

列表页介绍

京东三级列表页为用户选取商品类型后,展示同类商品的页面。用户在首页左侧的导航树中、全部商品分类列表页、或者顶部面包屑导航中,选择到商品的最小分类级别后,到达三级列表页。该页面根据用户选择的商品类目进行检索,将结果以列表的形式展现在页面上。使用户快速地找到自己需要的产品,提高用户购买转化率。 页面 - 属性筛选区

业务特点

  1. 涉及到多维度多因子质量分综合排序,排序质量的效果直接关系到转化率,客单价,进而影响到GMV,实质上是数据挖掘和机器学习技术在海量数据上的应用
  2. 在不同三级类目下,通过复杂不确定的查询条件,属性区域和列表查询结果的实时联动,以及跟区域相关的库存、京东配送、货到付款等复杂业务逻辑下,做到高并发实时计算。
  3. 页面周围依赖的内部系统太多,要做到异步化展示,阻塞可降级

改造目标

  1. 提升转化率,客单价,GMV
  2. 缩短页面渲染整体时长
  3. 精简传输数据协议格式
  4. 日常功能上线做到灵活配置,通用化,尽量通过后台操作,而不需要做业务发布

设计部分

架构设计篇

架构设计 - 改造前架构 架构设计 - 改造后架构

新版架构特点 

  • 精简传输数据协议格式(json)
  • view层瘦身,偏业务逻辑后移
  • biz层使用go语言进行内存索引做筛选遍历
  • view层使用nginx+lua做模板渲染,运行在docker上,代码统一
  • twemproxy做jimdb代理,解决水平扩展连接数资源的限制
  • 解决跨机房调用网络延时的问题,采用双机房双活部署,只限于本机房内调用
  • 在线服务集群和离线计算集群,两套集群通过配置中心做到在线灵活切换

业务功能拆解,子系统划分 架构设计 - 业务架构

数据装载(mysql->jimdb->golang内存) 架构设计 - 数据装载

数据结构篇

架构设计 - 数据结构

数据异构篇

任务调度分发中心 架构设计 - 数据异构 - 任务调度分发 架构设计 - 数据异构 - handler

业务逻辑篇

架构设计 - 内存索引结构

消息处理篇

消息接入->消息处理->更新在线集群 架构设计 - 消息处理

使用到的开源框架

孙元涛
曾就职于搜狐,京东。亲历互联网Web1.0,Web2.0,移动互联网,智能硬件,电商等领域产品的架构设计与研发。