MIT6.824分布式系统lecture1笔记:Intro,MapReduce

2023-11-07

lecture1先对分布式系统的设计进行了概述,然后介绍了MapReduce的案例

Intro

为什么要使用分布式系统?
1、追求高性能,通过分布式系统进行并行计算
2、使系统具有容错性,一台计算机计算错误,可以转移到另一台计算机
3、一些问题本身具有分布式的特性,需要多台计算机互相协作,比如转账
4、安全性考虑,将程序分几部分运行在不同的计算机上

分布式系统复杂的原因?
1、分布式系统由很多部分组成,各部分并发工作,交互复杂
2、局部失败问题
3、性能问题,性能不会随规模成比例提升

分布式系统的几个部分
1、存储系统
2、系统交互:计算机网络
3、计算系统:如Mapreduce

分布式系统设计目标:
1、性能满足可伸缩性,即性能随机器规模的增长而提高,但单一提升某些服务的规模很容易遇到瓶颈(比如提高web服务器的数量使数据库性能成为瓶颈)
2、容错设计:大规模的分布式系统,会使单机上罕见的故障变成持续发生的问题(etc.比如机房网线被踩断…),因此必须将容错融入系统设计。容错设计包含以下几个方面:
(1)可用性(availability):在一定的故障下,应保证基本服务不受影响
(2)可恢复性:指修复故障后,并不会遭遇正确性的损失,最重要的方式是使用非易失性存储。两个例子(1)将数据保存在硬盘而不是内存中,代价是对性能造成影响,因此需要一些技术手段来对非易失性存储进行管理 。(2)复制技术,相对有点棘手,比如假设有两台服务器,每台服务器都有一个假定状态相同的副本,但是两个本来相同的副本很容易随着服务器的读写变得和对方不一样。
(3)一致性(consistency),假设构建一个Key-value服务的分布式存储系统,put(k,v)用来在服务器中存储键值对,客户端向服务器发送Get(k) , 服务器会返回value。问题在于在分布式系统中,服务器会存储多个副本。
强一致性:每次get操作都得到最近一个put的数据,服务器之间需要进行大量的通信,然而为了保证副本之间的独立性,副本通常存储在不同的服务器上,可能这些服务器间隔极其遥远,因此通信的成本高昂,等待的过程浪费机器的指令周期,因此强一致性的系统较少被采用 。
弱一致性:不一定返回最新的数据,比如返回最近put的几个版本 ,弱一致性系统是广泛采取的方案

MapReduce

MapReduce由Google在2004年的一篇论文中提出,MapReduce论文地址
1、背景:
当时的整个web网络大概几十TB级的数据,Google需要对这些网页建立索引,索引的本质是一个排序,处理这些网页需要大量的计算力,Google希望建立某种框架,使不熟悉分布式系统的工程师能够专心在核心功能的实现,而不是把时间花在处理分布式系统的各种细节上,基于此,Google发布了MapReduce,工程师只需要实现Map和Reduce这两个函数,其余全部交给MapReduce框架。

2、过程
将抓取的网页存储在GFS(Google文件系统,会将数据分成64MB的块大小,均匀存储在不同的服务器上),将其作为MapReduce的输入,一般会有一台master服务器,负责将大量文件分配给众多worker服务器进行Map运算,worker从GFS读取master分配的文件进行Map计算,输出存储在worker的本地磁盘上,然后worker服务器之间互相通信,将相同的键值对发送给一台主机进行Reduce运算,运算的结果存储到由GFS分配的文件上。
(1)Map:假设有一堆输入(可能是web文件),被分成了不同的块,MapReduce会在不同的块上运行Map函数,按照键值进行排序,输出键值对,每个Map都是完全独立的
(2)Reduce:MapReduce框架将Map产生的所有键值对作为参数传递给Reduce进行计数
在这里插入图片描述
在2004年论文提出的时候,受限制的主要是网络带宽,因此Google采用将 GFS和worker运行在同一台机器上的方式,使master优先让worker计算本地的数据,以降低网络延迟带来的影响。但Reduce依然需要网络传输,且输出十分巨大,这些内容也需要存储在GFS中,GFS为了容错每份数据都有几份副本,因此网络传输成为限制MapReduce吞吐量最严重的瓶颈。而现代数据中心因为往往有更多根服务器,做更多的数据交换,需要更高的网络吞吐量,因此MapReduce逐渐被弃用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MIT6.824分布式系统lecture1笔记:Intro,MapReduce 的相关文章

  • 2021-10-24

    Python 简介 Python 是一个高层次的结合了解释性 编译性 互动性和面向对象的脚本语言 Python 的设计具有很强的可读性 相比其他语言经常使用英文关键字 其他语言的一些标点符号 它具有比其他语言更有特色语法结构 Python
  • ERR_PNPM_NO_GLOBAL_BIN_DIR Unable to find the global bin directory

    错误提示 ERROR Unable to find the global bin directory Run pnpm setup to create it automatically or set the global bin dir s
  • (1)minikube玩转k8s集群之虚拟机支持嵌套虚拟化

    配套视频教程 1 Minikube介绍 简单说 创建k8s集群很麻烦 minikube可以让我们快速搭建一个k8s集群用于学习 Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具 Minikube 在笔记本电脑上的
  • openId和unionId的区别

    网友的解释 微信的用户隐私策略 每个接入微信的应用 公众号 APP 就像一个独立的商场 用户使用这些应用就像逛商场 商场用会员卡识别用户 类似的 我们根据商场名字为每个用户生成了一张专属会员卡 openid 每张会员卡只能在对应的商场才能够

随机推荐

  • Navicat for MySQL安装教程

    Navicat for MySQL是一款强大的 MySQL 数据库管理和开发工具 它为专业开发者提供了一套强大的足够尖端的工具 但对于新用户仍然易于学习 Navicat for MySQL 基于Windows平台 为 MySQL 量身订作
  • R语言logistic回归的细节解读

    本文首发于公众号 医学和生信笔记 完美观看体验请至公众号查看本文 医学和生信笔记 专注R语言在临床医学中的使用 R语言数据分析和可视化 文章目录 二项logistic回归 R语言中的 factor 函数可以把变量变为因子类型 默认是没有等级
  • Redis缓存击穿问题及解决思路

    一 什么是缓存击穿 缓存击穿问题也叫热点Key问题 就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了 无数的请求访问会在瞬间给数据库带来巨大的冲击 逻辑分析 假设线程1在查询缓存之后 本来应该去查询数据库 然后把这个数据重新加载
  • 【Java】对象的序列化与反序列化

    对象序列化的含义 对象序列化 Serialize 指将一个Java对象写入IO流中 对象的反序列化 Deserialize 则是指从IO流中恢复该Java对象 如果想让某个Java对象能够序列化 则必须让它的类实现java io Seria
  • 使用docker需要知道的基础知识

    一 docker概念 1 1 docker仓库 镜像 容器的作用和三者之间的关系是什么 答 Docker 仓库 用来保存镜像 可以理解为代码控制中的代码仓库 Docker 镜像 是用于创建 Docker 容器的模板 Docker 容器 是独
  • 前端工程化详解——理解与实践前端工程化

    前言 前端工程化一直是一个老生常谈的问题 不管是面试还是我们在公司做基建都会经常提到前端工程化 那么为什么经常会说到前端工程化 并没有听过后端工程化 Java工程化或者Python工程化呢 我们理解的前端工程化是不是一直都是Webpack的
  • 回望2001年的雪鸟城:引发全球软件革命的“敏捷宣言”是如何诞生的?

    将人们置于流程之上 专注于开发可以工作的软件 而不是软件的文档 和你的客户一起工作 而不是为一份合同而争吵 在此过程中 要对改变持开放态度 编者按 敏捷 Agile 这个对于开发真来说不在陌生的概念 已经提出了近17年了 其背后的哲学理念也
  • [CSDN竞赛]第五期参赛回顾

    CSDN竞赛 第五期参赛回顾 体验感想 第一次参加 本来有点小期待 那天还起晚了 结果登录不上去 发现大家都有问题 对我来说反而是好事 本来早上没有下午晚上更加精神 下面是提的建议 上次的登录问题 希望官方下次不要再出现 一定要准备充足 为
  • Unity Shader:用几何着色器实现复联3灭霸的终极大招灰飞烟灭

    图1 正常渲染 图2 几何着色器粒子化特效进行中 图3 几何着色器粒子化特效进行中 1 用几何着色器进行图元转换 在OpenGL渲染管线中 几何着色器Geometry Shader有一个独一无二的功能 既是图元转换 可简单理解为对基本图元点
  • 微信小程序默认下拉刷新和自定义下拉刷新的方式

    1 默认下拉刷新 在指定页面对应的 json配置文件中加入 enablePullDownRefresh true backgroundTextStyle dark 在对应的 js文件中 写入onPullDownRefresh 如果存在则替换
  • 手把手教你做一套“能源管理系统” A

    hello 大家好 我是CC 今天让CC来手把手教大家设计一套 能源管理系统 上个视频咱们有说到 能源管理系统 的范围很广 可以粗分为面向供给侧和面向消费侧 其中面向消费侧又可以分为 家庭能源管理系统HEMS 社区 园区能源管理系统CEMS
  • EQ频响曲线绘制和DRC特性曲线绘制

    目录 1 EQ 系数计算和频响曲线绘制 1 1 基本流程 1 2 EQ参数输入 1 3 滤波器系数计算 1 4 频率响应计算 1 5 曲线绘制 2 DRC特性曲线绘制 2 1 基本流程 2 2 参数输入 2 3 增益计算 2 4 静态特性曲
  • Java学习书籍推荐(步步为营)

    概述 本文只要介绍 Java学习的书籍 进阶之路 始于行动 编程重在理解加多实践 在当今快速发展的时代 要学会站在巨人的肩膀上 吸取经验 看书就是最快与最低成本的进阶之路 史上没有最好的书籍 只有适合自己的书籍 小伙伴们开始行动吧 Java
  • Qt5.14.2中使用QCamera实现切换相机、分辨率和图像捕获功能

    demo中主要涉及的Qt类有 相机类QCamera 取景器类QCameraViewfinder 图像捕获类QCameraImageCapture 因此添加模块multimedia multimediawidgets QT core gui
  • 在 uni-app 中使用 webview 打开本地文件,打开不成功

    在 uni app 中使用 webview 打开本地文件 打开不成功出现套娃现象的解决方案 小程序仅支持加载网络网页 不支持本地html 排查本地文件是否按照官方给出的路径建立的 uni app 项目根目录 gt hybrid gt htm
  • 全民奇迹修复云服务器跨服,越过服务器来打你 全民奇迹跨服战玩法全面解析...

    在全民奇迹当中 玩家与玩家之间的PK往往是解决问题最好的方法 一言不合就开打才是所有奇迹勇士的特点 本篇全民奇迹跨服战玩法全面解析 973手游网小编就来为大家说说跨服战 全民奇迹 16人的对决 幻影寺院 实力的对决 在幻影寺院中 玩家被分为
  • bluez——dbus接口api

    bluez dbus接口api bluez的api接口的说明文档在 doc 路径下 我这先重点分析下adapter agent和device这几个文件 这里面包含的是常用的api 1 agent c 这里现在注册的几个dbus方法 void
  • Winform SplitContainer控件可调整大小

    IsSpliterFixed属性设为False FixedPannel属性设为Pannel1 要固定的面板的名称 之后鼠标移动到控件中间的分隔线 就可以调整大小了
  • 多项式加法

    多项式的加法 一 创建链表 二 初始化链表 三 打印链表 四 打印结点 五 添加数据 六 相加 七 测试代码 八 测试结果 一 创建链表 typedef struct LinkNode int coefficient int exponen
  • MIT6.824分布式系统lecture1笔记:Intro,MapReduce

    lecture1先对分布式系统的设计进行了概述 然后介绍了MapReduce的案例 Intro 为什么要使用分布式系统 1 追求高性能 通过分布式系统进行并行计算 2 使系统具有容错性 一台计算机计算错误 可以转移到另一台计算机 3 一些问