MIT6824笔记一 绪论与MapReduce
MIT 6.824 课程第一节笔记,主要介绍了分布式系统的驱动力、难点、类型等,还介绍了MapReduce。
分布式系统介绍
(1)驱动力
- 更高的计算性能(并行计算、大CPU、大内存、大磁盘)
- 容错机制(两台计算机运行相同的任务,一台失败可到另外一台)
- 问题的分布特性(比如说银行转账)
- RPC与代码隔离,只通过网络通信
这门课程主要研究性能与容错。
(2)困难
- 并行
- 容错
- 兼顾性能
(3)分布式系统的类型
基础架构的类型主要是存储,通信(网络)和计算。
实际上我们最关注的是存储,构建一种多副本,容错的,高性能分布式存储实现。
会讨论一些计算系统,比如MapReduce。
也会说一些关于通信的问题,但是主要的出发点是通信是我们建立分布式系统所用的工具。
对于存储和计算,我们的目标是为了能够设计一些简单接口,让第三方应用能够使用这些分布式的存储和计算,这样才能简单的在这些基础架构之上,构建第三方应用程序。
(4)工具
- RPC(Remote Procedure Call)。RPC的目标就是掩盖我们正在不可靠网络上通信的事实。
- 线程。这是一种编程技术,使得我们可以利用多核心计算机。对于本课程而言,更重要的是,线程提供了一种结构化的并发操作方式,这样,从程序员角度来说可以简化并发操作。
- 并发控制,比如锁。
(5)其他特性
- 可拓展性:N倍的机器能否带来N倍的性能提升?
- 可用性:容错、故障应对
- 一致性:读写一致性,系统正确的行为
Map Reduce
背景
Google (2003 年左右)面对巨量(数十 T)的索引数据和全网结构的数据,需要找到最重要的网页。这可以简化为一个排序问题,但如此数量级的排序,单机不是一个可选项。
MapReduce的思想是,应用程序设计人员和分布式运算的使用者,只需要写简单的Map函数和Reduce函数,而不需要知道任何有关分布式的事情,MapReduce框架会处理剩下的事情。
工作原理
两类任务:Map和Reduce一个主节点分配任务,若干个worker节点干活。
看起来很简单的架构,但在分布式环境下,需要考虑:
- worker节点崩溃,需要任务完成确认机制以及崩溃后临时文件的清理
- 网络通信不可靠,发送任务和确认任务的消息均可能丢失
MIT6824笔记一 绪论与MapReduce