8、e)View数据缓存(Memcached直询数据库数据存储文件共享NFSHDFS数据库生产数据库网站架构门户网站架构网站的物理架构Internet用户浏览页面负载均衡器1服务器1服务器2服务器3服务器2代理服务器集群服务器n服务器2服务器1服务器2服务器1服务器2服务器1服务器2服务器1服务器n图片服务器集群Web服务器集群AWeb服务器集群BSquid服务器集群网站架构门户网站架构网站的开发架构通讯层消息中心业务层WEB服务器持久层数据层数据存储SMSMMSWAPPUSH基于struts的MVC框架ControlORMI/O文件存储HDFS数据库消息中
9、心WEB容器请求ibatis数据ViewModelDB连接池生产数据库JDBC页面缓存ApacheTomat.Tomat短信群发器彩信群发器C3p0生产数据库业务支撑模块后台支撑模块HTML静态化模块统计支撑模块查询数据库网站架构门户网站架构网络拓扑结构Internet主防火墙备防火墙主交换机VRRP备交换机负载均衡器1负载均衡器2服务器2服务器1服务器n服务器1月艮务器n月艮务器2服务器2服务器2.服务器2服务器1服务器n服务器1服务器n服务器1服务器n服务器1服务器2代理服务器集群网站服务器集群图片服务器集群应用服务器集群光纤交换机生产DB服务器集群查询DB
10、服务器组管理终端光纤交换机磁盘阵列柜磁盘阵列柜备注:1)采用双防火墙双交换机做网络冗余,保障平台服务采用双防火墙通知接通2线路互联网接入,设备之间采用VRRP协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络恢复后,自动恢复。采用双千兆交换机分别接在2台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,根据业务及真实服务器的数量,交换机可以随时增加。2)采用硬件设备负载均衡器,实现网络流量的负载均衡使用硬件设备负载均衡器,将网络流量均衡的分担到WEB服务器集群各节点服务器
11、,保障平台服务器资源均衡的使用。3)采用代理服务器,实现软件级的网络负载均衡。4)数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写与后台查询统计进行分离,同时生产数据库采用rac技术进行网站架构门户网站架构架构涉及技术的详解负载均衡1.基于DNS的负载均衡-一个域名绑定多个IPDNS负载均衡技术是最早的负载均衡解决方案,它是通过DNS服务中的随机名字解析来实现的,在DNS服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地
12、址上的Web服务器,从而达到负载均衡的目的。这种技术的优点是,实现简单、实施容易、成本低、适用于大多数TCP/IP应用;但是,其缺点也非常明显,首先这种方案不是真正意义上的负载均衡,DNS服务器将Http请求平均地分配到后台的Web服务器上,而不考虑每个Web服务器当前的负载情况;如果后台的Web服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;其次未考虑容错,如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS请求分配到这台故障服务器上,导致不能响应客户端。最后一点是致命的,有可能造成相当一部分客
14、他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性。4.通过反向代理服务器实现负载均衡反向代理服务器又称为WEB加速服务器,它位于WEB服务器的前端,充当WEB服务器的内容缓存器,反向代理服务器是针对WEB服务器设置的,后台WEB服务器对互联网用户是透明的,用户只能看
15、到反向代理服务器的地址,不清楚后台WEB服务器是如何组织架构的。当互联网用户请求WEB服务时,DNS将请求的域名解析为反向代理服务器的IP地址,这样URL请求将被发送到反向代理服务器,反向代理服务器负责处理用户的请求与应答、与后台WEB服务器交互。利用网站架构门户网站架构反向代理服务器减轻了后台WEB服务器的负载,提高了访问速度,同时避免了因用户直接与WEB服务器通信带来的安全隐患。目前有许多反向代理软件,比较有名的有Nginx和Squid。Nginx是IgorSysoev为俄罗斯访问量第二的站点开发的,是一个高性能的HTTP和反向代理服务器,也是一个
16、IMAP/POP3/SMTP代理服务器。Squid是美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP等多种协议,是现在Unix系统上使用、最多功能也最完整的一套软体。1)SquidSquid是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度,下面将重点介绍Squid反向代理的实现原理和在提高网站性能方面的应用。Squid反向代理服务器位于本地WEB服务器和Internet之间,组织架构如下图:客户端请求访问WEB服务时,DNS将访问的域名解析为Squid反向代理服务器的IP地址,这样客
20、、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。6)支持Rewrite重写规则能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组。7)内置的健康检查功能如果NginxProxy后端的某台Web服务器宕机了,不会影响前端访问)节省带宽支持GZIP压缩,可以添加浏览器本地缓存的Header头。9)稳定性高用于反向代理,宕机的概率微乎其微。3)Nginx+squid页面缓存来实现反向代理负载均衡通过Nginx反向代理和squid缓存实现动静分离的架构图如下所示:网站架构门户网站架构5.Apache+tomcat集群实现负载均衡。使用a
24、利用404定向到后端去写入数据。Nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。在生产应用中它常常用作和squid的搭档,squid对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:/和/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成网站架构门户网站架构/1还是/123,均不能透过nginx缓存,从而有效地保护了后端主机。nginx会非常老实地将链接形式保存到文件系统中,这样对于一个链接,可以很方便地查阅它在缓存机器上的缓存状态和内容,也可以很方便地和别的文件管理器如r
26、意的写入硬盘,因此允许昂贵的创建数据来保持缓存,甚至能让应用重启。支持集群-集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期-你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略。OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持。OSCache的特点:1)缓存任何对象:你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。2)拥有全面的API:OSCacheAPI允许你通过编程的方式来控制所有的OSCache特性。3)永久缓存:缓存能被配置写入硬盘,因此允许在应用
27、服务器的多次生命周期间缓存创建开销昂贵的数据。4)支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。5)缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略。2)Memcachedmemcache提高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。Memcached是以Key/Value的形式单个对象缓存。网站架构门户网站架构3)自主开发的内存数据缓存服务a)独立进程方式的缓存服务对于一些常用的动态数据通过开发程序服务缓存在内存中,提供给其他子系统调用,
32、把生产数据库和查询数据库进行分离,针对系统业务数据的特点,把大的表进行拆分,对于访问较多的表采用分区表。使用读/写数据库分离,随着系统变得越来越庞大,特别是当它们拥有很差的SQL时,一台数据库服务器通常不足以处理负载。但是多个数据库意味着重复,除非你对数据进行了分离。更一般地,这意味着建立主/从副本系统,其中程序会对主库编写所有的Update、Insert和Delete变更语句,而所有Select的数据都读取自从数据库。尽管概念上很简单,但是想要合理、精确地实现并不容易,这可能需要大量的代码工作。因此,即便在开始时使用同一台数据库服务器,也要尽早计划在PHP中使
36、包括两个主要部分:一台服务器,以及至少一台客户机。被共享的目录和文件存放在服务器上,客户机远程地访问保存在服务器上的数据。GFS则一台Master(通常有几台备份)和若干台TrunkServer构成。GFS中文件备份成固定大小的Trunk分别存储在不同的TrunkServer上,每个Trunk有多份(比如3)拷贝,也存储在不同的TrunkServer上。Master负责维护GFS中的Metadata,即文件名及其Trunk信息。客户端先从Master上得到文件的Metadata,根据要读取的数据在文件中的位置与相应的TrunkServer通信,获取文件数据
44、truts框架最后获得一个HTTP响应,这一过程非常重要,它是理解Struts框架的重点。上图描述了Struts框架的结构,而下图通过一个活动图更具体描述接受请求直至返回响应的整个过程:网站架构门户网站架构2.面向服务的应用架构面向服务的应用架构是指构建可分布式的、去中心化的服务器平台,以提供许多不同的应用,数据库被分成很多个小部分,围绕每个部分都会创建一个服务接口(API),并且该接口是访问数据库的唯一途径。最终数据库演变成一个非常庞大的共享资源。这种架构是松散耦合的,并且围绕着服务进行构建。面向服务的架构提供给他们隔离特性,一个服务可能有很多台数据库服务
46、化调整系统的内核参数,增大连接数及TCP/IP的超时设置。Linux系统中:在/etc/配置文件中增加如下内核参数:_syncookies=1_tw_reuse=1_tw_recycle=1_fin_timeout=5tomcat血务器优化一底大并发连接数,调整内存参数的设置。1、JDK内存优化:当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的;0%。Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的)需要调大.Tomcat默认可以使用的内存为128
51、processes该参数的值最好跟cpu核数相莓,能够发挥最大性能,如果nginx所在服务器为2颗双核cpu,则建议设定为4。3Web服务架构评测主要对基于tomcat和nginx+tomcat的web服务器的处理性能进行测试,以作为不同性能要求下架构选型的依据测试环境网络环境1.内网带宽?千M内网。?内网ping包延迟:网站架构门户网站架构2.网络拓扑示意WEB服务高可用测试网络示意图千兆交换机测试服务器WEB服务:服务端服务器配置设备Nginx硬件配置旧MX3650CPU:Intel(R)Xeon(R)E51502核*2内存:4G千兆网卡操作系统
53、Intel(R)Xeon(R)E51502核*2内存:4G千兆网卡Redhatlinuxas5Test2Redhatlinuxas4网站架构门户网站架构软件环境1.操作系统网络参数优化用做测试的各台服务器,均在/etc/配置文件中增加如下内核参数:_syncookies=1_tw_reuse=1_tw_recycle=1_fin_timeout=52.Nginx设置主要配置如下:userwwwwww;worker_processes4;error_log/usr/local/nginx/logs/nginx_pid/usr/loca