22 热点锁如何通过架构彻底消除

vvEcho 2026-01-27 18:07:04
Categories: Tags:

热点锁的本质不是“锁慢”,而是:
大量请求同时争抢同一份状态

典型场景:
单账户余额
单库存
单交易对撮合
全局 ID / 全局配置

👉 所以:只要“共享状态不变”,锁永远存在
把 “一把锁” 拆成 N 把互不相关的锁

架构手段

  1. 状态拆分(State Sharding)——最根本
    按 key / 用户 / 账户 / 交易对 分片
    每个分片有独立状态 & 执行单元

  2. 串行化执行(Single Writer Principle)
    与其并发抢锁,不如明确只允许一个写者

架构方式

  1. 从“共享内存” → “消息驱动”
    锁出现,是因为多个线程同时读写共享内存
    架构转化

    1
    2
    3
    共享变量 + 锁

    消息 + 本地状态
  2. 读写分离 + 只写一次
    写是热点,读不是
    架构手段

  1. 把“同步竞争”变成“异步最终一致”
    不要求所有操作立即完成

架构方案

总结:
热点锁的根因是共享状态被高并发访问,
所以单纯优化锁实现解决不了。

我的思路是从架构上消除竞争:

在交易系统中,比如撮合和资金,都是通过串行化和事件驱动,让锁本身不再存在