前台门户网站架构设计方案Word格式.docx
《前台门户网站架构设计方案Word格式.docx》由会员分享,可在线阅读,更多相关《前台门户网站架构设计方案Word格式.docx(55页珍藏版)》请在冰豆网上搜索。
2系统架构设计
2.1总体思路
为提高网站的高并发性能,提高开发效率及运营效率,要紧按如下几个思路进行规划设计:
2.1.1负载均衡
1)四层交换负载均衡:
采纳负载均衡器来实现硬件级的四层交换负载均衡,或采纳LVS来实现软件的四层交换负载均衡。
2)通过第三方软件来实现负载均衡,同时实现页面要求的缓存。
通过Nginx实现反向代理服务器集群,同时搭建squid集群以作为静态页面和图片的缓存。
3)通过web服务器的配置来实现负载均衡
即通过apache或是Nginx将客户要求均衡的分给tomcat1,tomcat2....去处理。
2.1.2WEB应用开发架构思路
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服务器将要求平均地分配到后台的Web服务器上,而不考虑每个Web服务器当前的负载情形;
假如后台的Web服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;
其次未考虑容错,假如后台的某台Web服务器显现故障,DNS服务器仍旧会把DNS要求分配到这台故障服务器上,导致不能响应客户端。
最后一点是致命的,有可能造成相当一部分客户不能享受Web服务,同时由于DNS缓存的缘故,所造成的后果要连续相当长一段时刻(一样DNS的刷新周期约为24小时)。
因此在国外最新的建设中心Web站点方案中,差不多专门少采纳这种方案了。
2.通过硬件四层交换实现负载均衡
在硬件四层交换产品领域,有一些知名的产品能够选择,比如Alteon、F5等,这些产品专门昂贵,然而物有所值,能够提供专门优秀的性能和专门灵活的治理能力。
Yahoo中国起初接近2000台服务器使用了三四台Alteon就搞定了
3.通过软件四层交换实现负载均衡
软件四层交换我们能够使用Linux上常用的LVS来解决,LVS确实是LinuxVirtualServer,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和治理功能,能够同时满足多种应用需求,这关于分布式的系统来说必不可少。
一个典型的使用负载均衡的策略确实是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在专门多大型网站包括搜索引擎上被采纳,如此的架构低成本、高性能还有专门强的扩张性。
4.通过反向代理服务器实现负载均衡
反向代理服务器又称为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系统上使用、最多功能也最完整的一套软体。
1)Squid
Squid是一个开源的软件,利用它的反向代理技术能够提高网站系统的访问速度,下面将重点介绍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地址。
2)Nginx
Nginx(〝enginex〞)是俄罗斯人IgorSysoev(塞索耶夫)编写的一款高性能的和反向代理服务器。
Nginx差不多在俄罗斯最大的门户网站──RamblerMedia〔rambler.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为开源软件,能够免费使用。
而购买F5BIG-IP、NetScaler等硬件负载均衡交换机那么需要十多万至几十万人民币。
6)支持Rewrite重写规那么
能够依照域名、URL的不同,将要求分到不同的后端服务器群组。
7)内置的健康检查功能
假如NginxProxy后端的某台Web服务器宕机了,可不能阻碍前端访问。
8)节约带宽
支持GZIP压缩,能够添加扫瞄器本地缓存的Header头。
9)稳固性高
用于反向代理,宕机的概率微乎其微。
3)Nginx+squid页面缓存来实现反向代理负载均衡
通过Nginx反向代理和squid缓存实现动静分离的架构图如下所示:
5.Apache+tomcat集群实现负载均衡。
使用apache和多个tomcat配置一个能够应用的web网站,用Apache进行分流,把要求按照权重以及当时负荷分tomcat1,tomcat2...去处理,要达到以下要求:
1)Apache做为Server,通过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编码哈希后储存;
Nginx的Web缓存服务只能为指定URL或状态码设置过期时刻,不支持类似Squid的PURGE指令,手动清除指定缓存页面;
采纳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;
}
expires70;
}
那个配置会将:
//sudone/mem/abc指明到memcached的abc那个key去取数据。
Nginx目前没有写入memcached的任何机制,因此要往memcached里写入数据得用后台的动态语言完成,能够利用404定向到后端去写入数据。
Nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,因此也可看作其优点。
在生产应用中它常常用作和squid的搭档,squid关于带?
的链接往往无法阻挡,而nginx能将其访问挡住,例如:
:
//sudone/?
和:
//sudone/在squid上会被当做两个链接,因此会造成两次穿透;
而nginx只会储存一次,不管链接变成:
1依旧:
123,均不能透过nginx缓存,从而有效地爱护了后端主机。
nginx会专门老实地将链接形式储存到文件系统中,如此关于一个链接,能够专门方便地查阅它在缓存机器上的缓存状态和内容,也能够专门方便地和别的文件治理器如rsync等配合使用,它完完全全确实是一个文件系统结构。
2.应用程序方面的缓存
1)OSCache
OSCache由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)缓存过期:
你能够有最大限度的操纵缓存对象的过期,包括可插入式的刷新策略〔假如默认性能不能满足需要时〕。
2)Memcached
memcached是高性能的分布式内存缓存服务器。
一样的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Memcached是以Key/Value的形式单个对象缓存。
3)自主开发的内存数据缓存服务
a)独立进程方式的缓存服务
关于一些常用的动态数据通过开发程序服务缓存在内存中,提供给其他子系统调用,如下面的数据就能够通过如此方式进行缓存。
1)用户差不多信息及状态的信息缓冲
2)列表缓存,就像论坛里帖子的列表
3)记录条数的缓存,比如一个论坛板块里有多少个帖子,如此才方便实现分页。
4)复杂一点的group,sum,count查询,比如积分的分类排名
b)集成在WEB应用中的内存缓存
在web应用中关于热点的功能,考虑使用完全装载到内存,保证绝对的响应速度,关于需要频繁访问的热点数据,采纳集中缓存(多个能够采纳负载均衡),减轻数据库的压力,比如:
专门多配置信息,操作员信息等等。
2.3.3页面静态化
页面静态化确实是采纳效率最高、消耗最小的纯静态化的html页面来替换动态页面。
我们尽可能使我们的网站上的页面采纳静态页面来实现,那个最简单的方法事实上也是最有效的方法。
同时采纳第三方开源的CMS系统来实现网站内容的治理。
关于大量内容同时频繁更新的网站,我们无法全部手动去挨个实现页面静态化,因此我们需要引入常见的信息公布系统(CMS),信息公布系统(CMS)能够实现最简单的信息录入自动生成静态页面,关于一个大型网站来说,拥有一套高效、可治理的CMS是必不可少的。
同时,HTML静态化也是某些缓存策略使用的手段,关于系统中频繁使用数据库查询然而内容更新专门小的应用,能够考虑使用HTML静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都能够进行后台治理同时储备再数据库中,这些信息事实上大量被前台程序调用,然而更新频率专门小,能够考虑将这部分内容进行后台更新的时候进行静态化,如此幸免了大量的数据库访问要求。
在进行html静态化的时候还能够使用一种折中的方法,确实是前端连续使用动态实现,在一定的策略下通过后台模块进行定时把动态网页生成静态页面,并定时判定调用,那个能实现专门多灵活性的操作。
为了提高静态HTML的访问效率,要紧能够对以下几个方面进行优化:
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是ApacheHadoop项目中的一个分布式文件系统实现,基于Google于2003年10月发表的GoogleFileSystem(GFS)论文。
⏹特性
1)硬件要求低
2)高容错性
3)易可扩展
4)配置简单
5)超大文件
HDFS采纳master/slave架构。
一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
2)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一样没有这么庞大的规模。
2.文件的多服务器自动同步
使用Linux2.6内核的inotify监控Linux文件系统事件。
利用开源的lsync监听某一名目,假如名目内文件发生增、删、改,利用Rsync协议自动同步到多台服务器。
3.图片服务器分离
专门是假如程序与图片都放在同一个APAHCE的服务器下,每一个图片的要求都有可能导致一个D进程的调用。
使用独立的图片服务器不但能够幸免以上那个情形,更能够对不同的使用性质的图片设置不同的过期时刻,以便同一个用户在不同页面访问相同图片时可不能再次从服务器〔基因此缓存服务器〕取数据,不但快速,而且还省了带宽。
还有确实是,关于缓存的时刻上,亦能够做独立的调剂。
2.3.6网络问题解决方案
你不可能要求所有的使用人员,都和你的服务器在一个运营商的网络内,而不同网络之间访问速度会专门慢,我们能够采纳镜像网站和引入CDN来解决这一问题。
1.智能DNS解析
我们能够在不同的网络运营商部署web服务器,通过linux上的rsync工具自动同步到不同网络接入商的web服务器上,以作为主站的镜像。
然后通过配置智能DNS解析来引导不同网络的访问用户到对应的网络运营商的web服务器。
2.CDN
假如有足够的投资,也能够采纳CDN(内容分发网),把静态内容〔静态页面和图片〕进行CDN缓存,以减轻服务器压力