【MIT公开课】6.824分布式系统 Lecture 1 笔记

Lecture 1

Preview

  1. 尽可能在一台计算机上解决问题,使用分布式系统为了
    A. 高性能,为了使更多cpu和磁盘臂并行工作;
    B. 容错,几台计算机同时解决一个问题
    C. 不同物理位置的计算机实现交互与合作
    D. 安全性问题及隔离性能和故障,各自完成自己的任务,通过定义特定接口或协议一起完成
  2. 分布式系统的困难
    A. 并发问题
    B. 部分故障问题
    C. 性能问题,使用1000台电脑如何使性能提升1000倍
  3. Infrastructure
    A. storage(存储)
    B. communication(交流)
    C. computation (计算)
  4. 实现工具
    A. remote procedure call(远程过程调用)使得不可靠网络对应用程序员透明
    B. 线程
    C. 同步控制,利用锁
  5. 性能
    A. scalable speed up(可扩展加速)多买一台电脑,性能有效提升一倍
  6. 容错(工具:非易失性存储器,复制和管理)
    A. 可用性,部分特定故障发生,仍能运行
    B. 可恢复性,出现问题,仅停止工作等人修复
  7. 一致性
    A. key-value 服务 Put(k,v),Get(k)

MapReduce

意义:当一台计算机处理工作需要过长时间,需要数千台计算机协同工作,避免发生故障,需要一个框架使得即使不是分布式系统的专家也可以轻松运行大型分布式计算。

【MIT公开课】6.824分布式系统 Lecture 1 笔记_第1张图片

补充:

论文中系统概述图:

一些优化方式

  1. 分区函数
    用户可以指定reduce任务的个数,即输出文件的个数(hash(key) mod R)
    可以利用分区函数将相同运算结果输出到一个文件中
  2. 保证有序性
    在给定的分区中,根据key的递增顺序排序,使得分区输出文件中的内容也是排序过的,便于输出文件需要根据key随机访问
  3. 合并功能
    在实现map函数时,现在本地对key相同的进行合并,减少通过网络传输给reduce的量
  4. 输入输出类型
    可以定义输入输出类型,例如将输入的每一行看作一个key/value pair,key是行在文件中的偏移量(offect),value是行的内容
  5. 副作用
  6. 跳过坏记录
    在大型输出处理的过程中,kill一部分坏记录是可行的,且能极大提升速度
  7. 本地执行
    在分布式系统中,调试是困难的,可以在本地顺序执行所有运算,用户可以限制某个特定map任务执行计算,从而由正确的结果去检验测试
  8. 状态信息
    master运行在内部HTTP服务器,并导出状态页(status pages)集合供人们查看。这些状态页展示了计算的进展,如多少个任务已经完成、多少还在运行中、输入的字节数、中间数据的字节数、输出的字节数、处理率、每个任务的标准异常和标准输出文件等。用户可以使用这些数据来预估计算将花费多少时间,也可以找出计算的瓶颈
  9. Counters
    MapReduce库提供计数器工具,用于计数各种事件的发生,如已被处理的单词总数等

论文中提到MapReduce的意义和经验补充

  1. 该模型易于使用,即使对于没有并行和分布式系统经验的程序员也是如此,因为它隐藏了并行化、容错、局部性优化和负载平衡的细节
  2. 各种各样的问题都可以很容易地用MapReduce计算来表达。例如,MapReduce用于为谷歌的生产web搜索服务生成数据,用于排序,用于数据挖掘,用于机器学习,以及许多其他系统
  3. 我们已经开发了一个MapReduce的实现,它可以扩展到由数千台机器组成的大型机器集群。该实现有效地利用了这些机器资源,因此适合用于谷歌中遇到的许多大型计算问题
  4. 限制编程模型(用map函数和reduce函数,且定义清晰的输入输出接口)使并行化和分布计算变得容易,并使这些计算具有容错性。
  5. 网络带宽是稀缺资源。因此,我们系统中的许多优化旨在减少通过网络发送的数据量: 局部性优化允许我们从本地磁盘读取数据,并将中间数据的单个副本写入本地磁盘以节省网络带宽。
  6. 冗余执行可以用来减少慢机器的影响,并处理机器故障和数据丢失。

你可能感兴趣的:(分布式)