版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/前台门户网站架构设计方案北京宽连十方数字技术有限公司2010-7
目录1 设计思路 32 系统结构 33 网络规划及性能计算 33.1 网络架构 33.2 网络架构说明 4 接受双防火墙双交换机做网络冗余,保障平台服务 4 接受硬件设备负载均衡器,实现网络流量的负载均衡 43.3 系统测算 4 系统处理实力要求 4 业务处理实力要求 4 系统话务模型 43.4 配置核算 5 数据库服务器性能核算 5 WEB服务器集群性能核算 5 WEB服务器集群内存性能核算 5 网络带宽 54 性能模拟测试及性能推算 64.1 测试环境 64.2 测试结果 8 1个客户端模拟不同线和并发请求结果 8 10个客户端请求 84.3 结果分析 94.4 依据测试结果推算 94.5 设备清单 11 硬件设备配置清单 11 设备技术规格 124.6 平台扩容的建议 12网站的性能瓶颈分析网站的性能影响因素许多,下面主要从如下4个方面进行分析说明:网络负载公网负载内网负载WEB应用服务器性能CPU存储,I/O访问内存并发TCP/IP连接数数据库服务器性能数据库参数配置服务器性能(CPU、内存、存储)数据结构的合理性不同WEB应用的处理方式而对不同的性能瓶颈对于静态的网站:静态的HTML页面严格地由标准的HTML标示语言构成,并不须要服务器端即时运算生成。这意味着,对一个静态HTML文档发出访问请求后,服务器端只是简洁地将该文档传输到客户端。从服务器运行的那个时间片来看,这个传输过程仅仅占用了很小的CPU资源。对于静态HTML的访问瓶颈为:网络带宽、磁盘I/O以及cache(高速缓冲存储器)。对于动态页面因为服务器解析动态页面必需在其传输到客户端前就通过服务器来进行说明,这样就会给应用服务器添加额外的性能消耗,假如进一步要访问数据库,则会增加数据库服务器的性能消耗,则动态页面还有额外的瓶颈:应用服务器的性能,数据库服务器的性能。系统架构设计总体思路为提高网站的高并发性能,提高开发效率及运营效率,主要按如下几个思路进行规划设计:负载均衡四层交换负载均衡:接受负载均衡器来实现硬件级的四层交换负载均衡,或接受LVS来实现软件的四层交换负载均衡。通过第三方软件来实现负载均衡,同时实现页面请求的缓存。通过Nginx实现反向代理服务器集群,同时搭建squid集群以作为静态页面和图片的缓存。通过web服务器的配置来实现负载均衡即通过apache或是Nginx将客户请求均衡的分给tomcat1,tomcat2去处理。WEB应用开发架构思路应用开发实现MVC架构三层架构进行web应用开发页面尽可能静态化以削减动态数据访问,假如是资讯类的网站可以考虑接受第三方开源的CMS系统来生成静态的内容页面。接受Oscache实现页面缓存,接受Memcached实现数据缓存接受独立的图片服务器集群来实现图片资源的存储及WEB请求数据存储的设计思路数据库拆分,把生产数据库和查询数据库分别,对生产数据库接受RAC实现数据库的集群。接受高效的网络文件共享策略,接受图片服务器来实现页面的图片存储。不同网络用户访问考虑通过引入CDN来解决不同网络服务商的接入速度问题,一般只能解决静态页面的访问问题。在不同运营商机房部署服务器,通过镜像技术来实现不同网络服务商的接入速度问题。总体架构网站的系统分层架构网站的物理架构网站的开发架构网络拓扑结构备注:接受双防火墙双交换机做网络冗余,保障平台服务接受双防火墙通知接通2线路互联网接入,设备之间接受VRRP协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络复原后,自动复原。接受双千兆交换机分别接在2台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,依据业务及真实服务器的数量,交换机可以随时增加。接受硬件设备负载均衡器,实现网络流量的负载均衡运用硬件设备负载均衡器,将网络流量均衡的分担到WEB服务器集群各节点服务器,保障平台服务器资源均衡的运用。接受代理服务器,实现软件级的网络负载均衡。数据库服务器分别成生产数据库集群和查询数据库集群,实现生产读写和后台查询统计进行分别,同时生产数据库接受rac技术进行架构涉及技术的详解负载均衡基于DNS的负载均衡--一个域名绑定多个IPDNS负载均衡技术是最早的负载均衡解决方案,它是通过DNS服务中的随机名字解析来实现的,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的Web服务器,从而达到负载均衡的目的。这种技术的优点是,实现简洁、实施简洁、成本低、适用于大多数TCP/IP应用;但是,其缺点也特殊明显,首先这种方案不是真正意义上的负载均衡,DNS服务器将请求平均地支配到后台的Web服务器上,而不考虑每个Web服务器当前的负载状况;假如后台的Web服务器的配置和处理实力不同,最慢的Web服务器将成为系统的瓶颈,处理实力强的服务器不能充分发挥作用;其次未考虑容错,假如后台的某台Web服务器出现故障,DNS服务器照旧会把DNS请求支配到这台故障服务器上,导致不能响应客户端。最终一点是致命的,有可能造成相当一部分客户不能享受Web服务,并且由于DNS缓存的缘由,所造成的后果要持续相当长一段时间(一般DNS的刷新周期约为24小时)。所以在国外最新的建设中心Web站点方案中,已经很少接受这种方案了。通过硬件四层交换实现负载均衡在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够供应特殊优秀的性能和很灵敏的管理实力。Yahoo中国当时接近2000台服务器运用了三四台Alteon就搞定了通过软件四层交换实现负载均衡软件四层交换我们可以运用Linux上常用的LVS来解决,LVS就是LinuxVirtualServer,他供应了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵敏的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不行少。一个典型的运用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在许多大型网站包括搜寻引擎上被接受,这样的架构低成本、高性能还有很强的扩张性。通过反向代理服务器实现负载均衡反向代理服务器又称为WEB加速服务器,它位于WEB服务器的前端,充当WEB服务器的内容缓存器,反向代理服务器是针对WEB服务器设置的,后台WEB服务器对互联网用户是透亮的,用户只能看到反向代理服务器的地址,不清楚后台WEB服务器是如何组织架构的。当互联网用户请求WEB服务时,DNS将请求的域名解析为反向代理服务器的IP地址,这样URL请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求和应答、和后台WEB服务器交互。利用反向代理服务器减轻了后台WEB服务器的负载,提高了访问速度,同时避开了因用户干脆和WEB服务器通信带来的平安隐患。目前有许多反向代理软件,比较出名的有Nginx和Squid。Nginx是由IgorSysoev为俄罗斯访问量其次的Rambler.ru站点开发的,是一个高性能的和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Squid是由美国政府大力资助的一项探讨支配,其目的为解决网络带宽不足的问题,支持,S,FTP等多种协议,是现在Unix系统上运用、最多功能也最完整的一套软体。SquidSquid是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度,下面将重点介绍Squid反向代理的实现原理和在提高网站性能方面的应用。Squid反向代理服务器位于本地WEB服务器和Internet之间,组织架构如下图:客户端请求访问WEB服务时,DNS将访问的域名解析为Squid反向代理服务器的IP地址,这样客户端的URL请求将被发送到反向代理服务器。假如Squid反向代理服务器中缓存了该请求的资源,则将该请求的资源干脆返回给客户端,否则反向代理服务器将向后台的WEB服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者运用。Squid反向代理一般只缓存可缓冲的数据(比如html网页和图片等),而一些CGI脚本程序或者ASP、JSP之类的动态程序默认不缓存。它依据从WEB服务器返回的头标记来缓冲静态页面,有四个最重要头标记:Last-Modified:告知反向代理页面什么时间被修改Expires:告知反向代理页面什么时间应当从缓冲区中删除Cache-Control:告知反向代理页面是否应当被缓冲Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache注:DNS的轮询机制将某一个域名解析为多个IP地址。NginxNginx(“enginex”)是俄罗斯人IgorSysoev(塞索耶夫)编写的一款高性能的和反向代理服务器。Nginx已经在俄罗斯最大的门户网站──RamblerMedia(rambler.ru)上运行了4年时间,同时俄罗斯超过20%的虚拟主机平台接受Nginx作为反向代理服务器。在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道运用Nginx服务器。Nginx特点如下:工作在OSI模型的第7层(应用层)高并发连接官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。内存消耗少在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)。配置文件特殊简洁风格跟程序一样通俗易懂。成本低廉Nginx为开源软件,可以免费运用。而购买F5BIG-IP、NetScaler等硬件负载均衡交换机则须要十多万至几十万人民币。支持Rewrite重写规则能够依据域名、URL的不同,将请求分到不同的后端服务器群组。内置的健康检查功能假如NginxProxy后端的某台Web服务器宕机了,不会影响前端访问。节约带宽支持GZIP压缩,可以添加阅读器本地缓存的Header头。稳定性高用于反向代理,宕机的概率微乎其微。Nginx+squid页面缓存来实现反向代理负载均衡通过Nginx反向代理和squid缓存实现动静分别的架构图如下所示:Apache+tomcat集群实现负载均衡。运用apache和多个tomcat配置一个可以应用的web网站,用Apache进行分流,把请求依据权重以及当时负荷分tomcat1,tomcat2...去处理,要达到以下要求:Apache做为Server,通过mod_jk连接器连接多个tomcat应用实例,并进行负载均衡。同时还要配置session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat,集群内的tomcat都有相同的session,并为系统(包括Apache和tomcat)设定Session超时时间。缓存系统架构方面的缓存Squid缓存 架构方面运用Squid进行缓存。注:SQUID运用了LM算法,LM就是页面Header里时间(Date)和Last-Modified时间的差。Date一般是Squid从后面取页面的时间,Last-Modified一般是页面生成时间。Nginx的缓存功能Nginx从0.7.48版本起先,支持了类似Squid的缓存功能;缓存把URL及相关组合当作Key,用md5编码哈希后保存;Nginx的Web缓存服务只能为指定URL或状态码设置过期时间,不支持类似Squid的PURGE指令,手动清除指定缓存页面;接受MMAP实现,设置的缓存区大小不能超过物理内存+SWEB的值基于memcached的缓存nginx对memcached有所支持,但是功能并不是特殊之强,性能上还是特殊之优秀。location/mem/{
if($uri~"^/mem/([0-9A-Za-z_]*)$")
{
set$memcached_key"$1";
memcached_pass
:11211;
}
expires70;
}这个配置会将://sudone/mem/abc指明到memcached的abc这个key去取数据。Nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。Nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:://sudone/?和://sudone/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成://sudone/?1还是://sudone/?123,均不能透过nginx缓存,从而有效地爱惜了后端主机。nginx会特殊醇厚地将链接形式保存到文件系统中,这样对于一个链接,可以很便利地查阅它在缓存机器上的缓存状态和内容,也可以很便利地和别的文件管理器如rsync等协作运用,它完完全全就是一个文件系统结构。应用程序方面的缓存OSCacheOSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,供应了在现有JSP页面之内实现快速内存缓冲的功能,OSCache是个一个广泛接受的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的一般的缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或请求,任何java对象都可以缓存。拥有全面的API--OSCacheAPI给你全面的程序来限制全部的OSCache特性。永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个的进行参数配置,不须要修改代码。缓存记录的过期--你可以有最大限度的限制缓存对象的过期,包括可插入式的刷新策略(假如默认性能不须要时)。OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持。OSCache的特点:1)缓存任何对象:你可以不受限制的缓存部分jsp页面或请求,任何java对象都可以缓存。2)拥有全面的API:OSCacheAPI允许你通过编程的方式来限制全部的OSCache特性。3)永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。4)支持集群:集群缓存数据能被单个的进行参数配置,不须要修改代码。5)缓存过期:你可以有最大限度的限制缓存对象的过期,包括可插入式的刷新策略(假如默认性能不能满足须要时)。Memcachedmemcached是高性能的分布式内存缓存服务器。一般的运用目的是,通过缓存数据库查询结果,削减数据库访问次数,以提高动态Web应用的速度、提高可扩展性。Memcached是以Key/Value的形式单个对象缓存。自主开发的内存数据缓存服务独立进程方式的缓存服务对于一些常用的动态数据通过开发程序服务缓存在内存中,供应应其他子系统调用,如下面的数据就可以通过这样方式进行缓存。用户基本信息及状态的信息缓冲列表缓存,就像论坛里帖子的列表记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才便利实现分页。困难一点的group,sum,count查询,比如积分的分类排名集成在WEB应用中的内存缓存在web应用中对于热点的功能,考虑运用完全装载到内存,保证确定的响应速度,对于须要频繁访问的热点数据,接受集中缓存(多个可以接受负载均衡),减轻数据库的压力,比如:许多配置信息,操作员信息等等。页面静态化静态的HTML页面严格地由标准的HTML标示语言构成,并不须要服务器端即时运算生成。这意味着,对一个静态HTML文档发出访问请求后,服务器端只是简洁地将该文档传输到客户端。从服务器运行的那个时间片来看,这个传输过程仅仅占用了很小的CPU资源。页面静态化就是接受效率最高、消耗最小的纯静态化的html页面来替换动态页面。我们尽可能使我们的网站上的页面接受静态页面来实现,这个最简洁的方法其实也是最有效的方法。同时接受第三方开源的CMS系统来实现网站内容的管理。对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现页面静态化,所以我们须要引入常见的信息发布系统(CMS),信息发布系统(CMS)可以实现最简洁的信息录入自动生成静态页面,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不行少的。同时,HTML静态化也是某些缓存策略运用的手段,对于系统中频繁运用数据库查询但是内容更新很小的应用,可以考虑运用HTML静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避开了大量的数据库访问请求。在进行html静态化的时候还可以运用一种折中的方法,就是前端接着运用动态实现,在确定的策略下通过后台模块进行定时把动态网页生成静态页面,并定时推断调用,这个能实现许多灵敏性的操作。为了提高静态HTML的访问效率,主要可以对以下几个方面进行优化:网络带宽、磁盘I/O以及cache(高速缓冲存储器)。数据库配置及优化数据库集群 对生产数据库接受RAC实现数据库的集群。数据库及表的散列把生产数据库和查询数据库进行分别,针对系统业务数据的特点,把大的表进行拆分,对于访问较多的表接受分区表。运用读/写数据库分别,随着系统变得越来越浩大,特殊是当它们拥有很差的SQL时,一台数据库服务器通常不足以处理负载。但是多个数据库意味着重复,除非你对数据进行了分别。更一般地,这意味着建立主/从副本系统,其中程序会对主库编写全部的Update、Insert和Delete变更语句,而全部Select的数据都读取自从数据库(或者多个从数据库)。尽管概念上很简洁,但是想要合理、精确地实现并不简洁,这可能须要大量的代码工作。因此,即便在起先时运用同一台数据库服务器,也要尽早支配在PHP中运用分别的DB连接来进行读写操作。假如正确地完成该项工作,那么系统就可以扩展到2台、3台甚至12台服务器,并具备高可用性和稳定性。拥有良好的DB配置和备份许多公司都没有良好的备份机制,也不知道如何恰当地完成这项工作。只有imp是不够的,还须要进行热备份,从而得到超快的速度和超高的牢靠性。另外,在将全部备份文件从服务器上转移出来之前要进行压缩和加密。另外还要确保拥有设计合理的、有用的关于平安、性能和稳定性问题的设定,包括防止数据败坏,其中许多设定都是特殊重要的。文件存储文件共享HDFS(GFS)HDFS是ApacheHadoop项目中的一个分布式文件系统实现,基于Google于2003年10月发表的GoogleFileSystem(GFS)论文。特性硬件要求低高容错性易可扩展配置简洁超大文件HDFS接受master/slave架构。 一个HDFS集群是由一个Namenode和确定数目的Datanodes组成。NFS和GFS比较首先从它们的功能上进行分析。NFS即网络文件系统,是由SUN公司开发的。它是FreeBSD支持的文件系统中的一种,允许一个系统在网络上和它人共享书目和文件。通过运用NFS,用户和程序访问远端系统上的文件就像访问本地文件一样。而GFS是Google为了满足本公司快速增长的数据处理要求而开发的文件系统。GFS是一个可扩展的分布式文件系统,用于大型的、分布式的、对大量数据进行访问的应用。它是针对Google的计算机集群进行设计的,特地是为Google页面搜寻的存储进行了优化。所以从功能上看,它们两者是完全不同的概念。其次从结构上比较,NFS至少包括两个主要部分:一台服务器,以及至少一台客户机。被共享的书目和文件存放在服务器上,客户机远程地访问保存在服务器上的数据。GFS则由一台Master(通常有几台备份)和若干台TrunkServer构成。GFS中文件备份成固定大小的Trunk分别存储在不同的TrunkServer上,每个Trunk有多份(比如3)拷贝,也存储在不同的TrunkServer上。Master负责维护GFS中的Metadata,即文件名及其Trunk信息。客户端先从Master上得到文件的Metadata,依据要读取的数据在文件中的位置和相应的TrunkServer通信,获得文件数据。再从跨平台性上,NFS的基本原则是“容许不同的客户端及服务端通过一组RPCs共享相同的文件系统”,它是独立于操作系统的,容许不同的操作系统共同地进行文件的共享。而GFS则没有这一特点,文件只能被集群系统中的PC所访问,而且这些PC的操作系统一般是Linux。最终从规模上比较,HDFS只应用在大批量的数据共享上。目前Google拥有超过200个的GFS集群,其中有些集群的PC数量超过5000台。集群的数据存储规模可以达到5个PB,并且集群中的数据读写吞吐量可达到每秒40G。而NFS一般没有这么巨大的规模。文件的多服务器自动同步 运用Linux2.6内核的inotify监控Linux文件系统事务。 利用开源的lsync监听某一书目,假如书目内文件发生增、删、改,利用Rsync协议自动同步到多台服务器。图片服务器分别 特殊是假如程序和图片都放在同一个APAHCE的服务器下,每一个图片的请求都有可能导致一个D进程的调用。运用独立的图片服务器不但可以避开以上这个状况,更可以对不同的运用性质的图片设置不同的过期时间,以便同一个用户在不同页面访问相同图片时不会再次从服务器(基于是缓存服务器)取数据,不但快速,而且还省了带宽。还有就是,对于缓存的时间上,亦可以做独立的调整。网络问题解决方案你不行能要求全部的运用人员,都和你的服务器在一个运营商的网络内,而不同网络之间访问速度会很慢,我们可以接受镜像网站和引入CDN来解决这一问题。智能DNS解析我们可以在不同的网络运营商部署web服务器,通过linux上的rsync工具自动同步到不同网络接入商的web服务器上,以作为主站的镜像。然后通过配置智能DNS解析来引导不同网络的访问用户到对应的网络运营商的web服务器。CDN假如有足够的投资,也可以接受CDN(内容分发网),把静态内容(静态页面和图片)进行CDN缓存,以减轻服务器压力。CDN的全称是ContentDeliveryNetwork,即内容分发网络。它实行了分布式网络缓存结构(即国际上流行的webcache技术),其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络"边缘",运用户可以就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等缘由所造成的用户访问网站响应速度慢的问题。(也就是一个服务器的内容,平均分部到多个服务器上,服务器智能识别,让用户获得离用户最近的服务器,提高速度。目前,国内访问量较高的大型网站如新浪、网易等,均运用CDN网络加速技术,虽然网站的访问巨大,但无论在什么地方访问都会感觉速度很快。而一般的网站假如服务器在网通,电信用户访问很慢,假如服务器在电信,网通用户访问又很慢。WEB应用开发架构设计思路基于MVC的三层应用开发架构应用开发实现MVC三层架构进行web应用开发,接受ibatis作为许久层框架,c3p0作为数据库连接池。iBATIS是一个可以设计和实现更好的Java应用程序许久化层的框架。iBATIS把对象和存储过程或者运用XML描述符的SQL语句进行了关联。简洁是iBATIS最大的优势ibatis-运用ibatis的十个理由1.至少能操作10种以上的数据库
2.可配置的caching(包括从属)
3.支持DataSource、localtransactionmanagemen和globaltransaction
4.简洁的XML配置文档
5.支持Map,Collection,List和简洁类型包装(如Integer,String)
6.支持JavaBeans类(get/set方法)
7.支持困难的对象映射(如populatinglists,complexobjectmodels)
8.对象模型从不完备(不须要修改)
9.数据模型从不完备(不须要修改)
10.你已经知道SQL,为什么还要学习其他东西MVC架构示意Struts架构客户端发送一个请求,通过Struts框架最终获得一个响应,这一过程特殊重要,它是理解Struts框架的重点。上图描述了Struts框架的结构,而下图通过一个活动图更具体描述接受请求直至返回响应的整个过程:面对服务的应用架构面对服务的应用架构是指构建可分布式的、去中心化的服务器平台,以供应许多不同的应用,数据库被分成许多个小部分,围绕每个部分都会创建一个服务接口(API),并且该接口是访问数据库的唯一途径。最终数据库演化成一个特殊浩大的共享资源。这种架构是松散耦合的,并且围围着服务进行构建。面对服务的架构供应应他们隔离特性,一个服务可能有许多台数据库服务器,他们之间的数据是相通的,而对外他们的接口只有一个,外面是无法知道这个服务后面的数据组织是如何搭建的。这样就有了越来越多的应用服务器。这些应用服务器从数据众多的服务(每个服务背后都有数据库或集群数据库)中聚合信息,然后生成我们所看到的Amazon的各个网站页面。这样各种服务如插件一样组成了一个开放的平台,这样团队的规模就会比较小,比较灵敏。注Amazon就是接受了这种架构来构建的,它拥有上千台服务器。系统软件参数优化在确定的架构基础上,要提高并发处理实力则须要调整服务器的操作系统内核参数、web服务器(tomcat的参数、apache的参数、Nginx的参数),以使其性能达到最优化。操作系统优化调整系统的内核参数,增大连接数及TCP/IP的超时设置。Linux系统中:在/etc/sysctl.conf配置文件中增加如下内核参数:net.ipv4.tcp_syncookies=1net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=5tomcat服务器优化增大并发连接数,调整内存参数的设置。1、JDK内存优化:当应用程序须要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的80%。Tomcat默认可以运用的内存为128MB,在较大型的应用项目中,这点内存是不够的,须要调大.Tomcat默认可以运用的内存为128MB,Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下设置:JAVA_OPTS='-Xms【初始化内存大小】-Xmx【可以运用的最大内存】'须要把这个两个参数值调大。例如:JAVA_OPTS='-Xms256m-Xmx512m'表示初始化内存为256MB,可以运用的最大内存为512MB。2、连接器优化:在tomcat配置文件server.xml中的配置中,和连接数相关的参数有:maxThreads:Tomcat运用线程来处理接收的每个请求。这个值表示Tomcat可创建的最大的线程数。默认值150。acceptCount:指定当全部可以运用的处理请求的线程数都被运用时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值10。minSpareThreads:Tomcat初始化时创建的线程数。默认值25。maxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再须要的socket线程。默认值75。enableLookups:是否反查域名,默认值为true。为了提高处理实力,应设置为falseconnnectionTimeout:网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这样设置有隐患的。通常可设置为30000毫秒。maxKeepAliveRequests:保持请求数量,默认值100。bufferSize:输入流缓冲大小,默认值2048pression:压缩传输,取值on/off/force,默认值off。其中和最大连接数相关的参数为maxThreads和acceptCount。假如要加大并发连接数,应同时加大这两个参数。webserver允许的最大连接数还受制于*作系统的内核参数设置,通常Windows是2000个左右,Linux是1000个左右。apache服务器优化加大并发数量和关闭不须要的模块。因为apache特殊消耗内存,尽量轻量化。Apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率同时配置apache和tomcat的组合使之能作到动静分别,apache处理静态页面,tomcat处理动态页面。在处理静态页面或者图片、js等访问方面,可以考虑运用ligd代替Apache,它供应了更轻量级和更高效的处理实力Nginx服务器的优化worker_processes:该参数的值最好跟cpu核数相等,能够发挥最大性能,假如nginx所在服务器为2颗双核cpu,则建议设定为4。Web服务架构评测主要对基于tomcat和nginx+tomcat的web服务器的处理性能进行测试,以作为不同性能要求下架构选型的依据测试环境网络环境内网带宽千M内网。内网ping包延迟:<0.1ms网络拓扑示意服务器配置设备硬件配置操作系统NginxIBMX3650CPU:Intel(R)Xeon(R)E51502.66GHz2核*2内存:4G千兆网卡Redhatlinuxas4Tomcat1HpDL580G4CPU:Intel(R)Xeon(TM)3.40GHz4核*2内存:8G千兆网卡Redhatlinuxas5Tomcat2HpDL580G4CPU:Intel(R)Xeon(TM)3.40GHz4核*2内存:8G千兆网卡Redhatlinuxas5Test1HpDL580G5CPU:Intel(R)Xeon(R)E73101.60GHz4核*2内存:4G千兆网卡Redhatlinuxas5Test2IBMX3650CPU:Intel(R)Xeon(R)E51502.66GHz2核*2内存:4G千兆网卡Redhatlinuxas4软件环境操作系统网络参数优化用做测试的各台服务器,均在/etc/sysctl.conf配置文件中增加如下内核参数:net.ipv4.tcp_syncookies=1net.ipv4.tcp_tw_reuse=1net.ipv4.tcp_tw_recycle=1net.ipv4.tcp_fin_timeout=5Nginx设置主要配置如下:userwwwwww;worker_processes4;error_log/usr/local/nginx/logs/nginx_error.logdebug;pid/usr/local/nginx/logs/nginx.pid;worker_rlimit_nofile51200;events{useepoll;worker_connections51200;}{includemime.types;default_typeapplication/octet-stream;#charsetgb2312;server_names_hash_bucket_size128;client_header_buffer_size32k;large_client_header_buffers432k;sendfileon;tcp_nopushon;keepalive_timeout1;tcp_nodelayon;#gzipon;#gzip_min_length1k;#gzip_buffers416k;#gzip__version1.0;#gzip_comp_level2;#gzip_typestext/plainapplication/x-javascripttext/cssapplication/xml;#gzip_varyon;upstreamtomcats{server7:8081;server6:8081;#server1:8080;}server{listen81;server_namelocalhost;proxy_redirectoff;location/{proxy_pass://tomcats;}#后端的Web服务器可以通过X-Forwarded-For获得用户真实IP#proxy_set_headerX-Forwarded-For$remote_addr;#location/{#if($request_uri~*".*\.(js|css|gif|jpg|jpeg|png|bmp|swf)$")#{#proxy_pass://squid.abc;#}#if($request_uri~*"^/view/(.*)$")#{#proxy_pass://squid.abc;#}#proxy_pass://web.abc;#}#定义日志格式log_formataccess'$remote_addr-$remote_user[$time_local]$request''"$status"$body_bytes_sent"$_referer"''"$_user_agent""$_x_forwarded_for"';#打日志access_log/usr/local/nginx/logs/access.logaccess;#允许客户端请求的最大的单个文件字节数client_max_body_size10m;#缓冲区代理缓冲用户端请求的最大字节数可以理解为先保存到本地再传给用户client_body_buffer_size128k;#跟后端服务器连接的超时时间_发起握手等候响应超时时间proxy_connect_timeout600;#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理proxy_read_timeout600;#后端服务器数据回传时间_就是在规定时间之内后端服务器必需传完全部的数据proxy_send_timeout600;#代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可proxy_buffer_size8k;#同上告知Nginx保存单个用的几个Buffer最大用多大空间proxy_buffers432k;#假如系统很忙的时候可以申请更大的proxy_buffers官方举荐*2proxy_busy_buffers_size64k;#proxy缓存临时文件的大小proxy_temp_file_write_size64k;}}Tomcat设置主要配置如下:Tomcat5.5MaxThread500MinSpareThread25MaxSpareThread75Xmx1740MJava环境运用jdk1.6_03启动两个Tomcat。运用jdk1.6启动两个客户端的Tes测试t进程。测试结果单个TOMCAT的WEB服务器NO客户数线程数请求次数间隔时间测试服务器占用内存服务器负载持续时间平均速度完成请求结果说明11500200万0毫秒Test11.1G>15082秒12986条/秒106万从第82秒起先,tomcat占用内存1.1g,但CPU资源被tomcat耗尽,服务器负载急剧上升,top显示已达150,服务器停止响应客户端请求,客户端请求速度急剧下降,错包率100%,测试被迫中断。22500200万25毫秒Test11.7G<6288秒4765条/秒137万从第280秒左右起先,tomcat占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度急剧下降,出现错包,错包率超过>6%,且仍在增加,测试终止。tomcat抛出“java.lang.OutOfMemoryError:GCoverheadlimitexceeded“异样。Test2293秒4123条/秒120万32500200万50毫秒Test11.7G<3422秒2863条/秒120万服务端从第400秒左右起先,tomcat占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度急剧下降,起先出现大量错包,422秒以后的错包率超过4.3%,且仍在在增加中,之前的错包率约为0.8%,测试终止。Test2413秒2922条/秒120万42500200万200毫秒Test11.7G<2742秒1727条/秒128万服务端从第740秒左右起先,tomcat占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度急剧下降,起先出现大量错包,测试终止,达到1.7G前,错包率只有0.008%,达到1.7g后,截止停止测试时,错包率增长到1.2%,且仍在在增加中。web服务器负载小于2。Test2744秒1608条/秒119万52500200万500毫秒Test11.7G<11595秒742条/秒118万服务端从第1595秒左右起先,tomcat占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度急剧下降,起先出现大量错包,达到1.7G前,错包率只有0.08%,达到1.7g后,截止停止测试时,错包率增长到2.3%,测试终止。Test21575秒737条/秒116万62500300万1000毫秒Test11.7G<16362秒471条/秒300万在测试进度到80%左右时,tomcat1占用内存达到了Xmx指定上限1.7g,但Test1、Test2请求速度并未下降,直到600万次请求全部完成,两个客户端分别有9个丢包,丢包率只有0.003%,最长的响应时长为12.728秒。Test26351秒472条/秒300万Nginx+2个TOMCAT的WEB服务器NO客户端数线程数请求次数间隔时间测试服务器Tomcat占用内存服务器负载持续时间平均速度完成请求数最大响应时长平均响应时长测试结果12250150万0毫秒Test11G<2347秒4322条/秒150万93005毫秒0.21毫秒300万次请求全部完成,无一错包。Test11G322秒4658条/秒150万21244毫秒0.23毫秒22500200万25毫秒Test11.4G<2542秒3690条/秒200万45016毫秒0.27毫秒400万次请求全部完成,无一错包。Test21.4G544秒3676条/秒200万45014毫秒0.27毫秒32500300万50毫秒Test11.7G<21140秒2445条/秒278万服务端从第1100秒左右起先,Tomcat1、Tomcat2占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度缓慢下降,但并无错包,人为终止测试。Test21.7G1141秒2424条/秒276万42500300万200毫秒Test11.7G<11860秒1490条/秒277万服务端从第1800秒左右起先,Tomcat1、Tomcat2占用内存到达Xmx指定上限1.7g,Test1、Test2请求速度缓慢下降,但并无错包,人为终止测试。Test21.7G1863秒1482条/秒276万52500500万500毫秒Test11.7G<15475秒913条/秒500万93000毫秒1.09毫秒完成测试,但Tomcat1、Tomcat2占用内存到达Xmx指定上限1.7g,无错包。Test21.7G5565秒898条/秒500万92987毫秒1.11毫秒62500500万1000毫秒Test1968M<110149秒492条/秒500万9077毫秒2.02毫秒完成测试,无一错包。Test21G10149秒492条/秒500万9044毫秒2.02毫秒Nginx+2个TOMCAT的WEB服务器+缓冲NO客户端数线程数请求次数间隔时间测试服务器Tomcat占用内存服务器负载持续时间平均速度
(条/秒)完成请求数最大响应时长平均响应时长测试结果12250150万0毫秒Test10.2G<164秒23437150万9993毫秒0.04毫秒Test20.2G59秒25423150万3472毫秒0.04毫秒22500200万25毫秒Test10.4G<1196秒10202200万9616毫秒0.10毫秒开启Nginx缓存后,400万次请求全部完成,分别有241和216个错包。Test20.4G194秒10361200万9608毫秒0.10毫秒32500300万50毫秒Test10.4G<1379秒7915300万9015毫秒0.13毫秒开启Nginx缓存后,600万次请求全部完成,无一错包。Test20.2G384秒7812300万10234毫秒0.13毫秒42500300万200毫秒Test10.4G<11220秒2459300万3018毫秒0.40毫秒开启Nginx缓存后,600万次请求全部完成,无一错包。Test20.2G1241秒2417300万3384毫秒0.41毫秒52500500万500毫秒Test10.4G<15031秒993500万3020毫秒1.00毫秒开启Nginx缓存后,1000万次请求全部完成,无一错包。Test20.2G5055秒989500万3394毫秒1.01毫秒62500500万1000毫秒Test10.4G<110040秒498500万3020毫秒2.00毫秒开启Nginx缓存后,1000万次请求全部完成,无一错包。Test20.2G10038秒498500万78毫秒2.00毫秒注:本次测试所用jsp页面仅100个字节大小,测试过程中带宽压力可以忽视不计。测试过程中曾尝试过运用100k大小静态页面,结果显示在千兆内网下,无论是单Tomcat亦或是Nginx+2Tomcat,请求速度最大均不超过1000条/秒,网络带宽运用已经达到800M,接近千M内网上限。因此,实际应用中,网络带宽对整个web服务的影响会特殊大测试结果分析系统参数的影响分析worker_processes参数对Nginx性能的影响测试过程中分别设定worker_processes为8、4、2、1时发觉,该参数对nginx性能影响不大,对服务器资源消耗也没有太大影响,相关资料显示,该参数的值最好跟cpu核数相等,能够发挥最大性能,本次测试nginx所在服务器为2颗双核cpu,因此最终测试设定为4。MaxThread参数对tomcat并发性的影响本次测试tomcat的MaxThread参数设定为500,进行13000条/秒并发测试时,tomcat启动并发线程过多,将服务器cpu耗尽。分析MaxThread虽能够提高tomcat并发实力,但前提是在一个合理的范围内,要确保服务器负载不会因为并发线程过多而急剧上升,从而停止响应。-Xmx最大内存值对Tomcat能够持续响应高并发的影响持续高并发请求状态下,有6次测试是因为tomcat内存达到指定最大值导致响应变慢,直至内存溢出停止响应,因此,Tomcat最大内存对tomcat能够持续响应高并发请求有很大的影响,调整该值,应当可以增加Tomcat响应高并发请求的总数,进而延长WEB服务能够支撑峰值的时间。各架构下的性能分析Nginx+2Tomcat的最大并发性低于单Tomcat,Nginx+2Tomcat最快为8980条/秒,单Tomcat为12986条/秒,分析可能是受nginx所在服务器性能影响所致。单tomcat在配置1.7g最大内存时,在持续超过1479条/秒的并发请求下,在稳定支撑约240万次响应后,Tomcat内存达到1.7上限,之后Tomcat响应会急剧变慢,错包急剧上升。Nginx+2tomcat架构下,2个tomcat分别配置1.7g最大内存时,在持续超过2900条/秒的并发请求下,能够稳定支撑约540万次左右响应,之后两个Tomcat内存都会达到1.7上限,响应会急剧变慢,但错包状况并未出现。在Nginx+2tomcat,同时配置了缓存的状况下,可以达到1.5万以上的并发处理实力评测结果单个tomcat的处理实力在500条/秒左右单个tomcat能稳定支持每秒500左右的并发请求。Nginx+Tomcat比单个Tomcat更稳定,不易出现错包,可以通过扩充tomcat集群(新增tomcat服务器)来提升系统的并发实力单个tomcat在超出并发实力的提求下,处理实力大大下降,并出现大量错包,而接受Nginx+2Tomcat架构在各种测试下,均未出现错包,但处理实力也会下降。单个tomcat能稳定支持每秒500左右的并发请求,而Nginx+2Tomcat能支持每秒1000左右的并发请求。所以可以通过新加tomcat服务器来提升系统的并发实力,但在tomcat的总体处理实力超过nginx的处理实力时无效。Nginx+2Tomcat配置了缓存后,静态页面的并发实力不再受tomcat的限制,单个nginx的并发处理实力能达到1.5万以上。配置了缓存后,nginx+2tomcat的处理实力实测数据超过了1.5万次/秒,而单个tomcat可以支撑500次/秒,则从理论上计算一组Nginx+30个Tomcat集群可以支撑1.5万次/秒的并发处理。注:为tomcat均支配1.7G内存。配置选型网络带宽只考虑门户访问的带宽占用,后台管理页面等其他业务访问和门户访问相差2-3个数量级,这一部分网络流量占用忽视。同时考虑网络带宽利用率(70%)依据业务设计实力,每秒网络流量=WEB网站每秒钟访问流量=(每次访问占用的带宽×每秒访问次数)/带宽利用率=(200K*8*n)/0.7注:一般门户的首页大小>1M、平均200K/页面,我们以平均值来计算。并发实力占用的网络带宽100次/秒228M200次/秒457M500次/秒1442M1000次/秒2286M架构和硬件配置选型硬件配置参考序号产品功能参考型号、配置TPMC1主机设备1.1数据库服务器IBMSystemx3850M2,4个处理器,每处理器为6核,共计24核。内存大小16G。SAS硬盘,硬盘大小587GB。4U机架,集成双千兆以太网接口,两块千兆的光纤网卡。6845081.2WEB服务器IBMSystemx3850M2,4个处理器,每处理器为6核,共计24核。内存大于8G。SAS硬盘,硬盘大小587GB。4U机架,集成双千兆以太网接口,两块千兆的光纤网卡。6845081.3管理终端IBMSystemx3560,1个IntelXeonE5450处理器,内存大小2G,2U机架。326002网络设备2.1负载均衡器RADWARE应用负载均衡设备,型号:为ODS-504,有,4个可选的千兆位电端口,1G主内存,500M处理实力(最大可通过License升级为4G)2.2防火墙C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 低压电表施工方案(3篇)
- 农村输电铁塔施工方案(3篇)
- 仿古宗祠房顶施工方案(3篇)
- 仿混凝土围栏施工方案(3篇)
- 人世间营销方案(3篇)
- 企业应急预案演练中暑(3篇)
- 企业个贷营销活动方案(3篇)
- 1-1-4-1-Terphenyl-2-2-4-4-tetracarboxylic-acid-生命科学试剂-MCE
- 南京渗透地坪施工方案(3篇)
- 发生高温事故应急预案(3篇)
- 2026年4月自考02324离散数学试题及答案含评分参考
- 鼠疫相关知识培训课件
- 国家开放大学《课程与教学论》形考任务1-4参考答案
- 设计如何反映文化和时代
- 材料物理知到智慧树章节测试课后答案2024年秋南开大学
- 第一章地球的运动(易考易错单元卷)(解析版)
- DL∕T 1917-2018 电力用户业扩报装技术规范
- 2024年1月自考07484社会保障学试题及答案含解析
- 医疗废弃物无害化处理与资源化利用
- 《运动技能学习与控制》考试复习题库(含答案)
- 露天采矿技术管理
评论
0/150
提交评论