秒杀架构是一种特别优化以应对极高并发流量和瞬间大量请求的系统设计。它通常包括:高容量设计,前端优化,服务扩展性,负载均衡,异步处理,数据库优化,服务解耦,弹性伸缩,限流策略,监控告警,安全防护,降级容错等。接下来通过12张图描述秒杀背后的相关工作。
肖哥弹架构 跟大家“弹弹” 秒杀背后的设计与工作,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
1、API网关架构
通过智能解析将用户的请求路由到最近的或者负载较低的数据中心,从而提高响应速度和系统的整体性能。这种DNS通常被称为全局负载均衡DNS或者GSLB(Global Server Load Balancing)。
整体
- 用户请求:来自全国各地的用户请求。
- DNS服务器:负责智能解析域名,根据用户的地理位置和其他因素将请求路由到最合适的API网关。
- API网关:在不同机房部署的网关服务,处理进入的请求,并与后端服务交互。
- 后端服务:在不同机房中部署的服务,处理业务逻辑并与数据库交互。
局部
- 客户端请求:用户或其他客户端发起的请求。
- API网关:所有请求的入口点。
- 身份认证:验证请求者的身份。
- 请求路由:根据请求的类型和目标,将请求转发到正确的服务。
- 负载均衡:将请求分发到多个服务实例,以提高系统的可用性和伸缩性。
- 限流:控制进入系统的请求数量,防止过载。
- 监控:收集和报告请求的统计信息,用于监控和分析。
- 服务1、服务2、服务N:后端的微服务实例。
- 数据库服务:后端服务可能需要访问的数据库。
2、API网关与服务架构
- 客户端请求:用户或其他客户端发起的请求。
- API网关:在多个机房中部署的API网关实例。
- 身份认证:跨机房统一的认证服务。
- 请求路由:将请求根据策略路由到相应的后端服务。
- 负载均衡:在多个机房中实现请求的负载均衡。
- 限流:跨机房的限流策略,防止系统过载。
- 监控:跨机房的监控系统,收集和报告请求的统计信息。
- 后端服务:在不同机房中部署的后端服务实例。
- 数据库服务:与后端服务相对应的数据库实例。
3、秒杀微服务架构
- 用户请求 通过 API Gateway 进入系统,根据用户地理位置智能路由到最近的秒杀服务。
- 秒杀服务 在多个机房部署,每个机房的秒杀服务都可以处理用户的秒杀请求。
- 商品服务、订单服务、库存服务 和 支付服务 是秒杀服务内部调用的领域服务。
- 商品数据库、订单数据库、库存数据库 和 支付数据库 是各自领域服务的数据存储。
- 消息队列 用于处理异步任务,如订单创建和支付通知。
4、用户访问商品架构
- 用户终端:用户通过Web或App与系统交互。
- API网关:处理入口的请求,提供负载均衡、认证等。
- 商品微服务:处理所有商品相关的业务逻辑。
- 主数据库:存储核心商品数据,处理写入操作。
- 分布式缓存:存储频繁访问的数据以提高读取性能。
- 搜索引擎:提供高效的搜索功能。
- 从数据库:处理读取操作,减轻主数据库的压力。
- 备份系统:定期备份数据,确保数据安全。
- 消息队列:处理数据更新事件,保证数据最终一致性。
- 其他系统或服务:可能需要同步商品数据的其他系统。
- 监控和日志系统:监控服务状态,记录操作日志。
5、静态商品信息架构
- 用户请求:用户通过终端发起对商品信息的请求。
- DNS解析:基于地理位置信息,DNS将请求解析到最近的CDN节点。
- CDN节点响应:
- CDN节点检查本地缓存是否有该商品信息的缓存。
- 如果缓存命中,直接返回商品信息给用户。
- 如果缓存未命中,CDN节点向同一地区的后端服务发起请求。
- 地区后端服务处理:
- 后端服务处理请求,并从同一地区的数据库获取最新商品信息。
- 后端服务将商品信息返回给CDN节点,并更新缓存。
- 缓存一致性:地区后端服务通过缓存一致性服务确保所有CDN节点的缓存是最新的。
- 监控与日志:整个过程中的关键指标被监控和记录日志。
6、商品动态数据架构
- WebSocket 或长轮询:对于需要实时更新的数据(如秒杀倒计时、库存变更),使用WebSocket提供实时的双向通信能力,或者使用HTTP长轮询来模拟实时性。
- 事件驱动更新:后端服务基于事件驱动模型,当商品数据更新时,通过发布/订阅模式通知相关的服务或前端。
- 服务端推送(Server-Sent Events, SSE) :对于浏览器端的实时数据展示,使用SSE来从服务器推送实时数据到客户端。
- RESTful API:对于不要求极端实时性的数据,可以通过周期性轮询RESTful API来获取最新数据。
- 本地缓存与后端校验:在客户端缓存数据,并在关键操作前与后端进行数据一致性校验。
- 消息队列:使用消息队列来处理数据变更事件,确保数据一致性并异步更新数据库和缓存。
- 分布式缓存:使用分布式缓存系统(如Redis)来存储动态数据,提供快速读取能力。
- 数据版本控制:为每个数据项维护版本号或时间戳,确保数据在传输过程中的一致性。
- 限流和降级:在高流量情况下,对动态数据的获取进行限流,并在必要时进行服务降级。
7、秒杀商品发布和推送至CDN架构
- 商品信息发布流程:当有新的秒杀商品信息需要发布时,首先在主服务器上更新商品数据。
- 实时数据推送:主服务器更新商品信息后,立即通过消息队列或直接调用推送服务API,将更新事件发送给CDN推送服务。
- CDN推送服务:CDN推送服务接收到更新事件后,触发推送机制,将最新的商品信息内容推送到所有地区的CDN节点。
- CDN节点更新:各地区的CDN节点接收到推送的商品信息后,更新本地缓存,确保用户访问的是最新数据。
- 用户访问:用户请求商品信息时,请求首先到达最近的CDN节点,CDN节点返回最新的商品信息。
- 缓存一致性:采用缓存标记和超时机制,确保在商品信息更新后,旧缓存能够迅速失效。
- 负载均衡:CDN节点本身也具备负载均衡能力,可以根据用户请求的流量动态调整内容分发。
- 故障转移:如果某个CDN节点发生故障,请求可以自动切换到其他健康的CDN节点。
- 监控与日志:对CDN节点的缓存命中率、响应时间等关键指标进行监控,记录日志以便于问题追踪和性能优化。
- 安全机制:确保推送过程中的数据传输安全,采用加密传输和认证机制。
- 多版本控制:在更新过程中,可能存在多个版本的商品信息,需要合理控制版本过渡,避免数据冲突。
- 用户行为分析:收集用户访问数据,分析用户行为,优化商品信息的推送策略。
- 降级策略:在高流量或系统不稳定时,可以临时降级CDN服务,保证核心服务的稳定性。
- 预热机制:在秒杀活动开始前,提前将商品信息推送到CDN节点进行预热,减少活动开始时的延迟。
- 多机房部署:考虑到全国性覆盖,CDN服务也应该在多个机房部署,以提供更好的访问速度和容错性。
8、多地区机房商品信息与库存同步架构
- 中央数据库:使用一个中央数据库来管理所有商品的基本信息和库存状态。
- 数据复制:实现数据库的主从复制或多主复制,确保不同地区的数据库副本保持一致。
- 分布式缓存:使用分布式缓存(如Redis集群)来存储商品信息和库存状态,并实现跨区域的数据同步。
- 消息队列:利用消息队列(如Kafka、RabbitMQ)来处理库存变更事件,确保所有地区的服务都能接收到更新。
- 最终一致性:采用最终一致性模型,允许短暂的数据同步延迟。
- 数据版本控制:为商品信息和库存状态实现乐观锁或版本号控制,避免更新冲突。
- 定期同步:除了实时同步外,还可以设置周期性的数据校验和同步任务。
- 库存锁定机制:在处理订单时,使用库存锁定机制防止超卖。
- 分布式事务:在跨多个数据库操作时,使用分布式事务来保证数据的一致性。
- 监控与告警:监控数据同步的状态和性能,设置告警机制以快速响应同步问题。
9、商品维度数据与服务关系架构
- 用户终端:用户通过Web或App与系统交互。
- API网关:处理入口的请求,提供负载均衡、认证等。
- 商品微服务:处理所有商品相关的业务逻辑。
- 基本信息数据库、规格信息数据库、库存信息数据库、用户评价数据库:分别存储不同维度的商品数据。
- 分布式缓存:存储频繁访问的数据以提高读取性能。
- 订单微服务:处理订单相关的业务逻辑,与库存信息数据库交互。
- 消息队列:处理数据更新事件,保证数据最终一致性。
- 监控和日志系统:监控服务状态,记录操作日志。
10、商品信息存储架构
- 关系型数据库:用于存储结构化数据,如商品的基本信息、分类、属性等。
- NoSQL数据库:
- 文档存储(如MongoDB):用于存储灵活的文档数据,如商品描述、用户评价等。
- 键值存储(如Redis):用于快速读取频繁访问的数据,如商品详情、库存状态等。
- 列存储数据库(如Cassandra):用于存储大量写入和查询的场景,如用户行为日志。
- 搜索引擎(如Elasticsearch):用于提供高效的文本搜索能力,适用于商品名称、描述等文本搜索。
- 数据仓库:用于存储历史数据,进行复杂的数据分析和报告。
- 分布式文件系统(如HDFS):用于存储非结构化数据,如商品图片、视频等大型文件。
- 数据湖:用于存储原始数据,支持多种数据格式,适用于大数据分析。
- 数据同步和复制:确保数据在不同存储系统间同步,保持数据一致性。
- 数据备份和恢复策略:确保数据安全,防止数据丢失。
- 数据访问层:抽象化数据访问,提供统一的数据访问接口。
11、地区商品库同步架构
- 多主复制(Multi-Master Replication) :
- 允许多个数据库实例接受写入操作,并通过复制协议同步到其他实例。
- 双向复制(Bidirectional Replication) :
- 在两个数据库实例间双向同步数据变更,适用于需要在两个地点处理写入操作的场景。
- 数据分发层(Data Distribution Layer) :
- 使用如Apache Kafka等消息队列系统作为数据分发层,捕获数据库的变更事件并异步分发到其他地区。
- 分布式数据库系统:
- 使用全局一致的分布式数据库系统,它们提供了跨地区的复制和高可用性。
- 数据同步服务:
- 利用专门的数据同步服务或工具,如阿里云的DTS(Data Transmission Service)等,来同步不同地区数据库。
- 数据一致性协议:
- 采用如Raft或Paxos等一致性协议确保跨地区数据库的一致性。
- 冲突解决机制:
- 设计冲突解决策略,处理数据在不同地区发生变更时的冲突。
- 数据压缩和传输优化:
- 对同步的数据进行压缩,并优化网络传输路径以减少延迟。
12、服务弹性伸缩架构
- 用户请求 通过 负载均衡器 进入系统,根据实时负载情况分发到不同的 服务实例。
- 服务实例 执行业务逻辑,并与 数据库 交互。
- 监控系统 收集服务实例和数据库的性能指标。
- 告警系统 基于监控数据设置的阈值触发告警,并通知 自动扩展组。
- 自动扩展组 根据告警和性能指标动态调整 服务实例 的数量。
- 容器编排服务 管理服务实例的生命周期,包括扩展和自我修复。
- 服务网格 提供微服务间的智能路由和流量管理。
- 配置管理 根据负载情况动态调整服务配置。
- 数据库扩展解决方案 确保数据库层面也能支持高并发访问(采用存储与计算分离的数据库)。
历史热点文章
- 委托模式(Delegation Pattern):多渠道消息发送服务实战案例分析
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析