由“.NET不同版本不可共存”理解应用程序池

IIS6里引入了应用程序池概念。但是……多个应用程序池有什么意义呢?就用默认的应用程序池网站运行得不也挺好么?况且,建立的新应用程序池要在哪里才能调用呢?

首先声明,我不懂具体的官方说法,以下来自于我的主观猜想,至少我这么理解在实际工作中是没有问题的。也许,这就是技工和工程师的区别吧!

现在越来越觉得IIS不是一个简单的东西。上次是因为URL转向,这次是因为应用程序池。其实“应用程序池”的“池”概念换成“线程”就好理解了,一个应用程序池就是一个专门处理网站应用程序的线程。一般的情况下,就我们用的这些网站应用程序拜托给一个默认线程处理就够了,即使有多个网站也没关系,一个默认应用程序池强大到足够应付他们,以至于你会怀疑这个世界上是否有存在多个处理线程的必要。

但是多个应用程序池的设计可以解决一些特殊的需要。比如:一个网站应用程序拼命占用资源,你需要单独限制他的资源占用数量;有多个程序,当他们发生错误时的处理机制你想要设置成不同的处理方法:留言板如果占用CPU资源超过30%就终止他,新闻系统则不做这个限制;在一台服务器上同时存在.net 1.1和2.0的时候,你需要把他们放在不同的应用程序池中,否则他们“有你没我”。

当管理员的应用层次提升,产生了这些特殊的需要,就需要一个解决方案,否则就有人说MS的东西如何如何烂了。

每一个不同的应用程序池,就是一个独立的网站应用程序执行环境,他们相互独立,以保障网站稳定运行,即使遭遇程序死循环等故障,也不至于把所有应用程序全部搞瘫痪。网站以目录为单位,可以在应用程序设置中“创建”一个应用程序,指定他们分别加入不同的应用程序池,在运行的层面将不同资源需要的程序隔离开来。比如服务器上所有的咨询程序都进入咨询应用程序池,所有的内容管理程序都进入默认池,所有疯狂占用资源的程序都进入限制应用程序池,锁定最高资源占用率,附加清理回收规则。

理解了应用程序池这个处理机制后会发现,它可以解答一些难以处理的问题,比如.net程序只占用不释放内存,导致内存不足的问题;虚拟主机管理如何限制多用户之间的资源分配问题;如何让一个网站只能运行.NET,不能运行ASP的问题。

还有一个相当模糊的概念今天也可以澄清了,那就是程序的用户角色问题。以往分配程序的读写权限,往往就是直接给任意用户,或者用户组设定权限。理解了程序池概念,你可以为一个程序池单独新建一个账户,然后为这个账户单独设定系统用户权限,实现网站用户间的彻底隔离,提高系统安全系数。

对于至强这样的服务器,也许在程序池中增加WEB园的数量,实现多线程下的多线程处理,还会对系统效率有不少的提高呐!

没想到,搞个动易SF,把这么多以前模糊的概念搞明白了,又解除几个便秘问题,爽。

发表评论

邮箱地址不会被公开。 必填项已用*标注