引言

随着业务规模的不断扩张和技术架构的演进,分布式系统已经成为支撑高并发、海量数据处理的关键基础设施。在分布式环境中,各个节点相对独立且可能并发地执行任务,这极大地提升了系统的整体性能和可用性。当涉及到对共享资源的访问和修改时,为了确保数据的一致性和正确性,我们需要一种能在多节点间协调并发操作的技术手段,也就是分布式锁。

传统的单机环境下,进程内可以通过本地锁轻松实现对临界区资源的互斥访问。但是,这一方法在分布式系统中不再适用,因为单机锁无法跨越网络边界,无法保证不同节点间的并发控制。分布式锁正是在这种背景下产生,它是一种能够实现在分布式系统中多个节点之间协同工作的锁机制,旨在保护共享资源不受并发冲突的影响,确保在复杂的分布式场景下数据操作的有序性和一致性。

库存扣减

我们以WMS系统中,订单出入库操作库存为例。

CREATE TABLE `tb_inventory`
(
    `id`                  BIGINT           NOT NULL AUTO_INCREMENT,
    `account_id`          BIGINT           NOT NULL DEFAULT 0 COMMENT '帐套ID',
    `sku`                 VARCHAR(128)     NOT NULL DEFAULT '' COMMENT '商品sku编码',
    `warehouse_code`      VARCHAR(16)      NOT NULL DEFAULT '' COMMENT '库存编码',
    `available_inventory` INT UNSIGNED     NOT NULL DEFAULT 0 COMMENT '可用库存',
    `create_time`         DATETIME         NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    `update_time`         DATETIME         NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    `deleted`             TINYINT UNSIGNED NULL     DEFAULT 0 COMMENT '0-未删除 1/null-已删除',
    PRIMARY KEY (`id`) USING BTREE,
    UNIQUE KEY uk_warehouse_code (customer_no, warehouse_code, sku, deleted) 
) ENGINE = InnoDB
  AUTO_INCREMENT = 1
  CHARACTER SET = utf8mb4 COMMENT = '库存表';