From 7444b81c21a552539e6fc67a0aa7bf76de3c9468 Mon Sep 17 00:00:00 2001 From: xiangxu Date: Thu, 11 Apr 2024 10:48:05 +0800 Subject: [PATCH] update --- _posts/2021-03-01-mit6824-1.markdown | 77 ---------------------------- _posts/2021-04-01-mit6824-2.markdown | 43 ---------------- 2 files changed, 120 deletions(-) delete mode 100644 _posts/2021-03-01-mit6824-1.markdown delete mode 100644 _posts/2021-04-01-mit6824-2.markdown diff --git a/_posts/2021-03-01-mit6824-1.markdown b/_posts/2021-03-01-mit6824-1.markdown deleted file mode 100644 index 6f849d9..0000000 --- a/_posts/2021-03-01-mit6824-1.markdown +++ /dev/null @@ -1,77 +0,0 @@ ---- -layout: post -title: "6.824 分布式系统 01 - Mapreduce" -date: 2021-03-01 11:45:19 +0800 -categories: mit6824 -comments: true ---- -# 6.824 分布式系统 01 - Mapreduce -> 如果可以用单机解决, 你应该避免使用 分布式系统,因为分布式系统不简单 - -# 为什么要使用分布式系统 -1. parallelism 并行 -2. fault tolerance 容错 -3. physical 物理位置, 不同的基础设施 -4. Security / isolation 安全和隔离故障 - -# 分布式系统的挑战 -1. Concurrency 并发 -2. partial failure 局部故障 -3. performance 高性能 - - -# 这个课程是关于 infrastructure - Abstractions 抽象 -事实上整个计算机科学都是关于`Abstractions`的 -- 存储 -- 通讯模块 -- 计算系统 例如 mapreduce - -对于存储和计算, 我们目标是为了能过从分布式存储和计算基础结构中发现一些可抽象的东西并设计为接口以简化使用. - -- RPC , Threads, concurrency control (locks) -- performance scalability (性能的可扩展性)-- 2X computer--> 2X thoughtput -- fault tolerance 大型分布式系统解决大型问题会导致极地的容错率或者非常罕见的故障问题, 故障会变得极为常见. - 常见的容错思想: - - Availability 可用性, 某些系统是针对某些特定故障设计的, 并非所有故障, 当遇到这种故障时, 系统会继续运行. - - Recoverability 可恢复性, 如果系统故障, 停止服务, 等待某人来修复故障, 故障修复完毕之前, 不做任何事. - 在这部分,有两个最重要的工具: - - 非易失性存储(NV Storage) , 假设 电源断电, 一些东西崩溃, 我们可以将系统状态的检查点活日志保存在硬盘,SSD,闪存中. - - Replication 复制副本 -- consistency (一致性) 因为分布式系统中, 性能和容错考虑不止有一份数据副本, 可能每个 K/V 有不同的版本. - - `Put(k,v)` - - `Get(k) -> v` - -强一致性系统: 保证最新的一致性,但成本很高, 因为你必须跟他人进行大量的交流才能实现强一致性概念. - -# Mapreduce -这是一个典型的 mapreduce job -![mapreduce](/images/posts/mapreduce01.png) -- 整个计算流程被称为 `Job` -- 任何一次 Map/Reduce的调用被称为 `Task` - -一个完整的 `job` 由一系列 `map task` 和 `reduce task` 组成. - -{% highlight ruby %} -Map(k,v) - split V into words - for each word w - emit(w, "1") -{% endhighlight %} - -Map函数, k 是一个文件名, v 代表传入这个 map 函数的输入文件的内容. 通过调用 MapReduce framework 的 map 函数可以做出发送(emit)动作, emit 在 map 函数中 worker 会讲结果写入本地磁盘或存储 -{% highlight ruby %} -Reduce(k, v) - emit(len(v)) -{% endhighlight %} -K is word, Reduce 函数会更加这个 key 所关联的所有 map 对应的值得到一个 vector 数组. master 发送执行 Reduce 函数至 worker 节点以后, worker 节点会和所有 map执行节点通讯, 请求 map 结果文件然后执行 emit 操作, emit 在 Reduce 函数中 worker 会将结果写入集群或共享文件系统(GFS),作为最终结果. - -GFS 会自动将你存储在它之上的任何大文件分割成 64Mb 大小的数据块, 并将它们分散存储在许多服务器上, - -2004 年 当 mapreduce 提出的时候,系统最大的瓶颈来源于网络吞吐量, 所以他们通过一系列方法来避免网络传输, 本地优化: -- 其中一种就是讲 GFS 服务器和 mapreduce worker 配置在同一个计算机集群中, 接着 master 会讲 map 任务拆分,然后分配给不同的 worker, master 会从 GFS 找出实际保存该输入文件所在的服务器. -- map会将结果输出到运行map的计算机本地磁盘上 - -![mapreduce](/images/posts/shuffle.png) -- 当reduce 执行的时候, reduce 的 worker 会要求 map 的 worker 将行存储转换成列存储, 这个过程在论文中称作 **shuffle**. 这个过程将从整个网络中的 map worker 中获取数据, 这也是 mapreduce 中非常消耗性能的一部分. - -但现在 2020 年, 许多数据中心的网络瓶颈已经解决了, 不会再有root路由器的性能瓶颈, google可能也不用MapReduce很久了, 所以map函数其实可以自由的从任何网络获取数据不知局限于本地磁盘了. diff --git a/_posts/2021-04-01-mit6824-2.markdown b/_posts/2021-04-01-mit6824-2.markdown deleted file mode 100644 index 74fc747..0000000 --- a/_posts/2021-04-01-mit6824-2.markdown +++ /dev/null @@ -1,43 +0,0 @@ ---- -layout: post -title: "6.824 分布式系统 02 - GFS" -date: 2021-04-01 11:45:19 +0800 -categories: mit6824 -comments: true ---- -# 6.824 分布式系统 02 - GFS - -# 为什么要使用分布式系统 -1. parallelism 并行 -2. fault tolerance 容错 -3. physical 物理位置, 不同的基础设施 -4. Security / isolation 安全和隔离故障 - -# 分布式系统的挑战 -1. Concurrency 并发 -2. partial failure 局部故障 -3. performance 高性能 - - -# 这个课程是关于 infrastructure - Abstractions 抽象 -事实上整个计算机科学都是关于`Abstractions`的 -- 存储 -- 通讯模块 -- 计算系统 例如 mapreduce - -对于存储和计算, 我们目标是为了能过从分布式存储和计算基础结构中发现一些可抽象的东西并设计为接口以简化使用. - -- RPC , Threads, concurrency control (locks) -- performance scalability (性能的可扩展性)-- 2X computer--> 2X thoughtput -- fault tolerance 大型分布式系统解决大型问题会导致极地的容错率或者非常罕见的故障问题, 故障会变得极为常见. - 常见的容错思想: - - Availability 可用性, 某些系统是针对某些特定故障设计的, 并非所有故障, 当遇到这种故障时, 系统会继续运行. - - Recoverability 可恢复性, 如果系统故障, 停止服务, 等待某人来修复故障, 故障修复完毕之前, 不做任何事. - 在这部分,有两个最重要的工具: - - 非易失性存储(NV Storage) , 假设 电源断电, 一些东西崩溃, 我们可以将系统状态的检查点活日志保存在硬盘,SSD,闪存中. - - Replication 复制副本 -- consistency (一致性) 因为分布式系统中, 性能和容错考虑不止有一份数据副本, 可能每个 K/V 有不同的版本. - - `Put(k,v)` - - `Get(k) -> v` - -强一致性系统: 保证最新的一致性,但成本很高, 因为你必须跟他人进行大量的交流才能实现强一致性概念.