成本优先的技术架构

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 成本优先的技术架构 Shopee海量商品系统的治理挑战和应对之策 / 张俊杰
2.
3. 关于我 张俊杰 ● 2019年加入Shopee ● 目前负责商品系统后端研发 的工作 ● 减肥并不难,关键在于找到正确的方法并实践。 ● 减肥是一个持续的过程,我们可以借鉴他人的经验,避免走弯路,并增强信心。
4. 目录 1 海量商品系统的背景和挑战 2 海量商品系统的应对 - 缓存篇 3 海量商品系统的应对 - 存储篇 4 成果和总结
5. 海量商品系统的背景和挑战
6. 海量商品治理 - 背景 Shopee是东南亚领航电商平台, 业务范围覆盖新加坡、马来西亚、菲 律宾、泰国、越南、巴西等十余个市 场,为全球用户提供无缝、有趣且可 靠的购物体验。 销售商品 购买商品 ● 买卖双方通过电商平台促成商品的交易。
7. 海量商品治理 - 现状 东南亚市场份额遥遥领先 百亿级 商品 上千个 商品字段 服务多市场 十余个市场,卖家体量大,潜在客户人群 10+ 亿 不同的文化,具有更多元的商品 玩法多样化 本土和跨境模式使得商品能够同时在多个市场销售。 新兴的全托管等多样化玩法不断吸引商家参与
8. 海量商品治理 - 现状 百万级 并发请求 商品系统覆盖了电商平台 绝大部分核心路径 服务10+个市场 客户端 商品详情 搜索推荐 订单 购物车 …… ● 商品曝光 ● 商品浏览 ● 用户下单 ● 卖家发货 商品系统的流量来源复杂 众多相关业务团队 搜索推荐 数据分析 广告 履约 店铺管理 订单管理 开放平台 …… ● 卖家中心/开放平台/买家 ● 内部系统流量 (业务、算法、数据分析等)
9. 海量商品治理 - 挑战 数据库服务器成本非常高昂 数据库 存储量大 ● 百亿级商品存储,数据规模庞大 ● 随着业务发展,每个商品数据的体积 也不断膨胀 数据量 持续增长 ● 每年都需要增加新的数据库来存储更 多的数据 数据存储扩散比例大 ● 除了从库,还需要考虑离线数据、索 引数据等资源的需求 数据库从库 数量多 ● 即使有缓存层存在,流量仍然会对数 据库施加相当大的压力。 流量 持续增长 ● 为了承载持续增加的流量,我们不断 增加数据库的从库数量。 应对峰值流量 ● 为了避免数据库过载,我们会预留足 够的缓冲空间。
10. 海量商品系统的应对 - 缓存篇
11. 大家项目里面有用缓存? 普遍接受的事实 引入缓存服务可以提升系统整体性能 缓存服务会降低数据库成本吗?
12. 缓存的正确使用对数据库成本影响很大 理想情况下 100%流量 100%流量 缓存集群 Server Server 99%命中率 <1%流量 实际情况 数据库 Server Server Server 集群 Server Server Server VS 缓存集群 Server Server 50% - 99%命中率 <50%流量 数据库 Server Server Server 集群 Server Server Server 数据库 Server Server Server 集群 Server Server Server + XX 套集群 成本:需要更多的数据库来处理由于缓存不命中引起的数据库流量 (用最坏情况做成本预算) 风险:如果缓存数据大规模受到污染,可能引发系统故障 为了支持额外的50% 流量,需要大量的额 外资源。
13. 从成本和性能的角度考虑,我们需要用缓存服务 来支持大部分的读流量。 在这个架构中,缓存命中率对整体成本起到了决 定性的作用。
14. 选择最优TTL策略,提升命中率 缓存 命中 流量与系统行为 关系错综复杂 缓存 Miss ● 众多相关业务团队 ● 业务变化频繁 访真验证(控制变量) 筛选 TTL策略 固定TTL: 3h / 6h /9h…48h 请求次数 大于 某个阈值:2次 -> 24h 按请求次数进行缓存续期: 2..6 -> 3..24h … 02 选择决策因子 缓存命中率、缓存内存使用率 缓存的读写QPS 数据库压力指标 … 03 采集线上流量 用户行为是未知的,我们以线上实际流量为准 进行策略验证,避免结果失真 04 搭建仿真环境 参考线上系统环境,保持架构和配置与线上系 统一致。 编写脚本,用于执行仿真测试和报告输出 05 运行与调优 执行仿真模拟和输出报告,并优化参数持续迭 代 01 流量查询 空闲 内存 缓存 商品数量 数据库 商品数量 内存利用率 增加 内存 不足 分析每日缓存 数据的特征 ● 流量入口过多,非常复杂 ● 数据特征不稳定 提升 数据驱逐 提高 内存利用率 ● 内存利用率过高会引 起数据驱逐,数据驱 逐是否引起系统性风 险 缓存命中率 降低 对缓存周期做 精细化控制 ● 怎样的策略是有效的? 仿真验证
15. 治理进度 数据库-主库成本 不变 100% 数据库-从库成本 减少15+% <85%
16. 关于缓存,除了TTL以外, 还可以通过什么优化来减少数据库压力呢? 缓存更多的数据 在不扩容的情况下,减少数据体积可以缓存更多的数据
17. 哪些方式可以减少数据体积 数据库 基础信息 基础信息 描述信息 物流信息 统计信息 描述信息 减少冗余 和重复字段 例如: 一对多关系里面 重复的ID信息 数据压缩 例如: 商品描述等信息 基础信息 描述信息 Key 物流信息 统计信息 减少冗余和重复字段 物流信息 缓存集群 Node Node Node Node Node Node 统计信息 数据压缩 成本低,收益确定性高 成本中等,收益具有不确定性 通过简单编码即可实现减少数据体 积的目标,无需涉及复杂的技术设 计。 需要找到成本和收益的平衡点 ● 寻找业务匹配的压缩算法并进行性能验证 ● 考虑算法升级后对系统的兼容性 ● 针对不同的缓存数据类型(例如字符串、数 字),进行独立验证 Node
18. 通过减小数据体积,可以增加缓存的容量,从而提高缓存命中率。 缓存集群 数据库 基础信息 基础信息 描述信息 物流信息 统计信息 描述信息 减少冗余 和重复字段 例如: 一对多关系里面 重复的ID信息 基础信息 描述信息 Node 实体数据 实体数据 Key 物流信息 统计信息 数据压缩 例如: 商品描述等信息 物流信息 统计信息 算法迭代 兼容 Header 实体数据 Header 实体数据 算法性能对比:压缩体积,操作耗时,CPU开销
19. 治理进度 不变 数据库-主库成本 <85% 减少10+% 数据库-从库成本 <75%
20. 随着缓存服务承载的流量不断增加,风险也 会相应增加,例如热点数据的问题。 热点数据问题会影响缓存成本吗?
21. 多级缓存减少缓存成本 ● 正常场景: 每个商品有不同的流量, 但整体上看不会超过节点 承载的水位 Cache Node 多级缓存: 利用服务的空闲内存,对热点数据做本地缓存 商品A QPS 商品B QPS 商品C QPS 收益 ● 特殊场景: 提升性能和吞吐: 降低系统性风险: 避免热点数据引起缓存节点宕机(CPU过载), 用户将无法访问该节点的其他数据 本 地缓存的数据访问速度远超于远端缓存,数据 传输速度是千级的差异。以及减少编解码的性能 消耗。 热点数据引起缓存节点不可 用 商品B QPS Cache Node 流程 商品A QPS 对象 B QPS 商品C QPS 为了解决热点数据导致的缓存节点不可用问题,我们可 以考虑提前对缓存集群进行扩容。因为每个节点都可能 发生相关的问题,会增加数倍的资源成本 非中心化数据, 多容器 中心化数据 中心化数据 挑战 获取商品信息 本地缓存 本地缓存 远端缓存 数据库 识别热点数据 在时间窗口内 QPS超过设定的阈值 数据一致性和 更新机制 广播通知&版本对比 vs 短TTL 本地缓存 1.引入复杂机制的风险和成本 2.业务思考: (1)特定时间区间的应用 (2)特定场景的应用
22. 治理进度 数据库-主库成本 数据库-从库成本 缓存成本 不变 不变 不变 规避热点问题引起的缓 存扩容开销
23. 海量商品系统的应对 - 存储篇
24. 存储成本居高不下 缓存 命中 流量查询 空闲 内存 缓存 商品数量 缓存 Miss 百亿级 商品 上千个 商品字段 数据库 商品数量 数据库已经退化到以存储 为主,但是成本还是很高 ● 数据规模大 ● 资源扩散比例大 从库 离线数据 主库 索引 其他
25. 降低存储成本 数据库 冷热分离 把冷数据存储在更便宜的资源上 如何落地? 热数据 冷数据 热数据 冷数据
26. 数据归档 - 冷热数据的分类定义 热数据 被在线系统 低频访问的数据 不会被在线系统 访问的数据 冷数据 用户维度活跃的数据 ● 与时间没有强相关的数据,通过 流量比例区分, 例如最近 n 月访问占比超过 x% 的数据。 ● 具有时间属性, 例如 最近n年的商品快照。 低频访问的数据 ● 与时间非强相关的数据通过流量 比例区分, 例如最近 n 月访问占比不到 x% 的数据。 ● 具有时间属性,距今时间久远, 例如 n年前的商品快照。 用户主观删除的数据(软删) * 业务上要求软删除 * 法务问题 无用的日志数据 日志数据具有时间属性,结合业务上的诉求 定义规则,例如n年前的商品变更记录。 没有价值且耗费大量资源的业务数据 对于一些长期不活跃的用户,例如几年都没有登 录的卖家的商品数据。
27. 数据归档 - 冷热数据存储成本的对比 热数据库 读频率 高频 写约束 ALL 能力 ● 事务能力保证 ● 性能要求高 被在线系统 低频访问的数据库 不会被在线系统 访问的数据库 低频 不读 Insert Only Insert Only 对读的性能要求低(延迟,QPS) 不需要考虑事务等写能力的支持 降低存储成本 MYSQL MYSQL 数据仓库 ● 磁盘: 便宜的方案 ● 内存: 更小的内存 ● CPU: 更少的核数 ● 部署在高规格 的服务器 ● 部署在更廉价 的服务器上 ● 超大磁盘服务 器 更高的数据压缩比,存储更多的数据 冷数据
28. 数据归档 - 可能出现的问题 数据实体往往是多张表以及多个数据库, 涉及不同的系统与团队 不同系统之间的兼容性处理
29. 数据归档 - 兼容性(低频访问的冷数据) 商品系统 外部系统 查询 (例如价格/库存) ● 商品ID为主键 ● 具有外键指向商品数据 访问 数据 访问 数据 热数据库 被在线系统 低频访问的数据库 数据归档本质上是把数据从 热数据库搬到冷数据库 相关系统需要兼容数据库物理删 除消息 热数据 ● 系统支持查询热库和冷库 (一般先热后冷) ● 支持冷库查询降级 被在线系统 低频访问的数据库
30. 数据归档 - 兼容性(不被访问的冷数据) APP 商品详情 查询 查询 商品系统 内部系统 外部系统 查询 (例如价格/库存) 查询 查询 访问 数据 访问 数据 热数据库 被在线系统 低频访问的数据库 用户体验 ● APP不能crash ● 友好的提示 不会被在线系统 访问的数据库 业务流程 ● 业务应该正常运行, 没有未知的异常 热数据库 被在线系统 低频访问的数据库 系统服务 ● 系统不能出现未知异常 ● 全局ID不能被复用 ● 避免缓存穿透 不会被在线系统 访问的数据库
31. 数据归档 - 方法 01 定义规则 ● 深刻理解数据 ● 决策存储架构 02 系统兼容 ● 洞悉兼容问题 ● 保障用户体验 03 数据归档 ● 分离冷热数据 ● 释放富余资源 业务 法规 风险 进度 管理 与沟 通
32. 存储应对 - 治理进度 100% 减少50+% 数据库-主库成本 <50% <75% 减少50+% 数据库-从库成本 <25%
33. 成果与总结
34. 成果与总结 减少 千万级人民币 服务器成本 减少支撑读流量的服务器成本 通过仿真验证选择最优TTL,数据库成本 减少 15+% 通过减少缓存对象体积,增加最大缓存数 量,数据库成本减少 10+% 减少海量数据存储的服务器成本 把“低频访问数据”分离到低规格服务器, 把“不被访问的数据”分离到数据仓库, 数据库成本减少 50+% 通过多级缓存避免了缓存扩容引起的额外 成本开销 1.资源限制是客观存在的。 资源无法无限的增长,我们需要接受它,并充分利用 已有的资源。 2.规则是可变的。 随着业务的发展,我们可以重新审视这些规则,并从 成本优先的角度灵活调整它们。
35. Q&A
36.

Accueil - Wiki
Copyright © 2011-2024 iteam. Current version is 2.137.1. UTC+08:00, 2024-11-15 16:48
浙ICP备14020137号-1 $Carte des visiteurs$