面各项服务的计算架构
中间层计算架构、B/S 架构、混合计算架构都可为云计算提供一定的伸缩能力
共性:基于无状态连接【http 请求】和基于服务的访问【而非过程调用】
Service-oriented Architecture 面向服务的体系结构
每个程序只做本职工作,将服务暴露出来供其他程序使用
多个程序通过一个统一的界面协调工作——控制复杂性,更容易管理
区别于“分布式对象”
- Java:Java 对象、RMI(Remote Method Invocation,远程方法调用)
- CORBA:CORBA 分布式对象、IDL(Interface Definition Language,接口定义语言)
- 通过 RPC(Remote Procedure Call,远程过程调用)连接
计算架构和云计算架构的二维视角
从不同的角度看,云计算架构的复杂性有一定的差异
最易于理解的二维视角:基础设施 + 应用程序; 两者分别视为: 前端 + 后端
- 基础架构——云内部,后端
- 硬件:服务器、存储器、网络交换机等
- 管理软件:服务的高可用性、可恢复性,数据一致性,应用伸缩性、可预测性,云安全等
- 应用程序——云对外,前端
- 并发性、协调性、容错性、开放的 API 格式、开放的数据格式、承载数据密集型计算
基础架构的进一步分层结构
- 虚拟化层:将硬件转换为统一的 IT 资源【可灵活拆分、统一计量、统一管理、软件定义的】,可以在不同的抽象层实现:应用层、操作系统层、体系结构层、硬件层等
- Web 服务层:将云资源提供给客户的一种最方便的方式,解决大部分客户无法直接使用虚拟机的问题;支持面广、对客户端要求低,只需要浏览器就可以访问;所有提供的服务均可以通过 API 访问,该类 API 为“表征状态转移”Representational State Transfer, REST
- 服务总线层:即中间件层,封装计算服务、数据存储、消息传递;分离用户与虚拟化层、连接用户与 Web 服务层
- 客户机用户界面:Web 门户,将各种服务混搭集成在一个页面;基于 Ajax,Javascript,趋势是使用功能完善的组件;如 JavaBeans/Applets,Silvedight/.NET 等;可下载和安装在客户机上
云应用程序的结构
云应用程序与传统操作系统上的应用程序结构有所不同
- 传统操作系统上的应用程序:进程、线程、服务、shell(应用程序的控制接口)
- 进程就是最终产品,每一个进程可运行多个指令序列(线程),一个线程对应一种服务
- 云环境中的应用程序:应用程序本身、应用实例、服务、云命令行界面(控制端)
- 应用程序是云应用最终的样子,由多个同时运行的实例支撑
- 不同的应用实例运行在不同的服务器上,每一个应用实例提供一种或多种服务
- 服务之间是相互独立的(微服务架构)
云计算逻辑架构
云体:是云计算的物质基础,是云计算使用的资源集合,是构成云计算的软硬件环境,例如网络、服务器、存储器、交换机等。广义的云体包括数据中心机器辅助设施如电力、空调、机架、冷却等系统。目前可以认为:云体就是数据中心。
云计算:是利用云体和云平台所进行的计算或处理——云计算可以在云体上直接进行,也可以在云平台上进行。无论在哪个层面开展,只要符合“按量计费、资源可伸缩”就是云计算。
- 云存储、云服务、在云上运行自己的软件或算法,都是云计算。
- 云计算是人们利用云体和云平台所从事的活动。
云栈:又称云平台,是在云上建造的运行环境。它能够支持应用程序的发布、运行、监控、调度、伸缩,并为应用程序提供辅助服务机制,如访问控制、权限管理等。
逻辑云栈
云栈——提供的服务多种多样,规模巨大,需要简历规则才能便于管理,即层次架构。
云计算也遵循分层规则,组织为多个层次,相互叠加:
- 每一层都提供一种抽象,最下为物理硬件层
- 每往上一层,易用性就增加一分
- 到底应该分几层没有明确的规定或准则
- 不同的厂商有不同分法:三层、四层、五层…
云栈的三层模式
- 基础设施即服务层:不仅包括硬件设施,还包括虚拟化,因为各种硬件规格、性能、质量不统一,无法在其上直接建造云平台。虚拟化可以将各种硬件变为统一的标准件。
- 平台即服务层:在虚拟化的 IT 资源上构建起应用程序的运行环境,对外提供的产品包括计算环境、云存储库、通信机制、控制调度机制,统称为云计算平台或云解决方案栈。消费的是云基础设施服务,支持的是上层的云应用程序。
- 应用程序层-软件即服务层:
- 基于网络进行远程访问的商用软件
- 集中式管理,而非分散在每个用户站点
- 单个实例多个租户架构——一对多模型
- 按照用量计费(实际应用中按月或其他时间周期计费)
从管理角度看,与云栈分层架构对应的是云计算技术体系结构——如何实现三层服务。不同供应商提供了不同的解决方案,没有统一的技术体系结构。综合不同厂商,构造如下参考体系结构:
云计算技术体系结构
IaaS 实现机制
用户交互接口向应用以 Web Services 方式提供访问接口,获取用户需求。
服务目录是用户可以访问的服务清单。
系统管理模块负责管理和分配所有可用的资源,其核心是负载均衡。
配置工具负责在分配的节点上准备任务运行环境。
监视统计模块负责监视节点的运行状态,并完成用户使用节点情况的统计。
物理云栈: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.
平台管理员:位于各厂商特定资源之上的云计算资源管理层
开发者:通过其为应用提供基础设施和相应软件依赖;云编排平台:基于应用模板部署可扩展应用
最终用户:每一个最终用户被定义为一个租户,为租户提供自助服务的基础设施和应用管理系统
本质上 OpenStack 通过抽象和一个通用的 API 接口控制不同厂商提供的硬件和软件资源,是对计算系统的更高层次的抽象。
逻辑云体
云栈是从纵向角度看云计算的整体架构,那么云体则主要是从横向角度看其架构模式
类比传统操作系统横向切面:运行时环境 + 应用本身(程序+数据)
- 环境:进程/线程/内存管理 + 文件系统 + 进程间通信/网络
- 云应用程序:类似传统应用
- 云运行时环境:计算资源(服务器或 CPU + 本地存储)、持久存储、通信(消息队列+网络)
物理云体:云数据中心
数据中心是数据集中存储、计算、交换的中心,其发展与计算机(包括存储和网络设备)的发展紧密联系在一起。
- 20 世纪 60 年代:商用计算机应用推广, IBM Mainframe 系列主机,几十吨、占地数百平方米主机机房:只有一台主机,没有网络、专门的存储节点
- 20 世纪 80 年代:随着大规模集成电路的发展(我国台湾),微型计算机开始出现与普及,数据存储和计算开始了分散的趋势
- 90 年代大量微型机开始扮演客户端角色,大型任务如数据库查询被迁移到服务器端,著名的客户端服务器模式大行其道,推动了数据中心发展
- 21 世纪随着互联网成为发展主角,几乎所有公司都需要接入互联网并持续运行业务;但不需要每个公司都有一套完备的基础设施,于是 IDC(Internet Data Center)应运而生
- 传统数据中心暴露的问题:
- 过多的机器
- 机器利用率过低
- 应用迁移太困难
- 存储需求增长太快
- 软件定义的数据中心
- 重新重视虚拟化,以提高资源利用率
- 不仅应用到计算节点,复制到存储、网络、安全等方方面面
- 软件定义计算:计算节点的虚拟化:虚拟机成为计算调度和管理的单位,不中断服务的前提下动态迁移。
- 软件定义存储:分离管理接口与数据读写;统一的管理接口与上层管理软件交互;数据读写可以兼容各种不同的链接方式。
- 软件定义网络:数据平面(数据转发)和控制平面(转发表的设置等)分离;集中控制,分布式转发。