1 intro
如何高效读论文:
跳过那些不怎么重要的部分,弄清楚作者重要的 想法
infra分成三部分
storage:重点在这
communication:谈一点点,它是建立DS 的工具
computation
我们需要abstractions去让用户感觉使用分布式系统就正如使用非分布式系统一样
实现上的工具有:RPC, threads, concurency, locks
Performance (high-level goal: get scalable speed-up)
scalability:增加机器就能线性提高性能 (如果只要用钱买机器就能增加线性性能,那比起花钱雇程序员来修复软件要方便得多)
Fault tolerance
故障总是存在,所以我们需要建立一个能够hide/mask 各种failure的接口给应用程序者,他们不用关心各种故障问题;
availability
recoverability(如果出现问题,它可能停止接收请求,但它可以repair,修复完可继续提供服务)
这意味着recoverable system 要经常做一些保存性的工作,如WAL
实现冗余的工具有:Non-volatile storage, replication
Consistency
强一致代价高,比如另外一个DC远在千里之外,每次更新要写全部副本,或者每次get要check所有副本,这代价很高;所以人们有时会用weak consistency
为了使故障 independent,我们会倾向把replica放在不同的地方;但这会造成强一致代价很高;
MapReduce 举例
google 试图找到一个框架,能够帮助non-speicialist 能够写、运行giant distributed computations,而不用关心怎么跑在成千上万的机器上
讲了wordCount 例子; 很大一部分开销花在了网络通信上,也有一些办法缓解,比如让map worker 跑在装input file 的GFS本地worker上,就不用网络传输文件了;
2 RPC and threads
使用go的好处:有好的RPC package,是GC语言,不用担心各种麻烦的内存问题,如引用计数