各种平台即服务框架的比较研究
1. INTRODUCTION
云计算[2]是一种广泛使用的技术,通过网络将计算机连接起来,利用虚拟化技术提供存储和计算服务。云计算必须满足五个基本特征:按需服务、网络访问、资源池化、弹性和可度量的服务。为了实现这五个基本特征,云计算提供了三种服务模型:软件即服务(SaaS)、平台即服务(PaaS)[8]和基础设施即服务(IaaS)[9]。云计算服务模型如图1所示。客户关系管理(CRM)应用程序是SaaS中广泛使用的服务。以服务形式提供的应用平台被称为平台即服务(PaaS),用于部署用户代码。AppScale[3], 、Cloud Foundry、Cloudify 和 OpenShift 开源环境可用作平台即服务(PaaS)。基础设施即服务(IaaS)用于构建其私有基础设施,从而降低设置成本。基础设施即服务(IaaS)可提供诸如计算、存储和通信等虚拟化资源。Eucalyptus[1], 、开源堆栈和云堆栈开源项目可用于提供基础设施即服务(IaaS)。
本文将重点讨论平台即服务(PaaS)模式。使用PaaS可以轻松部署、运行和扩展应用程序。一些PaaS提供的语言和框架支持有限,无法提供云应用所需的关键应用服务,有时还限制应用程序仅部署在单一云环境中。而开放PaaS则提供了私有云、公共云或混合云的选择,支持多种开发人员框架如Spring、Ruby或Java,以及MongoDB、MySQL或 PostgreSQL等应用服务,用于运行应用程序。本文探讨了主要开源PaaS框架的架构组件,包括AppScale、Cloud Foundry、Cloudify和OpenShift,同时还介绍了Stratos、 mOSAIC、BlueMix、Heroku、Amazon Elastic Beanstalk、Microsoft Azure、 Google App Engine和STAKATO等PaaS框架。本文结构如下:第2节介绍AppScale及其组件;第3节阐述Cloud Foundry的架构及组件;第4节解释Cloudify开放PaaS;第5节讨论OpenShift;第6节介绍其他PaaS框架;第7节对PaaS框架进行比较;最后第8节总结全文。
2. APPSCALE
AppScale[4] 是一个可扩展、分布式且容错的云运行时系统,可在集群资源上执行。它能够部署在 Xen[5], 基于内核的虚拟机 (KVM)、Amazon EC2 或 Eucalyptus 上。AppScale 的初始设计在架构中采用了标准的三层 Web 部署模型。在后续的设计周期中,向 AppScale 添加了更多组件。表1 展示了 AppScale 的组件、用于设计组件的语言 以及它们的功能。
| 组件 | 语言 | 功能 |
|---|---|---|
| AppController | Ruby | 在每个节点上执行,并在客户虚拟机启动时自动启动 |
| 应用负载均衡器 | Ruby on Rails | 处理来自用户的到达请求并将其转发到应用服务器 |
| AppServer | Python | 通过多个远程主机运行以支持应用程序的自动执行 |
| 数据库主服务器 | Python | 为应用程序和进程提供持久存储 接收来自应用程序的协议缓冲区,并代表其向数据存储发出读取和写入数据的请求 |
| 数据库从服务器 | Python | 促进分布式、可扩展且容错的数据管理 |
| AppScale 工具 | Ruby | 启动 AppScale 系统,部署和拆除应用程序 应用程序,查询状态和性能 AppScale 部署或应用程序,并进行操作 |
AppScale 配置和状态
3. CLOUD FOUNDRY
Cloud Foundry[13]是一个开放PaaS,提供多种云、开发人员框架和应用服务的选择。Cloud Foundry 使应用程序开发更加快速和便捷。我们可以借助 Cloud Foundry 构建、测试、部署和扩展应用程序。它是一个开源项目,可通过多种私有云发行版和公有云实例获得。Cloud Foundry 最初是一个用于在亚马逊网络服务上部署 Java Spring 应用程序的平台。威睿收购了 Cloud Foundry 并将其发展为一个开源的、支持多语言和多框架的平台即服务。Cloud Foundry 支持多种语言和多种运行时环境,例如 Java,Ruby、Scala、Spring 和 Node.js。Cloud Foundry 可在笔记本电脑、台式机、微型云、私有云或公有云等任何设备上运行,因此被称为开放PaaS,如图2所示。Cloud Foundry 的平台包含三个维度:框架选择、应用服务选择和部署选择。Cloud Foundry 支持用于 Java 的 Spring,用于 Ruby 的 Rails 和 Sinatra,支持 Node.js 以及 Groovy、Grails 和 Scala 等 JVM语言。它还支持 Microsoft .NET Framework,并成为首个支持 .NET 的非微软平台。
Cloud Foundry 支持使用 RabbitMQ 进行消息传递,使用 MongoDB 和 Redis 作为 NoSQL 数据库,以及使用关系型数据库 MySQL 和 PostgreSQL。通过 Micro Cloud Foundry,Cloud Foundry 可以部署在笔记本上。它是专为在虚拟机中运行而设计的完整版本的 Cloud Foundry。它还可以部署在私有云或公有云上。这些特性使 Cloud Foundry 成为一种灵活的PaaS。
Cloud Foundry 组件负责路由、认证、消息传递、日志记录、应用存储与执行,提供服务并管理应用生命周期。路由器将入站流量路由到适当的组件,通常是云控制器或 DEA (Droplet Execution Agent)节点上运行的应用程序。用户账户与认证 (UAA) 服务器与登录服务器协同工作,提供身份与认证管理。OAuth2服务器用作用户账户与认证服务器。云控制器和健康管理器组件负责 Cloud Foundry 中的应用生命周期。云控制器负责管理应用程序的生命周期。当开发者将应用程序推送到 Cloud Foundry 时,目标是云控制器。云控制器随后存储原始应用数据,创建记录以跟踪应用程序元数据,并指示 DEA 节点编译和运行应用。健康管理器监控应用程序以确定其状态、版本和实例数量。应用程序状态可能是运行中、已停止或已崩溃。健康管理器确定应用程序的期望状态、版本和实例数量。它协调应用程序的实际状态与期望状态。健康管理器指示云控制器采取行动,纠正应用程序状态中的任何差异。Droplet Execution Agent 管理应用程序实例,跟踪已启动实例,并广播状态消息。
应用程序实例位于warden容器内。容器化可确保应用程序实例独立运行,公平地获取资源配额,并免受其他高负载实例的干扰。Blob存储用于保存应用程序代码、构建包和 droplet。应用程序通常依赖于数据库或第三方SaaS提供商等服务。当开发者为应用程序配置并绑定服务时,相应服务的代理负责提供服务实例。Cloud Foundry使用轻量级的发布‐订阅和分布式队列消息系统实现组件之间的内部通信,该通信通过消息总线进行。指标收集器从各个组件收集性能指标,运维人员可利用这些信息监控Cloud Foundry实例。应用程序日志聚合器将应用程序日志实时传输给相应的开发者。Cloud Foundry的组件如图 3所示。
4. CLOUDIFY
Cloudify[14]是另一个开源PaaS云应用管理器。它可自动化在云环境中执行和管理应用程序所需的常见流程。Cloudify 由三个主要组件构成,分别是命令行接口客户端、代理和管理器。命令行接口客户端是一个用 Python 编写的可执行文件,它将 Python 及相关依赖项打包成一个可执行文件。该客户端可在 Windows、Linux 和 Mac操作系统上运行。命令行接口客户端执行两项任务:一是管理器引导过程,二是管理应用程序。管理器引导是指安装 Cloudify管理器的过程。命令行接口客户端为用户提供了一整套用于部署和管理应用程序的功能,包括日志和事件浏览。
Cloudify代理负责使用一组插件来管理管理器的命令执行。每个应用程序部署都有一个管理器端代理,以及可选的应用虚拟机(VM)上的代理。管理器端代理处理与基础设施即服务(IaaS)相关的任务,例如创建虚拟机或网络,以及将浮动IP绑定到虚拟机。管理器端代理还可以与其他工具(如REST)配合使用,以远程执行任务。应用端代理可选择性地部署在应用程序虚拟机上。用户可以在蓝图中声明哪些虚拟机将安装代理。应用端代理由管理器端代理在创建虚拟机任务期间安装。一旦运行,应用端代理可以安装插件并在本地执行任务。典型任务包括中间件安装与配置,以及应用程序模块部署。
Cloudify管理器负责部署和管理在蓝图中描述的应用程序。该管理器的主要职责是运行工作流脚本中定义的自动化流程,并向代理发送执行命令。Cloudify通过REST API进行控制,该REST API涵盖所有云编排和管理功能。Cloudify的Web图形用户界面与REST API协同工作,以提供附加价值和可视化能力。Cloudify使用工作流引擎,通过内置和自定义工作流实现自动化流程。工作流引擎负责调度和编排用于创建或操作应用程序组件的任务。用户可以使用提供对拓扑组件访问权限的API,通过Python编写自定义工作流。
Cloudify 使用不同的数据库作为数据存储,采用多种技术和消息传递机制,并使用不同的服务器作为前端。完整的技术栈如图 4 所示。Cloudify 使用 Elasticsearch 作为其部署状态的数据存储。部署模型和运行时数据以 JSON 文档的形式存储。蓝图存储在 Elasticsearch 中,并用作运行时数据库。Cloudify 使用 InfluxDB 作为监控指标仓库。InfluxDB 为指标和指标元数据提供灵活的模式以及查询语言。Cloudify 将监控工具报告的每个指标存储到 InfluxDB 中,并定义基于时间的聚合以及统计计算。Cloudify 使用 RabbitMQ 任务代理进行消息传递。Cloudify 提供一个策略引擎,用于运行自定义策略,从而对可用性、服务级别协议等做出运行时决策。例如,在安装过程中,策略引擎消费来自监控探针或工具的事件流。该策略引擎分析这些事件流以决定特定节点是否已启动并运行,以及是否提供所需功能。策略由工作流引擎注册、激活、停用和删除。出于日志记录目的,使用logstash,代理在处理过程中起主要作用。Nginx代理和文件服务器、Flask或Gunicorn REST服务器,以及Node.js GUI服务器可在Cloudify中用作前端。
5. OPEN SHIFT
OpenShift[15] 使我们能够在云中创建、部署和管理应用程序。OpenShift 的两个基本功能单元是代理和节点服务器。代理与节点之间通过消息队列服务进行通信。代理是所有应用程序管理活动的单一联系点,负责管理用户登录、DNS、应用程序状态以及应用程序的总体编排。客户不直接联系代理,而是通过 Web 控制台或 CLI 工具经由基于 REST 的 API 与代理交互。节点是用于托管用户应用程序的系统。为了实现这一点,节点配置了齿轮和插件盒。该划分如图5所示。
齿轮代表了节点的中央处理器、内存和基础存储中分配给每个应用程序的部分。应用程序通常无法使用超过分配给该齿轮的这些资源,存储除外。OpenShift支持多种齿轮配置,使用户能够在应用设置时选择不同的齿轮大小。创建应用程序时,代理会指示节点创建一个新的齿轮来容纳该应用程序。插件盒表示可插拔组件,可在单个应用程序内组合使用。这些组件包括编程语言、数据库引擎以及各种管理工具。用户可以从直接通过 OpenShift提供的内置插件盒中选择,或从git仓库导入的社区插件盒中选择。内置插件盒要求相关的语言和数据库引擎安装在每个节点上。
6. MORE PAAS FRAMEWORKS
在本节中,我们将简要介绍Stratos、mOSAIC、IBM BlueMix、Heroku、Amazon Elastic Beanstalk、Microsoft Azure和Google App Engine,以及Stakato PaaS框架。
6.1. STRATOS
Apache Stratos[6] 是一个高度可扩展的平台即服务框架,可帮助在所有主要云基础设施上运行 Apache Tomcat、PHP 和 MySQL 应用程序,并且能够扩展以支持更多环境。对于开发者而言,Stratos 提供了一个基于云的环境,用于开发、测试和运行可扩展的应用程序。在单 JVM部署模型中,Stratos 最多可容纳 100 个墨盒实例;在分布式部署模型中,Stratos 最多可容纳 1000 个墨盒实例。
6.2. MOSAIC
mOSAIC[10] 是一个用于设计和开发面向多云的应用程序的开源API和平台。该架构采用开放且标准的接口进行设计,其主要目标是提供统一的云编程接口,使开发者能够灵活地在不同云服务商之间构建应用程序。提供集成功能的主要中间件组件包括Cloudlet、连接器、互操作性以及驱动API。Cloudlet和连接器API层有助于将其集成到开发者在应用程序中使用的目标语言环境。驱动API层在原生资源API之上提供了资源分配的抽象。互操作性API是一个中间件层,用于集成连接器API以及可用不同语言编写的兼容驱动API实现。它是一种遵循远程过程调用(RPC)模型的远程API,具备序列化、请求/响应关联和错误检测等功能。除了云集成功能外,mOSAIC框架还承诺采用面向语义的本体来描述云资源。
6.3. BLUEMIX
Bluemix[16]是 IBM 推出的最新云产品。BlueMix 允许开发者在云上创建、部署和管理应用程序。它是基于开源平台即服务(PaaS)Cloud Foundry 实现的 IBM 开放云架构的产物。它提供可轻易与云应用集成的企业级服务,且无需了解这些服务的安装或配置方法。
6.4. HEROKU
Heroku[17]是一种构建在 Amazon EC2 之上的平台即服务(PaaS)解决方案,支持用 Ruby、Node.js、Java、Python、Clojure、Scala 和 PHP 编写的应用程序的部署、运行和管理。它运行在 Amazon EC2 虚拟机之上,提供一个现成的设置环境,开发者可以上传代码、编译并运行。所有这些操作都可以通过一些简单的命令完成。开发者可以在无需了解底层基础设施的情况下测试和部署应用程序。Heroku 能够管理项目扩展所需的资源。
6.5. ELASTIC BEANSTALK
Amazon Elastic Beanstalk[12]支持用户将其应用程序部署到亚马逊网络服务(AWS)云平台。AWS Elastic Beanstalk 平台即服务框架允许用户创建应用程序并将其推送到一组可定义的 AWS 服务中,包括 Amazon EC2、Amazon S3、亚马逊简单通知服务(SNS)、Amazon CloudWatch、自动扩展和弹性负载均衡器。Elastic Beanstalk框架支持多种语言进行云开发。
6.6. AZURE
微软Windows Azure[11]允许在Azure云平台进行应用部署和管理。微软Azure框架提供了一个云服务操作系统和一系列服务,以支持云平台上应用程序的轻松开发和运行。Azure提供了构建和管理跨越消费者Web到企业级应用场景的应用程序的功能。
6.7. APP ENGINE
Google App Engine[18]允许开发者在谷歌云平台上部署其应用程序。应用引擎框架允许开发者使用Java、Python和其他一些语言来开发他们的Web应用程序。
6.8. STAKATO
Stackato[7]是基于Cloud Foundry、Docker和其他开源组件的开放PaaS软件。它具备多租户能力,可安装在内部基础设施或公有云上。多租户能力非常重要,因为它允许我们在同一IaaS基础设施上运行多个应用程序。Stackato允许开发者将应用程序自动打包到各自的Docker容器中,并根据需求动态扩展或缩减实例。Stackato会配置所有必需的组件,包括语言、框架和服务绑定,自动化日志记录与监控,支持自动化应用版本控制和回滚。
7. 主要PAAS的COMPARISON
本节以表格形式对主要PaaS框架进行了比较。表2展示了基本功能及其对应的AppScale、 Cloud Foundry、Cloudify和OpenShift架构组件。
| 功能 | AppScale | Cloud Foundry | Cloudify | OpenShift |
|---|---|---|---|---|
| 核心功能 | AppController | 云控制器 | 管理器 | 代理 |
| 提供第三方数据库服务 | 数据库主服务器 | 服务代理 | 代理 | 墨盒 |
| 入站流量的路由流量 | AppLoadBalancer | Router | Manager | REST API |
|
查询状态
apps | AppScale 工具 | 云控制器 | 命令行接口客户端 | 代理 |
| 消息传递 | AppController | 消息总线 | 管理器 | 代理 |
| 应用程序实例管理 | 应用服务器 | Droplet Execution Agent | 代理 | Node |
| 应用程序状态更改 |
应用负载均衡器
数据库从服务器 |
健康管理器
看守 | 管理器 | 代理 |
| 容器化 | 代理 | Gear | ||
| 用户负载均衡请求 | 应用负载均衡器 | Droplet Execution Agent | 管理器 | 代理 |
| 框架提供者 | 应用服务器 | Blob存储 | 代理墨盒 |
表3展示了AppScale、Cloud Foundry、Cloudify、OpenShift、Apache Stratos、mOSAIC、 IBM BlueMix、Heroku、Amazon Elastic Beanstalk、Microsoft Azure和Google App Engine等平台即服务平台支持的语言(Java、Python、Ruby、Perl、Groovy)、数据库( MongoDB、MySQL、HBase、PostgreSQL)、框架(Spring、Rails和Flask)以及部署方式 (私有或公共)。在OpenShift中,语言和数据库以插件盒的形式提供支持,同时允许用户自定义插件盒。Cloud Foundry以构建包的形式提供语言支持,用户也可以选择编写自己的构建包。Cloudify、Cloud Foundry和OpenShift具备可扩展语言支持功能。AppScale、Cloud Foundry、Cloudify、OpenShift、Apache Stratos和mOSAIC是开源云平台,因此其部署方式为 私有PaaS。IBM BlueMix、Heroku、Amazon Elastic Beanstalk、Microsoft Azure和 Google App Engine平台即服务环境可在公有云上部署,且这些平台并非开源,因此被视为公共 PaaS。
| PaaS | 语言 | 数据库 | 框架 | 部署 |
|---|---|---|---|---|
| AppScale |
Python、Java、Go语言
PHP | Cassandra, HBase, Hypertable MongoDB SimpleDB, MySQL | Django, Flask,Spring | 私有PaaS |
| Cloud Foundry |
Java、Ruby、Scala、 Node.js、Groovy、 Grails、PHP、Go、
Python | MonogoDB、 MySQL, PostgreSQL | Spring, Rails,Grails, Play,Sinatra | 私有PaaS |
| Cloudify | Java、PHP、Ruby | MySQL, MongoDB | Not 支持的 | 私有PaaS |
| OpenShift |
Java、PHP、Ruby、 Python、Perl、 JavaScript、
Node.js | PostgreSQL、 MySQL, MongoDB |
Rails,Flask, Django, Drupal,
Vert.x | 私有PaaS |
| Stratos | Java、PHP | MySQL | Not 支持 | 私有PaaS |
| mOSAIC | Java | 不支持 | Not 支持 | 私有PaaS |
| BlueMix | PHP、Python、 Ruby、Java Node.js、Go语言 | Cleardb Elephantsql | Sinatra、Rails | 公共PaaS |
| Heroku | Scala, Ruby, Python, PHP, Node.js, Java, Groovy, Go, Clojure | PostgreSQL | Django, Flask、Rails, Grails、Play | 公共PaaS |
| Amazon Elastic Beanstalk | .Net, Go语言, Java, Node.js, PHP, Python, Ruby | 不支持 | Not 支持 | 公共PaaS |
| Microsoft Azure | Java, .Net, Node.js, Ruby, Python,PHP | 不支持 |
CakePHP,
Django | 公共PaaS |
| Google App Engine |
Go语言, Java, PHP,
Python | 不支持 | Django | 公共PaaS |
表4对比了AppScale、Cloud Foundry、Cloudify、OpenShift、Apache Stratos、 mOSAIC、IBM BlueMix、Heroku、Amazon Elastic Beanstalk、Microsoft Azure和 Google App Engine等PaaS框架的关系型数据库支持、NoSQL支持、水平扩展、垂直扩展、 自动扩展、Spring框架支持、附加组件以及语言可扩展性功能。表4中在相应框架的列中用 “是”表示支持的功能,用“否”表示不支持的功能。
| 功能 | AppScale | Cloud Foundry | Cloudify | OpenShift | Stratos | mOSAIC | BlueMix | Heroku | Elastic Beanstalk | Microsoft Azure | App Engine |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 关系型数据库支持 | Yes | Yes | Yes | Yes | Yes | No | No | Yes | No | No | No |
| NoSQL 数据库支持 | Yes | Yes | Yes | Yes | No | No | No | No | No | No | No |
| 水平扩展 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
| 垂直扩展 | No | Yes | No | Yes | No | No | Yes | Yes | Yes | Yes | No |
| 自动扩展 | Yes | No | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes |
| Spring 框架支持 | Yes | Yes | No | No | No | No | No | No | No | No | No |
| 附加组件支持 | No | No | No | No | No | No | Yes | Yes | No | Yes | Yes |
| 语言可扩展性 | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | Yes | No |
8. CONCLUSIONS
本文介绍了云计算服务模型,如软件即服务(SaaS)、平台即服务(PaaS)和基础设施即服务 (IaaS)。通过AppScale、Cloud Foundry、Cloudify和OpenShift等开放PaaS平台,详细 解释了PaaS。AppScale的组件以表格形式说明,Cloud Foundry、Cloudify和OpenShift的 组件则通过图表进行详细阐述。本文还介绍了Apache Stratos、mOSAIC、IBM BlueMix、 Heroku、Amazon Elastic Beanstalk、Microsoft Azure、Google App Engine和 Stakato PaaS框架。对AppScale、Cloud Foundry、Cloudify和OpenShift这四个开放 PaaS组件进行了比较研究。列出了AppScale、Cloud Foundry、Cloudify、OpenShift、 Apache Stratos、mOSAIC、IBM BlueMix、Heroku、Amazon Elastic Beanstalk、 Microsoft Azure和Google App Engine等PaaS环境所支持的语言、数据库、框架以及部署方式(公共PaaS或私有PaaS)。同时对上述PaaS框架的关系型数据库支持、NoSQL支持、水平 扩展、垂直扩展、自动扩展、Spring框架支持以及语言可扩展性等功能特性进行了对比分析。
691

被折叠的 条评论
为什么被折叠?



