# 分布式系统实验室

这个项目把难以在单元测试中搭建的分布式系统，缩小为可观察的 Java 模型。你可以验证截止时间、退避、幂等、Snowflake、法定人数、分片、Outbox、Saga 和消息分区，但不能把模型的测试结果当成真实集群的性能或容灾证明。

## 运行

安装 JDK 21 和 Maven 3.9+，然后执行：

```bash
mvn test
```

只运行一个主题：

```bash
mvn -Dtest=DistributedMechanismsTest#outboxAndIdempotentConsumerSurviveDuplicates test
```

## 阅读顺序

1. 打开 `DistributedLab.java`，先看每个小模型的输入、状态和不变量。
2. 打开 `DistributedMechanismsTest.java`，观察故障是怎样注入的。
3. 修改法定人数、分片数或失败次数，再运行测试验证推断。

这里刻意不依赖 ZooKeeper、Kafka 等服务。第 08 章各篇博客会把模型映射到真实产品，并链接官方文档。
