二、云计算架构
1 计算架构及演化
计算机软硬件经历了长时间的演变,计算范式也经过了多次变化:集中式、CS、BS、并行、分布式等
不同的计算范式对应不同的计算架构
- 中央集权架构
- 计算机刚出现时候的首选:所有计算及计算资源、业务逻辑都集中于一台主机
- 客户机/服务器架构
- 客户端:承载少量计算任务和所有IO任务
- 服务器:承载主要计算任务
- 优点:关注点分离,简化软件复杂度、编程模式
- 缺点:持久链接,系统伸缩能力受限
- 中间层架构——简化和提升伸缩能力
- 将业务逻辑和数据服务分别放在两个服务器上
- 客户机到中间件为无状态的非持久链接——提升架构弹性
- 浏览器/服务器架构
- 对客户机、中间层架构的扩展——客户端和中间层均改动
- 客户端:负载进一步缩减,仅显示和运行基于浏览器的脚本程序
- 服务器:Web服务器层屏蔽各中间件的差异,提供通用的用户访问界面
- 扩展性高:对客户机性能无要求
- 对网络性能要求高
- C/S和B/S混合架构
- 没有一种架构能够适用于所有场景
- 有些服务需要持久的链接(内部用户)
- 有些仅通过非持久链接即可(外部用户)
- 面向服务的架构(SOA)
- 中央集权架构
SOA
中间层计算架构、B/S架构、混合计算架构都可为云计算提供一定的伸缩能力
- 共性:基于无状态连接【http请求】和基于服务的访问【而非过程调用】
Service-oriented Architecture 面向服务的体系结构
每个程序只做本职工作,将服务暴露出来供其他程序使用
多个程序通过一个统一的界面协调工作——控制复杂性,更容易管理
区别于“分布式对象”
Java:Java对象、RMI(Remote Method Invocation,远程方法调用)
CORBA:CORBA分布式对象、IDL(Interface Definition Language,接口定义语言)
通过RPC(Remote Procedure Call,远程过程调用)连接
- 将Service(服务)作为分布式对象
- SOA是关于如何设计一套使用服务的软件系统
- 使得服务间的互操作性变得可扩展和有效
- 特点:松耦合,定义并发布接口,基于标准的通信模型
- 实例:
REST
(Representational State Transfer)Web Service
2 一般云计算架构的二维视角
从不同的角度看,云计算架构的复杂性有一定的差异
最易于理解的二维视角:基础设施 + 应用程序;两者分别视为:前端(呈现给用户的界面) + 后端(云组件)
多实例同时执行;不同实例之间能够协调对数据的处理及任务的执行;方便数据在各个模块之间共享。
基础架构——云内部,后端
- 硬件:服务器、存储器、网络交换机等
- 管理软件:服务的高可用性、可恢复性、数据一致性、应用伸缩性、可预测性、云安全等
应用程序——云对外,前端
- 并发性、协调性、容错性、开放的API格式、开放的数据格式、承载数据密集型计算
基础架构的进一步分层结构
- 虚拟化层
- 将硬件转换为统一的IT资源【可灵活拆分、统一计量、统一管理、软件定义的】
- 可以在不同的抽象层实现:应用层、操作系统层、体系结构层、硬件层等
- Web服务层
- 将云资源提供给客户的一种最方便的方式,解决大部分客户无法直接使用虚拟机的问题
- 支持面广、对客户端要求低,只需要浏览器就可以访问;所有提供的服务均可以通过API访问,该类API为”表征状态转移” Representational State Transfer, REST
- 服务总线层
- 即中间件层,封装计算服务、数据存储、消息传递
- 分离用户与虚拟化层、连接用户与Web服务层
- 客户机用户界面
- Web门户,将各种服务混搭集成在一个页面
- 基于Ajax,JavaScript,趋势是使用功能完善的组件
- 如JavaBeans/Applets, Silvedight/.NET等
- 可下载和安装在客户机上
云应用程序的结构——云应用程序与传统操作系统上的应用程序结构有所不同
- 传统操作系统上的应用程序:进程、线程、服务、shell(应用程序的控制接口)
- 进程就是最终产品,每一个进程可运行多个指令序列(线程),一个线程对应一种服务
- 云环境中的应用程序:应用程序本身、应用实例、服务、云命令行界面(控制端)
- 应用程序是云应用最终的样子,由多个同时运行的实例支撑
- 不同的应用实例运行在不同的服务器上,每一个应用实例提供一种或多种服务
- 服务之间是相互独立的(微服务架构)
3 云计算逻辑架构
- 云体、云平台、云栈、云计算、云环境、云系统…
- 云体
- 是云计算的物质基础,是云计算使用的资源集合,是构成云计算的软硬件环境,例如网络、服务器、存储器、交换机等。广义的云体包括数据中心机器辅助设施如电力、空调、机架、冷却等系统。
- 目前可以认为:云体 就是 数据中心
- 云栈
- 又称云平台,是在云上建造的运行环境。它能够支持应用程序的发布、运行、监控、调度、伸缩,并为应用程序提供辅助服务机制,如访问控制、权限管理等。
- 云计算
- 是利用云体和云平台所进行的计算或处理——云计算可以在云体上直接进行,也可以在云平台上进行。无论在哪个层面开展,只要符合“按量计费、资源可伸缩”就是云计算。
- 云存储、云服务、在云上运行自己的软件或算法,都是云计算。
- 云计算是人们利用云体和云平台所从事的活动。
3.1 逻辑云栈
云栈——提供的服务多种多样,规模巨大,需要简历规则才能便于管理,即层次架构
云计算也遵循分层规则,组织为多个层次,相互叠加
- 每一层都提供一种抽象,最下为物理硬件层
- 每往上一层,易用性就增加一分
- 到底应该分几层没有明确的规定或准则
- 不同的厂商有不同分法:三层、四层、五层
以纵向的方式来构建云计算的整体架构
云栈的三层模式
基础设施即服务层
- 不仅包括硬件设施,还包括虚拟化,因为各种硬件规格、性能、质量不统一,无法在其上直接建造云平台。虚拟化可以将各种硬件变为统一的标准件。
平台即服务层
- 在虚拟化的IT资源上构建起应用程序的运行环境,对外提供的产品包括计算环境、云存储库、通信机制、控制调度机制,统称为云计算平台或云解决方案栈。消费的是云基础设施服务,支持的是上层的云应用程序。
应用程序层-软件即服务层
- 基于网络进行远程访问的商用软件
- 集中式管理,而非分散在每个用户站点
- 单个实例多个租户架构——一对多模型
- 按照用量计费(实际应用中按月或其他时间周期计费)
从管理角度看,与云栈分层架构对应的是云计算技术体系结构——如何实现三层服务
不同供应商提供了不同的解决方案,没有统一的技术体系结构
综合不同厂商,构造如下参考体系结构:
关键是如何实现和管理
3.2 技术体系结构—各层内涵
3.3 IaaS实现机制
3.4 物理云栈OpenStack
- OpenStack是一个管理云计算中计算、存储和网络,甚至是应用的通用平台,其提供Web界面、命令行工具和应用程序接口(API)等使用接口。
- 官方描述
- The Most Widely Deployed
Open Source Cloud Software
in the World - OpenStack is a
cloud operating system
that controls large pools of compute, storage, and networking resources throughout a datacenter, all managed and provisioned through APIs with common authentication mechanisms.
- The Most Widely Deployed
- 平台管理员
- 位于各厂商特定资源之上的云计算资源管理层
- 开发者
- 通过其为应用提供基础设施和相应软件依赖
- 云编排平台:基于应用模板部署可扩展应用
- 最终用户
- 每一个最终用户被定义为一个租户
- 为租户提供自助服务的基础设施和应用管理系统
本质上OpenStack通过抽象和一个通用的API接口控制不同厂商提供的硬件和软件资源,是对计算系统的更高层次的抽象。
3.5 逻辑云体
- 云栈是从纵向角度看云计算的整体架构,那么云体则主要是从横向角度看其架构模式
- 类比传统操作系统横向切面:运行时环境 + 应用本身(程序+数据)
- 环境:进程/线程/内存管理 + 文件系统 + 进程间通信/网络
- 云应用程序
- 类似传统应用
- 云运行时环境
3.6 物理云体云数据中心
传统数据中心暴露的问题
- 过多的机器
- 机器利用率过低
- 应用迁移太困难
- 存储需求增长太快
软件定义的数据中心
重新重视虚拟化,以提高资源利用率
- 不仅应用到计算节点
- 复制到存储、网络、安全等方方面面
- 软件定义计算:计算节点的虚拟化:虚拟机成为计算调度和管理的单位,不中断服务的前提下动态迁移。
- 软件定义存储:分离管理接口与数据读写;统一的管理接口与上层管理软件交互;数据读写可以兼容各种不同的链接方式。
- 软件定义网络:数据平面(数据转发)和控制平面(转发表的设置等)分离;集中控制,分布式转发。