决策日志环境搭建:供应链控制塔事件溯源项目部署 - 第1节

1.1 供应链控制塔:从被动响应到主动感知

供应链控制塔(Supply Chain Control Tower, SCCT)并非一个物理塔楼,而是一种集中化、可视化的运营管理中枢。它通过整合来自供应商、制造商、物流商、分销商及终端客户的实时数据,提供端到端的供应链全景视图,使运营团队能够感知、分析、决策并执行跨组织的协同行动。

传统供应链管理依赖事后报表与电话沟通,响应延迟通常在数小时甚至数天。控制塔的核心价值在于将延迟压缩到分钟级,实现从“被动救火”到“主动预警”的转变。

核心能力矩阵:
  • 可视化(Visibility): 实时追踪订单、库存、在途、产能状态。
  • 告警(Alerting): 基于规则或AI模型自动识别异常(如延迟、缺货、质量偏差)。
  • 分析(Analytics): 根因分析、影响范围评估、模拟推演。
  • 行动(Action): 触发工作流、分配任务、执行补偿措施。

然而,控制塔的决策过程往往涉及多方协作与频繁调整。每一次状态变更、告警确认、任务分派或策略切换,都是宝贵的决策事件。如何完整记录、追溯并复现这些事件,正是事件溯源模式要解决的核心问题。

供应链控制塔逻辑架构 供应商数据 物流商数据 工厂/库存数据 客户/订单数据 事件总线 / 消息队列(Kafka / Pulsar) 控制塔引擎(规则引擎 + 事件溯源 + 决策日志) 可视化大屏 告警推送 任务工作流 说明

1.2 事件溯源模式:以事件为唯一事实来源

事件溯源(Event Sourcing)是一种数据持久化范式,其核心思想是:不存储系统的当前状态,而是存储导致状态变化的所有事件。任何状态的查询,都通过重放(Replay)事件序列来推导。

在控制塔场景中,这意味着每一次“订单状态变更”、“告警触发”、“任务分配”、“策略切换”都被记录为一个不可变的事件。事件日志成为系统唯一的真相来源(Source of Truth)。

对比维度 传统CRUD模式 事件溯源模式
数据存储 存储当前状态(如:订单状态=已发货) 存储事件流(如:订单已创建、订单已支付、订单已发货)
历史追溯 需要额外审计表或快照,粒度粗 天然完整,可精确到每次操作
时间旅行 不支持,或需复杂快照链 支持任意时间点状态重建
并发控制 乐观锁/悲观锁 事件版本号 + 幂等性
调试与审计 困难,需关联多张表 直接回放事件即可复现现场
为什么控制塔需要事件溯源? 供应链决策往往涉及多方责任认定与合规审计。事件溯源提供的不可变日志,能够精确回答“谁在什么时间基于什么数据做了什么决策”,这是传统状态更新模式难以做到的。
事件溯源 vs 传统状态存储 传统 CRUD 订单表:状态 = “已发货” UPDATE 覆盖旧值,历史丢失 ❌ 无法追溯“谁在何时修改了状态” 事件溯源 事件1:订单已创建 事件2:订单已支付 事件3:订单已发货 ✅ 所有事件追加写入,历史完整可回溯

1.3 项目部署目标与范围

本课程项目旨在搭建一套基于事件溯源的供应链控制塔决策日志环境,为后续的规则引擎、告警服务、可视化看板提供底层数据基础设施。项目不追求覆盖控制塔的全部功能,而是聚焦于事件采集、存储、回放与查询这一核心链路。

1.3.1 部署目标

  • 目标一: 搭建事件存储层(基于 EventStoreDB / PostgreSQL + 事件表),支持高吞吐写入与按时间范围查询。
  • 目标二: 实现事件生产者(模拟供应链上下游系统)与事件消费者(决策日志记录器)的分离架构。
  • 目标三: 提供事件回放(Replay)能力,支持按聚合ID或事件类型重建任意时间点的状态快照。
  • 目标四: 集成基础监控与告警,确保事件管道的高可用与数据一致性。

1.3.2 部署范围

模块 包含内容 不包含内容
事件存储 事件表结构设计、索引策略、归档策略 分布式集群部署、跨数据中心复制
事件生产者 模拟订单、库存、物流事件的Java/Python客户端 真实ERP/WMS系统对接
事件消费者 决策日志写入器、状态投影更新器 复杂规则引擎、AI预测模型
查询与回放 REST API 查询事件流、按聚合ID回放 实时流计算、CEP复杂事件处理
监控 事件延迟、吞吐量、错误率基础指标 全链路追踪、APM深度分析
范围边界提醒: 本课程不涉及生产级高可用部署、Kubernetes编排、多租户隔离或安全认证体系。所有组件将以单机或简易集群模式运行在Docker Compose环境中,便于学员快速上手实验。

1.3.3 技术栈选型

为平衡教学效果与工程实用性,项目采用以下技术栈:

  • 事件存储: PostgreSQL 15 + 事件表(UUID主键、JSONB事件体、时间戳索引)
  • 消息中间件: Apache Kafka 3.5(用于事件生产与消费解耦)
  • 事件生产者/消费者: Spring Boot 3.x(Java) + Kafka Client
  • 状态投影: 基于事件回放的物化视图(Materialized View)
  • API网关: Spring Cloud Gateway(路由与限流)
  • 容器化: Docker Compose(统一编排所有服务)
# docker-compose.yml 核心服务定义(简化示例)
version: '3.8'
services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: eventstore
      POSTGRES_USER: scct
      POSTGRES_PASSWORD: scct_pass
    ports:
      - "5432:5432"

  kafka:
    image: confluentinc/cp-kafka:7.5.0
    environment:
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
    ports:
      - "9092:9092"

  event-producer:
    build: ./producer
    depends_on: [kafka]

  event-consumer:
    build: ./consumer
    depends_on: [kafka, postgres]