随着云计算和大数据技术的发展,分布式系统在各个领域得到了广泛应用。相比于传统的单一机器系统,分布式系统能够管理集群规模的机器,并动态地协调机器间的通信来提高执行性能和资源利用率。
对于现阶段的大多数计算任务来说,分布式系统并不是必需的。只有当任务的计算量非常大,单台机器(节点)无法满足需求,且硬件升级的成本过高时,我们才需要考虑使用分布式系统来连接多台机器协同工作。但分布式系统的发明,使利用普通机器处理超大规模计算任务成为可能,极大地降低了特定场景下的计算成本。
在本题中,你需要从零开始搭建一个分布式系统。你可以参考市面上已有的分布式系统1,也可以参考相关的论文和书籍2,但请注意,你需要有自己的设计思路和实现方案,不能简单地复制已有产品。
我需要做什么?
分布式系统通常包括分布式计算和分布式存储两大方向。无论是计算还是存储,都要求分布式系统高效稳定地处理多机器(节点)间的数据通信工作,并通过协议和机制约束来管理机器的上线、下线和故障恢复等复杂问题。
所以,分布式系统需要具备以下能力:
- 节点管理: 能够动态地添加和移除节点,确保系统的可扩展性和灵活性。
- 数据一致性: 在节点动态变化、并发处理任务负载的情况下,确保系统中的数据保持一致,避免数据竞争和数据丢失。
- 负载均衡: 动态调整各个节点的负载,以提高系统的整体性能。
- 故障恢复: 能够快速检测和恢复节点故障,确保系统的高可用性。
分布式系统的设计和实现都需要巨大的工程量,涉及计算机网络、操作系统、数据库等多个领域的知识。对于本题来说,实现一个高度可用的分布式系统并非题目本意, 我们更看重你的系统整体架构设计、协议规范的有效制定和少量核心功能的代码实现。
我该怎么做?
1. 选择你的方向
- 分布式调度框架: 从最底层的节点通信协议、任务调度和负载均衡等方面入手,设计并实现一个简易的任务分发和节点通信框架。
- 节点决策系统: 设计并实现一个节点决策系统,能够动态地管理节点的上线、下线和故障恢复等工作。
- 分布式计算系统: 设计并部分实现一个简易的分布式计算系统,能够动态地分配计算任务并协调节点间的通信。
- 分布式存储系统: 设计并部分实现一个简易的分布式存储系统,能够动态地管理数据的分布和复制等工作。
2. 规划任务目标
对于每个方向,你可以从表格中选择多个目标进行实现。如果有余力的话,也可以自行实现更多的功能。
| 方向 | 任务目标 | 加分项 |
|---|---|---|
| 分布式调度框架 |
|
|
| 节点决策系统 |
|
|
| 分布式计算系统 |
|
|
| 分布式存储系统 |
|
|
3. 做好安排
与其它题目相似,本题并非仅仅考察你的代码能力,而是更考察你(与团队)在有限时间内的统筹安排、架构设计、工作规划能力。请务必在开始工作前确定好打算实现的目标并大致规划好时间安排,不要因为某个功能的推迟上线而影响整体进度。
最终,你需要在答辩中详细展示你的设计思路,体现你的架构能力,并展示已经实现的功能。同时,你需要对你所研究的方向和相关技术有足够的了解,以一个技术自信的姿态完成工作。
祝一切顺利!
附:我可以用什么?
善用已经掌握的资源和工具,并抓紧学习不了解的技术。
建议使用的编程语言
RustGoScalaC, C++
当然,你也可以使用其它任何语言,只要你能证明它适合这个任务。