MIT6.824分布式系统课程学习1-介绍
evoToBetter 2020-08-29 22:37:19 distributed_systemMIT coursesystem_design
MIT6.824课程学习记录,第一部分课程介绍及资源记录
# 课程资源
课程主页
2020年春季课程地址
raft协议可视化解释
如何才能更好的学习 MIT 6.824---知乎
# 基础介绍
# 什么是分布式系统
简单来说:分布式系统就是由多个计算机协作组成的系统,包含为大型网站设计的存储、MapReduce、p2p共享等等。关键的架构会分散在各个地方。
# 为什么要构建分布式系统?
- 通过并行提高性能
- 通过备份容忍错误
- 将计算机更加靠近外部实体
- 通过隔离保证安全
但是并非没有代价: - 会有大量并发、复杂的交互
- 必须处理部分失败的情况
- 难以发挥性能潜力
# 为什么要学习这门课程
- 有趣,你会碰到难题和有力的解答
- 应用在实际系统中,由大型网站的崛起推动此类的开发
- 活跃的研究领域,有很多重要的未解决的问题
- 动手,你可以在实验室中建立一个真实的系统
# 课程中将做的一些活动
讲座、阅读论文、考试、实验和最后的大项目
# 主要课题
这是一门关于构建应用的课程:
- 存储
- 通信
- 计算
最大的目标:隐藏分布式的复杂性
主题(这些主题会反复出现在课程中):
# 实现:
RPC、线程、并发控制等等
相关实验:所有
# 性能:
目标:吞吐量可扩展
即N台server可以通过cpu、硬盘及网络提供N的吞吐量。
那么针对更多的请求只需要增加更多的主机,而不用重新设计系统。
高效划分工作,而无需太多干预。
当N增大时,扩展会变得更加困难
例如,负载不均衡、混乱、N中延迟最大的部分、非并行化代码(初始化、交互)、共享资源的瓶颈(如网络等)。
一些在扩展中出现的性能问题不好解决:
如:
快速响应单个用户的请求
所有用户希望同时更新相同的数据
这些都需要更好的设计而不是更多的计算机
相关实验:Lab 4
# 容错
上千台服务器,大型网络,总是会出现损坏。
我们需要对应用隐藏这些错误。
通常我们希望具有:
可用性--应用在运行中可以忽略这类错误
可恢复性--应用可以在错误修复后恢复
相关实验:Lab 1,2,3
# 一致性
通用架构需要有明确定义的行为。
但是实现好的行为十分困难:
- 副本服务器很难保证相同
- 客户端可能在多步更新中间宕机
- 服务器可能出现宕机,如在处理完但是回应前。
- 网络出现分区,导致存活的服务器看起来死亡了,如“脑裂”
一致性和性能是一对敌人:
强一致性需要通信。
很多设计为了速度,仅提供弱一致性。
在一致性/性能范围内会有很多的设计要点。