当前位置: 首页 > news >正文

(undone) MIT6.824 Lecture 01 - Introduction

url: https://mit-public-courses-cn-translatio.gitbook.io/mit6-824/lecture-01-introduction


1.1 分布式系统的驱动力和挑战(Drivens and Challenges)

本课程是 6.824 分布式系统。我会先简单的介绍我理解的分布式系统。

大家都知道分布式系统的核心是通过网络来协调,共同完成一致任务的一些计算机。我们在本课程中将会重点介绍一些案例,包括:大型网站的储存系统、大数据运算,如 MapReduce、以及一些更为奇妙的技术,比如点对点的文件共享。这是我们学习过程中的一些例子。分布式计算之所以如此重要的原因是,许多重要的基础设施都是在它之上建立的,它们需要多台计算机或者说本质上需要多台物理隔离的计算机。

在我先介绍分布式系统之前,也是提醒大家,在你设计一个系统时或者面对一个你需要解决的问题时,如果你可以在一台计算机上解决,而不需要分布式系统,那你就应该用一台计算机解决问题。有很多的工作都可以在一台计算机上完成,并且通常比分布式系统简单很多。所以,在选择使用分布式系统解决问题前,你应该要充分尝试别的思路,因为分布式系统会让问题解决变得复杂。
分布式系统只有在必要的时候才采用,因为它会让事情变得复杂

人们使用大量的相互协作的计算机驱动力是:

  • 人们需要获得更高的计算性能。可以这么理解这一点,(大量的计算机意味着)大量的并行运算,大量CPU、大量内存、以及大量磁盘在并行的运行。分布式好处1:更快性能、更大存储
  • 另一个人们构建分布式系统的原因是,它可以提供容错(tolerate faults)。比如两台计算机运行完全相同的任务,其中一台发生故障,可以切换到另一台。分布式好处2:容错高,一台机器不行了,换一台机器即可
  • 第三个原因是,一些问题天然在空间上是分布的。例如银行转账,我们假设银行A在纽约有一台服务器,银行B在伦敦有一台服务器,这就需要一种两者之间协调的方法。所以,有一些天然的原因导致系统是物理分布的。分布式好处3:有一些问题在天然上需要分布式
  • 最后一个原因是,人们构建分布式系统来达成一些安全的目标。比如有一些代码并不被信任,但是你又需要和它进行交互,这些代码不会立即表现的恶意或者出现bug。你不会想要信任这些代码,所以你或许想要将代码分散在多处运行,这样你的代码在另一台计算机运行,我的代码在我的计算机上运行,我们通过一些特定的网络协议通信。所以,我们可能会担心安全问题,我们把系统分成多个的计算机,这样可以限制出错域。分布式好处4:提高安全性,不安全的代码在一些计算机上运行,安全的代码在另一些计算机上运行

在这里插入图片描述

这门课程中,我们主要会讨论前两点:性能和容错。剩下两点我们会通过对某些案例的研究来学习。

所有的这些分布式系统的问题(挑战)在于:

  • 因为系统中存在很多部分,这些部分又在并发执行,你会遇到并发编程和各种复杂交互所带来的问题,以及时间依赖的问题(比如同步,异步)。这让分布式系统变得很难。分布式挑战1:并发代码会有的挑战,分布式都会有
  • 另一个导致分布式系统很难的原因是,分布式系统有多个组成部分,再加上计算机网络,你会会遇到一些意想不到的故障。如果你只有一台计算机,那么它通常要么是工作,要么是故障或者没电,总的来说,要么是在工作,要么是没有工作。而由多台计算机组成的分布式系统,可能会有一部分组件在工作,而另一部分组件停止运行,或者这些计算机都在正常运行,但是网络中断了或者不稳定。所以,局部错误也是分布式系统很难的原因。分布式挑战2:相比单机执行,会有局部错误,比如有一部分机器不能 work 了
  • 最后一个导致分布式系统很难的原因是,人们设计分布式系统的根本原因通常是为了获得更高的性能,比如说一千台计算机或者一千个磁盘臂达到的性能。但是实际上一千台机器到底有多少性能是一个棘手的问题,这里有很多难点。所以通常需要倍加小心地设计才能让系统实际达到你期望的性能。分布式挑战3:需要小心设计分布式系统,才能得到预期的性能提升

在这里插入图片描述

本门课程就是为了解决这些问题。通常来说,问题和解决方案在技术上都很有趣。对于这些问题,有些有很好的解决方案,有些就没有那么好的解决方案。

分布式系统应用在很多现实生活中系统,例如大型网站通常是由大量的计算机构成的分布式系统来运行。当我刚开始教这门课的时候,分布式系统还是一种学术上的好奇尝试。人们只是发现有时需要一些小规模的系统,并且预感在未来这(大规模分布式系统)可能很重要。但是现在,随着大型网站的兴起和推动,出现了大量的数据和大型数据中心。在过去的二十年中,分布式系统已经是计算架构中很重要的一部分。这意味着大量的精力投入到解决相关问题的工作中,但是同样有少数问题还没有被解决。如果你是个研究生,并且对这方面研究感兴趣,还有很多关于分布式系统的问题等着你去解决,去进行相关研究。最后 如果你是一位热衷动手的同学,这会是一门不错的课程,因为它有一系列实验,你会编写出贴近现实,并且关注性能和容错的分布式系统。所以你会有很多机会去构建一个分布式系统并且让他们正常工作。


1.2 课程结构(Course Structure)(这节可以略过,没有什么内容)

在讨论技术内容之前,我先介绍一下课程结构。你们应该可以通过网络搜索到这门课程的网站(最开始的简介里也有)。网站上有一些实验作业,课程时间表和一个Piazza(论坛)页面链接,你可以在那里发布问题并获得解答。课程主要的教学人员有:我Robert Morris会进行课堂授课,和四个助教。助教会重点解决实验问题,在工作时间,他们也会在办公室解答有关实验的问题。所以如果你有关于实验的问题,你应该在办公时间过去找他们,或者你可以将问题发到Piazza上。

这门课有几个重要组成部分:

  • 课堂授课
  • 几乎每节课都有论文阅读
  • 两次考试
  • 编程实验
  • 可选的项目(与Lab4二选一)

在这里插入图片描述

授课内容会围绕分布式系统的两个方面(性能和容错)。有几节课会介绍一些关于编程实验的内容。许多课程我们将会以案例分析为主要形式。我会在课前提供一些关于分布式系统的论文,这些论文有些是学术研究,也有一些是工业界关于现实问题的解决方案。授课内容会被录像并被上传到网络,这样不在课堂的人也可以在别的地方观看视频,同时你们也可以回顾课程视频。

这里的论文每周需要读一篇,论文主要是研究论文,也有一些经典论文,比如今天我希望你们阅读的论文是MapReduce的论文。这篇论文很老,但是这篇论文不论在学术界还是工业界都激发了巨大的关于分布式系统的兴趣。所以,论文有一些是经典论文,也有一些最近发布的论文,用来讨论最近人们关心的最新研究成果。我希望通过这些论文可以让你们弄清楚,什么是基本的问题,研究者们有哪些想法,这些想法可能会,也可能不会对解决分布式系统的问题有用。我们有时会讨论这些论文中的一些实施细节,因为这些细节与实际构建软件系统有很多关联。我们同样会花一些时间去看对人们对系统的评估。人们是如何通过系统容错性和性能来评估一个分布式系统。我希望你们在每次讲课前,都可以完成相关论文的阅读。如果没有提前阅读,光是课程本身的内容或许没有那么有意义,因为我们没有足够的时间来解释论文中的所有内容,同时来反思论文中一些有意思的地方。所以,我真的希望大家来课堂前先阅读论文。我也希望快速高效的读论文会是这堂课的一个收获,比如跳过一些并不太重要的部分,而关注作者重要的想法。我们课程网站上每一个日程的链接都有一些思考问题,你应该在读完每篇论文后回答这个问题。我们也需要你在网站上提出关于论文的一些问题,可以让我思考一下我对课程的准备。如果我有时间我会至少通过电子邮件回答一部分问题。这些问题和回答都需要课程前一天的零点前提交。

有两次考试,一次是随堂期中,大概在春假前最后一节课;并且会在学期期末周迎来期末考试。考试内容主要为论文和实验中的内容。我建议最好的准备方式当然参加课堂授课,并且阅读论文。另一个好的准备考试的方式就是查看我们过去20年所有的考试,这在网站上都有链接。这样你就知道,我会在考试中问哪些问题?因为我们(相比往年)会涉及到一些重复的论文,所以不可避免的,我会问一些与历年题目类似的问题。

有四次编程实验。第一次实验需要在下周五前完成,这是一个简单的MapReduce实验。你们要根据你们在论文中读到的来实现你们版本的MapReduce。我们过一会就会讨论这个论文。第二个实验实现Raft算法,这是一个理论上通过复制来让系统容错的算法,具体是通过复制和出现故障时自动切换来实现。第三个实验,你需要使用你的Raft算法实现来建立一个可以容错的KV服务。第四个实验,你需要把你写的KV服务器分发到一系列的独立集群中,这样你会切分你的KV服务,并通过运行这些独立的副本集群进行加速。同时,你也要负责将不同的数据块在不同的服务器之间搬迁,并确保数据完整。这里我们通常称之为分片式KV服务。分片是指我们将数据在多个服务器上做了分区,来实现并行的加速。

在这里插入图片描述

如果你不想做实验四,你也可以选择你自己的项目。如果你对分布式系统有一些自己的想法,比如我们课堂上讨论到的某个类型的分布式系统,或者说你有一些自己的追求并且想对这个想法进行评估,看他们能不能正确运行,你可以选择做这个项目。这个项目中你需要联系一些你的同学,因为我们需要以2-3人的小组形式完成。你需要把想法发给我,我来确定下是否合适或者是给你一些建议。如果我觉得合适,你也想做这个项目,你就可以用它在本学期末代替实验四。你需要做一些系统设计,并构建一个真实的系统并在最后一节课前演示。同时需要交一个简短的关于如何构建它的书面报告。我在网站上也提出一些或许对你们构建这个项目有帮助的大胆的想法。当然最好的项目应该是,你自己有一个很好的想法。你需要选择一个和课程讨论内容相关的系统作为你的项目。

回到实验部分,实验成绩会由一系列针对你代码的测试构成,所以你的成绩就是我们所有测试的结果。我们会公开全部的测试数据,并没有隐藏的测试,所以如果你完成了实验并且可靠的通过了全部测试,除非出现一些愚蠢的问题,一般来说就会得到满分。希望你们不会有任何关于实验评分的问题。我需要提醒你的是,debug这些代码可能很耗时间,因为它们是分布式系统,它们有很多并发和通信,可能发生一些奇怪且困难的错误。所以,你们应该尽早开始实验 ,不要在提交实验的最后时刻还要处理很多麻烦。如果有对实验有问题,可以在工作时间来到助教办公室,你也可以在Piazza上自由提问。当然我也希望,如果你知道一个问题的答案,你可以在Piazza回答别人的提问。
调试并发和通信代码可能会很麻烦,要注意


TODO: here


TODO: here

相关文章:

  • 【极速版 -- 大模型入门到进阶】快速了解大型语言模型
  • Modern C++面试题及参考答案
  • Smith3.0 4.0的阻抗匹配操作方法
  • Apache Doris学习
  • 让 MGR 不从 Primary 的节点克隆数据?
  • 字节DAPO算法:改进DeepSeek的GRPO算法-解锁大规模LLM强化学习的新篇章(代码实现)
  • NLP高频面试题(十一)——RLHF的流程有哪些
  • odata 搜索帮助
  • CS2 demo manager 安装
  • git 合并多次提交 commit
  • Problem: 73. 矩阵置零
  • Unity网络开发快速回顾
  • 人工智能在现代科技中的应用和未来发展趋势
  • Java问题小记——入职心得
  • 风控笔记4——市场风险管理
  • 【Python入门速学】2.4. 逻辑运算符
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(11)
  • 人工智能之数学基础:瑞利商与特征值的关系
  • JAVA组件的利用漏洞 Shlr搜索引擎 shiro身份 Log4j日志
  • 常见中间件漏洞(tomcat)
  • 有人倒卖试运营门票?上海乐高乐园:这些票存在无法入园风险
  • 普京批准俄方与乌克兰谈判代表团人员名单
  • 中巴续签双边本币互换协议,进一步深化金融战略合作
  • 成都警方通报:8岁男孩落水父母下水施救,父亲遇难
  • 浙江公开征集涉企行政执法问题线索,包括乱收费、乱罚款等
  • 泽连斯基:乌克兰已做好与俄罗斯举行会谈的准备