资源描述
前台门户网站架构
设计方案
北京宽连十方数字技术
-7
目 录
1 设计思绪 3
2 系统结构 3
3 网络计划及性能计算 3
3.1 网络架构 3
3.2 网络架构说明 4
3.2.1 采取双防火墙双交换机做网络冗余,保障平台服务 4
3.2.2 采取硬件设备负载均衡器,实现网络流量负载均衡 4
3.3 系统测算 4
3.3.1 系统处理能力要求 4
3.3.2 业务处理能力要求 4
3.3.3 系统话务模型 4
3.4 配置核实 5
3.4.1 数据库服务器性能核实 5
3.4.2 WEB服务器集群性能核实 5
3.4.3 WEB服务器集群内存性能核实 5
3.4.4 网络带宽 5
4 性能模拟测试及性能推算 6
4.1 测试环境 6
4.2 测试结果 8
4.2.1 1个用户端模拟不一样线和并发请求结果 8
4.2.2 10个用户端请求 8
4.3 结果分析 9
4.4 依据测试结果推算 9
4.5 设备清单 11
4.5.1 硬件设备配置清单 11
4.5.2 设备技术规格 12
4.6 平台扩容提议 12
1 网站性能瓶颈分析
网站性能影响原因很多,下面关键从以下4个方面进行分析说明:
1) 网络负载
a) 公网负载
b) 内网负载
2) WEB应用服务器性能
a) CPU
b) 存放,I/O访问
c) 内存
d) 并发TCP/IP连接数
3) 数据库服务器性能
a) 数据库参数配置
b) 服务器性能(CPU、内存、存放)
c) 数据结构合理性
4) 不一样WEB应用处理方法而对不一样性能瓶颈
a) 对于静态网站:
静态HTML页面严格地由标准HTML标示语言组成,并不需要服务器端即时运算生成。这意味着,对一个静态HTML文档发出访问请求后,服务器端只是简单地将该文档传输到用户端。从服务器运行那个时间片来看,这个传输过程仅仅占用了很小CPU资源。对于静态HTML访问瓶颈为:网络带宽、磁盘I/O和cache(高速缓冲存放器)。
b) 对于动态页面
因为服务器解析动态页面必需在其传输到用户端前就经过服务器来进行解释,这么就会给应用服务器添加额外性能消耗,假如深入要访问数据库,则会增加数据库服务器性能消耗,则动态页面还有额外瓶颈:应用服务器性能,数据库服务器性能。
2 系统架构设计
2.1 总体思绪
为提升网站高并发性能,提升开发效率及运行效率,关键按以下多个思绪进行计划设计:
2.1.1 负载均衡
1) 四层交换负载均衡:
采取负载均衡器来实现硬件级四层交换负载均衡,或采取LVS来实现软件四层交换负载均衡。
2) 经过第三方软件来实现负载均衡,同时实现页面请求缓存。
经过Nginx实现反向代理服务器集群,同时搭建squid集群以作为静态页面和图片缓存。
3) 经过web服务器配置来实现负载均衡
即经过apache或是Nginx 将用户请求均衡分给tomcat1,tomcat2....去处理。
2.1.2 WEB应用开发架构思绪
1) 应用开发实现MVC架构三层架构进行web应用开发
2) 页面尽可能静态化以降低动态数据访问,假如是资讯类网站能够考虑采取第三方开源CMS系统来生成静态内容页面。
3) 采取Oscache实现页面缓存,采取Memcached实现数据缓存
4) 采取独立图片服务器集群来实现图片资源存放及WEB请求
2.1.3 数据存放设计思绪
1) 数据库拆分,把生产数据库和查询数据库分离,对生产数据库采取RAC实现数据库集群。
2) 采取高效网络文件共享策略,采取图片服务器来实现页面图片存放。
2.1.4 不一样网络用户访问考虑
1) 经过引入CDN来处理不一样网络服务商接入速度问题,通常只能处理静态页面访问问题。
2) 在不一样运行商机房布署服务器,经过镜像技术来实现不一样网络服务商接入速度问题。
2.2 总体架构
2.2.1 网站系统分层架构
2.2.2 网站物理架构
2.2.3 网站开发架构
2.2.4 网络拓扑结构
备注:
1) 采取双防火墙双交换机做网络冗余,保障平台服务
采取双防火墙通知接通2线路互联网接入,设备之间采取VRRP协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,确保网站正运行,设备或网络恢复后,自动恢复。
采取双千兆交换机分别接在2台防火墙上,当某台设备或网络链路发生故障后,好设备自动接管已坏设备工作,不影响网站整体运行,依据业务及真实服务器数量,交换机能够随时增加。
2) 采取硬件设备负载均衡器,实现网络流量负载均衡
使用硬件设备负载均衡器,将网络流量均衡分担到WEB服务器集群各节点服务器,保障平台服务器资源均衡使用。
3) 采取代理服务器,实现软件级网络负载均衡。
4) 数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写和后台查询统计进行分离,同时生产数据库采取rac技术进行
2.3 架构包含技术详解
2.3.1 负载均衡
1. 基于DNS负载均衡--一个域名绑定多个IP
DNS负载均衡技术是最早负载均衡处理方案,它是经过DNS服务中随机名字解析来实现,在DNS服务器中,能够为多个不一样地址配置同一个名字,而最终查询这个名字用户机将在解析这个名字时得到其中一个地址。所以,对于同一个名字,不一样用户机会得到不一样地址,它们也就访问不一样地址上Web 服务器,从而达成负载均衡目标。
这种技术优点是,实现简单、实施轻易、成本低、适适用于大多数TCP/IP应用;不过,其缺点也很显著,首先这种方案不是真正意义上负载均衡,DNS 服务器将Http请求平均地分配到后台Web服务器上,而不考虑每个Web服务器目前负载情况;假如后台Web服务器配置和处理能力不一样,最慢 Web服务器将成为系统瓶颈,处理能力强服务器不能充足发挥作用;其次未考虑容错,假如后台某台Web服务器出现故障,DNS服务器仍然会把DNS 请求分配到这台故障服务器上,造成不能响应用户端。最终一点是致命,有可能造成相当一部分用户不能享受Web服务,而且因为DNS缓存原因,所造成后果要连续相当长一段时间(通常DNS刷新周期约为二十四小时)。所以在国外最新建设中心Web站点方案中,已经极少采取这种方案了。
2. 经过硬件四层交换实现负载均衡
在硬件四层交换产品领域,有部分著名产品能够选择,比如Alteon、F5等,这些产品很昂贵,不过物有所值,能够提供很优异性能和很灵活管理能力。Yahoo中国当初靠近台服务器使用了三四台Alteon就搞定了
3. 经过软件四层交换实现负载均衡
软件四层交换我们能够使用Linux上常见LVS来处理,LVS就是Linux Virtual Server,她提供了基于心跳线heartbeat实时灾难应对处理方案,提升系统鲁棒性,同时可供了灵活虚拟VIP配置和管理功效,能够同时满足多个应用需求,这对于分布式系统来说必不可少。
一个经典使用负载均衡策略就是,在软件或硬件四层交换基础上搭建squid集群,这种思绪在很多大型网站包含搜索引擎上被采取,这么架构低成本、高性能还有很强扩张性。
4. 经过反向代理服务器实现负载均衡
反向代理服务器又称为 WEB 加速服务器,它在 WEB 服务器前端,充当WEB服务器内容缓存器,反向代理服务器是针对 WEB 服务器设置,后台 WEB 服务器对互联网用户是透明,用户只能看到反向代理服务器地址,不清楚后台 WEB 服务器是怎样组织架构。当互联网用户请求 WEB 服务时,DNS 将请求域名解析为反向代理服务器 IP 地址,这么 URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户请求和应答、和后台 WEB 服务器交互。利用反向代理服务器减轻了后台 WEB 服务器负载,提升了访问速度,同时避免了因用户直接和 WEB 服务器通信带来安全隐患。
现在有很多反向代理软件,比较有名有 Nginx 和 Squid 。
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二 Rambler.ru 站点开发,是一个高性能 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
Squid是由美国政府大力资助一项研究计划,其目标为处理网络带宽不足问题,支持HTTP,HTTPS,FTP 等多个协议,是现在 Unix 系统上使用、最多功效也最完整一套软体。
1) Squid
Squid 是一个开源软件,利用它反向代理技术能够提升网站系统访问速度,下面将关键介绍 Squid 反向代理实现原理和在提升网站性能方面应用。
Squid反向代理服务器在当地 WEB 服务器和 Internet 之间 , 组织架构以下图:
用户端请求访问 WEB 服务时,DNS 将访问域名解析为 Squid 反向代理服务器 IP 地址,这么用户端 URL 请求将被发送到反向代理服务器。假如 Squid 反向代理服务器中缓存了该请求资源,则将该请求资源直接返回给用户端,不然反向代理服务器将向后台 WEB 服务器请求资源,然后将请求应答返回给用户端,同时也将该应答缓存在当地,供下一个请求者使用。
Squid 反向代理通常只缓存可缓冲数据(比如 html 网页和图片等),而部分 CGI 脚本程序或 ASP、JSP 之类动态程序默认不缓存。它依据从 WEB 服务器返回 HTTP 头标识来缓冲静态页面, 有四个最关键 HTTP 头标识:
· Last-Modified: 告诉反向代理页面什么时间被修改
· Expires: 告诉反向代理页面什么时间应该从缓冲区中删除
· Cache-Control: 告诉反向代理页面是否应该被缓冲
· Pragma: 用来包含实现特定指令,最常见是 Pragma:no-cache
注:DNS 轮询机制将某一个域名解析为 多个IP地址。
2) Nginx
Nginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写一款高性能 HTTP 和反向代理服务器。
Nginx 已经在俄罗斯最大门户网站── Rambler Media(.ru)上运行了4年时间,同时俄罗斯超出20%虚拟主机平台采取Nginx作为反向代理服务器。
在中国,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO相册、豆瓣、迅雷看看等多家网站、频道使用 Nginx 服务器。
Nginx 特点以下:
1) 工作在OSI模型第7层(应用层)
2) 高并发连接
官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
3) 内存消耗少
在3万并发连接下,开启10个Nginx 进程才消耗150M内存(15M*10=150M)。
4) 配置文件很简单
风格跟程序一样通俗易懂。
5) 成本低廉
Nginx为开源软件,能够无偿使用。而购置F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
6) 支持Rewrite重写规则
能够依据域名、URL不一样,将 HTTP 请求分到不一样后端服务器群组。
7) 内置健康检验功效
假如 Nginx Proxy 后端某台 Web 服务器宕机了,不会影响前端访问。
8) 节省带宽
支持 GZIP 压缩,能够添加浏览器当地缓存 Header 头。
9) 稳定性高
用于反向代理,宕机概率微乎其微。
3) Nginx+squid页面缓存来实现反向代理负载均衡
经过Nginx反向代理和squid缓存实现动静分离架构图以下所表示:
5. Apache +tomcat集群实现负载均衡。
使用 apache和多个tomcat 配置一个能够应用web网站,用Apache进行分流,把请求根据权重和当初负荷分tomcat1,tomcat2...去处理,要达成以下要求:
1) Apache 做为HttpServer ,经过mod_jk连接器连接多个 tomcat 应用实例,并进行负载均衡。
2) 同时还要配置session复制,也就是说其中任何一个tomcat添加session,是要同时复制到其它tomcat, 集群内tomcat全部有相同session,并为系统(包含 Apache 和 tomcat)设定 Session 超时时间。
2.3.2 缓存
1. 系统架构方面缓存
1) Squid缓存
架构方面使用Squid进行缓存。
注:SQUID使用了LM算法,LM就是页面Header里时间(Date)和Last-Modified时间差。Date通常是Squid从后面取页面时间,Last-Modified 通常是页面生成时间。
2) Nginx缓存功效
Nginx从0.7.48版本开始,支持了类似Squid缓存功效;
缓存把URL及相关组合看成Key,用md5编码哈希后保留;
NginxWeb缓存服务只能为指定URL或状态码设置过期时间,不支持类似SquidPURGE指令,手动清除指定缓存页面;
采取MMAP实现,设置缓存区大小不能超出物理内存+SWEB值
3) 基于memcached缓存
nginx对memcached有所支持,不过功效并不是尤其之强,性能上还是很之优异。
location /mem/ {
if ( $uri ~ "^/mem/([0-9A-Za-z_]*)$" )
{
set $memcached_key "$1";
memcached_pass 192.168.1.2:11211;
}
expires 70;
}
这个配置会将。
Nginx现在没有写入memcached任何机制,所以要往memcached里写入数据得用后台动态语言完成,能够利用404定向到后端去写入数据。
Nginx传统缓存缺点也是它和squid等缓存软件不一样之特色,所以也可看作其优点。在生产应用中它常常见作和squid搭档,squid对于带?链接往往无法阻挡,而nginx能将其访问拦住,比如:://
nginx会很老实地将链接形式保留到文件系统中,这么对于一个链接,能够很方便地查阅它在缓存机器上缓存状态和内容,也能够很方便地和别文件管理器如rsync等配合使用,它完完全全就是一个文件系统结构。
2. 应用程序方面缓存
1) OSCache
OSCache由OpenSymphony设计,它是一个开创性JSP定制标识应用,提供了在现有JSP页面之内实现快速内存缓冲功效,OSCache是个一个广泛采取高性能J2EE缓存框架,OSCache能用于任何Java应用程序一般缓存处理方案。OSCache有以下特点:缓存任何对象,你能够不受限制缓存部分jsp页面或HTTP请求,任何java对象全部能够缓存。拥有全方面API--OSCache API给你全方面程序来控制全部OSCache特征。永久缓存--缓存能随意写入硬盘,所以许可昂贵创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群--集群缓存数据能被单个进行参数配置,不需要修改代码。缓存统计过期--你能够有最大程度控制缓存对象过期,包含可插入式刷新策略(假如默认性能不需要时)。
OSCache是目前利用最广缓存方案,JBoss,Hibernate,Spring等全部对其有支持。
OSCache特点:
1) 缓存任何对象:你能够不受限制缓存部分jsp页面或HTTP请求,任何java对象全部能够缓存。
2) 拥有全方面API:OSCache API许可你经过编程方法来控制全部OSCache特征。
3) 永久缓存:缓存能被配置写入硬盘,所以许可在应用服务器数次生命周期间缓存创建开销昂贵数据。
4) 支持集群:集群缓存数据能被单个进行参数配置,不需要修改代码。
5) 缓存过期:你能够有最大程度控制缓存对象过期,包含可插入式刷新策略(假如默认性能不能满足需要时)。
2) Memcached
memcached是高性能分布式内存缓存服务器。通常使用目标是,经过缓存数据库查询结果,降低数据库访问次数,以提升动态Web应用速度、 提升可扩展性。
Memcached是以Key/Value形式单个对象缓存。
3) 自主开发内存数据缓存服务
a) 独立进程方法缓存服务
对于部分常见动态数据经过开发程序服务缓存在内存中,提供给其它子系统调用,以下面数据就能够经过这么方法进行缓存。
1) 用户基础信息及状态信息缓冲
2) 列表缓存,就像论坛里帖子列表
3) 统计条数缓存,比如一个论坛板块里有多少个帖子,这么才方便实现分页。
4) 复杂一点group,sum,count查询,比如积分分类排名
b) 集成在WEB应用中内存缓存
在web应用中对于热点功效,考虑使用完全装载到内存,确保绝正确响应速度,对于需要频繁访问热点数据,采取集中缓存(多个能够采取负载均衡),减轻数据库压力,比如:很多配置信息,操作员信息等等。
2.3.3 页面静态化
静态HTML页面严格地由标准HTML标示语言组成,并不需要服务器端即时运算生成。这意味着,对一个静态HTML文档发出访问请求后,服务器端只是简单地将该文档传输到用户端。从服务器运行那个时间片来看,这个传输过程仅仅占用了很小CPU资源。
页面静态化就是采取效率最高、消耗最小纯静态化html页面来替换动态页面。我们尽可能使我们网站上页面采取静态页面来实现,这个最简单方法其实也是最有效方法。
同时采取第三方开源CMS系统来实现网站内容管理。对于大量内容而且频繁更新网站,我们无法全部手动去挨个实现页面静态化,所以我们需要引入常见信息公布系统(CMS),信息公布系统(CMS)能够实现最简单信息录入自动生成静态页面,对于一个大型网站来说,拥有一套高效、可管理CMS是必不可少。
同时,HTML静态化也是一些缓存策略使用手段,对于系统中频繁使用数据库查询不过内容更新很小应用,能够考虑使用HTML静态化来实现,比如论坛中论坛公用设置信息,这些信息现在主流论坛全部能够进行后台管理而且存放再数据库中,这些信息其实大量被前台程序调用,不过更新频率很小,能够考虑将这部分内容进行后台更新时候进行静态化,这么避免了大量数据库访问请求。
在进行html静态化时候还能够使用一个折中方法,就是前端继续使用动态实现,在一定策略下经过后台模块进行定时把动态网页生成静态页面,并定时判定调用,这个能实现很多灵活性操作。
为了提升静态HTML访问效率,关键能够对以下多个方面进行优化:网络带宽、磁盘I/O和cache(高速缓冲存放器)。
2.3.4 数据库配置及优化
1. 数据库集群
对生产数据库采取RAC实现数据库集群。
2. 数据库及表散列
把生产数据库和查询数据库进行分离,针对系统业务数据特点,把大表进行拆分,对于访问较多表采取分区表。
使用读/写数据库分离,伴随系统变得越来越庞大,尤其是当它们拥有 很差SQL时,一台数据库服务器通常不足以处理负载。不过多个数据库意味着反复,除非你对数据进行了分离。更通常地,这意味着建立主/从副本系统,其中 程序会对主库编写全部Update、Insert和Delete变更语句,而全部Select数据全部读取自从数据库(或多个从数据库)。
尽管概念上很简单,不过想要合理、正确地实 现并不轻易,这可能需要大量代码工作。所以,即便在开始时使用同一台数据库服务器,也要尽早计划在PHP中使用分离DB连接来进行读写操作。假如正确 地完成该项工作,那么系统就能够扩展到2台、3台甚至12台服务器,并含有高可用性和稳定性。
3. 拥有良好DB配置和备份
很多企业全部没有良好备份机制,也不知道如 何合适地完成这项工作。只有imp是不够,还需要进行热备份,从而得到超快速度和超高可靠性。
另外,在将全部备份文件从服务器上转移出来之前要进行压缩和加密。另外还要确保拥有设计合理、有用相关安全、性能和稳定性问题设定,包含预防数据败坏,其中很多设定全部是很关键。
2.3.5 文件存放
1. 文件共享
1) HDFS(GFS)
HDFS是Apache Hadoop项目中一个分布式文件系统实现,基于谷歌于10月发表谷歌 File System(GFS)论文。
n 特征
1) 硬件要求低
2) 高容错性
3) 易可扩展
4) 配置简单
5) 超大文件
HDFS采取master/slave架构。
一个HDFS集群是由一个Namenode和一定数目标Datanodes组成。
2) NFS和GFS比较
首先从它们功效上进行分析。NFS即网络文件系统,是由SUN企业开发。它是FreeBSD支持文件系统中一个,许可一个系统在网络上和它人共享目录和文件。经过使用NFS,用户和程序访问远端系统上文件就像访问当地文件一样。
而GFS是谷歌为了满足本企业快速增加数据处理要求而开发文件系统。GFS是一个可扩展分布式文件系统,用于大型、分布式、对大量数据进行访问应用。它是针对谷歌计算机集群进行设计,专门是为谷歌页面搜索存放进行了优化。
所以从功效上看,它们二者是完全不一样概念。
其次从结构上比较,NFS最少包含两个关键部分:一台服务器,和最少一台用户机。被共享目录和文件存放在服务器上,用户机远程地访问保留在服务器上数据。
GFS则由一台Master(通常有几台备份)和若干台TrunkServer组成。GFS汉字件备份成固定大小Trunk分别存放在不一样 TrunkServer上,每个Trunk有多份(比如3)拷贝,也存放在不一样TrunkServer上。Master负责维护GFS中 Metadata,即文件名及其Trunk信息。用户端先从Master上得到文件Metadata,依据要读取数据在文件中位置和对应 TrunkServer通信,获取文件数据。
再从跨平台性上,NFS基础标准是“许可不一样用户端及服务端经过一组RPCs分享相同文件系统”,它是独立于操作系统,许可不一样操作系统共同地进行文件共享。
而GFS则没有这一特点,文件只能被集群系统中PC所访问,而且这些PC操作系统通常是Linux。
最终从规模上比较,HDFS只应用在大批量数据共享上。现在谷歌拥有超出200个GFS集群,其中有些集群PC数量超出5000台。集群数据存放规模能够达成5个PB,而且集群中数据读写吞吐量可达成每秒40G。
而NFS通常没有这么巨大规模。
2. 文件多服务器自动同时
使用Linux 2.6内核inotify监控Linux文件系统事件。
利用开源lsync监听某一目录,假如目录内文件发生增、删、改,利用Rsync协议自动同时到多台服务器。
3. 图片服务器分离
尤其是假如程序和图片全部放在同一个 APAHCE 服务器下,每一个图片请求全部有可能造成一个 HTTPD 进程调用。
使用独立图片服务器不仅能够避免以上这个情况,更能够对不一样使用性质图片设置不一样过期时间,方便同一个用户在不一样页面访问相同图片时不会再次从服务器(基于是缓存服务器)取数据,不仅快速,而且还省了带宽。还有就是,对于缓存时间上,亦能够做独立调整。
2.3.6 网络问题处理方案
你不可能要求全部使用人员,全部和你服务器在一个运行商网络内,而不一样网络之间访问速度会很慢,我们能够采取镜像网站和引入CDN来处理这一问题。
1. 智能DNS解析
我们能够在不一样网络运行商布署web服务器,经过linux上rsync工具自动同时到不一样网络接入商web服务器上,以作为主站镜像。
然后经过配置智能DNS解析来引导不一样网络访问用户到对应网络运行商web服务器。
2. CDN
假如有足够投资,也能够采取CDN(内容分发网),把静态内容(静态页面和图片)进行CDN缓存,以减轻服务器压力。
CDN全称是Content Delivery Network,即内容分发网络。它采取了分布式网络缓存结构(即国际上流行web cache技术),其目标是经过在现有Internet中增加一层新网络架构,将网站内容公布到最靠近用户网络"边缘",使用户能够就近取得所需内容,处理 Internet网络拥挤情况,提升用户访问网站响应速度。从技术上全方面处理因为网络带宽小、用户访问量大、网点分布不均等原因所造成用户访问网站响应速度慢问题。 (也就是一个服务器内容,平均分部到多个服务器上,服务器智能识别,让用户获取离用户最近服务器,提升速度。
现在,中国访问量较高大型网站如新浪、网易等,均使用CDN网络加速技术,即使网站访问巨大,但不管在什么地方访问全部会感觉速度很快。而通常网站假如服务器在网通,电信用户访问很慢,假如服务器在电信,网通用户访问又很慢。
2.3.7 WEB应用开发架构设计思绪
1. 基于MVC三层应用开发架构
应用开发实现MVC三层架构进行web应用开发,采取ibatis作为持久层框架,c3p0作为数据库连接池。
iBATIS 是一个能够设计和实现愈加好 Java 应用程序持久化层框架。iBATIS 把对象和存放过程或使用 XML 描述符 SQL 语句进行了关联。简单是 iBATIS 最大优势
n ibatis-使用ibatis十个理由
1. 最少能操作10种以上数据库
2. 可配置caching(包含隶属)
3. 支持DataSource、local transaction management和global transaction
4. 简单XML配置文档
5. 支持Map, Collection, List和简单类型包装(如Integer, String)
6. 支持JavaBeans类(get/set 方法)
7. 支持复杂对象映射(如populating lists, complex object models)
8. 对象模型从不完美(不需要修改)
9. 数据模型从不完美(不需要修改)
10. 你已经知道SQL,为何还要学习其它东西
1) MVC架构示意
2) Struts架构
用户端发送一个HTTP请求,经过Struts框架最终取得一个HTTP响应,这一过程很关键,它是了解Struts框架关键。上图描述了Struts框架结构,而下图经过一个活动图更具体描述接收请求直至返回响应整个过程:
2. 面向服务应用架构
面向服务应用架构是指构建可分布式、去中心化服务器平台,以提供很多不一样应用,数据库被分成很多个小部分,围绕每个部分全部会创建一个服务接口(API),而且该接口是访问数据库唯一路径。最终数据库演变成一个很庞大共享资源。
这种架构是松散耦合,而且围绕着服务进行构建。面向服务架构提供给她们隔离特征,一个服务可能有很多台数据库服务器,她们之间数据是相通,而对外她们接口只有一个,外面是无法知道这个服务后面数据组织是怎样搭建。
这么就有了越来越多应用服务器。这些应用服务器从数据众多服务(每个服务背后全部有数据库或集群数据库)中聚合信息,然后生成我们所看到A各个网站页面。
这么多种服务如插件一样组成了一个开放平台,这么团体规模就会比较小,比较灵活。
注Amazon就是采取了这种架构来构 建,它拥有上千台服务器。
2.4 系统软件参数优化
在一定架构基础上,要提升并发处理能力则需要调整服务器操作系统内核参数、web服务器(tomcat参数、apache参数、Nginx参数),以使其性能达成最优化。
2.4.1 操作系统优化
调整系统内核参数,增大连接数及TCP/IP超时设置。
Linux系统中:
在/etc/sysctl.conf配置文件中增加以下内核参数:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5
2.4.2 tomcat服务器优化
增大并发连接数,调整内存参数设置。
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。为了提升处理能力,应设置为false
connnectionTimeout: 网络连接超时,默认值60000,单位:毫秒。设置为0表示永不超时,这么设置有隐患。通常可设置为30000毫秒。
maxKeepAliveRequests: 保持请求数量,默认值100。 bufferSize: 输入流缓冲大小,默认值2048 bytes。
compression: 压缩传输,取值on/off/force,默认值off。 其中和最大连接数相关参数为maxThreads和acceptCount。假如要加大并发连接数,应同时加大这两个参数。
web server许可最大连接数还受制于*作系统内核参数设置,通常Windows是个左右,Linux是1000个左右。
2.4.3 apache服务器优化
加大并发数量和关闭不需要模块。因为apache很消耗内存,尽可能轻量化。
Apache在配置ContentType时候能够尽可能少支持,尽可能少LoadModule,确保更高系统消耗和实施效率
同时配置apache和tomcat组合使之能作到动静分离,apache处理静态页面,tomcat处理动态页面。
在处理静态页面或图片、js等访问方面,能够考虑使用lighttpd替换Apache,它提供了更轻量级和更高效处理能力
2.4.4 Nginx服务器优化
worker_processes:该参数值最好跟cpu核数相等,能够发挥最大性能,假如nginx所在服务器为2颗双核cpu,则提议设定为4。
3 Web服务架构评测
关键对基于tomcat和nginx+tomcatweb服务器处理性能进行测试,以作为不一样性能要求下架构选型依据
3.1 测试环境
3.1.1 网络环境
1. 内网带宽
Ø 千M内网。
Ø 内网ping包延迟:< 0.1ms
2. 网络拓扑示意
3.1.2 服务器配置
设备
硬件配置
操作系统
Nginx
IBM X3650
CPU: Intel(R) Xeon(R) E5150 2.66GHz 2核*2
内存:4G
千兆网卡
Redhat linux as4
Tomcat1
Hp DL580 G4
CPU: Intel(R) Xeon(TM) 3.40GHz 4核*2
内存:8G
千兆网卡
Redhat linux as5
Tomcat2
Hp DL580 G4
CPU: Intel(R) Xeon(TM) 3.40GHz 4核*2
内存:8G
千兆网卡
Redhat linux as5
Test1
Hp DL580 G5
CPU:Intel(R) Xeon(R) E7310 1.60GHz 4核*2
内存:4G
千兆网卡
Redhat linux as5
Test2
IBM X3650
CPU: Intel(R) Xeon(R) E5150 2.66GHz 2核*2
内存:4G
千兆网卡
Redhat linux as4
3.1.3 软件环境
1. 操作系统网络参数优化
用做测试各台服务器,均在/etc/sysctl.conf配置文件中增加以下内核参数:
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5
2. Nginx设置
关键配置以下:
user www www;
worker_processes 4;
error_log /usr/local/nginx/logs/nginx_error.log debug;
pid /usr/local/nginx/logs/nginx.pid;
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include mime.types;
default_type application/octet-stream;
#charset gb2312;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
sendfile on;
tcp_nopush on;
keepalive_timeout 1;
tcp_nodelay on;
#gzip on;
#gzip_min_length 1k;
#gzip_buffers 4 16k;
#gzip_http_version 1.0;
#gzip_comp_level 2;
#gzip_types text/plain application/x-javascript text/css application/xml;
#gzip_vary on;
upstream tomcats {
server 192.168.131.57:8081;
server 192
展开阅读全文