最近在学习MIT的6.824课程,主要内容是关于分布式系统,其中涉及到了很多分布式相关的知识,对于分布式有一个成体系的介绍,所以准备在此记录下学习这门课程的笔记。
课程地址
https://pdos.csail.mit.edu/6.824/schedule.html
MIT 6.824 Distributed Systems Spring 2020 分布式系统 第一课 课程简介
课程介绍
什么是分布式系统?
-
多个互相合作的计算机
-
大型网站的存储,MapReduce以及点对点分享等
-
许多重要基础设施是分布式的
为什么人们建造分布式系统?
优点
-
通过并行增加容量
-
通过复制进行容错
-
将计算物理上靠近外部实体
-
通过隔离保证安全
但是也有缺点
-
许多并发的部分,复杂的交互
-
必须处理部分失败
-
难以实现性能潜力
课程结构
课程划分
-
Lectures
-
Papers
-
Two exams
-
Labs
-
Final project(optional)
实验
-
MapReduce
-
使用Raft实现可以容错的复制
-
可容错的k/v 存储
-
分布式k/v 存储
主题
这是一门关于应用基础设施的课程
-
存储
-
通信
-
计算
一个很重要的目标就是,对于隐藏分布式复杂性的抽象,在这个过程中,有以下几个主题会反复出现。
- 实现
- RPC,线程,并发控制,等等
- 性能
-
目标:进行可扩展的吞吐
-
Nx servers-->Nx 倍的网络,CPU,磁盘等
-
可以通过购买更多的机器来处理更多的负载
-
-
随着N变大,扩展变得困难
-
N中最慢的延迟
-
非并行的代码:初始化,交互等
-
共享资源的瓶颈:网络
-
-
一些性能问题无法通过扩展机器来解决
-
单个用户请求的快速相应
-
所用用户同一时间更新数据
-
- 容错
-
可用性
-
可恢复性
- 一致性
-
通用基础设施需要定义明确的行为
-
实现好的行为是很困难的
-
强一致性和性能是一对“敌人”
MapReduce学习
概览
MapReduce(简称MR):多TB数据集上的长时间计算,通常用来建立搜索的索引,或者排序,或者分析网站结构,适用于成千上百台计算机,代码并非要求专业的分布式专家来写。一般性目标为:面向非专业程序员编写。程序员仅需要定义Map和Reduce两个函数。MR负责并隐藏分布式的所有方面。
示例

一个典型的单词计数任务可以分解如下:

MR隐藏了以下细节:
-
发送app代码到server端
-
追踪task job的状态
-
发送数据从Map到Reduce
-
在Server端平衡负载
-
从失败中恢复
同时,MR限制了app可以做的东西:
-
没有交互或者状态
-
没有迭代,没有多级流水线
-
没有实时或者流处理
输入和输出都存储在GFS集群中
-
MR需要大规模的并发输入和输出
-
GFS将文件拆分到很多服务器中,规格大小为64MB
-
GFS拥有3个备份
-
拥有GFS是MR的一大胜利
什么限制了性能?
--我们为什么关注这个,是因为这个是需要优化的事情,到底是CPU,内存,磁盘还是网络?
在2004年(论文发表的时候),MR的作者是被网络带宽而限制。
那MR在网络中发送了什么?
-
Map函数从GFS中读取数据
-
Reduce函数从Map的输出中读取数据
-
Reduce函数向GFS中写数据
在MR的all-to-all shuffle过程中,有一半的流量通过root来转换
今天,网络和根 switch已经比CPU/磁盘更加快
MR如果获得很好的平衡?
如果在所有的服务中,有一个服务非常慢,那么时间花费会很高,其他服务器必须要等待这个服务器。
但是一些任务要花费更多的时间要比其他任务。
解决方法:让task的数量多于worker的数量
-
Master给那些结束了之前任务的worker分配新的任务
-
所以没有什么任务是大到可以延长结束时间的
-
更快的服务器可以处理更多的任务
网友评论