在这篇博文中,我将确切剖析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. 20_采用ContentProvider对外共享数据

    <AndroidManifest.xml> <application        <provider android:name=".PersonProvider&q ...

  2. Windows API 进程状态信息函数

    这里的进程状态信息函数主要分为两类,一类是PS(PROCESS STATUS HELPER) API,另外一类是Th(TOOL HELP) API. 话说第一次遇到这个ToolHelp函数时我在看&l ...

  3. Ubuntu Server搭建svn服务以及迁移方法【转】

    转自:http://www.linuxidc.com/Linux/2013-05/84693.htm Ubuntu Server搭建svn服务以及迁移方法 采用apache+svn,http访问方式. ...

  4. Entity Framework学习 - 4.Code First升级数据库

    1.在nuget控制台中执行:Enable-Migrations 2.将出现的configuation.cs文件中的AutomaticMigrationsEnabled属性改为true 3.在nuge ...

  5. ubuntu下root用户配置

    01 接着,输入su root,以root用户登录, 由于命令提示符太长,这里输入export PS1='[\u@\h \W]$'重新设置了一下提示符,然后输入 cp -p /etc/lightdm/ ...

  6. boot.img的分析

    1 boot.img  boot.img是由文件头信息,内核数据以及文件系统数据组成,它们之间非页面对齐部分用0填充 文件头信息的具体结构可以在system/core/mkbootimg/bootim ...

  7. 使用SqlTransaction回滚事务

    https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqltransaction(v=vs.110).aspx private ...

  8. [51NOD]大数加法(模拟)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1005 要处理符号,还要特别注意0和连续进位等情况.偷懒使用st ...

  9. Data.gov.uk电子政务云,牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践

    牛津大学NIE金融大数据实验室王宁:数据治理的现状和实践 我是牛津互联网研究院的研究员,是英国开放互联网的一个主要的研究机构和相关政策制订的一个机构.今天主要给大家介绍一下英国数据治理的一些现状和实践 ...

  10. cocos2dx Android 环境搭建 以及 ndk调试

    最近在学习cocos2dx,真的很强大,使我们更专注于游戏趣味,免去了繁琐的底层框架代码. cocos2dx的最强大之处当然在于跨平台.跨平台首选当然是Android,好记性不如烂笔头,记下本文分享给 ...