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

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

一方面考虑 iis 和 mssql,另一方面考虑 apache 和 mysql。扩展 iis 和 apache 时是否采用相同的策略?

我得到了基本的扩展内容——分离 Web 层和数据库层,然后是数据库冗余等...

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

例如,它以前在一台机器上运行,现在我们想让它在多台机器上运行?对于托管在 Apache 上的东西也有同样的问题吗?让我们看看 wordpress(常见示例) - 如何使博客请求可以在云中的多台(虚拟)机器上处理?

希望我的问题至少清楚一点,如果不清楚,请询问。

基本上,我在寻找扩展 Web 应用程序时的模式。有吗?有相关信息的链接吗?

尤其是基于云的。

谢谢

答案1

一般来说你会有一个网络农场:

  • 浏览器向网站发送请求
  • 网站 DNS 解析到负载均衡器 (LB)
  • LB 将请求转发到多个 Web 服务器之一

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

如果不在数据库中共享,则会话等会出现一些问题,但通常情况下,这种方法效果很好。您可以将网站与单台机器分离,并获得基本的 DR 功能

答案2

好吧,你可能不会以这种方式部署 Wordpress(尽管 django 和 web2py 也是可能的)...但这里有一个想法

Google App Engine 旨在帮助开发人员部署可扩展的应用程序,人们希望 Google 在这方面的一些经验能够融入到 GAE 的结构中。以下是我从短暂的体验中总结出的突出特点:

  • 独立的 Java(或 Python)servlet,可以根据需要在一组相同的非专用主机中的各个主机上启动或终止,而不是需要多个进程和特殊准备环境的庞大应用程序
  • 在跨多台服务器运行的繁忙应用中,Web 浏览器可能不会每次都与同一主机匹配……因此需要编写 servlet 来处理该问题
  • 对于可扩展的应用程序,开发人员应该测试并确保大多数请求将在 1 秒内完成处理(GAE 允许 30 秒;但会标记超过 1 秒的请求,他们解释说,在决定 GAE 如何处理您的应用程序时,会考虑亚秒级的性能目标)
  • 使用易失性 RAM(memcache 服务)来帮助避免在可能的情况下搜索磁盘(存储服务)以获取热门数据请求[在传统方法中,这也可以避免创建束缚写入器的读取锁……前提是提供一些陈旧数据是可以接受的]

我还应该指出,直到最近,GAE 才将 mySQL 作为 GAE 商业类的一部分来支持...原始 DB 服务有些不同,更像是一个大型关联数组。

相关内容