Lecture 1: Introduction

1. 简介

什么是分布式系统?

  • 多个相互协作的计算机
  • DNS, P2P文件共享,大数据库, MapReduce, &c
  • 许多关键基础设施都是分布式的

为什么使用分布式?

  • 为了连接物理上分隔的实体
  • 通过隔离来实现安全
  • 通过复制来容忍错误
  • 通过并行CPU/内存/磁盘/网络来提高吞吐量

分布式存在的问题?

  • 复杂性:许多并发的实体
  • 必须处理局部故障
  • 充分发掘性能潜能的困难性(tricky to realize performance potential)

为什么你应该选修这门课?

  • 有趣—— 有难度的问题,而且没有显而易见的答案
  • 被真实的系统所使用——由大型网站的发展所驱动
  • 活跃的研究区域——有很多未解决的问题和待改进的地方
  • 动手——你可以在实验里创建严谨的(serious)系统

2. 课程结构

2.1 课程主页:

6.824: Distributed Systems

2.2 课程工作人员:

  • Robert Morris, lecturer
  • Frans Kaashoek, lecturer
  • Steven Allen, TA
  • Stephanie Wang, TA
  • Jon Gjengset, TA
  • Daniel Ziegler, TA

2.3 课程构成

  1. lectures
  2. readings
  3. two exams
  4. labs
  5. final project

相关说明:

  1. Lectures
    包含 重要概念, 论文 和实验。

  2. Readings:
    将研究论文作为案例学习。请在课前阅读完论文,不然你在上课时容易开飞机。每一篇论文都有一些简短的问题,你需要在晚上10点之前提交答案。

  3. Mid-term exam in class, and final exam

  4. Lab goals:

    • 对一些重要的技术有更深的理解
    • 分布式编程经验
    • 第一个实验持续一周(从周五开始)
    • Lab 1: MapReduce
    • Lab 2: replication for fault-tolerance
    • Lab 3: fault-tolerant key/value store
    • Lab 4: sharded key/value store
  5. Final project
    以2~3人形式的小组完成,你可以自己设计一个项目并和我们展示或者选一个我们指定的项目。

注:

  1. Lab的分数取决于你通过了多少个测试用例
  2. Lab 代码审核:
    通过查看其它人的lab解决方案,并进行反馈,也许你就可以得到问题的另外一种解决方案。
  3. 调试labs是一件费事的事
    • start early
    • come to TA office hours
    • ask questions on Piazza

3. 主题

这个课程主要讲述由应用程序使用的基础设施。使用抽象来隐藏应用程序中分布式的复杂性。
主要有三种抽象:

  • 存储(storage)
  • 通讯(communication)
  • 计算(computation)

以下的主题重复的使用着这些抽象。

3.1 Topic: implementation

RPC, threads, concurrency control.

3.2 Topic: performance

理想状况:可扩展的吞吐量
- Nx servers -> Nx total throughput via parallel CPU, disk, net.
- 所以处理更多的负载只需要更多的电脑

可扩展性则变得越来越难:

- 负载均衡, stragglers
- “小段的”非并行化部分
- 隐藏的共享资源, e.g. 网络

3.3 Topic: fault tolerance

1000s of server, complex net -> always something broken
我们想隐藏应用程序中的这些错误,从以下两方面展开:
- 可用性(Availability) – 尽管失败,但是我可以继续使用我的文件。
- 持久性(Durability) – 当错误被修复时,我的数据会恢复正常。

专用名词: 复制服务器
- 如果一个服务器崩溃了,那么客户端可以利用其它服务器进行处理

3.4 Topic: consistency

通用基础设施需要良好定义的行为。
例如: “Get(k)返回最新的Put(k, v)中的值”

想达到定义良好的行为是非常困难的!

  • 客户端提交并发操作
  • 服务器在不恰当的时候崩溃
  • 网络可能回事活跃的服务器变得像死了;“split brain”风险
    一致性和性能是敌对的关系:

    • 一致性需要通信(e.g 得到最新的Put()操作)
    • 有”严格”语义的系统一般来说都比较慢(Systems with pleasing (“strict”) semantics are often slow
    • 快速系统通常会让程序处理”轻松的”复杂度行为(Fast systems often make applications cope with complex (“relaxed”) behavior)

人们在这个范围内进行了许多的设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值