云计算课程内容概述
本文件内容全部来自南京大学 云计算课程,2022秋季学期。感谢李传艺老师的倾情付出!
云计算概念
定义
- 云计算是一种商业计算模型。它将计算任务分布在大量计算机构成的资源池上,使各种应用系统能够根据需要获取计算力、存储空间和信息服务。
- 云计算是通过网络按需提供可动态伸缩的廉价计算服务
集中式计算和云计算异同
分布式计算和云计算异同
云计算的发展推动力
- 性能+技术
- 网络带宽提升
- 技术成熟度
- 移动互联网的发展
- 服务+商业(让计算像水电一样好用)
- 数据中心的演变(理念的改变、技术的成熟、需求的增加)
- 经济因素(降低成本、节约资源、可持续发展)
- 大数据(存储和计算大数据的需求)
云计算架构
云计算三元认知论
- 一种商业模式
- 一种全新的商业模式,从产品提供的服务类型看,而非技术角度
- 在软件服务基础上提供平台和基础设施服务
- 一种计算范式
- 理论层面的实现方式,偏向针对商业模式的体系结构设计
- 一种实现方式
- 数据中心+云平台管理系统
开源对于云计算的意义
云计算时代,开源不仅是一种开放源代码的具体产品,更是一种方法论、一种构造大规模复杂软件的协作方式。
开源体现了一个什么样的精神内涵
- 开源促进国家信息技术创新,带动经济发展
- 软件厂商依托开源提升研发能力
- 用户使用开源技术改变信息化路线
- 企业自主开源,引领技术发展路径
云计算架构
- Service-orientedArchitecture面向服务的体系结构
- 每个程序只做本职工作,将服务暴露出来供其他程序使用
- 多个程序通过一个统一的界面协调工作——控制复杂性,更容易管理
云计算概念架构
- 基础设施+应用程序
- 后端+前端
- 后端:
- 硬件:服务器、存储器、网络交换机等
- 管理软件:服务的高可用性、可恢复性,数据一致性,应用伸缩性、可预测性,云安全等
- 前端:并发性、协调性、容错性、开放的API格式、开放的数据格式、承载数据密集型计算
- 后端:
后端进一步分层架构
- 虚拟化层
- 将硬件转换为统一的IT资源【可灵活拆分、统一计量、统一管理、软件定义的】
- 可以在不同的抽象层实现:应用层、操作系统层、体系结构层、硬件层等
- Web服务层
- 将云资源提供给客户的一种最方便的方式,解决大部分客户无法直接使用虚拟机的问题;
- 支持面广、对客户端要求低,只需要浏览器就可以访问;所有提供的服务均可以通过API访问,该类API为“表征状态转移”RepresentationalStateTransfer,REST
- 服务总线层
- 即中间件层,封装计算服务、数据存储、消息传递
- 分离用户与虚拟化层、连接用户与Web服务层
- 客户机用户界面
- Web门户,将各种服务混搭集成在一个页面
- 基于Ajax,Javascript,趋势是使用功能完善的组件
- 如JavaBeans/Applets,Silvedight/.NET等
- 可下载和安装在客户机上
云计算逻辑架构
- 云体
- 是云计算的物质基础,云计算使用的资源集合,是构成云计算的软硬件环境(软硬件环境)
- 可以直接理解为数据中心
- 云栈
- 云平台,在云上建造的运行环境。它能够支持应用程序的发布、运行、监控、调度、伸缩,并为应用程序提供辅助服务机制,如访问控制、权限管理等。
- 云计算
- 是利用云体和云平台所进行的计算或处理
- 云存储、云服务、在云上运行自己的软件或算法,都是云计算。
- 云计算是人们利用云体和云平台所从事的活动。
云栈的三层模式
- 基础设施即服务层
- 平台即服务层
- 应用程序层-软件即服务层
laas(基础设施即服务)实现机制
- 用户交互接口向应用以WebServices方式提供访问接口,获取用户需求。
- 服务目录是用户可以访问的服务清单。
- 系统管理模块负责管理和分配所有可用的资源,其核心是负载均衡。
- 配置工具负责在分配的节点上准备任务运行环境。
- 监视统计模块负责监视节点的运行状态,并完成用户使用节点情况的统计。
物理云栈
OpenStack是一个管理云计算中计算、存储和网络,甚至是应用的通用平台,其提供Web界面、命令行工具和应用程序接口(API)等使用接口。
本质上OpenStack通过抽象和一个通用的API接口控制不同厂商提供的硬件和软件资源,是对计算系统的更高层次的抽象。
逻辑云体
运行时环境+应用本身(程序+数据)
- 环境:进程/线程/内存管理+文件系统+进程间通信/网络
- 云应用程序:类似传统应用
- 云运行时环境:
- 虚拟化技术:计算资源(服务器或CPU+本地存储)
- 分布式存储:持久存储
- 物理网络拓扑:通信(消息队列+网络)
云数据中心
云数据中心特征
- 高设备利用率
- 通过虚拟化技术(服务器虚拟化、存储虚拟化、网络虚拟化、应用虚拟化)将云平台系统与数据中心硬件资源整合,达到减少物理服务器数量的目标
- 优化资源利用率、简化管理,降低成本、快速响应业务需求的变化等
- 较大的数据中心有更低的单位运营成本:网络、存储、管理
- 绿色节能
- 服务器本身:节能服务器、节能存储设备、刀片服务器
- 环境:供电技术、散热技术,降低能耗
- 软件:虚拟机等资源调度算法、计算任务管理算法等
- 高可用性
- 各个部分的冗余、容错、容灾设计
- 扩展和升级时,保持正常运行
- 自动化管理
- 无人值守,远程管理(系统漏洞与补丁管理、性能管理和瓶颈分析、服务器与操作系统部署、系统功率测量和调整)
- 门禁、通风、温度、湿度、电力均可远程调度与控制
云数据中心对网络架构的需求
低成本、高可扩展性、低配置开销、健壮性、节能
树型
- 建造方便简单
- 成本高
- 根节点的性能瓶颈
- 任意一个核心交换机故障导致上千台服务器失效
胖树
- 消除了树形结构上层链路对吞吐量的限制
- 为内部节点间通信提供多条并行链路
- 与现有数据中心网络使用的以太网结构和IP配置的服务器兼容
- 但是布线复杂了;
- 扩展时需要重构;
- 受到端口数限制等。
改进树
若干服务器连接到机架(接入)交换机
每台接入交换机与两台汇聚交换机连接
每台汇聚交换机与所有核心交换机连接
- 扁平寻址,允许服务实例被放置到网络覆盖的任何地方
- 负载均衡将流量统一分配到网络路径
- 终端系统的地址解析拓展到巨大的服务器池
递归层次DCell
- 拓扑层数受限于服务器端口数
递归层次FiConn
- 第0层为基本构建单元,n个服务器连接一个具有n个端口的交换机
- 每个低层FiConn中备用端口空闲的一半服务器与其他相同层次的FiConn网络中备用端口空闲的服务器连接
- k层服务器、k层端口、k层链路
不需要对服务器和交换机做修改对外连接的链路有限,容错较弱,链路路径长度大,路由效率不高
递归层次BCube
6个服务器连接1交换机,第7层的服务器数量:
6^7=279939
光交换网络
无线数据中心网络
静态链路和有线接口在大量高突发流量和高负载服务器情况下降低数据中心网络性能
无线网络的广播机制克服这个问题
Flyways:在过热的交换机间添加无线链路;使用贪心算法将最大流量链路分摊到其他可行路径
无需重新布线即可灵活调整拓扑结构
软件定义网络
绿色节能技术
- 配电系统节能
- 空调系统节能
- 集装箱数据中心节能技术
- 将数据中心的服务器设备、网络设备、空调设备、供电设备等高密度地装入固定尺寸地集装箱中,成为数据中心的标准构建模块
- 管理系统节能策略和算法
- 当CPU未被完全利用时,降低CPU供电电压和时钟频率主动降低CPU性能
- 新能源应用
自动化技术
- 全面的可视性——基础设施、中间件、数据库、应用层、业务服务层的运行时视图,全面掌握数据中心资产、配置和各层次依赖关系的现状
- 自动的控制执行——全面自动化数据中心的流程管理
- 多层次的无缝集成——流畅地自动执行在不同层次和组成部分之间地各种处理流程,快速的协调数据中心内外的所有变更,实现端到端的流程管理
- 综合与实时的报告——提供全面综合和透视依赖关系的报告提高管理水平
- 全生命周期支持——自动化整个“计划—实施—检查—更正”的IT流程生命周期
容灾备份
- 数据集容灾:数据级容灾只保证数据的完整性、可靠性和安全性,但提供实时服务的请求在灾难中会中断。
- 应用级容灾:应用级容灾系统能够提供不间断的应用服务,让服务请求能够透明地继续运行,保证数据中心提供的服务完整、可靠、安全。
- 核心:复制数据
- 远程镜像技术
- 快照技术
- 基于IP的SAN的远程数据容灾备份技术
- 数据库复制技术
虚拟化技术
虚拟化的本质就是通过添加一个虚拟化层将原先的物理设备进行逻辑化,转化成一个文件夹或文件,实现软硬件的解耦。
核心思想是利用软件或固件管理程序构成虚拟化层,把物理资源映射为虚拟资源。在虚拟资源上可以安装和部署多个虚拟机,实现多用户共享物理资源。
硬件级虚拟化
- 添加一个称为虚拟化层的软件,管理客户操作系统,使其能够独立于主机操作系统同时运行在同一个硬件上
- 三个要求
- 同质:为程序提供与原始硬件机器基本一致的环境
- 高效:运行在该虚拟硬件环境中的程序性能损失应该较低
- 资源受控:系统资源应该处于VMM的完全控制之中
优势
- 封装性
- 以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷
- 使得保存、部署更加方便,从而使得软件开发、测试和调试更加便捷;降低IT管理和维护成本
- 多实例
- 提高计算机性能利用率,降低计算机资源消耗
- 隔离
- 虚拟机中的应用程序可以在自己的操作系统中独立地运行,不影响其他工作负载
- 硬件无关性
- 屏蔽硬件差异,无缝跨硬件迁移;云计算环境中虚拟机迁移是非常重要的;【复现老旧硬件接口】
- 特权功能
- 在虚拟化层添加特权功能的优点:不能被客户机绕过、更容易实现
- 事件记录和回放——入侵检测、病毒检测等
是否能够虚拟化出满足“同质、高效、资源受控”的虚拟机?
- 两个或两个以上的特权级:分隔应用软件与系统软件
- 特权指令:管理和操作关键系统资源的指令,只有在最高特权级才能执行
- 敏感指令:操作特权资源的指令
- 修改虚拟机运行模式或者物理机状态
- 读写敏感的寄存器或内存,如时钟或中断寄存器
- 访问存储保护系统、内存系统或地址重定位系统
- 客户机操作系统的敏感指令都是特权指令才能够实现高效的虚拟化——陷入VMM
CPU虚拟化
- 通过消减冗余代码、减少地址空间切换和跨特全级切换、减少内存复制等,优化虚拟化的性能开销。
- 一定程度上消除了虚拟层和上层操作系统间的语义鸿沟:操作系统内部运行状态能够被VMM获得。
- 使得硬件抽象层的抽象高度更加灵活,为实现各种不同功能的硬件抽象探索出了可行的路径。
内存虚拟化
- 虚拟化后,VMM要让客户操作系统看到“假的”物理空间,两件事:
- 维护客户机物理地址和宿主机器的机器地址之间的映射
- 截获虚拟机对客户机物理地址的访问,并根据所记录的映射关系,转换成机器地址
I/O虚拟化
操作系统级虚拟化
- 可以看作是“寄居虚拟化”的一种
- 最小的启动/停止开销/资源需求低/可扩展性强
- 可同步虚拟机与宿主操作系统环境状态的变化
- 允许虚拟机中进程访问尽可能多的主机资源
- 同一个容器中的操作系统级虚拟机必须使用相同的客户操作系统
- 资源隔离性较差
虚拟化各个层级性能差距的原因是什么
越往上应用程序灵活性越低:因为越上层的抽象越脱离底层,能够提供的底层api越少,给了应用程序越少的灵活性
性能呈山峰,操作系统级最高,往上往下都降低。
- 硬件:虚拟硬件设备要消耗资源,大量代码需要被翻译执行,造成了性能的损耗
- IOS:Intel和AMD分别开发了VT和Pacifica虚拟技术,将虚拟指令加入到了CPU中。使用了CPU支持的硬件虚拟技术,将不再需要修改操作系统内核,而是由CPU指令集进行相应的转换操作。
云数据中心的虚拟化
存储虚拟化
- 概念:存储虚拟化将系统中分散且异构的存储资源整合起来,形成一个统一的连续编址的逻辑存储空间
- 基于主机的存储虚拟化:
- 性价比比较高
- 性能下降可扩展性差不支持异构平台
- 基于存储设备的存储虚拟化:
- 存储子系统与主机无关,对系统性能的影响比较小,较容易管理
- 对于包含异构存储设备的SAN存储系统,虚拟化方法的效果不好设备规模有限并且不能进行级联,可扩展性较差
- 基于网络的存储虚拟化:
- 基于路由器的 虚拟化在性能、 效果和安全方 面都更好;路 由器的冗余能 够支持动态多 路径
- 连接主机到存 储网络的路由 器出现故障导 致与故障路由 器连接在一起 的主机受到影 响
网络虚拟化
- 虚拟网卡:每个虚拟机可以配置一个或多个虚拟网卡
- 虚拟交换机:工作原理与物理交换机一样,满足虚拟机网卡互连
- 分布式虚拟交换机:跨主机的虚拟交换机,保证跨主机迁移时网络配置保持一致
- 端口组:使用同一种策略设置的一组端口,虚拟环境特有的概念
虚拟机迁移
- 迁移数据存储需要占用大量时间和网络带宽,通常的解决办法是以共享的方式共享数据和文件系统,而非真正迁移
- 目前大多数集群使用NAS(Network Attached Storage,网络连接存储)作为存储设备共享数据
OpenStack
是开源云计算平台,可控制整个数据中心的大型计算、存储和网络资源池。
管理员能够通过Web界面、命令行或API接口控制、配置资源;用户可以通过Web界面使用资源。
设计理念
核心组件
消息队列:中心化的消息交换器,用于在服务组件不同模块传递消息;队列的优势在于可以缓冲请求
数据库:构建时和运行时状态信息,例如可以使用的实例类型、正在使用的实例、可用网络等,也是各个组件间共享信息的重要组件
云控制器
基础架构服务
不属于OpenStack对外提供的公共服务,但被多个Openstack组件使用
消息队列:必须是集群式的;RabbitMQ,ZeroMQ,Qpid
数据库:OpenStack的环境数据,使用数据等;MySQL和MongoDB
物理部署
Openstack采用 无中心结构、节点无本地状态
控制器(除基础架构服务)使用对称高性能集群
- 请求聚合+负载均衡
- 每一台物理设备运行相同的服务
控制器节点很容易水平扩展
数据库、消息队列可采用非对称高可用集群
Keystone
- 身份认证和服务目录(所有其他服务需向Keystone注册API端点),由多个Provider组成
Nova
Nova是Openstack中提供计算资源服务的项目,是OpenStack最核心的项目
负责:虚拟机和其他计算资源的生命周期管理
不负责:承载虚拟机的物理机自身的管理和全面的系统状态监控
运行在云控制器上的组件
Nova-api
- 云控制器中的编排引擎;通过API将消息写入数据库和消息队列向其他守护进程传递消息
Nova-conductor
- 代表计算节点上nova-compute执行数据库操作,提供数据库访问隔离;将来自计算节点请求并行化
Nova-scheduler
专门的调度算法;确定虚拟机创建的最佳放置位置;支持过滤器检查计算节点上资源可用性,通过加权机制过滤出计算节点列表,再确定启动虚拟机的最佳位置;支持自定义度量标准和策略考量配置
在生产环境下,配置单独的存储主机,其调度器运行在存储主机上
其它服务
云控制器托管用于镜像管理的Glance服务
Glance API提供外部REST接口,用于查询虚拟机镜像及相关元数据
Glance registry将镜像元数据存储在数据库中,并利用存储后端实际存储镜像
- 例如使用Swift对象存储作为镜像存储后端
网络服务采用类似Nova的部署概念
- 网络API驻留在云控制器中,独立配置网络服务器节点
仪表盘服务
- 运行在Apache Web服务器后端,可以将其运行在可以访问API端点的单独节点上,降低云控制器负载
计量服务
跟踪资源使用情况,计算资源利用率
多种使用目的:计费、容量规划、按需求和吞吐量的虚拟基础架构自动扩展等
计算节点
计算节点运行nova-compute服务,负责启动和终止虚拟机,通过消息总线监听虚拟机相关请求
Hypervisor是Nova计算节点的核心,又称VMM
存储节点
对象存储Swift
数据与其副本作为二进制大对象存储在对象存储服务器上
对象存储没有文件存储的层次结构,对象存储在扁平的命名空间——一种特殊的文件系统
使用REST或SOAP等API访问对象存储,而不是文件协议
不适用于高性能要求以及经常更改的结构话化数据,例如数据库
块存储Cinder
为云平台提供统一接口,按需分配的,持久化的块存储服务
核心功能是对卷的管理,允许对卷、卷的类型、卷的快照、卷备份进行操作
为后端不同的存储设备提供了统一的接口,不同的块设备服务厂商在Cinder 中实现其驱动支持以与OpenStack进行整合
块存储作为虚拟机硬盘使用时,必须先分区、创建文件系统,再挂载到虚拟机文件系统层次结构中。
网络连接
路由器:连接多个独立的网络
虚拟路由器:连接多个虚拟的网络;负责转发所有人请求
给每个物理服务器上增加一个OVS虚拟交换机;
然后每个VM都连到OVS端口上,每个端口则按照分组,打上对应的VLAN标签。
为了降低网络节点的负载,同时提高可扩展性,OpenStack在Juno版本引入了DVR特性,DVR部署在计算节点上。
计算节点上的VM使用floatingIP访问Internet,不必经过网络节点,直接从计算节点的DVR就可以访问。
OpenStack组件和体系架构的关系?
分布式系统
定义
定义:多个通过网络互联的计算机都具有一定的计算能力,他们相互之间传递数据,实现信息共享,协作共同完成一个处理任务。
中国科学院:分布式计算就是在两个或多个软件互相共享信息,这些软件既可以在同一台计算机上,也可以在通过网络连接起来的多台计算机上运行
优势:稀有资源实现共享;在多台计算机上平衡计算负载;将程序放在最适合它的计算机上运行。
理论基础
ACID原则:数据库事务正常执行的四个原则
原子性(Atomicity)-事务中所有操作要么全都做完,要么都不做;只要一个操作失败,事务就失败,要回滚
一致性(Consistency)-数据库要处于原本的一致性状态
独立性(Isolation)-并发的事务不会相互影响,读数据不受影响,写数据也不能受到影响
持久性(Durability)-一旦事务提交后,它所作的修改应该永久保存在数据库上,即使宕机也不会丢失
CAP理论:一个分布式系统最多能够同时满足一致性(consistency)、可用性(Availability)、分区容错性(Partition tolerance)中的两项
一致性——一次操作之后,所有节点同一时间的数据完全一致。从客户端角度看,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。
可用性——服务一直可用且在正常的响应时间内。
分区容错性——分布式系统遇到某节点或网络分区故障时,仍然能够对外提供满足一致性和可用性的服务。
如何取舍?
- CA:但是分区始终存在,保证子系统CA
- CP:导致某些节点无法使用
- AP:导致全局数据不一致,但是高可用
BASE理论——追求最终一致性
Basically Available:基本可用-系统出现故障时,允许损失部分可用性,保证核心可用
Soft State:软状态:允许系统存在中间状态,但中间状态不会影响系统的整体可用性
Eventual Consistency:最终一致性-所有数据副本经过一定时间后,能最终达到一致的状态
Basic Paxos
- Proposer发准备请求;Acceptors回应ID和Value,并许下承诺
- Proposer收到多数回应后,发出带Value的Accept请求;Acceptors进行Accept处理
- Proposer收到多数回应后,表示提案成功,立即将决议发送给所有Learner
分布式系统类型
分布式存储系统
结构化存储:事务处理系统或关系型数据库,数据划分为表、字段和表关系,如分布式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:Google开发的一个强大的容器编排框架,用户通过Kubernets管理容器,不需要和底层交互
分布式存储系统
类型
分布式文件系统——泛指以分布式的方式存储文件的系统,文件可以多种形式存在
三种数据类型:Binary large object(Blob)二进制大对象,定长块,大文件
提供不同类型的存储服务:对象存储、文件存储、块存储
可以作为分布式健值存储、分布式表、分布式数据的底层存储。GFS,弹性块存储EBS,Ceph
分布式健值系统
用来存储关系简单的半结构化数据,提供基于主键的CRUD功能
可以看作是对分布式表的简化,一般用来作缓存,例如Memcached。一致性Hash是常用技术
分布式表
用于存储半结构化数据;以表格为单位组织数据,一个表格有多行,通过主键标识一行
不仅仅支持简单的CRUD,还支持扫描某个主键的范围和范围查找功能。Google Bigtable
分布式数据库
- 基于传统关系型数据库发展而来,例如分布式MySQL