1.基本结构图
2.系统组成与角色
整个系统大体上分为三个部分:1.网页客户端。2.IIS Web服务器。3.数据库 及逻辑服务器。其中Web服务器不处理任何逻辑,它的作用只有两点:1.承载用户 。2.中转数据,利用ADO.NET Data Service以及调用其他的WCF,使得Web服务器 成为一个数据代理服务器。
经过失败经验的论证,让IIS承载过多的逻辑,绝对是一个烂想法,应用系统 应该在一开始设计的时候就彻底屏蔽这种方案,从上面图中也不难看出来,逻辑 的处理应该是一部分放在网页中使用JS来实现,另外一部分放在应用系统的逻辑 服务器上实现的。
另外,如果简单的将网页部署到IIS上,性能指标总上不去,典型的体现在要 么内存占用很高,CPU上不去,要么是CPU上去了,内存又占用的太小,这样很难 将服务器的能力发挥到极致。为了应对这个问题,一个非常理想的方案是使用IIS 中的WebGarden技术,可以启动多个w3wp.exe,即多个IIS服务进程。这样作的好处 是将CPU资源以及内存资源均匀的分配到多个服务进程上去,以提升服务器资源的 利用效率。但是,这同样也带来了一些问题,因为要将同一个网站的资源分配到 多个进程,这样内存就无法共享,再加上HTTP协议本身就是短连接,所以每次客 户端发出请求的时候,都有可能被不同的服务进程所接收,这样就是导致Session 无法使用,很头疼吧。为了应对这个问题,我们又需要去配置应用程序的状态服 务器,说白了,就是将Session统一存储到一个服务器上,通常是将其以二进制方 式存储到SQL Server中。当然,这时要求存储在Session中的数据必须是可以串行 化的。
上面说的,可以提高服务器的利用效率以外,在IIS上配置WebGarden还有什么 优点呢?从上面的说明中不难看出,因为状态是存储在统一的SQL Server中的, 所以用户状态是与网站配置到哪一台Web服务器是无关的。因此,我们可以大量添 加Web服务器,同时,位于不同Web服务器上的用户可以共享相同的SQL Server状 态管理,这样可以大大提高在同服、同世界的用户数量。
Web服务器,我们再来看一下应用程序的逻辑服务器和数据库服务器。这两个 服务器通常在运营成本有限的情况下,是放在同一台服务器上的(当然,能分开 是最好的)。应用程序服务器一般会在某一个时间间隔下出现一个CPU使用的高峰 ,内存占用一般都很小,而对于SQL Server来讲,因为要提供大量的缓存,所以 对于内存的消耗是比较大的。
辑服务程序,是整个系统最容易出现性能瓶颈的地方,可以使用C++或者C#来 编写,然后提供一个WCF(TCP方式的)的外部接口,以便Web服务器调用。值得重 点强调的,无论是利用C++还是C#来编写该程序,都一定要考虑好资源释放问题( Java,C#开发人员更应该注意这一点,千万别想着什么垃圾自动回收,很多资源 是回收不了的),包括数据库连接的释放,数据结构(临时数据的储存体)的释 放,以及无用线程的释放。
这次先聊到这里,在后面的BLog中我们会对整个构架中的每一个技术点进行详 细说明的。