如何扩展Web应用程序 – 常见模式

一方面考虑iis和mssql,另一方面考虑使用apache和mysql。 缩放iis和apache是​​否是同样的策略?

我得到了基本的扩展的事情 – 单独的Web层和数据库层,然后数据库冗余等…

但如何扩展在iis上运行的应用程序?

例如,它曾经在一台机器上运行,现在我们想要在多台机器上运行? 同样的问题在Apache上托pipe的东西? 让我们看看wordpress(常见示例) – 如何使博客的请求可以在云中的多个(虚拟)机器上处理?

希望我的问题至less有点清楚,如果不请求。

基本上我正在寻找缩放networking应用程序的模式。 任何? 任何链接到信息也许?

特别是基于CLOUD的。

谢谢

通常你会有一个networking农场:

  • 浏览器向网站发送请求
  • 网站DNSparsing为负载平衡器(LB)
  • LB将请求转发给几个Web服务器之一

LB还将监视Web服务器,以便忽略失败的服务器。

如果没有在数据库中共享,会话等问题有一些问题,但通常这是很好的。 您可以将您的网站与单台计算机分离,并获得基本的DRfunction

那么,你可能不会这样部署Wordpress(虽然Django和web2py是可能性)…但这里有一个想法

Google App Engine应该可以帮助开发者部署可扩展的应用程序,并希望Google在这方面的一些经验能够体现在GAE的结构中。 以下是我从我短暂的经历中收集到的重要特征:

  • 独立的java(或python)servlet,可以根据需要在相同的非特定主机集合中的单个主机上启动或终止 – 而不是需要多个进程和特殊准备环境的庞大应用程序
  • 在多个服务器上处于活动状态的繁忙应用程序中,Web浏览器可能每次都与相同的主机不匹配…并且需要编写servlet来处理
  • 对于一个可扩展的应用程序,开发人员应该testing并确保大多数请求将花费1秒钟来处理(GAE允许30秒;但是会标记请求花费1秒钟,并且他们解释说,亚秒级性能目标被考虑在内当决定你的应用如何被GAE处理时)
  • 使用易变的ram(memcache服务)来帮助避免在stream行的数据请求中尽可能地search磁盘(存储服务)[在传统的方法上,这也可以避免创build与写入器相关的读锁…提供服务一些陈旧的数据是可以接受的]

我还应该注意到,GAE最近才支持mySQL作为GAE Business类的一部分…原来的DB服务有点不同,更像是一个大的关联数组。