【问题标题】:Will using a Cloud PaaS automatically solve scalability issues?使用 Cloud PaaS 会自动解决可扩展性问题吗?
【发布时间】:2012-04-09 03:53:45
【问题描述】:

我目前正在寻找一种云 PaaS,它可以让我扩展应用程序以处理 1 到 1000 万+ 用户之间的任何事情......我从来没有处理过这么大和我能解决的大问题'似乎没有一个明确的答案是,如果你开发一个标准应用程序,比如说一个带有关系数据库和soap-webservices的标准应用程序,这个应用程序在部署到Paas解决方案时会自动扩展还是你仍然需要构建应用程序? -over,冗余和所有这些事情?

假设我将 Spring Hibernate 应用程序部署到 Amazon EC2 并创建安装了 Tomcat 的 Ubuntu Server 的单个实例,该应用程序会无限扩展还是需要更多 Ubuntu 实例?如果需要多个 Ubuntu 实例,亚马逊是否会负责在两个实例上运行应用程序,还是由开发人员负责?关于数据库存储,我是否可以在 EC2 上安装一个可以随着数据库增长而扩展的数据库,或者如果我希望它无限扩展,我是否需要使用他们的 API 之一?

CloudFoundry 允许您在本地构建并直接部署到他们的 PaaS,但由于它处于测试阶段,因此您可以使用的资源数量有限制,如果我没记错的话,数据库限制为 128MB,所以这是不行的去吧。有人建议在 Amazon EC2 上安装 CloudFoundry,它如何扩展以及如何处理数据库层?

GAE(Google App Engine),这是否允许我只部署一个应用程序而不必担心它如何扩展和实现冗余?似乎有一些限制,你可以和不能在 GAE 上运行,最近它们的价格上涨让相当多的开发人员感到不安,与其他提供商相比,它真的那么贵吗?

所以基本上,它会扩展吗?需要做什么才能扩展?

【问题讨论】:

  • 我认为可扩展性从来都不是神奇的,而且总是需要大量工作(尤其是考虑到数百万用户时)。
  • 假设您有两个月的时间来构建这样一个应用程序并同时处理可扩展性,哪个提供商将允许您在您的 mac/桌面上演示该应用程序,然后在第二天拉取无缝加载超过 1000 万用户的开关?
  • @JanVladimirMostert - 仅 AFAIK 的 AppEngine 将无缝扩展,例如:您上传代码,其余的工作由它完成。
  • @BasileStarynkevitch - GAE 自动进行可扩展性。为了实现这一点,它会迫使您针对他们的专有和受限 API 编写代码。

标签: google-app-engine amazon-ec2 cloud amazon-simpledb cloud-foundry


【解决方案1】:

一篇文章有​​很多问题。无论如何:

  1. Amazon EC2 不会随负载自动扩展。 EC2 基本上只是一个虚拟机。您可以使用Auto ScalingElastic Load Balancing 实现EC2 实例的扩展。

  2. SQL 数据库的扩展性很差。这就是人们首先开始使用 NoSQL 数据库的原因。最好查看您的云提供商作为托管服务提供的数据库:GAE 上的Datastore 和亚马逊上的DynamoDB

  3. 在 EC2 实例上安装您自己的数据库非常不切实际,因为 EC2 有 ephemeral storage(它在重新启动时会丢失“磁盘”上的所有数据)。

  4. GAE 数据存储实际上是一个大型数据库,适用于在其上运行的所有应用程序。所以它的可扩展性非常好——你的数百万用户对它来说应该不是问题。 http://highscalability.com/blog/2011/1/11/google-megastore-3-billion-writes-and-20-billion-read-transa.html

  5. 是的,App Engine 可以自动扩展,包括前端实例和数据库。你不需要做任何特别的事情来使其扩展,只需使用他们的 API。

  6. 您可以使用 AppEngine 执行的操作有一些限制:

    A.没有本地存储(文件系统) - 您需要使用 Datastore 或 Blobstore。

    B. Comet 仅通过其专有的 Channels API 得到支持

    C. Datastore 是一个 NoSQL 数据库:没有 JOIN、有限的查询、有限的事务。

  7. GAE 的成本还不错。我们每天处理 100 万个请求,每天大约需要 5 美元。最大的节省来自您在 GAE 上不需要系统管理员(但 EC2 确实需要系统管理员)。与人力成本相比,GAE 非常便宜。

一些省钱(加速)GAE 的提示:

A.在 Datastore 中使用 get 而不是查询(需要仔细制作自然键)。

B.使用 memcache 缓存您从数据存储中获得的数据。这可以通过 objectify 自动完成,它是 @Cached annotation

C.非规范化数据。这意味着您在不同的地方冗余地写入数据,以便在尽可能少的操作中获取数据。

D.如果您有很多来自不使用 cookie 的设备的 REST 请求,则关闭会话支持(或像我们一样滚动您自己的)。会话在后台使用数据存储,并且对于它确实获取和放置的每个请求。

E.阅读adjusting app settings。尝试不同的设置(取决于您的应用程序对请求延迟的容忍程度以及您的流量模式/峰值)。我们能够将前端实例减少 70%。

【讨论】:

  • 假设我选择了 Elastic Load Balancing,我如何扩展每个实例从中获取数据的数据库层,或者 RDS 是否会为我做到这一点?
  • 不,在 EC2 上运行自己的数据库非常困难:1. 临时存储易失,2. 块存储很慢。 3. 您必须自己在分布式设置中设置数据库。
  • 短一点:亚马逊不会自动扩展您的数据库。您需要使用他们的数据库服务之一来实现这一点。
  • 这很好地解释了它,所以再见关系数据库......猜猜谷歌 App Engine 是更好的开发选择,即使它看起来更昂贵并将你锁定在他们的平台上。在 CloudFoundry 退出测试版之前,通过 API 工作似乎是唯一的选择。谢谢彼得!
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2011-04-26
  • 2011-10-06
  • 1970-01-01
  • 2018-06-19
  • 2021-12-20
  • 1970-01-01
  • 2020-01-14
相关资源
最近更新 更多