《企业级中台设计》

公司有新活动,需承载高达 10w+人同时抢购 的并发流量。而现有系统仅支持约 200 TPS,难以满足需求。因此需要设计并实现一个中台系统,用于分发请求、削峰填谷、库存一致性控制等,确保活动期间系统稳定运行。

项目目标

  • 支撑高并发 NFT 抢购场景,稳定处理 10 万人在线请求
  • 防止库存超卖、请求重复、热点数据集中等常见并发问题
  • 提供秒杀限流、幂等控制、库存一致性保障的完整链路
  • 降低对底层服务的压力,增强系统可扩展性

技术方案

压力测试与系统扩容

  • 使用 阿里云 PTS 进行压力测试,识别瓶颈
  • 扩容策略:
    • 增加 Pod 数量
    • 增加 Gateway 实例
    • 增加服务器资源
  • 利用监控平台观察 CPU、内存、QPS、TPS 等指标动态调整资源

限流与降级处理

  • 使用 Redis 令牌桶算法 限制请求频率
  • 当 Redis 库存不可用:
    • 使用分布式锁 + singleflight 查询 MySQL 并回填 Redis
  • 异常情况下快速失败,保证主业务稳定

库存防超卖机制

  • 采用 Lua 脚本 在 Redis 内部原子扣减库存,避免并发超卖
  • 活动高峰结束后,使用 分布式锁 对库存进行统一校正(矫正库存)

幂等消费控制

  • 使用 Redis 布隆过滤器 防止重复请求
  • 数据库层通过唯一索引兜底,防止重复写入

热点 Key 优化

  • Redis 使用 集群部署
  • 将库存键值通过 hashtag 哈希分片分配到不同 Slot,降低访问冲突

大表性能优化

  • 藏品表基于 合约地址分表
  • 唯一键:合约地址 + tokenId
  • 使用 BLOB 类型作为 Bitmap,记录二值状态(如是否已售)
  • 合约地址作为唯一索引,批量更新减少乐观锁回滚

分布式事务处理

  • 定时任务(Cron)扫描数据库,补偿失败的 Kafka 消息
  • Kafka:
    • 通过哈希分配 Partition 保证消息顺序消费
    • 使用 Consumer Group 隔离不同业务逻辑
  • 幂等性保障:
    • 使用幂等索引 + 状态字段,避免重复消费写入