1.引入
论文地址:
http://nil.csail.mit.edu/6.824/2020/schedule.html
参考lab:
https://github.com/aQuaYi/MIT-6.824-Distributed-Systems
推荐书目:DDIA 数据密集型应用系统设计
https://book.douban.com/subject/30329536/--推荐书
《Designing Data-Intensive Applications》
教课老师:(蠕虫病毒作者)
Robert Tappan Morris
设计分布式系统的第一步就是你需要知道它是否可以在单机上运行.如果可以,就可以在单机上工作.
因为分布式系统太难了.
杂项:
time-dependent stuff 时序问题
spur thoughts 大胆的想法
分片是指我们将数据放到了多个服务器上的多个分区,来实现加速.
infrastructure 基础设施
disk arms 磁盘臂
throughput 吞吐量
bottleneck 瓶颈
MapReduce
peer-to-peer file sharing
three gigahertz 3GHz
分布式需要考虑的问题:
1.parallesim ---并行管理大量CPU,内存,大量磁盘臂也在同时移动
2.fault tolerance ---容错问题
3.physical reasons ---
4.security/isolated
设计分布式系统的挑战:
1.concurrency ---并发问题
2.partial failure ---局部故障
课程安排:
1.课堂授课;
2.每节课都有论文阅读及两次考试.
具体的:
lectures;
papers;
exams;
labs;
project(optional)
Labs:
1.MapReduce
2.Raft
3.K/V
4.Sharded K/V service
实验细节:
1.关于MapReduce的一个简单实验
2.使用Raft算法来实现容错,这是一个通过复制来让系统容错的算法
3.使用Raft来实现一个具有容错能力的K/V服务器,可以完成复制并容错
4.把写的KV服务器分发到一系列的独立集群中,切分存储系统,通过运行这些副本进行加速,并且要负责
对这些不同的服务中间的数据块处理,让它们在数据运行过程中不至于有所损失.
Infrastructure contains:
1.storage;
2.communication;
3.computation.
基础设施包括:
1.存储;
2.通信;
3.计算.
这三个中我们应该最关心的是存储,这是一个有明确的定义且有用的抽象概念.
可复制的,容错的,高性能的分布式存储实例是人类之光.
存储--Ceph
通信--6.829课程中有详细的通信相关的知识
计算--MapRduce
分布式基础设施的实现要素:
1.RPC --试图掩盖我们正在用不可靠的网络的事实;
2.Threads --一种可以驾驭多核心计算机的编程技术,在分布式中提供了一种结构化的并发操作方式
3.Concurrency COntrol --并发控制
分布式中的问题:
一台数据库服务器可以轻松排序,多台怎么办呢?
一台变成1000台,需要考虑:
(1)总有一些机器会崩溃;
(2)1000台机器通信需要电缆,需要交换机,谁能保证没有人踩着电缆,又有谁能保证交换机的
小电扇一直功能呢?
...
non-volatile storage ---非易失性存储,硬盘,闪存,SSD等存储工具.
避免写入非易失性存储
What writing non-volatile storage meant was moving a disk arm and waiting for a disk platter to rotate.
写入非易失性存储内意味着需要移动磁盘臂,等待磁盘盘面旋转.
2.分布式中的更高目标
分布式的更高目标:
1.scalability ----scalable speed-up,2 computers->2*throughput(2个电脑-2倍吞吐量)
2.fault tolerance ----(1)可用性,availbility
----(2)自身的可恢复性,recoverability
容错手段:(1)NV storage;
(2)Replication;
3.Consistency ----一致性
处于性能和容错两个方面的考虑,我们需要有多个数据副本,多个数据副本又引出一致性问题.
由于复制或者缓存的原因,可能会导致不同版本的KV出现.
强一致性要求我们总是能GET到最新的值,
但是弱一致性则不需要我们总是GET到最新的值.
实现强一致性的代价很大,有些时候我们做出了一些妥协.但是,这也是要看业务场景的.
把所有的副本放在同一个机房的同一个机架上,这可能是一个非常糟糕的主意,
因为如果有人绊倒了那台机架的电源线,两个副本都会完蛋,因为它们都连接到
同一机架中的同一电源线上了.为了使副本尽量独立且容错,人们希望不同的副本
尽可能地分开离得远些.这又给强一致性带来了不好的消息,需要跨数据中心进行
通信了.