考虑到我已经有很多我想保留的代码工作,GAE 有什么替代方案。换句话说,我在挖蟒蛇。但是,我的用例更多是请求数量较少、CPU 使用率较高的用例,而且我担心我可能无法永远使用 App Engine。我听到很多人谈论亚马逊网络服务和其他类型的云提供商,但我很难看到大多数其他产品在哪里提供应用程序的服务范围(数据查询、用户身份验证、自动扩展)引擎提供。我在这里有什么选择?
13 回答
AppScale
AppScale 是一个允许用户部署和托管自己的 Google App Engine 应用程序的平台。它在 Amazon EC2 和 Eucalyptus 以及 Xen 和 KVM 上自动执行。它由AppScale Systems开发和维护。它支持 Python、Go、PHP 和 Java Google App Engine 平台。
http://github.com/AppScale/appscale
同时...
......它几乎是 2015 年,似乎容器是前进的方式。GAE 的替代品正在出现:
Google 已经发布了Kubernetes ,这是他们开发的用于管理 GCE 容器的容器调度软件,但也可以在其他集群上使用。
Docker 上有一些即将推出的 PaaS,例如
有趣的东西值得关注。
我不认为 GAE 现在有另一种选择(关于代码可移植性),因为 GAE 属于自己的一类。当然 GAE 是云计算,但我认为 GAE 是云计算的一个子集。亚马逊的 EC2 也是云计算(以及 Joyent Accelerators、Slicehost Slices),但显然它们也是两种不同的野兽。所以现在你需要根据你的需要重新考虑你的架构。
GAE 的直接好处是它基本上免维护,因为它与基础设施(可扩展的 Web 服务器和数据库管理)相关。GAE 更适合那些只想专注于他们的应用程序而不是底层系统的开发人员。在某种程度上你可以认为开发人员友好。现在还应该说,这些其他云计算解决方案也试图通过提供 VM 映像/模板,让您只关心您的应用程序。最终,您的需求将决定您应该采取的方法。
现在考虑到所有这些,我们还可以构建混合解决方案和变通办法,也可以满足我们的需求。例如,GAE 似乎并不直接适合您描述的这个特定应用程序需求。换句话说,GAE 提供的请求数量相对较多,cpu 周期数量较少(不确定付费版本是否会有所不同)。
然而,解决这一挑战的一种方法是构建一个定制的解决方案,其中将 GAE 作为前端,将 Amazon AWS(EC2、S3 和 SQS)作为后端。有人会说您不妨在 AWS 上构建整个堆栈,但这也可能涉及重写大量现有代码。此外,作为一种解决方法,之前的stackoverflow 帖子描述了一种在 GAE 中模拟后台任务的方法。此外,您还可以查看HTTP Map/Reduce来分配工作负载。
截至 2016 年,如果您愿意将PaaS(平台即服务)和FaaS(功能即服务)归为同一个无服务器计算类别,那么您有一些 FaaS 选项。
所有权
AWS 拉姆达
AWS Lambda 让您无需预置或管理服务器即可运行代码。您只需为您消耗的计算时间付费 - 当您的代码未运行时不收取任何费用。借助 Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码 - 全部实现零管理。只需上传您的代码,Lambda 就会处理运行和扩展代码所需的一切,并具有高可用性。您可以将代码设置为从其他 AWS 服务自动触发,或直接从任何 Web 或移动应用程序调用它。
AWS Step Functions是对 AWS Lambda 的补充。
AWS Step Functions 可以使用可视化工作流程轻松协调分布式应用程序和微服务的组件。从每个执行离散功能的单个组件构建应用程序可以让您快速扩展和更改应用程序。Step Functions 是一种可靠的方式来协调组件并逐步执行应用程序的功能。Step Functions 提供了一个图形控制台,可将应用程序的组件排列和可视化为一系列步骤。这使得构建和运行多步骤应用程序变得简单。Step Functions 会自动触发和跟踪每个步骤,并在出现错误时重试,以便您的应用程序按预期顺序执行。Step Functions 记录每个步骤的状态,因此当出现问题时,您可以快速诊断和调试问题。
谷歌云函数
截至 2016 年,它处于 alpha 阶段。
Google Cloud Functions 是一种轻量级、基于事件的异步计算解决方案,可让您创建小型、单一用途的函数来响应云事件,而无需管理服务器或运行时环境。来自 Google Cloud Storage 和 Google Cloud Pub/Sub 的事件可以异步触发 Cloud Functions,或者您可以使用 HTTP 调用进行同步执行。
Azure 函数
基于事件的无服务器计算体验可加速您的开发。它可以根据需求进行扩展,您只需为消耗的资源付费。
打开
无服务器
无服务器框架允许您将自动扩展、按执行付费、事件驱动的功能部署到任何云。我们目前支持 Amazon Web Service 的 Lambda,并且正在扩展以支持其他云提供商。
IronFunctions
IronFunctions 是适用于任何云(私有、公共或混合)的开源无服务器计算平台。
FaaS 与 CaaS(容器即服务)的竞争程度还有待观察。前者似乎更轻巧。两者似乎都适合微服务架构。
我预计功能(如在 FaaS 中)不是终点,而且多年以后我们将看到进一步的服务抽象,例如仅测试开发,然后是简单语言场景。
Amazon 的 Elastic Compute Cloud 或 EC2 是一个不错的选择。您基本上在他们的服务器上运行 Linux 虚拟机,您可以通过 Web 界面(用于开机和关机)进行控制,当然也可以通过 SSH 或您通常设置的任何方式进行访问……而且由于它是您控制的 linux 安装,您可以如果你愿意,当然可以运行 python。
Microsoft Windows Azure 可能值得考虑。恐怕我没用过它,所以不能说它是否有任何好处,你应该记住它目前是一个 CTP。
您可能还想看看AWS Elastic Beanstalk - 它与 GAE 功能更接近,因为它被设计为 PaaS,而不是 IaaS(即 EC2)
有点晚了,但我会给 Heroku 一个机会:
Heroku 是一个多语言云应用平台。使用 Heroku,您根本不需要考虑服务器。您可以使用所选编程语言的现代开发实践编写应用程序,并使用 SQL 和 NoSQL 数据库、Memcached 等附加资源来支持它。您使用 Heroku 命令行工具管理您的应用程序,并使用 Git 修订控制系统部署代码,所有这些都在 Heroku 基础架构上运行。
如果您对云感兴趣,并且可能想创建自己的用于生产和/或测试的云,您必须查看Eucalyptus。据称它的代码与 EC2 兼容但开源。
我更感兴趣的是如何轻松地将 App Engine 与用于 CPU 密集型请求的另一台服务器耦合。
TyphoonAE正在尝试这样做。我还没有对其进行测试,但虽然它仍处于测试阶段,但它看起来至少在积极开发中。
向云计算的转变发生得如此之快,以至于您没有时间浪费在测试不同的平台上。如果您也对 Java 感兴趣,我建议您尝试Jelastic 。
Jelastic 最大的优点之一是您不需要对应用程序的代码进行任何更改,除了应用程序功能的更改,但不是因为所选平台需要这样做。参考这一点,您实际上并没有浪费您的时间。部署过程完美无缺,您可以将 .war 文件部署到任何地方。使用 GAE 需要您根据系统需求修改应用程序。如果您碰巧开始使用 Java 并开始寻找更灵活的平台,Jelastic 是一个兼容的替代方案。
您还可以使用 Red Hat 的 Cape Dwarf 项目,在 Wildfly 应用服务器(以前的 JBoss)之上运行 GAE 应用程序而无需修改。
你可以在这里查看: