个人随笔
目录
架构设计学习:对微信架构设计的相关设计原理的学习
2025-08-06 21:47:41

设计原则

1、极简设计

设计越简单越容易实现越好,不要过度设计

2、大系统小做

一个复杂的系统可以拆分成一个个小系统来实现,不要陷入复杂漩涡

3、业务监控

要进行业务数据的监控,确保业务数据是正确的

微信红包相关设计

微信红包其实是一个比秒杀还复杂的系统,并且不能出错,所以采用了如下相关技术

1、SET化架构(分单元部署)

作用:
将系统划分为相互隔离的独立单元(SET),每个单元具备完整业务能力,实现故障隔离和水平扩展
例如将用户按地域或ID哈希划分到不同SET单元,单点故障仅影响局部用户
实现方案:
业务单元拆分:用户请求根据路由规则(如用户ID取模)定向到指定SET
数据隔离:每个SET包含独立数据库和缓存,避免跨单元访问
流量调度:智能DNS将用户请求路由至最近SET单元,降低延迟
优势:故障影响范围缩小至单个SET,容灾能力提升10倍以上

2、串行化技术(请求有序处理)

作用:
解决红包操作(拆红包/扣减库存)的并发冲突,避免超发/少发等资金风险
实现方案:
逻辑层排队
同一红包ID的请求进入内存队列,单线程顺序处理
例如使用Redis的List结构存储待处理红包请求
分布式锁控制
对红包ID加锁,确保同一时刻仅一个线程操作库存
异步削峰
抢红包请求快速响应”处理中”,结果通过MQ异步通知
效果:红包库存扣减原子性保障,资金误差率为0

3、多维度分库分表

作用
突破单库性能瓶颈,支持百亿级红包订单存储
实现方案
分库分表策略:

  1. 冷热分离
    • 热数据(7天内红包记录):SSD高性能存储
    • 冷数据(历史记录):HDD归档存储
  2. 双维度分片
    • 维度一:按红包ID哈希分库(例如256库)
    • 维度二:按创建时间范围分表(例如按月分表)

优化点
用户查询时,优先通过用户ID反向查询红包ID,再定位分片
采用基因法分片,避免跨库查询(如用户ID包含红包ID哈希值)

4、三者的协同关系

技术 解决核心问题 典型场景示例
SET化架构 系统级容灾 某机房故障时仅影响5%用户
串行化技术 数据强一致性 10万并发抢同一红包不超发
多维度分表 海量数据存储 单表控制在千万级数据量

技术联动案:用户抢红包时,请求先路由到所属SET单元 → 在SET内进入红包ID对应的队列串行处理 → 操作分片后的红包订单表。

 6

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2