如何确定扩展Web应用程序的方向

我目前正在开发一个Web应用程序,并试图找出主办它的最佳方式。 我环顾四周,使用了几十个不同的措辞,阅读了数百个post和评论。 但他们似乎都没有回答这个问题的特定方面。 他们解释了如何计算一个应用程序的特定实例可以处理的当前用户的数量。 但不是如何确定去那里达到你的目标。 我已经看过云,我已经看过VPS,当然我认为所有的都有不同的价格,但最终我意识到这一切都归结为您需要扩展的方向(垂直,向任何一个方向添加更多的权力应用程序的实例通过更多的CPU功率和更多的RAM;或水平地,添加应用程序的新实例和负载缩放它们)

第1部分

现在让我们来看一个小场景让我们说你有一个API应用程序。 它需要HTTP请求和响应与JSON,天气它build立在节点,Rails,PHP或其他任何东西都是不敬的。 假设您可以在峰值时间估算所有这些因素:并发用户数:100 – > 1000 – > N每个用户每分钟的请求数:1? 10? 50? 每个请求平均传输的数据大小:1Kb? 2KB? 5KB? 10?

你如何确定哪个方向是最好的规模? 这是这些因素的比例吗? 有没有什么地方可以达到这些因素之一呢?

第2部分

这一次让我们假设一个不同types的应用程序。 这一次,它是一个处理实时数据交换的networking套接字应用程序,如聊天或事件通知(从Redis或RabbitMQ等消息推送的事件)。这个应用程序(形成我收集的内容)将完全不同于相同的因素作为第一部分,你如何确定去哪个方向?

总体

我问这些问题,找出哪种types的托pipe将是最适合哪个应用程序。 这会给我更多的稳定性? 这会让我为同样数量的用户在口袋里保留更多的钱吗?

这个问题几乎不可能以现在的forms来回答,因为这个问题太广泛了。 要回答这个问题的东西涉及整个工程领域,人们以全职的方式谋生(包括我自己)。 恕我直言,这是部分科学和部分艺术,你会发现多本书(每个我的同事)在那里谈论这个问题。

因此,我只能提供一些简短的指引。

  • 没有一个公式可以确定最佳的缩放方向。 如果多个应用程序捕获并预测了相同的指标,那么扩展它们的方式可能完全不同。 这实际上完全取决于哪些瓶颈是基于应用程序(错误)行为。
  • 最好的方法是真正的testing和测量。 确保您的应用程序已安装,以便您可以使用不同的负载testing应用程序,并观察/测量其所有资源(服务器,networking等)上的效果。 您还需要在不同方向上缩放时进行testing。
  • 从经验来看,大多数Web应用程序扩展问题甚至没有(或不应该)通过投入更多的硬件/资源来解决。 往往不是,这是代码和效率低下(我把它归类为一个缺陷)

因此,如果我要这么做,需要select一种托pipe解决scheme,那么在产品供应和控制成本的能力方面,灵活性和能力最强的解决scheme就是amazon web services(AWS)。 这是我使用的唯一托pipe服务提供商,它接近大型企业数据中心,并提供了我所需要的大部分function。 主要特点是:

  • 实际上,您可以将应用程序托pipe在那里,使用免费套餐以不花费(或几乎不花费)开始
  • 您可以垂直扩展(单个主机增加CPU和内存),只需点击几下鼠标,然后重新启动
  • 您可以使用更多的服务器和其他相关服务(如负载均衡器)水平扩展(当然)
  • 他们有许多其他服务超越虚拟机托pipe(EC2服务只是他们的服务之一)

我没有其他IaaS提供商(Rackspace,Microsoft Azure等)的经验,所以我无法比较和对比。 也许这会帮助你走下一条路,开始你的研究。

披露:在写这个答案的时候,我没有任何股份的亚马逊股票或为他们工作=)