Web Farm和Web Garden的区别
在这篇博文中,我将确切剖析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的优点
- 它提供了高可用性(或者高容错性)。如果Farm中的任一服务器宕掉,负载均衡器可以将请求重定向到其他服务器。
- 提高了对客户端请求的响应速度。
- 提高了Web应用程序的稳定性,减少了应用程序的故障率。
- 可将会话和其他资源集中存储,以便让所有的服务器都能访问。
Web Garden的优点
- 通过工作进程间的请求共享,提高了应用程序的可用性(或者性能)。
- Web Garden通过处理器亲和性(Processor Affinity)对应用程序进行分配(基于参数和标记)。
- 减少物理空间消耗。
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的配置细节我将在其他文章中进行阐述。更多信息请参考以下文章:
- Boosting performance using an IIS web garden
- How-To Configure Session State in a Windows Web Farm
- Role of Web gardens and web farms in ASP.NET
希望此文对您有所帮助。
Web Farm和Web Garden的区别的更多相关文章
- nginx+iis、NLB、Web Farm、Web Garden、ARR
nginx+iis实现负载均衡 在win2008R2上使用(NLB)网络负载均衡 NLB网路负载均衡管理器详解 [译文]Web Farm和Web Garden的区别? IIS负载均衡-Applicat ...
- Web Farm 和Web Garden
这两个都是提高网站性能的服务器端技术 1.Web Farm:如果应用程序被多个服务器托管,这种情况就可以称作Web Farm. 2.Web Garden: 指的是一个应用程序可以分成多个进程(w3wp ...
- 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 ...
- 趣谈StateServer在Web Garden,Web Farm下的使用
上一篇翻译的博客[译文]漫谈ASP.NET中的Session已经介绍了Session的基础知识,如果看过了的话对Session应该有了一个比较清晰的认识了,现在我来谈谈我所遇到的困境以及对Sessio ...
- JavaEE中Web服务器、Web容器、Application服务器区别及联系
在JavaEE 开发Web中,我们经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server),等容易混淆不好理解名词. ...
- Web Fram 2 for IIS7.X(Microsoft Web Farm Framework)
Microsoft Web Farm Framework (WFF) 2.0 是微软开发的.基于IIS 7.x的小插件,能够帮助我们轻松实现Web网站的高性能.高可用性,用来在Web服务器群上提供和管 ...
- web farm 讨论引出
关于web farm 有成功的实施的文档没 用它还不如 用nginx,简单易用. Nginx for windows的运行效果咋样 windows iis无敌 玩nginx就不要用win系统,必须l ...
- [转帖]JavaEE中Web服务器、Web容器、Application服务器区别及联系
JavaEE中Web服务器.Web容器.Application服务器区别及联系 https://www.cnblogs.com/vipyoumay/p/5853694.html 在JavaEE 开发W ...
- eclipse中build path与Web Deployment Assembly的作用,区别
转自:https://blog.csdn.net/heart_mine/article/details/79402792 以下内容只为做个笔记记录已下,有问题可以留言,欢迎补充. 今天在eclipse ...
随机推荐
- BZOJ 1257 余数之和sum
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1257 题意:计算sigama(m%i)(1<=i<=n). 思路: 这样就简 ...
- 什么是PHP Guzzle?
Guzzle是一个使得利用PHP实现发送HTTP 请求,方便和web service集成的PHP 客户端模拟组件.一句话,它就像一个PHP写的浏览器.当你的服务端程序需要作为客户端来访问其他的serv ...
- hdu4605 magic ball game 树状数组+离线处理
题意:给你一棵二叉树,每个节点有一个w值,现在有一颗小球,值为x,从根节点往下掉,如果w==x,那么它就会停止:如果w>x,那么它往左.右儿子的概率都是1.2:如果w<x,那么它往左儿子的 ...
- hdu4618 Palindrome Sub-Array dp+记忆化搜索 或者直接暴力
题意就是找一个 左右上下对称的正方形矩阵. 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4618 没想到记忆+dp和暴力就能水过... //记忆话搜索+d ...
- HDU 2577 How to Type【DP】
题意:给出一个字符串,有大写有小写,问最少的按键次数.然后打字的这个人有一个习惯,打完所有的字之后,指示灯要关闭. dp[i][j]表示打到第i个字母,j有0,1两个值表示指示灯开或者关的状态 然后就 ...
- [Mac][MySQL]如何启动MySQL Server
方法来自 MySQL 5.7官方手册 http://dev.mysql.com/doc/refman/5.7/en/osx-installation-launchd.html 有两种方法,另一种是命令 ...
- 【Android】跟着教程做の学习笔记
教程 + <第一行代码 - Android> //尽量在十二月底学完吧(同步学习java基础)
- Clusterware后台进程
Clusterware由若干进程组成,其中最重要的是CRSD,CSSD,EVMD 在Clusterware安装的最后阶段,会要求在每个节点执行root.sh脚本,这个脚本实际的作用就是在/etc/ ...
- 嵌入式 详解udev
如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...
- -Xbootclasspath参数、java -jar参数运行应用时classpath的设置方法
当用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报ClassNotFound错误.实际上 ...