这是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. Pwnable_orw

    题源 题解 保护 只开启了栈保护 分析 进入ida分析 main函数如下 seccomp (Secure Computing Mode)是一种 Linux 内核安全机制,它可以 限制进程可执行的系统调 ...

  2. 关于Linux的core dump

      core dump简介 core dump就是在进程crash时把包括内存在内的现场保留下来,以备故障分析. 但有时候,进程crash了却没有输出core,因为有一些因素会影响输出还是不输出cor ...

  3. 【Java】NIO

    1. Java NIO 简介 Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API. NIO与原来的IO有同样的作用和目的,但是 ...

  4. zk基础—4.zk实现分布式功能

    大纲 1.zk实现数据发布订阅 2.zk实现负载均衡 3.zk实现分布式命名服务 4.zk实现分布式协调(Master-Worker协同) 5.zk实现分布式通信 6.zk实现Master选举 7.z ...

  5. go: no such tool "compile"(记录)

    这是一次离谱问题和胡搞一通莫名解决的记录 背景:win11系统下,原有的go1.18更新到go1.19后出现了莫名的go: no sucn tool "compile"的情况. 当 ...

  6. HL7消息编辑器的使用手册

    REDISANT 提供互联网与物联网开发测试套件 # 互联网与中间件: Redis Assistant ZooKeeper Assistant Kafka Assistant RocketMQ Ass ...

  7. eolinker环境变量配置:用例执行前给把某参数设置为全局参数的方法

    特别注意:需要使用全局变量或者预处理前务必阅读本链接https://www.cnblogs.com/becks/p/13713278.html 1.场景分析 注册会员流程共计有添加数据,校验数据,提交 ...

  8. MySQL 事务的二阶段提交是什么?

    MySQL 事务的二阶段提交是什么? 二阶段提交(Two-Phase Commit, 2PC)是分布式事务中的一种协调协议,用于确保多个资源(如数据库或数据节点)在事务提交时保持一致性.MySQL 在 ...

  9. Java 中的字符串常量池和运行时常量池

    Java 中的字符串常量池和运行时常量池 1. 字符串常量池(String Constant Pool) 定义 字符串常量池是 JVM 内存中专门用于存储字符串字面量和通过 intern() 方法加入 ...

  10. Cocos Creator3.x小白常见问题笔记&官方视频教程合集收藏分享

    小白常见问题 为什么会有这篇笔记? 这篇笔记旨在答疑解惑官方文档或视频教程里忽略掉的细节.对于小白来说这些细节没人提醒或浪费很多时间,但在熟悉的人眼里这都是些什么问题,回都懒得回. (别问我怎么知道的 ...