6.5840 期末项目
| 提案截止: |
Mar 20 23:59 |
| 代码和报告截止: |
May 8 23:59 |
| 展示: |
May 12 课堂上 |
介绍
你可以基于自己的想法完成一个期末项目,
或者完成 实验 5。
如果你想做项目,必须事先获得我们对你的想法的批准。你必须组成一个由 2 到 3 名 6.5840 学生组成的小组来合作完成项目。在学期末,你需要提交你的代码和一份简短的报告,描述你项目的设计和实现,并在课堂上做一个关于你工作的简短展示。我们将把项目报告和代码发布在课程网站上。
你的项目应该是一个有趣且具有挑战性的课题,与 6.5840 的核心主题密切相关,例如容错。项目的工作量必须至少与实验 5 相当。在下面,你会发现一些我们认为可以发展为有趣项目的初步想法,但我们还没有对它们进行太多思考。
交付成果
期末项目有以下四个具体步骤:
-
组建小组并确定你想要完成的项目。欢迎使用 Piazza 寻找小组成员和讨论想法。课程团队很乐意通过电子邮件或面对面讨论项目想法。
-
详细阐述你将解决的确切问题以及你将如何解决它。在提案截止日期之前,你必须提交一份提案(不超过一页),描述:你的小组成员名单、你想解决的问题、你计划如何解决,以及你提议具体设计和实现什么。将你的提案提交到 Gradescope(提交到名为"Final Project Proposal"的作业)。我们会告知你是否批准,并给你反馈。
-
执行你的项目:设计和构建一个有趣的系统!
-
撰写一份描述你项目设计和实现的文档,并在最终截止日期前与项目代码一起提交。文档应约 3 页文字,帮助我们理解你解决了什么问题,以及你的代码做了什么。你可以将代码发送到课程团队邮箱,或者在你的报告中提供一个代码仓库链接(例如,在 GitHub 上)。代码和报告将在学期结束后在线发布。
-
准备一个关于你期末项目工作的简短展示,并在最后一次课上进行展示。
初步项目想法
你可以自由提出自己的项目想法。如果你需要一些起点,以下是一些可能(也可能不)值得思考的主题。
- 重新实现 6.5840 课程中讨论的论文所描述的某个系统。
- 构建一个高性能的 Raft 实现,根据需要修改设计。
- 构建一个分布式、去中心化、容错的 Reddit。
- 构建一个使 Node.js 应用程序具有容错能力的系统,可能使用某种形式的复制执行。
- 为实验 5 添加跨分片原子事务,使用两阶段提交和/或快照。
- 按照 Google FlumeJava、Spark 或 Naiad 的风格构建一个数据流处理系统。
- 构建一个具有异步复制的系统(如 Dynamo、Ficus 或 Bayou)。或许可以添加更强的一致性(如 COPS、Walter 或 Lynx)。
- 构建一个文件同步器(如 Unison 或 Tra)。
- 为网站构建一个一致的缓存系统(有点像 memcached),可能参考 TxCache 的思路。
- 构建一个分布式协作式 Web 缓存,可能参考 Firecoral 或 Maygh 的思路。
- 构建一个类似 EtherPad 的协作编辑器,使用最终一致性或 CRDT 原语。
- 使用区块链构建加密货币以外的应用。
- 构建一个容错和/或分片的文件服务。
- 构建一个 分布式共享内存(DSM)系统,使原本为单台多核机器设计的并行代码能够在机器集群上运行。
- 按照 Amazon EBS 或 FAB 的风格构建一个分布式块存储。也许你可以让标准操作系统通过 iSCSI 或 Linux 的 NBD(网络块设备)与你的网络虚拟磁盘通信。
- 构建一个地理复制的存储系统,类似 Dynamo 或 COPS,在事务或一致性方面提供一些有用和/或高效的功能。
- 使用现代高速网卡特性(如 RDMA 或 DPDK)构建一个高速服务,可能带有复制或事务功能。
- 使用现代快速非易失性存储(如 Intel Optane)简化容错系统的设计。
- 构建一个比 Raft 更容易在其上编写服务代码的容错框架。
- 研究如何判断应用程序是否真正需要严格一致的存储,或者使用弱一致性存储带来的应用程序复杂性代价是什么。
- 构建一个同时擅长大数据处理(如 MapReduce 和 Spark)和在线处理(如键/值存储或 SQL 数据库)的数据处理系统。