云计算的概念
云计算的定义
关键字:数据存储和网络计算服务,按需交付,分布式,商业计算模型,计算服务交付与底层技术分离
云计算的参与者
- 有基础设施,有意向提供服务或出租
- 需要增加基础设施,但不知道需要多长时间
- 需要增加基础设施,但资金投入能力有限
- 想要专心于设计和开发,不想操心维护和扩展
- 想要在任何地方都能访问个人的资源(e.g. 编辑个人文档)
(如上图,上层为云栈,下层为云体)
计算模式的演进
主机系统与集中计算 → 效用计算 → 客户机/服务器模式 → 集群计算 → 服务计算 → 个人计 算机与桌面计算 → 分布式计算 → 网格计算 → 软件即服务 → 云计算
人类对计算的追求:自动化、高性能、易使用
传统分布式系统
计算机集群:将多个可信、静态的独立节点连接起来协作完成计算(计算抽象)
P2P网络:每个节点既是客户端也是服务器,提供部分系统资源(存储抽象)
计算网格:将多个异构计算机动态、紧耦合地整合在一起完成计算任务(接近“云”)
云计算的基本想法
对网格的优化(分布式计算的解决方案):
- 大量计算节点,同构可控
- 专用内部网络
- 通过互联网对外服务(公有云)
- 全面虚拟化:计算、存储、网络、桌面
- 集中管理:安全、高效
云计算持续优化的动力:节能降耗、降低维护成本、提升资产安全、提升信息系统的容灾备份能力
云计算的特征与分类
概念模型
云计算的特点
- 超大规模——需求
- 虚拟化——技术
- 按需服务——商业模式
- 通用;高可伸缩;极其廉价——得益于技术和模式
- 高可靠——要求
云部署模型
公有云;社区云;私有云;混合云
云服务模型
IaaS:
通过虚拟机方式对外提供计算和存储能力
机器享有公网IP,多个虚拟机之间通过网络进行通信(也会有内部子网)
类似租用独立的计算机
用户自行解决多台机器之间的协同问题
优势:
- 允许动态申请和释放资源
- 按使用量计费
- 更高的资源使用效率
PaaS:
提供用户应用程序的开发和运行环境,包括应用编程接口和运行平台等,支持应用从创建到运行整个生命周期需要的各种软硬件资源和工具:
- 经过封装的IT能力或逻辑资源:数据库、文件系统和应用运行环境
- 主要面向软件开发者(包括应用服务上)
PaaS自身负责资源的动态扩展和容错管理
用户无需考虑节点间的配合问题
用户自主权降低,需按照给定的编程环境和编程模型构建应用
类似MPI(Message Passing Interface)编程(只适用于解决模型特定的计算问题)
SaaS:
通过标准的Web浏览器获软件客户端访问云上的应用
IaaS vs. PaaS vs. SaaS:
云计算的三元认知论
一种商业模式
从提供的服务类型来看是一种全新的商业模式(没有包含新技术)
区别于传统的“互联网服务”模式:在软件服务基础上提供平台和基础设施服务
以云平台体现具体实现机制,包括计算范式和实现方式
一种计算范式
理论层面的实现方式,偏向针对商业模式的体系结构设计
云体逻辑结构:具体落地的云平台逻辑结构——物理结构就是云数据中心
- 计算 + 存储 + 通信
云栈逻辑结构:面向服务的云平台逻辑结构——物理结构就是管理系统的结构
- 基础设施即服务,平台即服务,软件即服务
一种实现方式
- 数据中心 + 云平台管理系统
- 软件定义数据中心:软件定义计算,软件定义存储,软件定义网络,软件定义安全
云计算架构
逻辑架构
云体
- 云计算的物质基础,云计算使用的资源集合,构成云计算的软硬件环境,如网络、服务器、存储器、交换机等,广义的云体包括数据中心机器辅助设施如电力、空调、机架、冷却等系统。
云栈
- 又称云平台,在云上建造的运行环境,能够支持应用程序的发布、运行、监控、调度、伸缩,并为应用程序提供辅助服务机制,如访问控制、权限管理等。
云计算
- 利用云体和云平台所进行的计算或处理——云计算可以在云体上直接进行,也可以在云平台上进行。无论在哪个层面开展,只要符合“按量计费、资源可伸缩”就是云计算。
- 云存储、云服务、在云上运行自己的软件或算法,都是云计算。
- 云计算是人们利用云体和云平台所从事的活动。
逻辑云栈
云栈——提供的服务种类多,规模大,需要层次架构以便于管理(从纵向的方式来构建云计算的整体架构)
云栈的三层模式:
技术体系结构
IaaS 实现方式
物理云栈 OpenStack
OpenStack 是一个管理云计算中计算、存储和网络,甚至是应用的通用平台,其提供 Web界面、命令行工具和应用程序接口(API)等使用接口
本质上OpenStack通过抽象和一个通用的API接口控制不同厂商提供的硬件和软件资源, 是对计算系统的更高层次的抽象
逻辑云体
云栈是从纵向角度看云计算的整体架构;云体是从横向角度看其架构模式
物理云体云数据中心
传统数据中心暴露的问题:
- 过多的机器
- 机器利用率过低
- 应用迁移太困难
- 存储需求增长太快
软件定义的数据中心,重新重视虚拟化,以提高资源利用率:
- 不仅应用到计算节点
- 复制到存储、网络、安全等方方面面
- 软件定义计算:计算节点的虚拟化:虚拟机成为计算调度和管理的单位,不中断服务的前提下动态迁移。
- 软件定义存储:分离管理接口与数据读写;统一的管理接口与上层管理软件交互;数据读写可以兼容各种不同的链接方式。
- 软件定义网络:数据平面(数据转发)和控制平面(转发表的设置等)分离;集中控制,分布式转发。
云数据中心
云数据中心的特征
绿色节能;高可用性;自动化管理
云数据中心网络部署
传统树结构:建造方便简单,但不利于拓展升级,不够健壮
云数据中心需要:低成本、高可扩展性、低配置开销、健壮性、节能
改进树结构——FatTree
K叉树,K个Pod(集装器),每个Pod有K个交换机,其中K/2个接入交换机,K/2个汇聚交换机
Pod中每个交换机有K个接口,K/2个接主机,K/2个接汇聚;K/2个接接入,K/2个接核心
有(K/2)^2个核心交换机,每个交换机K个端口接K个汇聚交换机
一个Pod内的所有交换机相互连接:完全二分图
一个Pod内的每个汇聚交换机与一部分核心交换机连接,但是一个Pod和每一个核心交换机都有连接
两级路由表,使Pod间的流量均匀分布于核心交换机
任意两个不同Pod主机间存在K条路径
与传统层次结构相比,FatTree有如下特点:
- 消除了树形结构上层链路对吞吐量的限制
- 为内部节点间通信提供多条并行链路
- 与现有数据中心网络使用的以太网结构和IP配置的服务器兼容
- 布线复杂;扩展时需要重构;受到端口数限制
FatTree的扩展性受限于核心交换机的端口数量
改进树结构——VL2
VL2特点:
- 扁平寻址,允许服务实例被放置到网络覆盖的任何地方
- 负载均衡将流量统一分配到网络路径
- 终端系统的地址解析拓展到巨大的服务器池
核心思想:
- 使用FatTree同样的拓扑结构建立扁平的第二层网络
具体机制
- IP地址仅仅作为名字使用,没有拓扑含义;将服务器的名字与其位置分开
- 使用可扩展、可靠的目录系统来维持名字和位置间的映射
- 当服务器发送分组时,服务器上的VL2代理开启目录系统以得到实际的目的位置,然后将分组发送到目的地
递归层次
- DCell
- FiConn
- BCube
光交换网络
无线数据中心网络
静态链路和有线接口在大量高突发流量和高负载服务器情况下降低数据中心网络性能,无线网络的广播机制能够克服这个问题
无需重新布线即可灵活调整拓扑结构,但提供足够带宽的前提下传输距离有限
软件定义网络
OpenFlow
绿色节能技术
配电系统节能技术;空调系统节能技术;集装箱数据中心节能技术;节能策略和算法研究;新能源应用
自动化管理
容灾备份
标准等级
关键技术
虚拟化技术
基本概念
虚拟化技术是云计算的核心技术
虚拟化技术的本质:添加虚拟化层将物理设备逻辑化,实现软硬件解耦
虚拟化技术核心思想:利用软件或固件管理程序构成虚拟化层,把物理资源映射为虚拟资源,在虚拟资源上可安装部署多个虚拟机,实现多用户共享物理资源
服务器虚拟化层级
硬件级虚拟化
添加一个称为虚拟化层的软件,管理客户操作系统,使其能够独立于主机操作系统同时运行在同一硬件上
三个要求:
同质:提供与原始硬件机器基本一致的环境
高效:运行在虚拟硬件环境中的程序性能损失较低
资源受控:系统资源处于 VMM (Virtual Machine Monitor) 的完全控制之中
优势:
- 封装性:以虚拟机为粒度,运行环境的保存和部署方便
- 多实例:提高计算机性能利用率,降低资源消耗
- 隔离:虚拟机中的应用程序可以在自己的操作系统中独立运行(安全性、测试场景)
- 硬件无关:无缝跨硬件迁移(云计算环境中虚拟机迁移很重要)
- 特权功能:在虚拟化层添加特权功能,不能被客户机绕过 ;事件记录和回放
客户机操作系统的敏感指令都是特权指令才能够实现高效的虚拟化——陷入VMM
CPU 虚拟化
任意时刻一个物理 CPU 只能运行一个虚拟 CPU
每个客户操作系统可以使用一个或多个虚拟 CPU
各个操作系统之间虚拟 CPU 运行相互隔离,互不影响
解释执行:来自操作系统的指令由 VMM 解释成执行函数到硬件上执行(模拟执行,Java 虚拟机同样)
扫描与修补:部分指令(敏感指令)模拟执行,部分指令(非敏感指令)监控执行
基于软件的完全虚拟化(由 VMM 全权掌控,速度慢)
基于硬件的辅助虚拟化(对硬件的操作权限进行划分:根模式→VMM,非根模式→客户机,即硬件能意识到虚拟环境的存在)
改操作系统的类虚拟化(修改暴露给虚拟机的硬件抽象和上层操作系统,客户机操作系统和 VMM 配合实现虚拟化,即修改后的操作系统能意识到虚拟环境的存在)
内存虚拟化
虚拟地址 GVA → 客户机物理地址 GPA → 宿主机物理地址 HPA
VMM 需要维护客户机物理地址和宿主机器的机器地址之间的映射;截获虚拟机对客户机物理地址的访问,并根据所记录的映射关系,转换成机器地址
基于软件的完全虚拟化
基于硬件的辅助虚拟化(通过扩展页表,在硬件上支持 GVA-GPA-HPA 的两次地址转换)
改操作系统的类虚拟化(客户机操作系统直接使用 VMM 的机器地址到物理地址的翻译表更新页表映射)
I/O 虚拟化
基于软件的完全虚拟化
基于硬件的辅助虚拟化(客户机直接访问I/O地址空间,设备直接访问客户机内存)
改操作系统的类虚拟化(修改客户操作系统,使其通过 VMM 提供的接口直接与物理设备交互)
操作系统级虚拟化
没有 Hypervisor / VMM,在主机操作系统中插入一个虚拟化层
云数据中心的虚拟化
服务器虚拟化
- 虚拟机和容器共存,容器的地位不断提升,目前与虚拟机相当
- 高效率的unikernel技术
- unikernel是使用库操作系统(LibOS)构建的专用的、单一地址空间机器镜像
- LibOS库操作系统:在应用程序层中实施访问控制和隔离,用户应用无需在用户模式和内核模式间切换,直接访问硬件;然而多 个应用程序同时运行时隔离性不好
- 可使用操作系统虚拟化(虚拟机监控器VMM)克服硬件资源隔离缺陷:LibOS通过VMM驱动物理硬件,像虚拟机一样运行
存储虚拟化
存储虚拟化将系统中分散且异构的存储资源整合起来,形成一个统一的连续编址的逻辑存储空间
存储虚拟化能够:提高存储资源利用率,降低单位存储空间成本,降低存储管理的负担和复杂性
一般模型:
具体实现:
- 基于主机的存储虚拟化
- 基于存储设备的存储虚拟化
- 基于网络的存储虚拟化
网络虚拟化
云数据中心的业务集中度、服务的客户数量远远超过传统数据中心,对网络的高带宽、低拥塞的要求更高
云数据中心对网络的需求:
- 提高数据传输效率:应对数据同步、备份、虚拟机迁移等的大流量
- 提高管理效率:采用统一的交换网络减少布线、维护和扩容的成本
云环境中的虚拟机迁移
虚拟机迁移的需求
- 云计算中心物理服务器负载处于动态变化中,当无法提供额外物理资源而为了负载平衡,可将占用热门物理资源的虚拟机迁移到其他物理服务器
- 物理服务器定期升级的需要,升级前将虚拟机迁移到其他物理服务器,等升级完成再迁移回来
云计算中关注的重点:实时迁移
虚拟机迁移的具体内容
均需要基于有效的虚拟化技术
OpenStack 开源云计算平台
OpenStack 是开源云计算平台(云操作系统),可控制整个数据中心的大型计算,存储和网络资源池
管理员能够通过Web界面、命令行或 API 接口控制、配置资源;用户可以通过 Web 界面使用资源
OpenStack 的定位:云计算系统的控制面和执行面
除了云操作系统OpenStack,构建云计算还需要很多其他东西:底层驱动 + 上层应用程序
云操作系统
构架于服务器、存储、网络等基础硬件资源和单机操作系统、中间件、数据库等基础软件之上,管理海量的基础硬件、软件资源的云平台综合管理系统:
- 管理和驱动海量服务器、存储等基础硬件,将数据中心的硬件资源逻辑上整合成一台服务器
- 为云应用软件提供统一的、标准的接口
- 管理海量的计算任务以及资源调配和迁移
特点:
- 网络化:将用户计算需求作为任务通过网络发送给各个处于不同地理位置的服务器处理,通过网络返回结果
- 安全:采用多种多样的安全保障措施保证数据安全。内存安全、数据传输安全(加密)、持久存储安全(冗 余、备份)
- 计算的可扩充性:动态申请网络硬件资源为用户服务——本地硬件资源无需扩展
OpenStack 简介
概述
- 既是一个开源软件,也是一个项目,还是一个社区,提供了一个部署云的操作平台或工具集。用 OpenStack 易于构建虚拟计算或存储服务的云,既可以为公有云、私有云,也可以为大云、小云提供可扩展、灵活的云计算
- OpenStack 是一个管理计算、存储和网络资源的数据中心云计算开放平台,通过一个仪表板,为管理 员提供了所有的管理控制,同时通过 Web 界面为其用户提供资源
- Rackspace 公司的 “云文件” 平台 Swift + 美国宇航局 NASA “星云” 平台 Nova
设计理念
- 开放:任何个人、企业、组织、政府机构,只要遵循相关开源协议,都可以使用、拿到源代码
- 灵活:带来可以定制的好处,每一个类型组建都有多个替代品,不会因为某一个组件的原因受到限制
- 可扩展:各个组件是相互独立的项目,各个组件可以从内部解决可扩展的问题,而不影响其他组件
参考架构
计算和存储、网络、镜像服务关系
虚拟机创建过程
资源准备
通过Keystone进行用户身份认证,通过认证后,用户即可与Openstack API节点通信,触发创建请求
通过调度器获得启动虚拟机的最佳位置:通过工作守护进程获得物理节点上的资源状态;Nova-scheduler
创建流程
调用身份认证进行身份验证
生成用于后续调用的令牌
访问镜像服务以获取镜像列表,并获取目标基础镜像
处理计算服务 API 请求
处理计算服务对安全组和密钥调用的请求
调用网络服务 API 确定可用网络
通过计算节点调度程序选择 Hypervisor 节点
调用块存储服务 API 为实例分配卷
通过计算服务API调用在 Hypervisor 节点启动实例
调用网络服务API为实例分配网络资源
架构设计
物理部署示例
四种节点
物理部署模型-估算
部署
DevOps 和 Openstack
OpenStack Ansible
云控制器
计算节点
Hypervisor
Magnum
存储节点
Swift
Cinder
网络节点
Neutron
虚拟网络 VLAN 实现
分布式存储
分布式计算
概论
集中式计算:完全依赖一台大型的中心计算机的处理能力,即主机
分布式计算:多个通过网络互联的计算机都具有一定的计算能力,他们相互之间传递数据,实现信息共享,协作共同完成一个处理任务
分布式系统:将海量计算能力才能处理的问题拆分成许多小块,将小块分配给同一套系统中不同的计算机节点处理,最后将分开计算的结果合并得到最终结果的系统
分布式计算的一般步骤:
- 设计分布式计算模型;分布式任务分配;编写并执行分布式程序【难点:计算任务划分 + 多节点通信】
理论基础
ACID原则:数据库事务正常执行的四个原则:原子性(Atomicity),一致性(Consistency),独立性(Isolation),持久性(Durability)
CAP理论:一个分布式系统最多能够同时满足一致性(consistency)、可用性(Availability)、分区容错性(Partition tolerance)中的两项
对于大多数大型互联网服务而言,节点故障、网络故障是常态,均采取保证AP的策略,对于一致性退而求其次,只保证最终一致性
BASE理论——追求最终一致性
- Basically Available-基本可用:系统出现故障时,允许损失部分可用性,保证核心可用
- Soft State-软状态:允许系统存在中间状态,但中间状态不会影响系统的整体可用性
- Eventual Consistency-最终一致性:所有数据副本经过一定时间后,能最终达到一致的状态
一致性算法:在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致
- 基于消息传递的一致性算法Paxos:https://www.cnblogs.com/linbingdong/p/6253479.html
- 基于消息传递的一致性算法Raft: https://raft.github.io/
分布式系统
特性
- 容错性:能在某些节点发生故障的情况下,利用容错机制避免整套系统服务都不可用
- 高可扩展性:能在运行过程中自由地对系统内部节点或现有功能进行扩充,而不影响现有服务的运行
- 开放性:决定了一个系统是否具备自我扩展和与其他系统集成的能力;开放的接口+接口遵循协议=更好
- 并发处理能力:系统必须保证对象的操作在并发环境中能够安全使用,保证数据一致性和系统高可用性
- 透明性:无需让用户知晓系统的内部细节,暴露给用户访问资源和服务的方式,将系统看作是一个整体
类型
分布式存储系统
- 结构化存储:事务处理系统或关系型数据库,数据划分为表、字段和表关系,如分布式MySQL
- 非结构化存储:强调很高的可扩展性,存储数据非常自由,代表是分布式文件系统,如HDFS,GFS等
- 半结构化存储:解决非结构化数据随机访问性能差的问题,如NoSQL,Key-Value Store,对象存储
- In-memory存储:基于内存的存储系统,利用内存实现极高读写性能,例如Memcached和Redis
- NewSQL:既具备结构化存储的ACID事务支持,又拥有NoSQL半结构化存储的强大可扩展能力
分布式计算系统
- 传统基于消息的系统:MPI(Message Passing Interface)
- Dataflow系统:将计算抽象为高层算子,算子组合为有向无环图,由后端调度引擎并行化调度执行
- Hadoop:MapReduce;Spark:更多类型的算子
- 流式计算、图计算、分布式机器学习——Spark都实现了这些类型的分布式计算
分布式资源管理系统:支持多种计算框架、高可扩展、高容错、高资源利用率、细粒度资源分配
- Yarn:Hadoop 2.0版本,解决了原来Hadoop扩展性较差的问题,可以在框架下自定义算子
- Apache Mesos:加州大学伯克利分校的一个研究项目,现在属于Apache基金会的一个项目
- Spark Standalone:Spark自带的简单的资源管理系统,负责跟踪集群状态并调度计算任务
- Kubernets:谷歌开发的一个强大的容器编排框架,用户通过Kubernets管理容器,不需要和底层交互
案例
网格系统:
- 一种能够整合的合作使用的由多家组织拥有和管理的高端计算机、网络、数据库、实验设备等基础设施
- 网格是一类并行、分布式系统,能够在运行时动态分享、选择、聚合地理散布得自治资源,依据它们的可用性、能力、性能、代价以及用户对服务质量的需求,构建满足用户需求的设备组合
- 网格技术解决的主要问题是合作研究中的社会问题,包括:
- 改善分布式管理,同时保持对本地资源的全面控制
- 改善数据可用性,识别问题和数据访问模式的解决方案
- 为学者提供友好的环境,能够访问更大范围的地理上分布的设备,提高产率
P2P系统:
- 是一种在对等者之间分配任务和工作负载的分布式应用架构的系统
- 所有参与者角色相同,都对外共享它们拥有的一部分硬件资源,这些资源可以被系统内其他参与者访问
- 性质:高度分散化;自组织性;多管理域
- 特点(优点):部署门槛低;增长速度快;容错性高;资源的丰富性和多样性高
- 应用:共享及分发文件;流媒体;网络电话;志愿计算等
区块链:
一种去中心化、不可篡改、可追溯、多方共同维护的分布式数据库系统
集成了P2P协议、非对称加密技术、共识机制、块链结构等多种技术,解决数据的可信问题
分布式计算、存储和资源管理系统—Hadoop 2.0
- Yarn做分布式资源管理
- HDFS做分布式存储
- MapReduce做分布式计算
分布式存储:
分布式计算:
分布式计算——Hadoop MapReduce 框架:
资源管理——Yarn:管理计算机资源、提供用户和程序访问系统资源的API
资源管理——Yarn是可编程的,不仅仅支持自带的MapReduce,还可以自定义算子
分布式计算和资源管理系统—Spark
没有类似 HDFS 的分布式文件(存储)系统,但是有一套分布式内存管理系统(核心)
Spark 是建立在弹性分布式数据集(RDD)之上的
RDD 使得 Spark 可以用一致的方式处理大数据的不同应用场景
分布式存储系统
数据和系统类型
分布式文件系统——泛指以分布式的方式存储文件的系统,文件可以多种形式存在
- 三种数据类型:二进制大对象(Blob),定长块,大文件
- 提供不同类型的存储服务:对象存储、文件存储、块存储
- 可以作为分布式健值存储、分布式表、分布式数据的底层存储(GFS,弹性块存储EBS,Ceph)
分布式健值系统
- 用来存储关系简单的半结构化数据,提供基于主键的 CRUD 功能
- 可以看作是对分布式表的简化,一般用来作缓存,例如 Memcached
- 常用技术是一致性 Hash
分布式表
- 用于存储半结构化数据;以表格为单位组织数据,一个表格有多行,通过主键标识一行
- 不仅仅支持简单的CRUD,还支持扫描某个主键的范围和范围查找功能(Google Bigtable)
分布式数据库
- 基于传统关系型数据库发展而来,例如分布式 MySQL
文件系统的发展
- 单机文件系统:使用树型数据结构组织文件、目录以及访问控制;三类数据模型:文件、关系、健值,对应文件系统、数据库、健值存储
- 网络文件系统:让用户能够以访问本地文件系统的方式访问远程机器上的文件,提供跨平台的文件共享系统
- 并行文件系统:用在大规模并行处理体系结构中,保证一个业务的多个并行任务可以同时对同一个文件的不同位置并行处理
- 分布式文件系统:采用集中式管理、分布式存储的架构,将文件实际存储在多个不同的节点上,且每一个部分都有多个副本
- 高通量文件系统:专指为大型数据中心设计的分布式文件系统,将数据中心所有的低成本存储资源有效地组织起来服务于上层多种应用的数据存储需求和数据访问需求
分布式存储系统面临的重要问题:
- 如何将数据均匀的分布到多个存储节点
- 如何保证提供高可用性的数据多副本始终保持一致
- 如何检测节点故障并高效应对
分布式存储系统的评价指标:
- 性能:
- 吞吐率-在某一段时间可以处理的请求总数
- 系统响应时间-从某个请求发出到收到结果的时间
- 可用性:
- 指在系统面对各种异常时可以提供的正常服务能力
- 用停止服务的时间和正常时间比重
- 度量一致性:
- 越强的一致性模型用户使用起来越简单——可能牺牲可用性或分区容错性
- 可扩展性:
- 能否通过增加服务器数量提高系统能力或者增加服务器的难度
- 理想的“线性可扩展”