这是6.824分布式系统课程,我会开始用简明的介绍我所认为的分布式系统。

分布式系统的核心是通过网络以完成一致任务的一组协作计算机。

因此我们将在本课程中重点介绍各种实例,例如大型网站的存储或MapReduce等大数据计算之类的东西,还有一些更奇特的事情,例如点对点文件共享,这些都只是我们研究分布式系统过程中的一些示例。

所有这些都很重要的原因是,许多重要的基础设施都是建立在分布式系统基础架构之上的。它们需要一台以上的计算机来完成工作,或者它本身就需要物理上被分散在多台计算机上。

在我讨论分布式系统之前,我需要提醒你的是,如果你要重新设计系统,则需要解决一些问题。如果你可以用一台计算机解决以上问题,而无需构建分布式系统,你应该采取单机的方式,这种方案可以完成很多工作,且总是更容易的。所以在构建分布式系统之前你应该尝试其他方案,因为分布式系统并不简单。

分布式系统发展的驱动力

人们之所以需要使用多台联合的计算机,是因为以下原因:

  • 他们需要获得更高的性能(high performance)。因为大量的计算机意味着大量的并行运算(parallelism),大量的CPU、内存、磁盘臂会并行运行着。
  • 另一个人们构建分布式系统的原因是,它可以提供容错(fault tolerance),如果有两台计算机执行着同一个任务,其中一台发生故障,您可以切换到另一台。
  • 第三个原因是,一些问题是天然在空间上分布的(physical)。例如你所知道的银行间转账,银行A在纽约有一台计算机,银行B在伦敦有一台计算机,你知道你必须为他们提供一些方式相互交流并合作以实现目标。所以有一些天然的原因导致系统是物理分布的。
  • 人们建造分布式系统的最终目的是为了达到某种安全目标(security)。比如有些代码不被信任,但是你又需要和它进行交互,这些代码不会立即表现出恶意或表现出bug。你不会想要信任这些代码,你可能想拆分计算,这样那些不信任代码在那台计算机运行,我的代码在这台计算机上运行,他们只能通过某种狭窄定义的网络协议互相交谈。假设我们可能会担心你所知道的安全性,我们可以把系统拆分成多台计算机,以此相互隔离(isolated)

本课程的大部分将与 性能(performance)容错(fault tolerance) 有关。另外两点我们会通过对某些案例的研究来学习。

分布式系统所面临的挑战

你知道所有这些分布式系统有很多困难(挑战):

  • 因为他们有很多部分,且这些部分是同时执行的,在多台计算机上,你会遇到并发编程(concurrency)、复杂交互、以及时间依赖所带来的所有问题,这是让分布式系统变得困难的一点原因。
  • 另一点让分布式系统变得困难的原因是因为你拥有多个组件,再加上计算机网络,你可能会遇到意想不到的故障。如果你只有一台计算机,通常情况是计算机可以正常工作,或者完全宕机,或者遭受电源故障或某些故障,即要么可以完全正常工作要么完全不工作。由许多计算机组成的分布式系统,可能是一部分组件在工作,一部分组件停止工作,或者这些计算机都在正常运行,但是网络的某些部分中断了或是不稳定。因此, 部分故障(partial failures) 是分布式系统困难的另一个原因。
  • 造成分布式系统困难的最后一个原因,人们构建分布式系统的最初原因通常是为了获得更高的 性能(performance) ,比如说一千台计算机或一千个磁盘臂的性能,但实际上一千台计算机能获得多少性能是一个棘手的问题,通常有很多障碍挡在你的路上,所以通常需要小心地设计才能使系统真正达到你期望的性能。

因此,本课程就是为了解决这些问题。通常,问题和解决方案在技术上都很有趣,对于其中一些困难的问题,有很好的解决方案,而其他一些问题在现有的分布式系统则没有很好的解决方案。

小结

现在分布式系统被用在现实世界的许多系统中,例如大型网站通常由大量计算机构成的分布式系统来运行。

我刚开始教这门课的时候,分布式系统是一种学术上的好奇心。人们有时候小规模地使用它,且预感在未来某一天可能会很重要。但现在特别受巨型网站的兴起所驱动,出现了大量的数据和大型数据中心。

在过去的二十年中,分布式系统已经变成计算机基础架构非常重要的组成部分,这意味着分布式系统已经引起了人们很多关注,且已经解决了很多问题,但是有很多未解决的问题,所以如果你是一名研究生,或你对研究感兴趣,还有很多需要使用分布式系统解决的问题,以及进行相关研究。

最后,如果你喜欢动手,这是一门很好的课程,因为它有一系列实验,你将构建一些贴近现实,关注性能和容错的分布式系统。所以你会有很多机会练习构建分布式系统,并使它们正常运行。

更多关于大数据、分布式、存储、区块链、Linux相关文章请关注微信公众号:asympTech渐进线实验室

Github、知乎、博客园、CSDN、简书全网唯一id:JasonCeng

[译]MIT6.824_1.1分布式系统介绍——驱动力与挑战的更多相关文章

  1. 分布式系统介绍-PNUTS

    PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作.它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上.一个表单元控制器根 ...

  2. 基于ZooKeeper的分布式Session实现(转)

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  3. 基于ZooKeeper的分布式Session实现

    1.   认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...

  4. Java Web学习总结(20)——基于ZooKeeper的分布式session实现

    1.   认识ZooKeeper ZooKeeper-- "动物园管理员".动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始 ...

  5. 初探分布式环境的指挥官ZooKeeper

    目录 1. 从单机到集群,分布式环境中的挑战 1.1 集中式的特点 1.2 集中式的痛点 1.3 从单体到SOA的转变 1.4 分布式服务总体框架 1.5 分布式应用概述 2. ZK基本概念及核心原理 ...

  6. [源码解析] PyTorch 分布式 Autograd (1) ---- 设计

    [源码解析] PyTorch 分布式 Autograd (1) ---- 设计 目录 [源码解析] PyTorch 分布式 Autograd (1) ---- 设计 0x00 摘要 0x01 分布式R ...

  7. 大型网站系统与Java中间件实践

    大型网站系统与Java中间件实践(贯通分布式高并发高数据高访问量网站架构与实现之权威著作,九大一线互联网公司CTO联合推荐) 曾宪杰 著   ISBN 978-7-121-22761-5 2014年4 ...

  8. 《大型网站系统与JAVA中间件实践学习笔记》-1

    第一章:分布式系统介绍 定义:分布式系统是一组分布在网络上通过消息传递进行协作的计算机组成系统. 分布式系统的意义 升级单机处理能力的性价比越来越低 单机处理器能力存在瓶颈 处于稳定性和可用性考虑 阿 ...

  9. 《大型网站系统与JAVA中间件实践》【PDF】下载

    <大型网站系统与JAVA中间件实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062557 内容简介 到底是本什么书,拥有这样 ...

  10. 大型网站系统与 Java 中间件实践

    http://wanglizhi.github.io/2016/07/27/JavaWeb-And-MiddleWare/ 第一章 分布式系统介绍 分布式系统的定义:组件分布在网络计算机上,组件间仅仅 ...

随机推荐

  1. [tldr] 使用ip.sb检查自己所在局域网的公网IP

    使用ip a等一些命令行工具可以帮助我们检查自己的内网IP,但是,如何获取自己的在公网下的IP(即当前所在的局域网被分配的公网IP) 如果使用爬虫,这个IP也是很重要的.BAN IP就是这个IP ht ...

  2. JavaScript的标准库

    Object 对象 概述 JavaScript 的所有其他对象都继承自Object对象,即那些对象都是Object的实例. Object对象的原生方法分成两类:Object本身的方法与Object的实 ...

  3. Netty基础—7.Netty实现消息推送服务

    大纲 1.Netty实现HTTP服务器 2.Netty实现WebSocket 3.Netty实现的消息推送系统 (1)基于WebSocket的消息推送系统说明 (2)消息推送系统的PushServer ...

  4. 请求方法:GET 与 POST

    根据 RFC 规范,GET 的语义是从服务器获取指定的资源,GET 请求的参数位置一般是写在 URL 中,URL 规定只能支持 ASCII,所以 GET 请求的参数只允许 ASCII 字符 ,而且浏览 ...

  5. 基于SLAM系统建图仿真,完成定位仿真

    博客地址:https://www.cnblogs.com/zylyehuo/ 基于SLAM系统完成建图仿真,详见之前的博客 基于Gazebo搭建移动机器人,并结合SLAM系统完成建图仿真 - zyly ...

  6. VMware网络虚拟化介绍(之一)

    2014年5月,在我加入VMware三个月之后,我涂鸦了一篇<扒一扒SDN的那些事儿>,当时放言如果阅读量过百就写续篇.后来果然阅读量没过百,也就80多的样子,其中好几份还是我自恋地进去查 ...

  7. linux下nginx常用命令

    1.查找nginx路径:whereis nginx2.启动 service nginx start3.查看Nginx的版本号:nginx -V4.停止 nginx -s stop5.退出 nginx ...

  8. ORB算法介绍 Introduction to ORB (Oriented FAST and Rotated BRIEF)

    Introduction to ORB (Oriented FAST and Rotated BRIEF) 1. Introduction ORB(Oriented FAST and Rotated ...

  9. leetcode每日一题:转换二维数组

    题目 2610. 转换二维数组 给你一个整数数组 nums .请你创建一个满足以下条件的二维数组: 二维数组应该 只 包含数组 nums 中的元素. 二维数组中的每一行都包含 不同 的整数. 二维数组 ...

  10. study Rust-2【环境与配置,随机数】

    Rust教程资料很多.但是,这是教程学习资料感觉挺好!推荐给你https://doc.rust-lang.org/stable/book/ (简体中文译本)在线阅读 学习rust开始有点感觉了.美好的 ...