在这篇博文中,我将确切剖析Web Farm和Web Garden的区别和原理,以及使用它们的利弊。进一步地,我将介绍如何在各个版本的IIS中创建Web Garden。

  英文原文 | Abhijit Jana | 2010年10月2日

概述

  ASP.NET开发服务器负责处理所有来自客户端的请求和响应(开发阶段)。完成开发后,为了让他人可以访问你的站点,你必须将站点部署到服务器上,这将涉及到Web服务器。Web服务器负责处理所有来自客户端的请求,并给予响应。下图展示了ASP.NET Web应用程序典型的单IIS部署架构。

  客户端请求资源,IIS处理请求并响应。

Web Farm

  上述架构适用于只有一个Web服务器,且多个客户端从同一服务器请求资源的场景。如果站点的流量剧增,单个独立的服务器不足以处理客户端的请求。为了分担流量,您可能需要将应用程序部署到多台服务器。这就是所谓的“Web Fram”。因此,当您将站点部署到通过负载均衡器(Load Balancer)关联的多台Web服务器,就构成了“Web Farm”。下图展示了Web Farm的整体布局。

  在通常的Web Farm架构中,单个应用程序被部署到多个IIS服务器(由上图可知,应是“Web服务器”),服务器通过负载均衡器以VIP(Virtual IP)的形式进行连接。负载均衡器再连接到外网。因此,来自客户端的请求,首先经过负载均衡器。负载均衡器根据当前每个服务器的流量将请求路由到相应的Web服务器。这些Web服务器可能共享相同的数据库服务器(DB Server),也可能在后端使用重复服务器(Replicated Server)。

  总之一句话,当我们在多个Web服务器上部署同一Web应用程序来均衡负载就叫做“Web Farm”。

Web Garden

  在开始讲解Web Garden之前,我希望您对应用程序池(Application Pool)和工作进程(Worker Process)的基本原理有所了解。如果您已经读过《How IIS Processes ASP.NET Request?》,我有理由相信您对上述概念不会陌生。

  在IIS中,工作进程(Worker Process)负责运行ASP.NET应用程序,所有ASP.NET功能都运作在工作进程的范围之内(作者的这种描述有点别扭)。工作进程负责处理所有的请求、响应、会话数据、存储数据。应用程序池(Application Pool)是工作进程的容器。应用程序池用于隔离IIS工作进程,为Web应用程序提供高安全性、高可靠性和高可用性。

  默认情况下,每个应用程序池包含一个工作进程。包含多个工作进程的应用程序池(原文为Application,疑为作者笔误)即被称为“Web Garden”。下图是一个典型的Web Garden应用程序。

  在上图中,您可以看到其中一个应用程序池中包含多个工作线程,这就构成了Web Garden。

  因此,Web Farm是指将同一Web应用程序部署到多台服务器,并基于服务器的负载进行访问;而Web Garden是指单个应用程序池包含多个工作线程。

在IIS 6和IIS 7中创建Web Garden

  现在,我将向您展示如何在IIS 6和IIS 7中更改Web Garden的工作线程数。在IIS 6中,右键单击“应用程序池” > “属性” > 转到“性能”选项卡。

  在“性能”选项卡部分,有一个“Web Garden”的选项,默认值为“1”,您可以将该值设置为您需要的数值。

  在IIS 7中,右键单击“应用程序池” > 转到“高级设置” > 找到“进程模型”,下面有个“最大工作进程”项。您可以修改默认值(默认为1)来创建Web Garden。

  在上图中,您还可以看到Web Garden的定义。

  您还可以参考我早前关于当前主题的文章。>>

Web Farm和Web Garden的优点

  现在,让我们一起来看Web Farm和Web Garden的优点。

Web Farm的优点
  1. 它提供了高可用性(或者高容错性)。如果Farm中的任一服务器宕掉,负载均衡器可以将请求重定向到其他服务器。
  2. 提高了对客户端请求的响应速度。
  3. 提高了Web应用程序的稳定性,减少了应用程序的故障率。
  4. 可将会话和其他资源集中存储,以便让所有的服务器都能访问。
Web Garden的优点
  1. 通过工作进程间的请求共享,提高了应用程序的可用性(或者性能)。
  2. Web Garden通过处理器亲和性(Processor Affinity)对应用程序进行分配(基于参数和标记)。
  3. 减少物理空间消耗。

Web Farm模式下会话管理

  默认情况下,会话模式被设置为InProc。该模式下会话数据存储在工作进行中。但是,在Web Farm模式中,所有服务器可以共享同一个会话,我们可将会话模式设置为State Server或者SQL Server模式。这样, 即使某些服务器宕掉,请求通过负载均衡器转移到其他服务器,会话数据也可共享。

  在上图中,您可看到两个IIS服务器共享同一份存储在工作进程外的会话数据。您可以参考我早先的一篇文章《Exploring Session in ASP.NET》,文章中我揭示了如何在外部进程模式中配置会话模式。

Web Garden模式下会话管理

  当我们使用Web Garden时,客户端请求由不同的工作进程进行处理,所以会话模式必须是上面所说的外部进程会话模式。对于Web Garden,我们必须将会话放到同一服务器的不同工作进程中。

  译者注:应用程序涉及Web Garden可能需要配置<processModel>配置节,该配置节由aspnet_isapi.dll读取,托管代码不读取,这里不做详细介绍。

总结

  Web Farm是指将同一Web应用程序部署到多台服务器,并基于服务器的负载进行访问;而Web Garden是指单个应用程序池包含多个工作线程。

  在这篇博文中,我阐述了Web Farm和Web Garden的基础知识。本文囊括了Web Farm和Web Garden的基本信息和概念,至于Web Farm和Web Garden的配置细节我将在其他文章中进行阐述。更多信息请参考以下文章:

  1. Boosting performance using an IIS web garden
  2. How-To Configure Session State in a Windows Web Farm
  3. Role of Web gardens and web farms in ASP.NET

  希望此文对您有所帮助。

Web Farm和Web Garden的区别的更多相关文章

  1. nginx+iis、NLB、Web Farm、Web Garden、ARR

    nginx+iis实现负载均衡 在win2008R2上使用(NLB)网络负载均衡 NLB网路负载均衡管理器详解 [译文]Web Farm和Web Garden的区别? IIS负载均衡-Applicat ...

  2. Web Farm 和Web Garden

    这两个都是提高网站性能的服务器端技术 1.Web Farm:如果应用程序被多个服务器托管,这种情况就可以称作Web Farm. 2.Web Garden: 指的是一个应用程序可以分成多个进程(w3wp ...

  3. What is the difference between Web Farm and Web Garden?

    https://www.codeproject.com/Articles/114910/What-is-the-difference-between-Web-Farm-and-Web-Ga Clien ...

  4. 趣谈StateServer在Web Garden,Web Farm下的使用

    上一篇翻译的博客[译文]漫谈ASP.NET中的Session已经介绍了Session的基础知识,如果看过了的话对Session应该有了一个比较清晰的认识了,现在我来谈谈我所遇到的困境以及对Sessio ...

  5. JavaEE中Web服务器、Web容器、Application服务器区别及联系

    在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...

  6. Web Fram 2 for IIS7.X(Microsoft Web Farm Framework)

    Microsoft Web Farm Framework (WFF) 2.0 是微软开发的.基于IIS 7.x的小插件,能够帮助我们轻松实现Web网站的高性能.高可用性,用来在Web服务器群上提供和管 ...

  7. web farm 讨论引出

    关于web farm 有成功的实施的文档没 用它还不如 用nginx,简单易用. Nginx for windows的运行效果咋样 windows  iis无敌 玩nginx就不要用win系统,必须l ...

  8. [转帖]JavaEE中Web服务器、Web容器、Application服务器区别及联系

    JavaEE中Web服务器.Web容器.Application服务器区别及联系 https://www.cnblogs.com/vipyoumay/p/5853694.html 在JavaEE 开发W ...

  9. eclipse中build path与Web Deployment Assembly的作用,区别

    转自:https://blog.csdn.net/heart_mine/article/details/79402792 以下内容只为做个笔记记录已下,有问题可以留言,欢迎补充. 今天在eclipse ...

随机推荐

  1. guice的基本使用(一)

    guice是google一个轻量级的DI注入框架,现在比较强大了,也与目前流行的struts2.jpa等都有集成了. 先看一个例子: package com.ming.user.test; publi ...

  2. mmm hardware/libhardware_legacy/power/

    android源码目录下的build/envsetup.sh文件,描述编译的命令 - m:       Makes from the top of the tree.  - mm:      Buil ...

  3. leetcode:Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array  ...

  4. asp.net页面过滤所有换行符和多余空格

    不知道大家注意到了没有,Google和Baidu网页的HTML源代码是混合在一起的.HTML代码混合在一起,出发点是为了减小网页体积,从而加快网页加载速度. 写个函数把网页HTML源代码的换行符和空格 ...

  5. 如何停止Android Monkey脚本

    如何停止Android Monkey脚本 最近用monkey来包apk的性能测试,发现一旦monkey跑起来以后,即使将数据线和PC断开,monkey脚本还是会继续运行下去.结果找到了一个办法去停止它 ...

  6. c#调用系统资源大集合-3

    public static void 打开控制面板多媒体属性音频() { Process.Start("rundll32.exe", " shell32.dll,Cont ...

  7. 51nod1495 中国好区间

    双指针扫一遍 #include<cstdio> #include<cstring> #include<cctype> #include<algorithm&g ...

  8. 使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)

    使用Kafka的同学都知道,我们每次创建Kafka主题(Topic)的时候可以指定分区数和副本数等信息,如果将这些属性配置到server.properties文件中,以后调用Java API生成的主题 ...

  9. 【第一篇】说说MVC+EF easyui dataGrid 动态加载分页表格

    首先上javascript的代码 <script type="text/javascript"> $(function () { LoadGrid(); }) //加载 ...

  10. R2的版本由来

    给人一杯水,自己先有一桶水.上课.备课,那么备课中就常有一些稀奇古怪的问题. 学生问:SP2和R2是一样的吗? 老师答:不一样,一个是补丁程序,另一个是服务器操作系统. 学生不解:R2如果是操作系统, ...