Lecture 1 - Introduction
MIT 6.824 Distributed Systems
1、概念预览
分布式系统需要考虑的因素:
- Parallelism :并行性
- Fault tolerence :容错性
- Physicial :不同系统之间物理距离引起的通信问题
- **Security ** :不同的计算机之间的通信安全
- Isolated :从通信角度可能引发的孤立问题
本课程全程重点讨论并行性 和容错性,其他因素将由实例说明。
挑战:
- Concurrency :并发问题
- Partial failure :系统部分出错
- Performance :性能
实现:
- RPC :远程调用的目是试图掩盖我们正在不可靠网络上通信的事实
- Thread :线程是一种编程技术,让我们可以驾驭多核计算机。提供了一种结构化的并发操作方式(concurrency control),简化了程序员对并发操作的视角
性能:
- Scalability :构建分布式系统的更高目标是具有可扩展速度的提升,比如两台计算机就有两倍算力。但可扩展性不能无限增加,总会有瓶颈的。
容错:
- Availability :可用性,一般都是建立在特定错误类型上的,继续正常服务的能力。
- Recoverability :可恢复性,宕机之后能快速恢复。
- Non-Volatile storage :借助非易失性存储(硬盘、闪存flash、SSD)存放一些检查点或者关于系统状态的日志,读取最新的状态并在那里工作。
- Replication :通过复制实现容错,eg:lab 2
consistency :一致性,例如对数据库读写。一般来说先去访问主服务器(数据库),如果失败了再去访问副本服务器。一致性可以分强弱,因为强一致性需要更昂贵的通信成本。
2、MapReduce
MapReduce简介 (airekans.github.io)
单词计数中的Map函数和Reduce函数Overview
映射到代码上:
c++
function Map(K,V) :
//K代表着words, V表1, K V可以都是vector
for each word w :
emit(w,"1");
function Reduce(K,V) :
//K V可以都是vector
emit(len(V))
从分布系统的设计者角度而言,Map必须是纯函数性的,需要考虑环境框架是如何组织的。
但从程序员的角度来看,调用就行。
TODO:读MapReduce论文、实现Lab 1