网易 丁鸣亮 - 《百万级并发商品服务架构解密》

通过介绍商品在电商平台中的应用和一些基本定义,引申出考拉网的商品服务创建的历史流程及其缺陷。后续主要介绍商品服务,为完成2017年双11大促全站QPS 8倍增长的目标,进行系统级的优化。
展开查看详情

1.百万级并发商品服务 架构解密 分享人:丁鸣亮

2.

3.

4.个人简介 Personal Profile 分享人: 丁鸣亮 职 位: 商品库存中心负责人 工作经历: p 网易印像派 p 网易机票 p 网易美妆 p 网易秀品 p 网易考拉

5.分享大纲 01 前言:电商平台的商品服务 02 考拉:商品服务的“黑历史” 03 2017年:商品服务的破而后立 04 2018年:商品服务的展望

6.电商平台的应用 传统电商 金融电商 商品在电商网站的定位 Ø 网站流通的数据载体 服务电商 Ø 售卖商品是最核心的业务 会员制电商 共享经济

7.商品的基本定义 l 类目 Category p 后台类目 手机/数码配件 商品体系 p 前台类目 苹果手机 l 品牌 Brand 苹果 类目 类目 l 商品 Goods IPhone7/Iphone8 p 普通商品 IPhone7 品牌 品牌 p 组合商品 IPhone7+屏贴 商品 p 商品图片 商品 p 商品标签 SKU SKU Iphone7 l SKU 销售 红色+64G/红色+128G 销售 属性 属性 l 属性 Property p 销售属性 颜色/容量大小 普通 普通 普通 p 普通属性 屏幕尺寸/分辨率 属性 属性 属性 p 物流属性 重量/长宽高 l SPU 商家A和商家B的 IPhone7 l CSPU 商家A和商家B的 IPhone7 红色+64G

8.分享大纲 01 前言:电商平台的商品服务 02 考拉:商品服务的“黑历史” 03 2017年:商品服务的破而后立 04 2018年:商品服务的展望

9.考拉 商品服务的“黑历史” Ø 时间有限 14年11月立项开发 15年1月初内部试用 15年1月中旬正式对外 Ø 人力资源有限 技术团队13人 Ø 基于网易美美系统做二次开发 4个工程 2000个在售SKU

10.考拉 商品服务的“黑历史” 业务模型定义(GoodsDetail) Ø 商品维度数据 Ø 扩展数据 Property 预售 Brand 新人专享 SKU 仓库 库存 Category 活动列表 Goods 微信分享

11.业务模型调用链

12.业务模型的缺陷 容量 总是包含商品详情页描述内容 性能 压测期间平均RT在300ms 个别商品的容量超过1mb 个性化需求导致RT上升到450ms A B 同步接口刷新数据 业务模型频繁变动 刷新 扩展性 同一字段有不同的含义 获取刷新数据源需要落库 全量刷新需要20多分钟 多个工程重复定义 C D

13.分享大纲 01 前言:电商平台的商品服务 02 考拉:商品服务的“黑历史” 03 2017年:商品服务的破而后立 04 2018年:商品服务的展望

14.2017年 商品服务的破而后立 Ø 有限的时间 7月到9月 Ø 业务和重构并行 品牌直采 考拉超市 考拉工厂店 供应商直发 商品定时售卖 商品颜色库、尺码库 ... ... Ø 8倍的QPS目标 3.2w -> 26w

15.创业夫妻店 向 考拉大饭店 的转型之路 01 确定经营范围 梳理业务边界 02 给饭店选址 资源服务的选型 03 制作新的菜谱 重新定义数据模型 04 提高翻桌率 优化商品数据的读写效率

16.梳理商品前台系统的业务边界 Ø 结合现有需求,新建只读的商品前台系统 mobile商详 Ø 业务边界外的需求,由应用层自行解决 wap商详 pc商详 商品详情页 property sku、goods 商品前台 商品通用数据 category、brand 当前售价 可售库存 商品附属数据 利益标签 标签解释

17.关键资源服务的选型 Ø 缓存 u NKV u NCR u Redis Ø 数据源 u Dubbo(带Redis) u DB Ø 数据更新方式 u 异步消息 u 同步

18. 重新定义数据模型 Ø 目标1:数据使用时,不依赖底层服务的状态 核心数据模型的闭环处理(将数据异构到商品前台系统里) u 原子化的基本数据 Property SKU Goods Brand u 聚合化的接口数据 Property SKU Property SKU Goods Brand

19.重新定义数据模型 Ø 目标2:支持高效的使用和针对性的优化 按业务维度的来定义数据模型 u 商品基本数据 u 商品扩展数据 u 商品动态数据 u 商品附属数据 Property Brand 当前 售价 商品 SKU Category 标签 可售 库存 Goods 仓库

20. 重新定义数据模型 Ø 目标3:更清晰的数据模型使用规则 u 数据模型分层定义 接口模型和存储模型分离,且存储模型只在内部流转,不开放给外部使用 u 禁止有歧义的字段值 以不同的字段,实现不同场景的含义 Ø 目标4:快速支持交易流程的需求 u 定义专用的精简版数据模型 u 开发专用的数据接口

21.选择商品数据的更新方式 Ø 如何实现高效的数据更新 u 系统解耦:MQ消息通知 u 水平扩展:无状态的异构Worker

22.读取商品数据的优化 Ø 三级缓存的预案 u L1缓存:主动刷新热点商品 u L2缓存:被动刷新被访问的商品 u L3缓存:全量的商品 L1 L2 L3 存储介质 LocalCache LocalCache NKV 存储数量 4w 1.2w 全量 刷新方式 主动 被动 主动 失效时间 5min 1min 7天 刷新间隔 2min 无 60min 命中率 70% 50% 100%

23.读取商品数据的优化 Ø 按照线上真实情况,将L1缓存刷满后,出现了FGC的问题 u 任何假设都要经过严格的实践 u LocalCache主要用来防止热点数据 Ø 最终方案 u L2+L3缓存 L2 L3 存储介质 LocalCache NKV 存储数量 5000 全量 刷新方式 被动 主动 失效时间 3s 7天 刷新间隔 无 60min 命中率 20% 100%

24.服务稳定性的提升 Ø 服务灰度上线 Ø Consumer端的处理 u服务调用的二次封装 u服务调用的超时设置 u服务关停演练 Ø Provider端的处理 u按接口设置流控 u按URL设置流控 u商品详情页的动静数据分离

25.最终的优化效果 双11压测时,全站QPS 34w,高出计划 25%,相对618提高了10倍 双11大促时,全站QPS 27w(同比提升 33倍);下单QPS 1500(同比提升10倍) 下单QPS 提升5倍 下单接口RT(ms) 提升25倍 新版(双11) 1900 新版(双11) 12 旧版(618) 370 旧版(618) 300 0 500 1000 1500 2000 0 100 200 300 400 单个复杂商品的大小(KB) 减少70% 单个复杂商品读取RT(ms) 提升5倍 新版(双11) 3 新版(双11) 18 旧版(618) 10 旧版(618) 90 0 2 4 6 8 10 12 0 20 40 60 80 100

26.分享大纲 01 前言:电商平台的商品服务 02 考拉:商品服务的“黑历史” 03 2017年:商品服务的破而后立 04 2018年:商品服务的展望

27.2018年 商品服务的展望 Ø 解决循环依赖和容量评估的问题 继续做商品前台服务的二次拆分

28.2018年 商品服务的展望 Ø 减少考拉网业务系统的负载和对核心系统的入侵 新建商品打标系统

29.2018年 商品服务的展望 Ø 持续提高缓存的性能 充分利用服务器资源 解决热点数据问题 01 02 缓存读取的前置 提高本地L2缓存的命中率 数据持久化和异地容灾 提高序列化的性能 03 04 升级NKV到Solo-LDB版本 Kryo/ProtoBuffer等 减少网络带宽的消耗 05 缓存数据结构的持续优化