携程门票:亿级流量挑战下的高可用架构设计与实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 携程门票 亿级流量挑战下的高可用架构设计与实践
2.
3. 目录 01. 系统概述 熟知的大流量场景 02. 营销活动的特点 背景 | 设计原则 | 目标及范围 03. 交易系统在大流量下的架构应对策略 稳 | 准 | 快 | 海外访问性能优化 04. 如何让高可用具备“可持续性”? 架构健康度治理 | 稳定性保障体系 05. 总结
4. 参与过的大流量场景
5. 系统概述 秒杀/活动 抢菜 双11 节假日抢票 疫情 抢菜 门票/演唱会 印象与感受  定时开售  卡顿/提示太火爆/排队  抢不到/抢到被退
6. 系统概述 秒杀/活动 抢菜 双11 疫情 抢菜 大流量/弱一致性 大流量/弱一致性 节假日抢票 门票/演唱会 大流量/强一致性/简单限购 大流量/强一致性/复杂限购 业务场景特征  大流量/高并发  准时开售/抢热点  保障履约 涵盖:订前+订后
7. 大型营销活动案例
8. 历史大型营销活动 2020 8.8-9.1 惠游湖北 · 0元票 2021 瞬时流量超过 1500万 9.14 北京环球影城开业 友商:页面卡顿,订单无法确认, 2024 4.10 IU(李知恩)演唱会· 全球售卖 携程:预订丝滑 (10秒售罄) 超 300万 人成功预约 大量退单(PR事件) 韩国女演员全球人气排行TOP2 携程独家,挑战最大,打破历史峰值 与友商比,携程最稳且销量最高 历史峰值最高
9. 历史大型营销活动 营销活动&节假日与日常峰值流量的倍数 2020湖北0元票 2021年9月14日 北京环球影城开业 2023年五一 2023年09月15日 武汉动物园开业 2023年十一 2024年4月10日 IU 演唱会CT同售 73 45 35 5 20 23 5 5 峰值QPS达到数百万
10. 大流量活动给系统带来的问题
11. 大流量活动常见问题归纳 产品视角 用户反馈 首页/营销页 填写页 详情页 订单详情页 确认中 预订 打开慢、卡顿、宕机 支付 取消订单 付款后不能确认、退款 订单确认太慢  页面打开慢、卡顿、宕机  已售罄,实际商品未售完  预订成功,无法确认,被退款  预订成功,订单确认太慢
12. 大流量活动常见问题归纳 产品视角 填写页 详情页 首页/营销页 订单详情页 确认中 预订 1 研 发 视 角 打开慢、卡顿、宕机 Redis、DB超负载 不稳定: 供应商系统不稳定 取消订单 支付 不一致: 库存超卖/少卖 2 付款后不能确认、退款 3 海外Trip.com 访问性能差
13. 交易系统在大流量下的架构应对策略
14. 设计目标 稳 系统稳定 保障售卖 准 数据一致 保障履约 快 预订顺畅 体验丝滑
15. 大流量活动常见问题 产品视角 填写页 详情页 首页/营销页 订单详情页 确认中 预订 1 研 发 视 角 打开慢、卡顿、宕机 Redis、DB超负载 不稳定: 供应商系统不稳定 取消订单 支付 不一致: 库存超卖/少卖 2 付款后不能确认、退款 3 海外Trip.com 访问性能差
16. 不稳定 原因分析 网络异常 Loading… 请重试 页面打开慢、卡顿 ▪ Redis超负载、缓存热点 ▪ DB超负载 ▪ 供应商系统不稳定
17. 如何保障系统稳定 - 扩容 cluster 技术策略 ▪ Redis 扩容 ▪ DB 隔离/服务隔离 cluster 水平扩容 1 Master:2 Slave 1 Master : 4 Slave 常规手段:水平扩容,让流量分摊到更多实例
18. 缓存热点问题 扩容可以降低大多数实例的CPU水位 但不能解决热点问题 例如:热门商品秒杀时 Redis 各实例 CPU Util
19. 如何保障系统稳定 - 缓存热Key - 原因/危害 Server cluster Service Redis Cache Redis QPS CPU Util 20000 40% 40000 80% 热点效应 危害:实例负载不均衡,拖垮服务器 缓存热Key影响系统稳定性
20. 如何保障系统稳定 - 缓存热Key - 技术方案 技术策略 :多级缓存 Server Service 1、主动配置 2、高频访问 L1 Local Cache ReferenceQueue<V> value 引用队列 WriteQueue<ReferenceEntry<K,V>> 最近读队列 最近写队列 AccessQueue<ReferenceEntry<K,V>> 有限 LRU 队列 Segment<K,V>[] Redis key 引用队列 ConcurrentLinkedQueue<ReferenceEntry<K,V>> Find Hot Key L2 Redis Cache ReferenceQueue<K> 最近访问队列(LRU队列) Local Cache 数据结构 Local Cache 单位时间内存在的值 例如:同一个Key,1秒内单机访问10次 总结: 1. 自动发现Hot keys并加入到本地缓存 2. 指定的Key加入到本地缓存
21. 如何保障系统稳定 - 缓存热Key - 组件升级 request response 缓存组件 - 按场景、TTL、容量 - 自动发现 - 埋点、监控 cache strategies TTL、 size Read local cache counter... if not found in local cache Read from redis Redis RPC service1..n
22. 如何保障系统稳定 - 缓存热Key - 效果 举例 (不同的Key 效果不一样) 开启多级缓存 技术策略 :多级缓存 耗时:平均降低约25% Redis 访问量 Local Cache 访问量
23. 如何保障系统稳定 - 缓存大Key 以10KB为基准下降的百分比 2.50 18000 AVG 15.7倍 2.00 10000 7.3倍 61% 6000 4倍 76% 3倍 0.50 80% 4000 1.5倍 88% 0.6倍 94% 2000 0 注:多场景压测结果显示,200KB+较10KB以内的性能慢3倍 0.00 key3:value3(5MB) 阻塞网络 8000 ▪ 1.00 内存占用大 ▪ key2:value2(2KB) 37% key1:value1(1KB) 阻塞请求 1.50 Cache ▪ 16000 12000 timeout 危害 request key3 QPS 14000 Applications 以10KB为基准慢的倍数
24. 如何保障系统稳定 - 缓存大Key Applications request key3 timeout Cache key1:value1(1KB) key2:value2(2KB) key3:value3(5MB) 危害 技术策略:长期治理 ▪ 阻塞请求 ▪ 拆分大Key ▪ 内存占用大 ▪ 压缩value ▪ 阻塞网络
25. 如何保障系统稳定 - 缓存大Key - 监控
26. 如何保障系统稳定 - 缓存大Key - 效果 优化后:Redis 响应耗时明显提升
27. 秒杀时系统不稳定 - DB 超负载 瞬间大流量导致DB线程指标异常 接口( RT)变慢 读写DB的服务异常 商品库的波动导致全业务不可用
28. 如何保障系统稳定 - DB 超负载 - 架构升级 Application request key3 Product Management 商品变更导致缓存失效 - 删除缓存 - 消息量太大 Cache VBooking key1 sync delete key3 Product Service DB (master) response timeout binlog DB (slave) Id Active Id Active 3 F 3 F binlog parser 商品变更导致缓存失效,大量请求打到DB Consumer /Worker
29. 如何保障系统稳定 - DB 超负载 - 架构升级 Application request key3 Product Management 商品变更导致缓存失效 - 删除缓存 - 消息量太大 -> 消息聚合 Cache VBooking -> 缓存更新 key1 key3 Product Service DB (master) response binlog DB (slave) binlog parser set Update logic Consumer /Worker Aggregator Id Active Id Active 3 F 3 F 商品变更新数据覆盖更新
30. 如何保障系统稳定 - 供应商订单对接问题 预订 商品后台 提交订单 订单 确认订单 商品选售 维护商品 其他 渠道上货 直连系统 (订单) 直连系统 (商品) 其他 确认方式 处理订单 供应商品 供应商系统 供应商系统 供应商系统订单问题: ▪ 限流 ▪ 系统不稳定 订单无法快速提交到供应商系统 供应 售卖 履约
31. 如何保障系统稳定 - 供应商下单设计 技术策略 :削峰填谷/缓冲池、禁售策略 提交订单 直连系统 (订单) 100单/分钟 直连 30 禁售策略: 供应商系统 禁售熔断 提交订单 直连系统 (订单) 限流器 缓冲池 根据健康度自动禁售 ▪ 定期重试 bt:base time n:惩罚等级,连续第n次下线,首次下线n=1 30 100单/分钟 ▪ 直连 供应商系统 匀速提交 营销场景多为提前售卖,不是立即使用 f(p):exceptionRate,30分钟内异常率
32. 如何保障系统稳定 - 供应商下单升级 - 效果 技术策略 :削峰填谷/缓冲池 不影响下单吞吐量
33. 流量控制 减少不必要的资源投入 确保活动的流量水位在安全线内 活动+常规流量
34. 如何保障系统稳定 - 大流量冲击 活动曝光 选售预订 提交订单 首页/营销页 详情页 填写页 预订 支付 流量大小 高 低 系统承载能力 大 小 例如:10万人购买5000张 票 如何限流保障各系统稳定运行?
35. 预订系统 - 自定义限流 技术方案 :SOA限流 VS 自定义限流 (按活动商品限流) SOA限流 自定义限流 100%能力承载 30%能力承载 70%能力承载 所有业务 秒杀业务 非秒杀业务 SOA限流会影响所有业务 限流只影响活动商品 服务器/开发资源投入可控
36. 如何保障系统稳定 - 限流设计 技术策略 :自定义限流 (按活动商品限流) 1s 限流 1000QPS 100ms 限制 100QPS 10 个 100ms 滑动窗口, 每个滑动窗口限制 100QPS 限流更精准,防止高并发场景对下游带来压力
37. 如何保障系统稳定 - 商品级限流 效果 突增流量:进排队页面/提示活动限流 所有景点:请求被限制/系统超负载 请求量 单景点/资源限流阈值 请求量 突增流量 300K 系统最大负载(未提前扩容情况下) 250K 200K 访问时间 150K 请求量 100K 其他景点:正常访问 50K 09:59 10:00 10:01 访问时间 商品级限流,超负载也不影响整体的可用性,支持热点商品自动限流 访问时间
38. 准 数据准确 保障履约
39. 高并发系统常见问题 产品视角 填写页 详情页 首页/营销页 订单详情页 确认中 预订 1 打开慢、卡顿、宕机 研 发 视 角 Redis、DB超负载 不稳定: 供应商系统不稳定 取消订单 支付 不一致: 库存超卖/少卖 2 付款后不能确认、退款 3 海外Trip.com 访问性能差
40. 如何保障数据的准确 - 扣减库存问题 下单 限购检查 提交限购 扣库存 问题: ▪ 性能瓶颈 – MySQL热点行扣减库存(行级锁) 创单 取消限购
41. 如何保障数据的准确 - 扣减库存架构升级 技术策略 : 扣减库存异步化,消除DB行级锁 取消订单 下单 1 锁定后台 管理后台 Service Service Inventory Service Inventory Service 1 1 Redis 2 初始化库存 2 Service Service 3 Inventory Service 5 Redis 初始化 1 否 DB扣失败,重试N次 是否 成功 4 事务 扣减库存 inventory update 记录明细日志 inventory_detail insert 扣库存 Storage 2 2 3 否 是否 成功 无扣库存记录,重试N次 是 4 Redis 还库存 3 扣减库存服务V 2.0 4
42. 下单扣减库存升级 - 效果 扣减库存异步化 , 消除行级锁性能瓶颈 轻松支持数十万/分钟下单(非极限)
43. 快 预订丝滑 体验丝滑
44. 秒杀系统常见问题 产品视角 填写页 详情页 首页/营销页 订单详情页 确认中 预订 1 打开慢、卡顿、宕机 研 发 视 角 Redis、DB超负载 不稳定: 供应商系统不稳定 取消订单 支付 不一致: 库存超卖/少卖 2 付款后不能确认,退款 3 海外Trip.com访问性能差
45. 海外访问路径 - 改造前 SHA-Region IDC 1 IDC 2 Gateway Gateway HK-NAP SLB SLB NAP 专线 Service DB Service DB 延迟:80ms 单次链路影响小, 多次跨洋回源请求对性能影响大 Akamai Trip.com
46. 国内与海外性能差异 - 网络延迟 350 ms 350 ms 100 ms 350 ms 450 ms 200 ms AWS - FRA 450 ms 600 ms 200 ms 500 ms 500 ms 250 ms 300 ms 300 ms 950 ms SHA 150 ms 150 ms 900 ms AWS - SIN 250 ms 250 ms 850 ms
47. 国内与海外性能差异 - 减少跨Region调用 提升系统响应速度 Trip.com UDL∈ {N,O,P,…Z} API Router API Router UCS UCS Gateway/SLB Gateway/SLB RESTful RESTful Service Service Cache DB DRC/X-Pipe DB Cache 跨Region数据复制 SGP SHA 方案一:海外跨Region应用数据单元化 全量应用(数千个)全量部署,高成本挑战
48. 国内与海外性能差异 - 减少跨Region调用 提升系统响应速度 Trip.com UDL∈ {N,O,P,…Z} API Router API Router 跨洋访问 多次回源 跨洋访问 一次回源 A A 80m s B 80ms 80m s B 80m s C 240ms C UCS UCS Gateway/SLB Gateway/SLB RESTful RESTful 400ms Service 1 2 一个完整功能,多次回源聚合为1次 Service Wormhole 提前构建缓存 JOB Cache SGP 方案二:入口服务聚合 + Redis构建 轻量化上云(减少回源) 兼顾性能,成本下降数百倍 Cache DB SHA
49. 海外访问性能优化 - 效果 访问量越大,响应越快
50. 除此之外 『高可用』如何实现“可持续性”? 架构健康度治理
51. 如何保障高可用可持续性 - 架构健康度治理 系统运行健康度 • 服务性能 (API性能) • 服务运行 (线程数/GC/异常) • 服务调用 (限流/熔断/超时) • 数据库 (慢查询/线程数) • 缓存 (大Key/命中率) • 队列 (延迟) • 资源用量 (资源利用率) 系统设计健康度 • 应用规模 - 人均应用数 - 代码行数 • 应用拓扑 工程化健康度 • 工程包 - 包大小 - 包依赖数 • 工程效率 - 循环/重复调用 - 编译时长 - 调用链路层级 - 回退时长 - 调用放大系数 - 启动时长 • 应用价值 - 低流量/低发布 基于『架构健康度』,分步实现应用架构治理维度、标准和方法的统一
52. 如何保障高可用可持续性 - 完善的稳定性保障体系 引入大型活动节假日保障体系 日常开发 持续优化(风险、性能、瓶颈) 风险项梳理 总结 大型活动节假日保障 压测 压测复盘 扩容/风险预案 节中 P0 优化 日常开发 + 大型活动节假日保障形成闭环 值班 节后
53. 大流量高并发高可用架构设计实践 - 总结 系统设计关注点 1 单一职责、独立部署 4 缓存刷新 5 防大流量穿透 3 缓存热点 自动发现热Key升级为本地缓存 7 降低峰值,保护系统 保障核心服务高可用 2 削峰 商品级限流 Redis扣减,异步扣减DB 8 超负载正常运行 6 熔断&降级 快速失败降级运行 库存扣减 秒级生效 准时售卖/售罄 9 恶意请求拦截 识别非法请求并拦截 设计关注点:小问题会被放大,关注读/写瓶颈,要求极高的一致性、实时性与性能 重视持续性优化与稳定性保障:日常架构健康度治理 + 大型活动节假日保障
54.

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