前台门户网站高并发架构设计方案1 设计思路为提高网站的高并发性能,提高开发效率及运营效率,主要按如下几个思路进行规划设计:1)实现web请求的网络负载均衡的设计思路a)通过硬件实现负载均衡。
b)通过第三方软件来实现负载均衡,同时实现页面请求的缓存。
c)通过web服务器的配置来实现负载均衡即通过apache将客户请求均衡的分给tomcat1,tomcat2....去处理。
2)WEB应用架构设计思路a)应用开发实现MVC架构三层架构进行web应用开发b)采用第三方开源的CMS系统来实现网站内容的管理。
c)页面尽可能静态化以减少动态数据访问。
d)采用页面缓存机制和数据缓存来实现页面请求的缓冲和数据的缓存3)数据存储的设计思想a)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC实现数据库的集群。
b)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。
2 系统架构设计2.1 网站总体架构2.1.1 网站的系统架构1. 分层结构2. 网络示意图3. 网站架构设计说明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备注:1) 采用双防火墙双交换机做网络冗余,保障平台服务采用双防火墙通知接通2线路互联网接入,设备之间采用VRRP 协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络恢复后,自动恢复。
采用双千兆交换机分别接在2台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,根据业务及真实服务器的数量,交换机可以随时增加。
2) 采用硬件设备负载均衡器,实现网络流量的负载均衡使用硬件设备负载均衡器,将网络流量均衡的分担到WEB 服务器集群各节点服务器,保障平台服务器资源均衡的使用。
3) 采用代理服务器,实现软件级的网络负载均衡。
4) 数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写与后台查询统计进行分离,同时生产数据库采用rac 技术进行2.2 负载均衡2.2.1 通过硬件实现负载均衡在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。
Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了2.2.2 通过软件四层交换实现负载均衡软件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。
一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性。
2.2.3 通过反向代理服务器实现负载均衡反向代理服务器又称为 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. SquidSquid 是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度,下面将重点介绍 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-c ache注:DNS 的轮询机制将某一个域名解析为多个IP地址。
2. NginxNginx (“engine x”) 是俄罗斯人Igor Sysoev(塞索耶夫)编写的一款高性能的 HTTP 和反向代理服务器。
Nginx 已经在俄罗斯最大的门户网站── Rambler Media(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为开源软件,可以免费使用。
而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
6)支持Rewrite重写规则能够根据域名、URL的不同,将HTTP 请求分到不同的后端服务器群组。
7)内置的健康检查功能如果Nginx Proxy 后端的某台Web 服务器宕机了,不会影响前端访问。
8)节省带宽支持GZIP 压缩,可以添加浏览器本地缓存的Header 头。
9)稳定性高用于反向代理,宕机的概率微乎其微。
3. Nginx+squid缓存来实现反向代理负载均衡通过Nginx反向代理和squid缓存实现动静分离的架构图如下所示:2.2.4 Apache +tomcat集群实现负载均衡。
重以及当时负荷分tomcat1,tomcat2...去处理,要达到以下要求:1)Apache 做为HttpServer ,通过mod_jk连接器连接多个 tomcat 应用实例,并进行负载均衡。
2)同时还要配置session复制,也就是说其中任何一个tomcat的添加的session,是要同步复制到其它tomcat,集群内的tomcat都有相同的session,并为系统(包括 Apache 和 tomcat)设定 Session 超时时间。
2.3 缓存2.3.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;}expires 70;}这个配置会将/mem/abc指明到memcached的abc这个key去取数据。
Nginx目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404定向到后端去写入数据。
Nginx传统缓存的缺点也是它和squid等缓存软件的不同之特色,所以也可看作其优点。
在生产应用中它常常用作和squid的搭档,squid对于带?的链接往往无法阻挡,而nginx能将其访问拦住,例如:/?和/在squid上会被当做两个链接,所以会造成两次穿透;而nginx只会保存一次,无论链接变成/?1还是/?123,均不能透过nginx缓存,从而有效地保护了后端主机。