【6.824分布式系统笔记】LEC 1: Introduction|引言、技术思想和 MapReduce

引言和技术思想

MIT不愧是MIT,Introduction都上得这么好,层层深入,引导思考。
国内的课要是有这种水平就好了。

这是我上课做的一些笔记,可能没太多细节,但是框架都有了


为何需要分布式系统?

  • 并行获得高性能
  • 容错
  • 物理上本就是分布式
  • 安全 / 隔离

讨论的基础架构

  • 储存
  • 通信
  • 计算(MapReduce)

抽象出接口,尽量将分布式特性隐藏在系统内,操作起来像非分布式系统一样。使用的工具例如:

  • PRC (Remote Procedure Call)远程过程调用,用以掩盖网络的不可靠。
  • 线程,提供结构化的并发。
  • 并发控制,锁。

性能

  • 可拓展性:可以扩增机器横向拓展提高性能。

    举例:一台web服务器一个数据库,用户量增多可以扩增web服务器数量,使用同一个数据库。但是当web服务器数量达到一定程度后,数据库读取成为瓶颈,但是拆分数据库需要大量工作。

    现实中很难实现只靠扩增机器实现拓展,这就需要设计一个新架构将它无限拓展下去,需要考虑分布式储存的问题。

  • 容错:可用性 / 可修复性

    分布式系统大量机器会将罕见问题放大,错误总在发生,系统要能向上层屏蔽错误,服务仍能正确运行,并能自我修复。可用方法:

    1. 非易失性存储,例如硬盘。存放一些checkpoint或者系统状态的log在这些存储中,修复后读出继续运行。但是代价较高,为了高性能,要避免频繁的写入非易失存储。
    2. 复制。多副本系统实现容错,主要问题在于副本的同步,即一致性问题。
  • 一致性

    最基本的分布式存储系统提供(k,v)服务,有put / get 行为。系统中会有多个副本,可能put操作中途出问题导致副本不一致,get到的数据也可能不一致。

    强一致可以保证get得到的是put写入的最新的数据,弱一致性则无法保证。但是实现强一致性系统中需要大量通信,例如读取所有副本取最新值,而且为了容灾不同副本可能相距很远。这样做代价很高,所以现实中常常会考虑构建弱一致性系统来提高性能。

MapReduce

这部分直接看Google的那篇论文更清晰。简单说一下。

对于PB级的数据,MapReduce的思想是,使用者只需要写简单的Map函数和Reduce函数,而不需要关注底层,MapReduce框架自动处理。

一个完整的MapReduce Job,它由一些Map Task和一些Reduce Task组成。

Map函数将GFS文件系统的输入处理成一个个键值对,例如用来统计词频,将输入文本变为 (a,1) (b,1) 输出,经过聚合同一个键和排序,即shuffle操作,将每个键的结果交给Reduce 函数,shuffle后返回统计结果保存到GFS。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWRdQQ6a-1649412886263)(https://secure2.wostatic.cn/static/iksuYsdzU8tXgbmXDKSuSX/image.png)]

大型应用需要多次MapReduce,即上一次输出作为下一次输入。

论文发表时代网络带宽是瓶颈,所以尽量在本地处理,即GFS文件系统和MapTask在同一台机器上,只有shuffle后需要传输数据到其他机器,这也是MapReduce的瓶颈。

论文里提到Map操作之后可以运行Reduce的代码先进行聚合,减少数据传输量,但这不算是Reduce操作只是用了相同代码。标准的Reduce操作必须等所有Map结束,获得所有输出才能进行。

论文还提到MapReduce快结束时启动多个重复任务,只要有一个完成就标志任务完成,这样可以防止有机器出问题拖后腿。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值