网站性能优化 - 数据库及服务器架构篇

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

我先前曾写过三篇有关网站系统、ASP.NET性能优化的文章,分别从SQL语句、数据库设计、ASP.NET功能、IIS7的套件,来探讨此一性能议题。本帖算是系列作的第四篇,整理了一些我看过的书籍和文章,改从「负载均衡、服务器架构、数据库扩展」的角度,提出一些性能优化的建议,以供有建设中大型网站需求的网友们作为参考。小弟我先前写过的三篇帖子:(一)30分钟快快乐乐学SQLPerformanceTuning(二)网站性能越来越差怎么办?(三)用IIS7、ARR與Velocity建设高性能的大型网站、、WebServer与与DBServer分离分离小型网站或B/S项目,因同时在线人数不多,尚可让同一台物理主机,既做WebServer,又做DBServer。但此二者皆会占用大量的CPU、内存、磁盘I/O,最好让二者分别用不同的服务器主机来提供服务,以分散压力、提高负载承受能力。此外,二者若在同一网段,应尽量用内网PrivateIP进行访问,而不要用PublicIP或主机名称。基本上跑Web上的应用程序,不管用什么软、硬件,同时处理多个用户的request,通常都比较消耗CPU;但对数据库而言,CPU就不见得会大量消耗,而是内存和磁盘I/O用得比WebServer多。因此一般建议WebServer用普通的PC即可,但要用好一点的CPU;而DBServer就不能草率,应尽量买高级的服务器,并要有RAID5或6的磁盘阵列(硬件的RAID,性能远比操作系统或软件做的RAID要好),并有4GB以上的内存。当然如果操作系统、数据库都用64位版本的最好,例如升级到64位的SQLServer和64位的WindowsServer,这样内存都可配置到64GB;不过要记得,太旧的PC,一些周边硬件的driver可能不支持64位的操作系统和软件。如果在线人数持续增加,则可增加多台WebServer和DBServer,用「服务器集群(cluster)」、「负载均衡(Loadbalancing)集群」、「高可用性集群High-availability(HA)」、数据库集群,以实现更大规模的分布式布署。DeploymentPlan(部署规划):(三级分布)(硬件、不同主机的物理级分层):(三层服务应用程序)(软件、代码上的分层):(分级分布):(zh-cn).aspxDeploymentPatterns:://msdn.microsoft.com/en-us/library/ms998478.aspx-----------------------------------------------------2、负载均衡、负载均衡(LoadBalance)负载均衡技术发展了多年,有很多专业的服务提供商和产品可选择,基本上又可分为「软件」和「硬件」的解决方案:(1)硬件:硬件的解决方案称作Layer4Switch(第4层交换),可将业务流分配到合适的APServer进行处理,知名产品如Alteon、F5等。这些硬件产品虽比软件的解决方案要贵得多,但是物有所值,通常能提供远比软件优秀的性能,和方便、易于管理的UI界面,供管理人员快速配置。据说Yahoo中国当初接近2000台服务器时,只用三台Alteon就搞定了[1]。(2)软件:Apache这一款众所皆知的HTTPServer,其双向Proxy/ReverseProxy功能,亦可达成HTTP负载均衡功能,但其效率算不上特别好。而另一款HAProxy就是纯粹用来处理负载均衡的,且具有简单的缓存功能。以操作系统内置的负载均衡功能来讲,Unix如Sun的Solaris有支持,Linux上则有常用的LVS(LinuxVirtualServer),而微软的WindowsServer2003/2008则有NLB(NetworkLoadBalance)。LVS是利用ipvsadm这一个以IP为主的负载均衡程序,来达到让所有TCP/IP的通讯协议都可以进行负载均衡。由于它是LinuxKernel所支持,因此效率相当好,占用的CPU资源相当低,但缺点是ipvsadm无法针对Layer4以上的网络packet数据进行分析。至于WindowsServer的NLB,其原理是不论有多少台服务器,都全部共用一个「集群的IP」,如下图1的ActiveLoadbalancer,和下图2的VirtualServer1(WebServer),以及VirtualDBServer,依照负载均衡的类型来做分配(Active/Active、Active/Standby、...),而用户在外面只会看到单一个IP,至于背后有多少台服务器,用户并不需要知道(如同Cluster集群和云计算的概念)。图1 分布式用户vs服务器农场(WebServerfarm)图2 红色箭头为Failover架构(HA),其功能与LoadBalance不同上图2中,有四台RealServer(WebServer),以及三台RealDBServer,形成Web及DB的服务器集群(Cluster)。我们看到最上方的VirtualServer1本身不具备任何的数据服务(如:.NET代码、图片...等),只有一个功能,就是将用户的连线request请求,重新导向下方的四台RealServer。这种利用重新导向(director)的方式,将服务负载分布给RealServer的方式,就称作LoadBalance。现在似乎还没有一种做法,能自动计算主机的「负载」情形,例如计算CPU已使用多少百分比,以决定要把request丢向哪一台RealServer;现在一般都还是按照轮替(Round-robin)的方式,或加上一些权重的设置而已。若我们在Server上设置LoadBalance,且要执行ASP.NET程序,就要注意一个问题,就是Session的存储位置是在哪一台WebServer的内存上,以避免发生有用户表单填写得比较久,等到他提交时,已经被WindowsServer的NLB将工作阶段切换到另一台WebServer主机上了。此时就可考虑将SessionState,改存储在SQLServer里。至于用软件做的LoadBalance其性能如何呢?基本上用软件做的,性能一定不会是1+1=2,但通常能提高Availability,亦即常听到的HA(高可用性集群High-availability),即Failover方式,如上图2的最上方,红色箭头左侧的VirtualServer2,是能够侦测VirtualServer1宕机或无法提供服务时,自动将自己的IPaddress取代VirtualServer1。因此HA是指提供「不会中断的服务」,而本帖讨论的LoadBalance是指提供「能承受高度负载的服务」,两者指的不是同一件事。MIS人员应视公司的硬件资源、成本和预算,考量是否两者都要做。Load-BalancedCluster(负载平衡群集):://msdn.microsoft.com/en-us/library/ms978730.aspxServerClustering(服务器群集):(zh-cn).aspxInstallingNetworkLoadBalancing(NLB)onWindowsServer2008::(WCF,与本文无直接关系):://msdn.microsoft.com/en-us/library/ms730128.aspx-----------------------------------------------------3、展示和功能的分层、展示和功能的分层大型网站中,常会为了将来的可扩展性、源代码维护方便,而将前台的展示(HTML、Script),和后台的商业逻辑、数据库访问(.NET/C#、SQL),切成多层。根据MartinFowler在PofEAA里的說法:Layer是指「逻辑」上的分层(logicalseparation),Tier是指「物理」上的分层(physicalseparation)。若我们的ASP.NET站台,是用「虚拟」的分层(N-Layer),来切开UI-BLL-DAL,通常不会有性能上的问题;但若是用「物理」的分层(N-Tier),亦即如上图2和下图3,可能每一台APServer都负责不同的商业逻辑(销售、库存、物流、制造、会计、...),各自的源代码都存放在不同的物理主机上,且可各自独立运作,此时就要考虑到每一台APServer在彼此协调合作,以及调用WebService(XML的性能不佳)、执行分布式事务上的性能问题。图3 「物理」上的分层,各种商业逻辑可能存在多台物理主机上谈到「物理」分层上的分布式事务(DistributedTransaction),微软的EnterpriseServices、COM+、WCF、WF用到操作系统上的MSDTC来协调事务,由于MSDTC和这些应用程序各自处于不同的Process,在沟通上会遇到序列化、反序列化的动作,还要整合事务中所有的AppDomain和不同主机上的资源,无可避免地一定会拖累性能。WebApplications:N-Tiervs.N-Layer:、数据大表拆分、数据大表拆分对比较大的数据表,或历史数据比较多的数据表,可根据一定的逻辑进行拆分。若每天的数据量非常大,则可采用按日存放,再用一个「汇总表」来记录当天的一个汇总值;也可先将比较大的表拆分成多个表,再通过「索引表」进行关联处理,以避免查询大表造成的性能问题[1]。另也可用「表分区」的方式,将数据存储在不同的文件上

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功