大型网络平台架构设计方案_第1页
大型网络平台架构设计方案_第2页
大型网络平台架构设计方案_第3页
大型网络平台架构设计方案_第4页
大型网络平台架构设计方案_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大规模网络平台架构设计方案目录11的性能瓶颈分析2系统架构设计32.1总体思路3负载平衡32.1.2WEB应用开发架构的WEB思想32.1.3数据存储的设计思路2.1.4不同网络用户的访问注意事项42.2总体架构52.2.1系统层次结构52.2.2物理架构62.2.3发展框架网络拓扑结构82.3架构相关技术的详细说明9负载平衡9高速缓存152.3.3页面静态19数据库配置和优化20文件存储212.3.6网络问题的解决方案242.3.7WEB应用开发架构的WEB设计思想262.4系统软件参数优化30操作系统优化302.4.2tomcat服务器优化312.4.3pache服务器优化332.4.4nginx服务器的优化333Web服务架构评估343.1测试环境34网络环境34服务器配置35软件环境353.2测试结果403.2.1单个TOMCAT40的WEB服务器3.2.2Nginx+2TOMCATWEB服务器413.2.3ginx+2个TOMCATWEB服务器+缓冲区423.3测试结果分析433.4评估结果444配置选择454.1网络带宽454.2架构和硬件配置选择46硬件配置参考464.2.2Web架构和硬件选择474.3硬件容量扩展策略484.3.1添加服务器484.3.2增加存储48升级服务器48网络扩展48附录5:部分主流真实数据49性能瓶颈分析基于影响性能的因素很多,主要从以下四个方面进行分析和说明:电网负荷公共网络负载净负荷WEB应用服务器性能中央处理器内存、输入/输出访问商店并发TCP/IP连接数服务器性能数据库参数配置服务器性能(CPU、内存、存储)数据结构的合理性不同的WEB应用处理方法有不同的性能瓶颈。对于静态:静态HTML页面由标准的HTML标记语言严格组成,不需要在服务器端实时操作生成。这意味着在对一个静态HTML文档发出访问请求后,服务器只需将文档传输给客户机。从服务器运行时的时间片来看,这个传输过程只占用少量的CPU资源。静态HTML的访问瓶颈是:网络带宽、磁盘I/O和缓存。对于动态页面因为服务器在将动态页面传输到客户端之前必须对其进行解释,所以会给应用服务器增加额外的性能消耗,如果要进一步访问数据库,会增加数据库服务器的性能消耗,所以动态页面还有额外的瓶颈:应用服务器的性能和数据库服务器的性能。系统架构设计大意为了提高高并发性能、开发效率和运行效率,主要按照以下思路进行规划和设计:负载均衡四层交换负载平衡:负载均衡器用于实现硬件级的四层交换负载均衡,或者LVS用于实现软件的四层交换负载均衡。使用第三方软件实现负载均衡和缓存页面请求。反向代理服务器集群由Nginx实现,squid集群设置为静态页面和图片的缓存。负载均衡是通过web服务器的配置来实现的。即客户的请求通过apache或Nginx平均分配给Tomcat1和Tomcat2进行处理。对WEB应用开发架构的思考应用开发,MVC架构,三层架构,web应用开发页面尽可能静态,以减少动态数据访问。如果是信息类型,可以考虑第三方开源CMS系统生成静态内容页面。Oscache用于实现页面缓存,Memcached用于实现数据缓存。采用独立的图像服务器集群实现图像资源存储和WEB请求。数据存储的设计思想数据库拆分,将生产数据库与查询数据库分开,并使用RAC对生产数据库进行集群化。采用高效的网络文件共享策略,并采用图像服务器实现页面的图像存储。不同的网络用户访问注意事项通过引入CDN来解决不同网络服务商的访问速度问题,只能解决静态页面的访问问题。在不同运营商机房部署服务器,通过镜像技术实现不同网络服务商的访问速度。整体架构系统分层架构基于的物理架构的开发框架网络拓扑结构备注:采用双防火墙和双交换机进行网络冗余,保证平台服务。双防火墙用于通知双线互联网接入的连接,设备之间使用VRRP协议。在任何防火墙或互联网出现故障后,流量可以自动切换到另一端以确保的正常运行,并且设备或网络将自动恢复。双千兆交换机分别连接到两个防火墙。当某个设备或网络链路出现故障时,好的设备会自动接管坏设备的工作,不会影响整体运行。根据业务和真实服务器的数量,可以随时增加交换机。硬件负载均衡器用于实现网络流量的负载均衡。使用硬件负载均衡器将网络流量平均分配给WEB服务器集群中的各个节点服务器,从而保证平台服务器资源的均衡使用。采用代理服务器实现软件级的网络负载均衡。服务器分为生产数据库集群和查询数据库集群,实现了生产读写与后台查询统计的分离。同时,生产数据库采用rac技术。架构和技术的详细说明负载均衡基于DNS的负载平衡-一个附加域有多个IPDNS负载均衡技术是最早的负载均衡解决方案,是通过DNS服务中的随机名称解析来实现的。在DNS服务器中,同一个名字可以配置很多不同的地址,最终查询到这个名字的客户端在解析这个名字的时候会得到其中一个地址。因此,对于同一个名称,不同的客户端会得到不同的地址,它们会访问不同地址的Web服务器,从而达到负载均衡的目的。该技术实现简单,易于实现,成本低,适用于大多数TCP/IP应用。但是,它的缺点也非常明显。首先,这个方案不是真正意义上的负载平衡。DNS服务器将请求平均分配给后台Web服务器,而不管每个Web服务器的当前负载。如果后台Web服务器的配置和处理能力不一样,最慢的Web服务器就会成为系统的瓶颈,处理能力强的服务器就发挥不了作用;其次,没有考虑容错。如果后台的Web服务器出现故障,DNS服务器仍会将DNS请求分配给该故障服务器,从而导致无法响应客户端。最后一点是致命的,可能会导致相当一部分客户无法享受Web服务,并且由于DNS缓存(一般DNS刷新周期在24小时左右)造成的后果会持续很长时间。因此,这种方案在最新的国外建设中心网站方案中很少使用。通过硬件四层交换实现负载均衡。在硬件四层交换产品领域,有一些知名的产品可供选择,如Alteon、F5等。这些产品非常昂贵,但它们物有所值,可以提供出色的性能和灵活的管理能力。雅虎在中国的近2000台服务器使用了三到四台Alteon的服务器。通过软件四层交换实现负载均衡。我们可以用Linux上常用的LVS来解决软件四层交换。LVS是Linux虚拟服务器。它提供了基于心跳的实时灾难响应解决方案,提高了系统的健壮性,同时提供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式系统来说是必不可少的。使用负载均衡的典型策略是在软件或硬件的四层交换的基础上构建squid集群。很多大型搜索引擎,包括搜索引擎,都采用这种思路。该架构成本低、性能高、可扩展性强。通过反向代理服务器实现负载平衡反向代理服务器,也称为WEB加速服务器,位于WEB服务器的前端,充当WEB服务器的缓存。WEB服务器设置反向代理服务器,后台WEB服务器对互联网用户透明。用户只能看到反向代理服务器的地址,不清楚后台WEB服务器是如何组织的。当互联网用户请求WEB服务时,DNS将请求的域名解析为反向代理服务器的IP地址,这样URL请求就会被发送到反向代理服务器,反向代理服务器将负责处理用户的请求和响应,并与后台WEB服务器进行交互。反向代理服务器减轻了后台WEB服务器的负载,提高了访问速度,避免了用户与WEB服务器直接通信带来的安全隐患。目前反向代理软件很多,其中Nginx和Squid比较有名。Nginx是伊戈尔·塞索耶夫为俄罗斯访问量第二大的网站Rambler.ru开发的。它是一个高性能的反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Squid是美国政府资助的一个研究项目。其目的是解决网络带宽不足的问题,支持S、FTP等多种协议。它是目前Unix系统上使用的功能最多、最完整的一套软件。鱿鱼Squid是一款开源软件,其反向代理技术可以提高系统的访问速度。下面将重点介绍Squid反向代理的实现原理及其在提高性能方面的应用。Squid反向代理服务器位于本地WEB服务器和Internet之间,其组织结构如下:当客户端请求访问WEB服务时,DNS将访问的域名解析为Squid反向代理服务器的IP地址,这样客户端的URL请求就会被发送到反向代理服务器。如果请求的资源缓存在Squid反向代理服务器中,则请求的资源会直接返回给客户端;否则,反向代理服务器将从后台WEB服务器请求资源,然后将请求的响应返回给客户端,并将响应缓存在本地以供下一个请求者使用。Squid反向代理一般只缓存可以缓存的数据(如html网页、图片),而一些CGI脚本程序或ASP、JSP等动态程序默认不缓存。它根据从WEB服务器返回的header标记缓冲静态页面。有四个最重要的标题标签:Last-Modified:告诉反向代理页面何时被修改。Expires:告诉反向代理页面何时应该从缓冲区中删除它。Cache-Control:告诉反向代理页面是否应该被缓冲。Pragma:用于包含特定于实现的指令,最常用的是Pragma:no-cache。注意:DNS的轮询机制将一个域名解析为多个IP地址。NginxNginx(“引擎x”)是一个高性能的反向代理服务器,由俄罗斯伊戈尔塞索耶夫(塞索耶夫)编写。Nginx已经在俄罗斯最大的门户网站漫步者媒体上运行了4年,俄罗斯超过20%的虚拟主机平台使用Nginx作为反向代理服务器。在中国,有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山X、金山词霸、校内网、YUPOO相册、豆瓣、迅雷侃侃等,很多频道都使用Nginx服务器。Nginx的特点如下:工作在OSI模型的第7层(应用层)高并发连接官方测试可以支持50000个并发连接,在实际生产环境下可以达到20000~30000个并发连接。少存钱在30000个并发连接下,10个openNginx进程只消耗150M内存(15M*10=150M)。配置文件非常简单风格和程序一样容易理解。低成本Nginx是开源软件,可以免费使用。而购买F5BIG-IP、NetScaler等硬件负载均衡交换机则需要十几万到几十万人民币。支持重写重写规则。可以根据不同的域名和URL将请求分成不同的后端服务器组。设置健康检查功能如果Nginx代理后端的一个Web服务器宕机,不会影响前端访问。节省带宽支持GZIP压缩,可以添加浏览器本地缓存头。高稳定性对于反向代理,宕机的概率很小。Nginx+squid页面缓存实现反向代理负载均衡通过Nginx反向代理和squid缓存实现动静分离的架构图如下:Apache+tomcat集群实现负载均衡。用apache和多个tomcat配置一个适用的web,用Apache分发请求,用tomcat1,tomcat2等根据权重处理请求。的电流负载,以满足以下要求:Apache作为服务器,通过mod_jk连接器连接多个tomcat应用实例,进行负载均衡。同时要配置会话复制,也就是说任何一个tomcat增加的会话都要同步复制到其他Tomcat上。集群中的Tomcat都有相同的会话,应该为系统(包括Apache和Tomcat)设置会话超时时间。躲藏系统架构的缓存鱿鱼缓存 Squid缓存了模式。注意:SQUID使用LM算法,LM是页眉中的时间(日期)和上次修改时间之间的差值。Date通常是Squid从后面取页面的时间,Last-Modified通常是页面生成时间。Nginx的缓存功能从0.7.48版本开始,Nginx支持类似Squid的缓存。以缓存URL和相关组合为密钥,用md5哈希后保存;Nginx的Web缓存服务只能为指定的URL或状态码设置过期时间,不支持类似Squid的PURGE指令手动清除指定的缓存页面;对于MMAP实现,设置的缓冲区大小不能超过物理内存+SWEB的值。基于Memcached的缓存Nginx支持memcached,但是功能不是特别强,性能还是很优秀的。位置/内存/{如果($uri~“^/mem/([0-9a-za-z_]*)$”){设置$memcached_key"$1memcached_pass:11211;}过期70;}此配置将指向sudone。/mem/abc到memcachedabc的键来获取数据。目前INX还没有任何写memcached的机制,所以把数据写到memcached里还得靠后台的动态语言来完成,你可以用404定向到后端写数据。Nginx的传统缓存的缺点是不同于squid等其他缓存软件的,所以也算是它的优点吧。在生产应用中,它经常与squid一起使用。鱿鱼适合做胶带?往往不能被阻止,但nginx可以阻止其访问,例如:sudone。/?还有sudone。/在鱿鱼上会被当作两个,所以会造成两个贯穿;Nginx不管变成sudone都只会保存一次。/?1或sudone。/?23、不能通过nginx缓存,从而有效保护后端主机。Nginx会诚实地将表单保存到文件系统中,这样一来,它可以很容易地在缓存机器上检查自己的缓存状态和容量,还可以方便地与rsync等其他文件管理器一起使用。它完全是一个文件系统结构。应用程序端缓存OSCacheOSCache由OpenSymphony设计,是一款开创性的JSP定制标记应用,在现有JSP页面中提供快速缓存和缓冲的功能。OSCache是一个广泛使用的高性能J2EE缓存框架,OSCache可以作为任何Java应用程序的通用缓存解决方案。OSCache有以下特点:缓存任意对象,可以无限制的缓存一些jsp页面或者请求,任意java对象都可以缓存。OSCacheAPI给你一个全面的程序来控制OSCache的所有特性。永久缓存——缓存可以随意写入硬盘,因此它允许创建昂贵的数据保留缓存,甚至重新启动应用程序。支持集群——集群缓存数据可以单独配置,无需修改代码。记录的过期——可以最大程度地控制缓存对象的过期,包括可插拔刷新策略(如果默认性能不需要的话)。OSCache是应用最广泛的缓存方案,oss、Hibernate、Spring等都支持。OSCache的特点:1)缓存任意对象:可以无限制的缓存一些jsp页面或者请求,任意java对象都可以缓存。2)拥有一个全面的API:OSCacheAPI允许你以编程方式控制所有OSCache特性。3)永久缓存:缓存可以配置为写入硬盘,从而允许缓存在应用服务器的多个生命周期中创建昂贵的数据。4)集群支持:集群缓存数据可以单独配置,无需修改代码。5)缓存过期:可以最大程度控制缓存对象的过期,包括可插拔刷新策略(如果默认性能不能满足需要)。MemcachedMemcached是一个高性能的分布式缓存服务器。一般目的是通过缓存数据库查询结果来减少数据库访问次数,从而提高动态Web应用的速度和可扩展性。Memcached是键/值形式的单对象缓存。自行开发的数据存储和缓存服务独立进程缓存服务对于一些常用的动态数据,通过开发者服务缓存在内存中,提供给其他子系统调用。例如,可以用这种方式缓存以下数据。用户基本信息和状态的信息缓冲列表缓存,类似于论坛中的帖子列表。记录帖子数量的缓存,例如论坛版块中有多少帖子,以便于分页。复杂的分组、求和及计数查询,如点数的分类和排名。集成在WEB应用程序中的内存缓存在web应用程序中,满负荷存储被认为是为了确保绝对响应速度。对于需要频繁访问的热点数据,采用集中缓存(负载均衡可以用于很多)来减轻数据库的压力,比如大量的配置信息,操作员信息等等。页码静态HTML页面由标准的HTML标记语言严格组成,不需要在服务器端实时操作生成。这意味着在对一个静态HTML文档发出访问请求后,服务器只需将文档传输给客户机。从服务器运行时的时间片来看,这个传输过程只占用少量的CPU资源。分页就是用效率最高、消耗最低的纯静态html页面代替动态页面。我们尽量使用静态页面来实现我们的网页。这个最简单的方法其实是最有效的。同时采用第三方开源CMS系统实现内容的管理。对于大量频繁更新的页面,我们无法手动逐个实现静态页面,因此需要引入通用信息发布系统(CMS),通过最简单的信息输入,自动生成静态页面。对于一个大的规模,有一个有效的和可管理的CMS是必不可少的。同时,HTML静态也是一些缓存策略使用的手段。对于经常使用数据库查询但更新能力不大的应用,可以考虑使用HTML静态,比如论坛中论坛的公共设置信息。这些信息目前主流论坛都可以后台管理,存储在数据库中。其实这些信息有大量是被前台程序调用的,但是更新频率很小,所以我们可以考虑在后台更新的时候把这部分做成静态的,这样就避免了大量的数据库访问请求。在使html静态化时,还可以采用一种折中的方法,即前端继续使用动态实现,在一定的策略下,后端模块定时从动态网页生成静态页面,定时判断调用,可以实现很多灵活的操作。为了提高静态HTML的访问效率,可以从以下几个方面进行优化:网络带宽、磁盘I/O和缓存。数据库配置和优化数据库集群 RAC用于生产数据库的集群化。数据库和表的散列将生产数据库和查询数据库分开,根据系统业务数据的特点拆分大表,对访问较多的表使用分区表。使用读/写数据库分离,随着系统变得越来越大,尤其是当它们的SQL性能很差时,数据库服务器通常不足以处理负载。但是多个数据库意味着重复,除非你把数据分开。更一般地说,这意味着建立一个主/从副本系统,在这个系统中,程序将把所有的更新、插入和删除更改语句写入主库,所有的选择数据将从从数据库(或多个从数据库)中读取。虽然概念简单,但是要合理准确的实现并不容易,可能需要大量的代码工作。所以,即使一开始使用同一个数据库服务器,也要尽早计划使用单独的DB连接进行PHP的读写。如果这项工作做对了,系统可以扩展到2台、3台甚至12台服务器,具有高可用性和稳定性。拥有良好的数据库配置和备份很多公司没有很好的备份机制,也不知道如何正确的做到这一点。光靠Imp是不够的,还需要热备份,才能获得超快的速度和高可靠性。此外,所有备份文件在从服务器传输之前都应进行压缩和加密。此外,确保您有关于安全性、性能和稳定性的设计良好且有用的设置,包括防止数据损坏,其中许多设置非常重要。文件存储器文件共享HDFS(政府统计处)HDFS是ApacheHadoop项目中的一个分布式文件系统实现,基于Google在2003年10月发表的Google文件系统(GFS)论文。特点硬件要求低高容错性易于扩展简单配置超大文件HDFS采用主/从架构。 HDFS集群由一个Namenode和一定数量的Datanodes组成。请比较NFSGFS首先,分析它们的功能。NFS网络文件系统是由SUN公司开发的。它是FreeBSD支持的文件系统之一,允许系统与网络上的其他系统共享目录和文件。使用NFS,用户和程序可以像访问本地文件一样访问远程系统上的文件。GFS是Google为满足公司快速增长的数据处理需求而开发的文件系统。GFS是一个可扩展的分布式文件系统,用于访问大量数据的大规模分布式应用程序。它是为谷歌的计算机集群设计的,并专门为谷歌的页面搜索的存储进行了优化。所以从功能上来说,它们是完全不同的概念。其次,从结构上比较,NFS至少包括两个主要部分:一个服务器与至少一个客户端通信。共享目录和文件存储在服务器上,客户端远程访问存储在服务器上的数据。GFS由一个主服务器(通常有几个备份)和几个中继服务器组成。GFS中的文件被备份到固定大小的trunk中,这些trunk存储在不同的Trunk服务器上,并且每个Trunk有多个副本(例如,3个副本),这些副本也存储在不同的Trunk服务器上。Master负责维护GFS中的元数据,即文件名和主干信息。客户端首先从主服务器获取文件的元数据,然后根据要读取的数据在文件中的位置与对应的TrunkServer进行通信,获取文件数据。从跨平台的角度来看,NFS的基本原理是“允许不同的客户端和服务器通过一组RPC共享同一个文件系统”。它独立于操作系统,允许不同的操作系统共享文件。而GFS则没有这个功能。文件只能由集群系统中的PC访问,这些PC的操作系统一般是Linux。最后,与规模相比,HDFS只适用于海量数据共享。目前,谷歌拥有超过200个GFS集群,其中一些集群拥有超过5000台PC。集群的数据存储规模可达5PB,集群内数据读写吞吐量可达每秒40G。而NFS一般没有这么大的规模。基于的多服务器文件自动同步 使用Linux2.6内核的inotify来监控Linux文件系统事件。 使用开源的lsync监控一个目录,如果目录文件被添加、删除或更改,使用Rsync协议自动同步到多台服务器。图像服务器分离 特别是,如果程序和图片放在同一个APAHCE服务器下,对每个图片的请求都可能导致对一个D进程的调用。使用独立的图片服务器不仅可以避免上述情况,还可以对不同使用属性的图片设置不同的过期时间,使得同一用户在不同页面访问同一张图片时不会再次从服务器(基于缓存服务器)取数据,不仅速度快,而且节省带宽。也就是说,缓存时间也可以独立调整。网络问题的解决方案你不能要求所有用户都和你的服务器在同一个运营商的网络,不同网络之间的访问速度会很慢。我们可以通过镜像和引入CDN来解决这个问题。智能DNS解析我们可以在不同的网络运营商部署web服务器,通过linux上的rsync工具自动同步到不同网络接入商的web服务器上,作为主站的镜像。然后,智能DNS解析被配置为将不同网络的访问用户引导到相应网络运营商的web服务器。加拿大如果有足够的投入,还可以使用CDN(内容分发网络)将静态内容(静态页面和图片)缓存在CDN中,减轻服务器的压力。CDN的全称是ContentDeliveryNetwork,即内容交付网络。它采用分布式网络缓存结构(即国际上流行的webcache技术),其目的是通过在现有互联网上增加新的网络结构,将内容发布到离用户最近的网络“边缘”,让用户就近获取所需内容,解决互联网网络的拥塞,提高用户访问的响应速度。技术上,网络带宽小、用户访问量大、网点分布不均等造成的用户访问响应速度慢的问题。得到了全面解决。(即把一台服务器的容量平均分成多台服务器,智能识别服务器,让用户得到离自己最近的服务器,速度提高。目前中国访问量较高的大型公司,如新浪、网易等,都采用了CDN网络加速技术。虽然他们的访问量很大,但无论他们访问哪里,都会感觉很快。一般如果服务器在中国网通,电信用户访问慢,如果服务器在中国电信,网通用户访问慢。WEB应用开发架构的设计思想基于MVC的三层应用开发架构web应用开发MVC三层架构的应用与实现,使用ibatis作为持久层框架,使用c3p0作为数据库连接池。IBATIS是一个框架,可以为Java应用程序设计和实现更好的持久层。TIS使用XML描述符将对象与存储过程或SQL语句相关联。简单是iBATIS最大的优点。Ibatis——使用ibatis的十大理由1.能够操作至少10种数据库。2.可配置缓存(包括从属缓存)支持数据源、本地事务管理和全局事务的简单XML配置文档。5.支持映射、集合、列表和简单类型包装(如Integer、String)、JavaBeans类(get/set方法)和复杂对象映射(如填充列表、复杂对象模型)。对象模型从来不是完美的(不需要修改),数据模型也从来不是完美的(不需要修改)。你已经会SQL了,为什么还要学别的?.6.4.3.MVC架构示意图Struts架构客户端发送请求,最后通过Struts框架得到响应。这个过程非常重要,是理解Struts框架的关键。上图描述了Struts框架的结构,下图通过一个活动图更具体地描述了从接受请求到返回响应的整个过程:面向服务的应用架构面向服务的应用程序架构是指构建一个分布式和非集中式的服务器平台,以提供许多不同的应用程序。数据库被分成很多小的部分,围绕每个部分会创建一个服务接口(API),而这个接口是访问数据库的唯一途径。最终,数据库演变成一个巨大的共享资源。这种架构是松散耦合的,并且是围绕服务构建的。面向服务的架构为它们提供了隔离特性。一个服务可能有许多数据库服务器,它们的数据是互连的,但是它们只有一个外部接口。在外面,不可能知道这个服务背后的数据组织是如何构建的。所以应用服务器越来越多。这些应用服务器从有大量数据的服务中聚合信息(每个服务背后都有一个数据库或集群数据库),然后生成我们看到的所有亚马逊页面。这样的服务就像插件一样,形成一个开放的平台,这样团队的规模会更小,更灵活。注意,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。sparethreads:Tomcat初始化时创建的线程数。默认值为25。MaxSpareThreads:一旦创建的线程超过这个值,Tomcat就会关闭不再需要的套接字线程。默认值为75。EnableLookups:是否反向查找域名;默认值为true。为了提高处理能力,应该将其设置为false。connectiontimeout:网络连接超时,默认值为60000,单位:毫秒。将其设置为0意味着它永远不会超时。这样的设置有隐患。通常可以设置为30000毫秒。MaxKeepAliveRequests:保留请求的数量,默认值为100。BufferSize:输入流缓冲区的大小,默认值是2048字节。压缩:压缩传输,值为on/off/force,默认值为off。与最大连接数相关的参数是maxThreads和acceptCount。如果希望增加并发连接数,应该同时增加这两个参数。web服务器允许的最大连接数也受*操作系统内核参数设置的限制,通常Windows为2000左右,Linux为1000左右。Apache服务器优化增加并发数,关闭不必要的模块。因为apache消耗内存比较大,所以应该尽量轻。Apache在配置ContentType时可以尽量少支持,尽量少加载Module,以保证更高的系统消耗和执行效率。同时配置apache和tomcat的组合,将静态和动态页面分开,apache处理静态页面,tomcat处理动态页面。在处理静态页面、图片、js等访问时,可以考虑使用ligd代替Apache,这样提供了更轻的重量和更高效的处理能力。Nginx服务器的优化Worker_processes:该参数的值应该等于cpu核心的数量,这样可以最大化性能。如果nginx所在的服务器是2个双核CPU,建议设置为4个。Web服务体系结构的评估本文主要测试基于tomcat和nginx+tomcat的web服务器的处理性能,作为不同性能要求下架构选择的依据。测试环境网络环境网络带宽m网。Ping数据包延迟:<0.1毫秒网络拓扑示意图服务器配置装备硬件配置操作系统NginxIBMX3650CPU:英特尔至强E51502.66GHz双核*2押金:4G千兆网卡Redhatlinuxas4Tomcat1惠普DL580G4CPU:英特尔至强3.40GHz4核*2押金:8G千兆网卡Redhatlinuxas5Tomcat2惠普DL580G4CPU:英特尔至强3.40GHz4核*2押金:8G千兆网卡Redhatlinuxas5测试1惠普DL580G5CPU:英特尔至强E73101.60GHz4核*2押金:4G千兆网卡Redhatlinuxas5测试2IBMX3650CPU:英特尔至强E51502.66GHz双核*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设置主要配置如下:用户;工作进程4;error_log/usr/local/nginx/logs/nginx_error.log调试;PID/usr/local/nginx/logs/nginx.PID;worker_rlimit_nofile51200事件{使用epoll工人_连接51200;}{包括mime.typesdefault_type应用程序/八位字节流;#charsetgb2312服务器名称哈希桶大小128;client_header_buffer_size32klarge_client_header_buffers432k;在上发送文件;tcp_nopushonkeepalive_timeout1;tcp_nodelay打开;#gzipon#gzip_min_length1k#gzip_buffers416k#gzip__版;#gzip_comp_level2;#gzip_typestext/plainapplication/x-JavaScripttext/CSSapplication/XML;#gzip_varyon上游雄猫{服务器7:8081;服务器6:8081;#服务器1:8080;}计算机网络服务器{听81;server_name本地主机;proxy_redirectoff位置/{proxy_passtomcats}#后端Web服务器可以通过X-Forwarded-For获取用户的真实IP。#proxy_set_headerX-Forwarded-For$remote_addr;#位置/{#if($request_uri~*)。*\.(js|CSS|gif|jpg|JPEG|png|BMP|swf)$")#{#proxy_passsquid.abc#}#if($request_uri~*"^/view/(.*)$")#{#proxy_passsquid.abc#}#proxy_passweb.abc#}#定义日志格式log_format访问'$remote_addr-$remote_user[$time_local]$request'"$status"$body_bytes_sent"$_referer""“$_user_agent”“$_x_forwarded_for”;#日志access_log/usr/local/nginx/logs/access.log访问;#客户端请求允许的单个文件的最大字节数client_max_body_size10m#缓冲代理从客户端请求缓冲的最大字节数可以理解为在传输给用户之前保存在本地。客户端_正文_缓冲区_大小128k#与后端服务器连接超时_发起握手和等待响应超时proxy_connect_timeout600#连接成功后_等待后端服务器的响应时间_实际上已经进入后端队列进行处理。proxy_read_timeout600#后端服务器数据返回时间—表示终端服务器必须在指定时间后传输所有数据。proxy_send_timeout600#Proxyrequestbuffer_这个buffer会存储用户的头信息,供Nginx处理规则_一般情况下,只要头信息可以保存。proxy_buffer_size8k#同上告诉Nginx可以使用多少空间来节省几个缓冲区供单次使用。proxy_buffers432k#如果系统忙,可以申请更大的proxy_buffers*2官方推荐proxy_busy_buffers_size64k#代理缓存临时文件大小代理_临时_文件_写入_大小64k}}Tomcat设置主要配置如下:Tomcat5.5MaxThread500最小螺纹25MaxSpareThread75Xmx1740M米Java环境使用jdk1.6_03启动两个Tomcat。使用jdk1.6启动两个客户端的Tes测试T过程。试验结果一台TOMCATWEB服务器不客户数量螺纹扣数请求数量间隔时间测试服务器使忙碌服务器负载期间平均速度完成请求结果描述一个一个500两百万0毫秒测试11.1G>15082秒1986件/秒106万从第82秒开始,tomcat占用了1.1g内存,但是CPU资源被tomcat耗尽,服务器负载急剧增加。最高显示达到150,服务器停止响应客户端请求,于是客户端请求速度急剧下降,误包率100%,迫使测试中断。22500两百万25毫秒测试11.7克<688秒每秒465次370,000从第280秒左右开始,tomcat占用的内存达到Xmx规定的上限1.7g,Test1和Test2的请求速度急剧下降,出现包错误,包错误率超过>6%且仍在增加,测试终止。Tomcat抛出“Java.lang.outofmemoryerror:GCoverheadlimitexcess”异常。测试293秒123巴/秒200,000三2500两百万50毫秒测试11.7克<342秒每秒263次200,000从服务器上的第400秒开始,tomcat占用的内存达到Xmx的上限1.7g,Test1和Test2的请求速度急剧下降,开始出现大量的包错误。422秒后,包错误率超过4.3%,并且还在增加。之前的误包率在0.8%左右,测试终止。测试2413秒222件/秒200,000四2500两百万200毫秒测试11.7克<272秒727巴/秒280,000从第740秒左右开始,tomcat占用内存达到Xmx的上限,Test1和Test2的请求速度急剧下降,开始出现大量的包错误。测试终止前,误包率仅为0.008%。测试停止后,包错误率增加到1.7g%,并且还在增加。服务器负载小于2。测试274秒108件/秒190,000五2500两百万500毫秒测试11.7克<1195秒每秒72巴180,000从服务器端大约1595秒开始,tomcat占用内存达到Xmx上限,Test1和Test2的请求速度急剧下降,开始出现大量错误包。在达到1.7g之前,误包率只有0.08%。达到1.7G后,停止测试时,误包率上升到2.3%,测试终止。测试2175秒每秒77巴160,000六2500三百万1000毫秒测试11.7克<1662秒71巴/秒三百万当测试进度达到80%左右时,tomcat1的内存占用达到了Xmx的上限1.7g,但Test1和Test2的请求速度并没有下降,直到600万个请求全部完成,两个客户端丢弃了9个包,丢包率仅为0.003%,最长响应时间为12.728秒。测试2651秒72巴/秒三百万Ngx+2TOMCATWEB服务器不客户数量螺纹扣数请求数量间隔时间测试服务器Tomcat占用内存服务器负载期间平均速度已完成的请求数最大响应时间平均响应时间试验结果一个2250一百五十万0毫秒测试1第一代<237秒422巴/秒一百五十万3005毫秒0.21毫秒300万次请求全部完成,没有任何错误。测试1第一代32秒458件/秒一百五十万1244毫秒0.23毫秒22500两百万25毫秒测试11.4G<252秒390件/秒两百万4016毫秒0.27毫秒400万次请求全部完成,没有一次错包。测试21.4G54秒每秒376次两百万4014毫秒0.27毫秒三2500三百万50毫秒测试11.7克<2140秒每秒245次780,000从第1100秒左右开始,Tomcat1和Tomcat2占用Xmx规定的内存高达1.7g,Test1和Test2的请求速度缓慢下降,但没有出现错误包,因此人为终止测试。测试21.7克141秒每秒224次760,000四2500三百万200毫秒测试11.7克<1160秒190件/秒770,000从第1800秒左右开始,Tomcat1和Tomcat2占用Xmx规定的内存高达1.7g,Test1和Test2的请求速度缓慢下降,但没有出现错误包,因此人为终止测试。测试21.7克863秒182巴/秒760,000五2500五百万500毫秒测试11.7克<1475秒每秒93巴五百万3000毫秒1.09毫秒测试完成,但Tomcat1和Tomcat2占用内存1.7g,达到Xmx的指定上限,没有错误包。测试21.7克565秒每秒88巴五百万92987毫秒1.11毫秒六2500五百万1000毫秒测试1968米<110149秒42巴/秒五百万977毫秒2.02毫秒完成测试,没有任何错误。测试2第一代10149秒42巴/秒五百万944毫秒2.02毫秒Ngx+2个TOMCATWEB服务器+缓冲不客户数量螺纹扣数请求数量间隔时间测试服务器Tomcat占用内存服务器负载期间平均速度(巴/秒)已完成的请求数最大响应时间平均响应时间试验结果一个2250一百五十万0毫秒测试10.2G<164秒23437一百五十万993毫秒0.04毫秒测试20.2G59秒25423一百五十万372毫秒0.04毫秒22500两百万25毫秒测试10.4G<196秒10202两百万916毫秒0.10毫秒Nginx缓存打开后,完成了400万个请求,分别有241个和216个错误包。测试20.4G94秒10361两百万908毫秒0.10毫秒三2500三百万50毫秒测试10.4G<139秒7915三百万015毫秒0.13毫秒Nginx缓存打开后,600万次请求完成,没有任何错误。测试20.2G34秒7812三百万10234毫秒0.13毫秒四2500三百万200毫秒测试10.4G<1一百二十秒2459三百万3018毫秒0.40毫秒Nginx缓存打开后,600万次请求完成,没有任何错误。测试20.2G141秒2417三百万384毫秒0.41毫秒五2500五百万500毫秒测试10.4G<1531秒993五百万3020毫秒1.00毫秒Nginx缓存打开后,1000万次请求无一差错地完成。测试20.2G555秒989五百万394毫秒1.01毫秒六2500五百万1000毫秒测试10.4G<110040秒498五百万3020毫秒2.00毫秒Nginx缓存打开后,1000万次请求无一差错地完成。测试20.2G10038秒498五百万78毫秒2.00毫秒注意:本测试中使用的jsp页面只有100字节大小,因此测试期间的带宽压力可以忽略不计。在测试过程中,我们尝试使用了100k大小的静态页面,结果显示在千兆网络下,无论是单个Tomcat还是Nginx+2Tomcat,最大请求速度都不超过1000页/秒,网络带宽占用也达到了800M,接近千米网络的上限。因此,在实际应用中,网络带宽会对整个web服务产生很大的影响。测试结果分析系统参数的影响分析worker_processes参数对Nginx性能的影响测试过程中,当worker_processes分别设置为8、4、2、1时,发现该参数对nginx的性能和服务器的资源消耗影响不大。相关数据显示,这个参数的值应该等于cpu核心的数量,才能发挥出最大的性能。在这个测试中,nginx所在的服务器是2个双核CPU,所以最终测试设置为4个。MaxThread参数对tomcat并发性的影响在这个测试中,tomcat的MaxThread参数被设置为500。当进行13,000个并发测试时,tomcat启动太多并发线程,会耗尽服务器cpu。虽然分析MaxThread可以提高tomcat的并发能力,但前提是保证服务器负载不会因为并发线程太多而急剧上升,从而停止响应。-Xmx最大存储值对Tomcat持续响应高并发能力的影响在高并发请求的状态下,有六个测试是因为tomcat的内存达到了指定的最大值,导致响应缓慢,直到内存溢出停止响应。因此,tomcat的最大内存对Tomcat持续响应高并发请求的能力影响很大。调整这个值应该会增加Tomcat对高并发请求的响应总数,从而延长WEB服务支持峰值的时间。每种架构下的性能分析NGX+2Tomcat的最大并发低于单个Tomcat。NGX+2Tomcat的最快并发是每秒8980,单个Tomcat是每秒12986。分析可能是nginx所在服务器的性能导致的。当单个tomcat配置最大内存1.7g,并发请求持续时间超过1479/s,稳定支持约240万次响应后,Tomcat内存达到上限1.7,之后Tomcat响应会急剧变慢,错误包急剧上升。在NGX+2tomcat的架构下,当两只tomcat分别配置最大内存1.7g时,在并发请求持续超过2900个/秒的情况下,可以稳定支持约540万次响应。之后两只Tomcats的内存都会达到1.7的上限,响应会急剧变慢,但是不会出现包错误。加上Nginx+2tomcat和cache,可以实现15000以上的并发处理能力。评估结果单只tomcat的处理能力约为每秒500枚。单个tomcat每秒可以稳定地支持大约500个并发请求。Nginx+tomcat比单一的tomcat更稳定,不容易出现错包。通过扩展Tomcat集群(增加Tomcat服务器)可以提高系统的并发性。当单个tomcat超过并发能力时,其处理能力大大降低,出现大量错误包。但在各种测试下,Nginx+2Tomcat架构虽然没有错包,但处理能力也会下降。单个tomcat每秒可以稳定支持约500个并发请求,而Nginx+2Tomcat每秒可以支持约1000个并发请求。所以可以通过增加新的tomcat服务器来提高系统的并发性,但是当tomcat的整体处理能力超过nginx时就无效了。NGX+2tomcat配置缓存后,静态页面的并发不再受tomcat限制,单个nginx的并发可以达到15000以上。配置缓存后,nginx+2tomcat的处理能力实测数据超过15000次/秒,而单个tomcat可以支持500次/秒。理论上,一组Nginx+30的Tomcat集群可以支持15000次/秒的并发处理。注:1.7G内存分配给tomcat。配置选择网络带宽只考虑门户访问的带宽占用,后台管理页面等其他业务访问与门户访问相差2-3个数量级,所以忽略这部分网络流量占用。同时,考虑网络带宽利用率(70%)根据业务设计能力,每秒网络流量=每秒WEB访问流量。=(每次访问占用的带宽×每秒访问次数)/带宽利用率=(200K*8*n)/0.7注:一般门户的主页大小>1M,平均200K/页。我们把它作为平均值来计算。并发能力占用的网络带宽每秒100次228米每秒200次457米每秒500次1442米每秒1000次2286米和硬件配置选择。硬件配置参考序列号产品功能参考模型,配置事务一个主机1.1数据库服务器IBM系统x3850,4个处理器,每个处理器6个核心,共24个核心。尺寸是16G。SAS硬盘,硬盘大小587GB。4U机架,集成双千兆以太网接口和两个千兆光纤网卡。6845081.2网络服务器IBM系统x3850,4个处理器,每个处理器6个核心,共24个核心。节省8G以上。SAS硬盘,硬盘大小587GB。4U机架,集成双千兆以太网接口和两个千兆光纤网卡。6845081.3办公终端IBMSystemx3560,一个英特尔至强E5450处理器,存储容量为2G,2U机架。326002网络设备2.1负载平衡器RADWARE应用负载均衡设备,型号:ODS-504,有,4个可选千兆电口,1G主存,500M处理能力(最大可通过许可证升级到4G)。2.2防火墙思科ASA5520防火墙并发性:20000网络吞吐量:40安全过滤:225MB网络端口:4个千兆以太网接口+1个快速接口用户数量:无用用户数量制约用户。VPN支持:支持2.2配电盘QuidwayS3952P-EI传输速率:10Mbps/100Mbps/1000Mbps网络标准:IEEE802.1Q,IEEE8

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论