文|李钢
大型公共服务网站架构设计初探
文|李钢
各级政府、公共事业部门面向公众提供网上服务的网站(大型公共服务网站)面临着高并发量、大数据量和可靠性至上的要求,文章探索了一个高可用、高性能、易扩展、安全可靠、基于NET的大型公共服务网站应该具备哪些特点,应该从哪些方面进行架构设计。
互联网诞生的短短20多年,对社会产生了翻天覆地的影响。各级政府、公共事业部门面向公众提供网上服务的网站面临着“高大上”(高并发量、大数据量和可靠性至上)的要求,从业务需求看,是网络结构灵活、业务变动快,从数据量看,用户多、处理量大。如何打造一个高可用、高性能、易扩展、安全可靠的公共服务网站系统成为我们面临和亟待解决的一个迫切问题。
与传统的政务网站系统相比,大型公共服务网站由于覆盖用户范围广、业务流程复杂,使其具有以下显著特点:
高并发率,大流量。需要面对高并发用户,大流量访问。如每年公务员考试报名及成绩查询时,提供服务的网站面临着日均百万级别的访问量和查询量。
可用性至上。系统7×24小时不间断服务。大型网站宕机事件通常会成为新闻焦点,尤其是面向公众提供公共服务类型的网站。近年来,公共服务网站越来越受到黑客或境外势力的关注,被攻击现象时常发生,不良影响屡见报端。
大型公共服务网站应用系统除了以上显著特点外,还具有占用的网络及服务器资源多、数据海量且格式多样、用户分布广泛、抗击黑客攻击性能好等特点。
传统网站的架构。传统的网站系统主要以完成业务功能为目标,用户量相对较少且峰值不明显。因此考虑的网站的架构时,一般采用的是比较简洁的架构;在实战中,采用以下比较通用、容易实现的三种架构模式:
应用与数据集中在一台物理服务器上:一台Server就满足需要——网站应用程序、数据库、文件等所有资源都集中在一台Server上。这种模式主要针对访问人数较少(每日10万人以下,且用户访问时间不集中)。
应用和数据服务分离。三台Server平天下——随着业务量增加、访问人数增多,单台服务器部署不再适应业务的发展,将应用和数据分离后成三台Sever(应用服务器、文件服务器与数据库服务器)。分离后三台Server对硬件资源的需求各不相同:应用服务器需要更快更强大的CPU,而数据库服务器需要更快的硬盘和更大的内存,文件服务器则需要更大的硬盘。
使用缓存改善网站性能。3+X Server模式——减少数据库访问压力,提高网站的访问速度。缓存又可以分为:本地缓存和远程缓存(可以是分布式的),本地缓存访问速度快,但数据量有限;远程分布式缓存可以集群,因此容量不受限制。
大型网站的架构。随着到网站访问量的不断增加,传统的网站架构已不能满足应用需求,大型网站的技术架构也随之产生,而大型网站主要面对的技术挑战是处理超大数量的用户访问和海量的数据处理,以及系统的可靠性、高性能、易拓展、易伸缩等特性的实现。
一个完整的大型网站设计时,一般需要从以下几个方面考虑。
分层。分层是应用系统设计中最常见的一种模式,将系统在横向维度上切分成几部分,每个部分负责一部分相对比较单一的职责,然后通过上层调用下层的调用,组成一个完整系统。在大型网站架构中也采用分层结构,一般分为应用层、服务层、数据层。
分割。分层时将系统在横向方面进行切分,分割是在纵向方面切分。网站越大、功能越复杂、服务和数据处理种类越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
分布。分层和分割的一个主要目的是为了切分后的模块便于分布部署。分布意味着可以使用更多的计算、存储、网络等资源完成同样的功能,能够处理大并发访问和数据量的业务应用。
集群。使用分布式虽然已经将分层和分割后的模块对立部署,但是对于用户集中访问的模块,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
缓存。缓存就是将数据存放在距离计算最近的位置,以加快处理速度。
异步。在大型网站中,系统解耦合的手段除了分层、分割、分布外,还有一个重要的手段是异步。异步就是业务之间的消息传递是不同步的调用,而是将一个业务操作分成多个阶段,每个阶段之间通过共享数据的方式异步执行。
.NET是微软下一代的软件平台,它允许人们在其上构建各种应用。.NET平台由于其资源丰富、技术水平先进的特点而被广泛使用。构建基于NET的公共服务网站,主要就是采用微软的各个层面的系统软件,包括NET framework、WEB服务器、数据库、消息通信服务等,来完成网站建设。
架构特点。这个架构主要采用Microsoft Windows操作系统作为服务器和系统软件:使用ASP.NET技术;使用IIS作为Web容器;用Akamai CDN来缓存网页;用Foundry ServerIron 来做负载均衡;sqlserver采用master-slave架构,slave负责读取操作,master负责写操作。
服务接口可以采用WCF,WCF支持事务,支持多种通信方式。可以选用基于Web service的通信方式,也可以选用TCP/ IP socket的通信方式。
SessionState的技术方案。采用SessionState是ASP.NET默认的机制。ASP.NET的SessionState有几种模式。InProc,StateServer,SqlServer模式和自定义模式。InProc不支持负载均衡的场景。只有StateServer和SqlServer模式才支持。
ViewState的技术方案。ViewState使服务器控件可以在往返行程中重新填充它们的属性值,而程序员不需要编写任何代码。这些属性值包括可见的属性,也包括不可见的。
AJAX的请求量进行控制。AJAX带来了很炫的效果,但是能适当地减少调用AJAX调用次数,比如能否合并AJAX的调用。
Server.Transfer和Response.Redirect。Server.Transfer发生在服务器端,而Response.Redirect发生在用户浏览器中。会多一次HTTP请求。
设置Web garden。只要服务器资源允许,就可以建立Web garden,在同一个服务器上多开几个工作进程。32位Windows上一个进程通常只能占用2G-3G内存(因为高地址的2G或者1G是Windows本身用来装配系统文件用的)。64位Windows上一个进程能占用的内存相对32位大一点,但是服务器有比如100多G的内存,可以适当多开几个工作进程。这可以增加单台服务器的处理能力。
时至今日,大型网站的架构技术方案已经非常成熟,各种技术方案也逐渐产品化。但我们在搭建大型公共服务网站时,还是需要从业务需求出发,不要一味的采用高、尖、新的技术。对于搭建大型的ASP.NET网站来说,建议从系统软件和硬件上首先要保证负载均衡和可伸缩性,其次做到每一台服务器的性能最大化,最后使得整个系统的服务能力最大化;从软件设计架构上,技术策略考虑如何分层以及分层模块的部署,是否采用异步通信,如何提高模块间的高效分布式调用等。
(作者单位:陕西省信息中心)