前台门户网站高并发架构设计方案.docx
- 文档编号:5935030
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:20
- 大小:1.02MB
前台门户网站高并发架构设计方案.docx
《前台门户网站高并发架构设计方案.docx》由会员分享,可在线阅读,更多相关《前台门户网站高并发架构设计方案.docx(20页珍藏版)》请在冰豆网上搜索。
前台门户网站高并发架构设计方案
前台网站架构
设计方案
2015-6
目录
1设计思路3
2系统架构设计4
2.1网站总体架构4
2.1.1网站的系统架构4
2.1.2网站的软件架构6
2.1.3网络拓扑结构7
2.2负载均衡8
2.2.1通过硬件实现负载均衡8
2.2.2通过软件四层交换实现负载均衡8
2.2.3通过反向代理服务器实现负载均衡8
2.2.4Apache+tomcat集群实现负载均衡。
11
2.3缓存12
2.3.1系统架构方面的缓存12
2.3.2应用程序方面的缓存13
2.4页面静态化14
2.5数据库集群及表库散列15
2.5.1数据库集群15
2.5.2数据库及表的散列15
2.6文件存储15
2.6.1文件共享15
2.6.2文件的多服务器自动同步16
2.6.3图片服务器分离16
2.7镜像16
2.8WEB应用架构设计思路17
2.8.1MVC架构示意18
2.8.2Struts架构19
3性能测试20
3.1测试环境20
3.2测试项目22
3.2.1测试点22
3.2.2测试结果要求22
3.3测试结果22
3.4结果分析23
设计思路
为提高网站的高并发性能,提高开发效率及运营效率,主要按如下几个思路进行规划设计:
1)实现web请求的网络负载均衡的设计思路
a)通过硬件实现负载均衡。
b)通过第三方软件来实现负载均衡,同时实现页面请求的缓存。
c)通过web服务器的配置来实现负载均衡
即通过apache将客户请求均衡的分给tomcat1,tomcat2....去处理。
2)WEB应用架构设计思路
a)应用开发实现MVC架构三层架构进行web应用开发
b)采用第三方开源的CMS系统来实现网站内容的管理。
c)页面尽可能静态化以减少动态数据访问。
d)采用页面缓存机制和数据缓存来实现页面请求的缓冲和数据的缓存
3)数据存储的设计思想
a)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。
b)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。
系统架构设计
网站总体架构
网站的系统架构
分层结构
网络示意图
网站架构设计说明
1)采用负载均衡器来实现硬件级的四层交换负载均衡,或采用LVS来实现软件的四层交换负载均衡。
2)通过Nigix实现反向代理服务器集群
3)同时搭建squid集群以作为静态页面的缓存。
4)通过1个apache+多个tomcat进行负载均衡配置,来组成web服务器集群。
5)采用独立的图片服务器集群来实现图片资源的存储及WEB请求。
6)采用HDFS来进行文件的共享访问,通过Rsync来实现远程文件同步。
7)在应用开发中采用基于Struts的MVC架构,同时采用缓存技术来提高动态页面的访问。
8)使页面尽可能静态化,引入CMS系统使网站进一步静态化。
9)对数据库采用生产数据库和查询数据库分离,同时采用oracle的Rac技术来实现集群扩展。
10)通过镜像技术来实现不同网络服务商的接入速度问题。
网站的软件架构
网络拓扑结构
备注:
1)采用双防火墙双交换机做网络冗余,保障平台服务
采用双防火墙通知接通2线路互联网接入,设备之间采用VRRP协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络恢复后,自动恢复。
采用双千兆交换机分别接在2台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,根据业务及真实服务器的数量,交换机可以随时增加。
2)采用硬件设备负载均衡器,实现网络流量的负载均衡
使用硬件设备负载均衡器,将网络流量均衡的分担到WEB服务器集群各节点服务器,保障平台服务器资源均衡的使用。
3)采用代理服务器,实现软件级的网络负载均衡。
4)数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写与后台查询统计进行分离,同时生产数据库采用rac技术进行
负载均衡
通过硬件实现负载均衡
在硬件四层交换产品领域,有一些知名的产品可以选择,比如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站点开发的,是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Squid是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP等多种协议,是现在Unix系统上使用、最多功能也最完整的一套软体。
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地址。
Nginx
Nginx(“enginex”)是俄罗斯人IgorSysoev(塞索耶夫)编写的一款高性能的HTTP和反向代理服务器。
Nginx已经在俄罗斯最大的门户网站──RamblerMedia(www.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的不同,将HTTP请求分到不同的后端服务器群组。
7)内置的健康检查功能
如果NginxProxy后端的某台Web服务器宕机了,不会影响前端访问。
8)节省带宽
支持GZIP压缩,可以添加浏览器本地缓存的Header头。
9)稳定性高
用于反向代理,宕机的概率微乎其微。
Nginx+squid缓存来实现反向代理负载均衡
通过Nginx反向代理和squid缓存实现动静分离的架构图如下所示:
Apache+tomcat集群实现负载均衡。
使用apache和多个tomcat配置一个可以应用的web网站,用Apache进行分流,把请求按照权重以及当时负荷分tomcat1,tomcat2...去处理,要达到以下要求:
1)Apache做为HttpServer,通过mod_jk连接器连接多个tomcat应用实例,并进行负载均衡。
2)同时还要配置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 192.168.1.2:
11211;
}
expires70;
}
这个配置会将
Nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。
Nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。
在生产应用中它常常用作和squid的搭档,squid对于带?
的链接往往无法阻挡,而nginx能将其访问拦住,例如:
nginx会非常老实地将链接形式保存到文件系统中,这样对于一个链接,可以很方便地查阅它在缓存机器上的缓存状态和内容,也可以很方便地和别的文件管理器如rsync等配合使用,它完完全全就是一个文件系统结构。
这两种传统缓存都可以在linux下将文件保存到/dev/shm里,一般我也是这么做的,这样可以利用系统内存来做缓存,利用内存的话,清理过期内容速度就会快得多。
使用/dev/shm/时除了要把tmp目录也指向到/dev/shm这个分区外,如果有大量小文件和目录,还要修改一下这个内存分区的inode数量和最大容量:
mount-osize=2500M-onr_inodes=480000-onoatime,nodiratime-oremount/dev/shm
上面的命令在一台有3G内存的机器上使用,因为/dev/shm默认最大内存是系统内存的一半就是1500M,这条命令将其调大成2500M,同时shm系统inode数量默认情况下可能是不够用的,但有趣的是它可以随意调节,这里调节为480000保守了点,但也基本够用了。
应用程序方面的缓存
OSCache
OSCache由OpenSymphony设计,它是一种开创性的JSP定制标记应用,提供了在现有JSP页面之内实现快速内存缓冲的功能,OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
OSCache有以下特点:
缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
拥有全面的API--OSCacheAPI给你全面的程序来控制所有的OSCache特性。
永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。
支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。
OSCache是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持。
OSCache的特点:
1)缓存任何对象:
你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
2)拥有全面的API:
OSCacheAPI允许你通过编程的方式来控制所有的OSCache特性。
3)永久缓存:
缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。
4)支持集群:
集群缓存数据能被单个的进行参数配置,不需要修改代码。
5)缓存过期:
你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。
Memcached
memcached是高性能的分布式内存缓存服务器。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
Memcached是以Key/Value的形式单个对象缓存。
内存数据缓存服务
对于一些常用的动态数据通过开发程序服务缓存在内存中,提供给其他子系统调用,如下面的数据就可以通过这样方式进行缓存。
1)用户基本信息及状态的信息缓冲
2)列表缓存,就像论坛里帖子的列表
3)记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。
4)复杂一点的group,sum,count查询,比如积分的分类排名
页面静态化
页面静态化就是采用效率最高、消耗最小的纯静态化的html页面来替换动态页面。
我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
同时采用第三方开源的CMS系统来实现网站内容的管理。
对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现页面静态化,所以我们需要引入常见的信息发布系统(CMS),信息发布系统(CMS)可以实现最简单的信息录入自动生成静态页面,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。
数据库集群及表库散列
数据库集群
对生产数据库采用RAC实现数据库的集群。
数据库及表的散列
把生产数据库和查询数据库进行分离,针对系统业务数据的特点,把大的表进行拆分,对于访问较多的表采用分区表。
开发使用上的问题?
文件存储
文件共享
HDFS是ApacheHadoop项目中的一个分布式文件系统实现,基于Google于2003年10月发表的GoogleFileSystem(GFS)论文。
⏹特性
1)硬件要求低
2)高容错性
3)易可扩展
4)配置简单
5)超大文件
HDFS采用master/slave架构。
一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。
应用在大批量的数据上,需要后绪分析。
文件的多服务器自动同步
使用Linux2.6内核的inotify监控Linux文件系统事件。
利用开源的lsync监听某一目录,如果目录内文件发生增、删、改,利用Rsync协议自动同步到多台服务器。
图片服务器分离
特别是如果程序与图片都放在同一个APAHCE的服务器下,每一个图片的请求都有可能导致一个HTTPD进程的调用。
使用独立的图片服务器不但可以避免以上这个情况,更可以对不同的使用性质的图片设置不同的过期时间,以便同一个用户在不同页面访问相同图片时不会再次从服务器(基于是缓存服务器)取数据,不但快速,而且还省了带宽。
还有就是,对于缓存的时间上,亦可以做独立的调节。
镜像
镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异。
我们可以在不同的网络接入商部署web服务器来针对不同的网络接入商访问,通过linux上的rsync工具自动同步到不同网络接入商的web服务器上。
WEB应用架构设计思路
应用开发实现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,为什么还要学习其他东西
采用Memcached作为数据缓存?
MVC架构示意
Struts架构
客户端发送一个HTTP请求,通过Struts框架最后获得一个HTTP响应,这一过程非常重要,它是理解Struts框架的重点。
上图描述了Struts框架的结构,而下图通过一个活动图更具体描述接受请求直至返回响应的整个过程:
性能测试
测试环境
类型
配置
服务端配置
普通PC机
CPU:
双核,2.6G
内存:
1G
操作系统:
RedhatLinuxAS5
Tpmc:
5000tpmc(估算)
客户端配置
普通PC机
CPU:
双核,2.6G
内存:
1G
操作系统:
WindowsXP
网络
公司内网(100M的以太网)
测试工具
Jakarta-jmeter-2.3.2
测试项目
测试点
1)单个tomcat的并发处理能力
2)单个apache的并发处理能力
3)Apache+Tomcat的并发处理能力
a)2个tomcat服务与apache在一台机器上。
b)2个Tomcat服务分布在两台机器上。
4)Nginx负载均衡
5台服务器:
1个代理服务器+2个apache组合(apache+2tomcat)
5)Nginx负载均衡+squid缓存
5台服务器:
1个代理服务器(缓存服务器)+2个apache服务器集群(一个集群两台服务器,apache+2tomcat)
测试结果要求
1)样本数超过10000个
2)尽可能采用多客户端进行同步测试。
3)每一个测试点大于5次测试
4)测试结果包括,样本数、执行效率、请求字节、带宽占用、各服务器CPU的消耗、内存占用、IO占用。
测试结果
编号
测试人
样本数
开始时间
结束时间
执行时间
执行效率
(样本/秒)
请求总字节
(b)
带宽占用
(M)
1
2
3
4
5
6
7
8
9
10
总计:
注:
用的是5个线程并发处理。
结果分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 前台 门户 网站 并发 架构 设计方案
![提示](https://static.bdocx.com/images/bang_tan.gif)