第二讲云计算
大数据对于系统架构的需求
• 显式的需求
– 海量计算和存储
– 快速计算
• 隐式的需求
– 数据的快速传输
– 灵活性
– 低成本
云计算的核心设计理念
• 并行化
• 规模经济
• 虚拟化(抽象)
并行化的理念存在于计算机方方面面
• 并行请求分配给多个计算机
• 并行线程
分配给多个处理器核心
• 并行指令
同一时刻有多于1条指令
• 并行数据
同一时刻有多于1个
数据项
• 硬件描述
同一时刻使用所有门电路
极端规模的并行化:
仓库规模的计算机 (WSC)
• 主要部件
– 供电、制冷、建筑、网络、安全
– 存储、计算
• 优势
– 规模经济
– 提高使用率
• 挑战
– 能耗 PUE
– 运维
WSC 的特点
• 使用相对同质的硬件和系统软件平台
• 共享相同的系统管理
• 大多数应用程序、中间件、系统软件都是自主开发,而传统数
据中心则由第三方软件主导
• WSC运行相对小数目的超大型程序(或服务)
• 通用的资源管理架构增强了部署的灵活性
多租户、多应用如何管理?
“计算机科学的所有问题,都可以通过增加一个层次的间接(indirection)来解决,当然除了间接层次过多的问题。”-- David Wheeler
云计算的定义
• 云计算 Cloud computing
既指作为服务通过互联网提供的应用程序(SaaS模式),又指提供这些服务的,位于数据中心的硬件和系统软件(公用计算)。
• 云:数据中心硬件与软件
• 公有云: 用即付即用的模式,开放给大众使用的云
• 私有云: 一个企业或组织内部的数据中心
• 公用(utility)计算: 给人以无限资源的错觉
– 细粒度的记账(比如每小时)
* 加州大学伯克利分校,RAD Lab实验室,2009年2月
云计算商业模式的三大特点
• 按需服务
• 资源池
• 可测量的服务
云计算发展起来的技术推动
• 数据中心技术和WSC
• 宽带网络普及化
– 数据可以自由进出数据中心
• 大规模分布式系统的成熟
– 基础设施软件: 例如Google File System
– 故障转移, 防火墙...
• 虚拟化技术
– X86作为通用的指令集架构, 快速的虚拟化
• 开源软件带来的一系列标准化
– 标准软件栈, 大部分开源(LAMP)
云计算发展的市场条件
• 大规模互联网应用(社交网络、多媒体)
– 规模经济
– 需求增长促进数据中心建设增长
– 无法预测的应用增长速度Zynga, Netflix
• 大数据应用
– 日志分析
– 机器学习应用
云计算的分类
• 指令集虚拟机(Amazon EC2, 3Tera)
• 运行时系统虚拟机 (Microsoft Azure)
• 框架型虚拟机(Google AppEngine, Force.com)
• 折衷: 灵活性/可移植性 vs. “内置”功能
另一种(更普遍的)分类方法
• 软件即服务(SaaS): 消费者使用提供商运行在云设施上的应用程序,基本无法控制程序或基础架构。
• 平台即服务(PaaS): 消费者将自己编写的程序,或者利用提供商的库、服务、工具编写的程序部署在云基础设施上。消费者可以控制应用程序,但不能控制基础设施。
• 基础设施即服务(IaaS): 提供处理、存储、网络和其他基础计算资源,消费者可以利用这些资源部署运行任意程序,包括操作系统或者应用程序。
为什么要虚拟化?
Partitioning + Abstraction
分区 Partitioning
– 分享: 打破一个大资源
– 服务器
抽象 Abstraction
– 用一个指令集仿真另一个指令集
资源池
– 聚合: 将多个资源结合起来
– 合一:例如存储
– 动态: 快速分配
虚拟机
隔离: 保护消费者隔离其他租客
– 例如虚拟专用网(VPN)
便于管理– 测试
– 机动性
计算虚拟化
主操作系统:运行在真实机器之上
• 客户操作系统:运行在主操作系统之上
– 例如,Windows XP可以运行在Win 7上
• Hypervisor:支持运行在多个虚拟机上上的软件
– 类型1:运行在真实机器之上,例如,Xen、VMWARE、ESXi
– 类型2:运行在主操作系统之上,例如,MS Virtual PC
– 类型0:1和2兼有,例如,Linux KVM
服务器虚拟化考虑的三个问题
• 指令集的翻译 二进制翻译
– 如何快速执行
– 如何执行需要更高权限的指令
• I/O设备的仿真
– 如何让虚拟机操作系统访问不支持的硬件
– 如何保护I/O性能
• 保护处理器的数据结构 影子处理器
基于容器的虚拟化技术:优势和用途
• 虚拟化了操作系统和应用的接口
• 轻量级,不运行的时候不占用资源
• 启动关闭快(类似于进程)
• 可以运行在VM内部
• 用途– 将应用的所有依赖关系打包在一起
– 容器可以部署在任何地方
支持网络虚拟化的新技术:软件定义网络
传统网络– 控制面与数据面集成在同一个设备中
– 不同网络设备之间通过协议决定如何转发
控制面集中管理,放在服务器中
基于软件定义网络实现的虚拟二层网络
• 大型2层网络的挑战
– 地址解析(ARP):广播
– 路由:广播
– 转发:交换机要记住大量状态
– 根源:MAC地址不连续
• Portland实现
– 与位置相关的虚拟地址
– 通过SDN的地址解析
存储虚拟化的意义
• 独立于数据位置
– 扩展性强,容量大
– 易于管理(磁盘可集中存储)
– 提升磁盘使用率
• 独立于物理存储技术
– 易于升级
– 可用性的优化(多路径访问、冗余)
– 易于维护(在线的后台备份、恢复)
存储虚拟化的三类接口
• 块接口
– 本地块存储
• 本地磁盘(SATA,SAS)
• 本地磁盘阵列(RAID)
– 远程块存储接口
• 光纤通道
• iSCSI
• 文件接口
– 文件系统
– 网络文件系统(NFS, CIFS, HDFS)
– VFS
• 对象存储接口
– 亚马逊 S3
– OpenStack Swift
存储区域网络SAN vs 网络附接存储NAS
• 存储区域网络
– Storage Area Network(SAN)
– 存储服务器通过专用存储网络连接,例如光纤通道(FC)
• 网络附接存储
– Network attached storage (NAS)
– 存储服务器通过通用的网络来访问,例如以太网
OpenStack的目标
• 一个云操作系统,能把数据中心变为资源池
• 提供一个管理层,便于高效地控制、自动化、分配资源
• 通过自助服务式的门户来方便操作员、系统管理员以及终端用户 (“I want AWS-type service!”)
• 能让开发者通过标准API来搭建云上可用的应用程序