本仓库是我的MIT6.5840(原MIT6.824)课程日志追踪, 将自己过程中所见所识记录于此.
除了今年课程要求的阅读材料, 我也选取了往年6.824要求的阅读材料(差异还是比较大, 但是主体部分不会相差很多)
- MapReduce: 分布式计算的一个设计方案, 或者说是模式...?
- GFS: 分布式的文件系统, 早期版本
- Fault-Tolerant Virtual Machines: 应该是主从模型
- Testing Distributed Systems for Linearizability: 读完后会对分布式中的一致性有一个大概的认识
- Raft(Extended): 非常经典的共识算法, 也有大量的优化在原作者的博士论文中
- ZooKeeper: 使用ZAB(类似raft)构建一个以znode, 对象为模型的存储系统, 利用其提供的一些接口, 我们能构建出很实际的需求
- Chain Replication: 链式复制模型, 在进行
lab3
后, 对raft有了一定认知后, 会对这种非主从的复制模型感到惊奇, 同样是强一致性模型, 但看起来要简单很多, 且在读多写少的场景下表现很好 - CRAQ: 链式复制模型的改良, 阅读起来有一定难度, 只看明白了Introduction中提到的文章贡献第一二点.
- Grove: 分布式系统的形式化验证, 指引我们设计出一个能对所有极端情况做出正确反映的分布式系统, 主要内容没有看, 暂时没有这个能力.
- Spanner
- Chardonnay
- FaRM
- DynamoDB
- Ray
- Scaling Memcache at Facebook
- On-demand Container Loading in AWS Lambda
- Boki: Stateful Serverless ComputingwithSharedLogs
- Secure Untrusted Data Repository
- Practical Byzantine Fault Tolerance
- Bitcoin: A Peer-to-Peer Electronic Cash System
如果您也在进行该课程附带的实验内容, 那么我不建议您翻阅我的源码, 一来是为了锻炼自己的能力, 遵守学术诚信, 二来是我自知我的代码难以阅读, 设计上会给您带来极大的困扰
- Lab1: MapReduce 实验日志
- Lab1: Challenge
- Lab2: Key/Value Server 实验日志
- Lab3A: (raft)Leader election 实验日志
- Lab3B: (raft)Log 实验日志
- Lab3C: (raft)Persistence 实验日志
- Lab3D: (raft)Log Compaction ( Snapshot ) 实验日志
- Lab4A: Key/value service without snapshots
- Lab4B: Key/value service with snapshots
- Lab5A: The Controller 和 Static Sharding
- Lab5B: Shard Movement
完成上述Lab
的过程中, 我检查了大量的错误日志, 也从阅读材料和其他人的设计中学到了许多, 思考过后打算对原有的实验内容进行改动, 自己去实现一遍, 在过程中锻炼自己.
可能有帮助的阅读材料
- 分布式系统中的网络模型和故障模型
- Symmetric network partitioning
- 一个极端的网络故障场景,CheckQuorum
- 开源的一些实现, 或许能从中学到更多测试, 以及优化实现方案: braft(C++) jraft(Java)
- 更完善的测评: 实验自带的测评并没有cover所有情况, 甚至可以说只保证了大部分情况下能用, 但是很多极端的环境下都未进行测试
- 更完善的Raft