网站架构的设计方案-.pdf
网站架构的设计方案1/201/20 网站架构的设计方案网站架构,一般认为是根据客户需求分析的结果,准确定位网站目标群体,设定网站整体架构,规划、设计网站栏目及其内容,制定网站开发流程及顺序,以最大限度地进行高效资源分配与管理的设计。其内容有程序架构,呈现架构,和信息架构三种表现。而步骤主要分为硬架构和软架构两步程序。网络架构是现代网络学习和发展的一个必须的基础技术。在选择机房的时候,根据网站用户的地域分布,可以选择网通或电信机房,但更多时候,可能双线机房才是合适的。越大的城市,机房价格越贵,从成本的角度看可以在一些中小城市托管服务器,比如说北京的公司可以考虑把服务器托管在天津,廊坊等地,不是特别远,但是价格会便宜很多。现在的 PHP 框架有很多选择,比如:CakePHP,Symfony,Zend Framework等等,至于应该使用哪一个并没有唯一的答案,要根据 Team 里团队成员对各个框架的了解程度而定。很多时候,即使没有使用框架,一样能写出好的程序来,比如Flickr据说就是用Pear+Smarty这样的类库写出来的,所以,是否用框架,用什么框架,一般不是最重要的,重要的是我们的编程思想里要有框架的意识。网站规模到了一定的程度之后,代码里各种逻辑纠缠在一起,会给维护和扩展带来巨大的障碍,这时我们的解决方式其实很简单,那就是重构,将逻辑进行分层。通常,自上而下可以分为表现层,应用层,领域层,持久层。所谓表现层,并不仅仅就指模板,它的范围要更广一些,所有和表现相关的逻辑都应该被纳入表现层的范畴。比如说某处的字体要显示为红色,某处的开头要空两格,这些都属于表现层。很多时候,我们容易犯的错误就是把本属于表现层的逻辑放到了其他层面去完成,这里说一个很常见的例子:我们在列表页显示文章标题的时候,都会设定一个最大字数,一旦标题长度超过了这个限制,就截断,并在后面显示“.”,这就是最典型的表现层逻辑,但是实际情况,有很多程序员都是在非表现层代码里完成数据的获取和截断,然后赋值给表现层模板,这样的代码最直接的缺点就是同样一段数据,在这个页面我可能想显示前10 个字,再另一个页面我可能想显示前15 个字,而一旦我们在程序里固化了这个字数,也就丧失了可移植性。正确的做法是应该做一个视图助手之类的程序来专门处理此类逻辑,比如说:Smarty 里的 truncate 就属于这样的视图助手(不过它那个实现不适合中文)。所谓应用层,它的主要作用是定义用户可以做什么,并把操作结果反馈给表现层。至于如何做,通常不是它的职责范围(而是领域层的职责范围),它会通过委派把如何做的工作交给领域层去处理。在使用MVC 架构的网站中,我们可以看到类似下面这样的URL:domain/articles/view/123,其内部编码实现,一般就是一个Articles 控制器类,里面有一个view 方法,这就是一个典型的应用层操作,因为它定义了用户可以做一个查看的动作。在MVC 架构中,有一个准则是这么说的:Rich Model Is Good。言外之意,就是Controller要保持“瘦”一些比较好,进而说明应用层要尽量简单,不要包括涉及领域内容的逻辑。所谓领域层,最直接的解释就是包含领域逻辑的层。它是一个软件的灵魂所在。先来网站架构的设计方案2/202/20 看看什么叫领域逻辑,简单的说,具有明确的领域概念的逻辑就是领域逻辑,比如我们在ATM 机上取钱,过程大致是这样的:插入银联卡,输入密码,输入取款金额,确定,拿钱,然后 ATM 吐出一个交易凭条。在这个过程中,银联卡在 ATM 机器里完成钱从帐户上划拨的过程就是一个领域逻辑,因为取钱在银行中是一个明确的领域概念,而ATM 机吐出一个交易凭条则不是领域逻辑,而仅是一个应用逻辑,因为吐出交易凭条并不是银行中一个明确的领域概念,只是一种技术手段,对应的,我们取钱后不吐交易凭条,而发送一条提醒短信也是可能的,但并不是一定如此,如果在实际情况中,我们要求取款后必须吐出交易凭条,也就是说吐出交易凭条已经和取款紧密结合,那么你也可以把吐出交易凭条看作是领域逻辑的一部分,一切都以问题的具体情况而定。在 Eric 那本经典的领域驱动设计中,把领域层分为了五种基本元素:实体,值对象,服务,工厂,仓储。具体可以参阅书中的介绍。领域层最常犯的错误就是把本应属于领域层的逻辑泄露到了其他层次,比如说在一个CMS 系统,对热门文章的定义是这样的:每天被浏览的次数多于 1000 次,被评论的次数多于100 次,这样的文章就是热门文章。对于一个 CMS 来说,热门文章这个词无疑是一个重要的领域概念,那么我们如何实现这个逻辑的设计的?你可能会给出类似下面的代码:“SELECT.FROM.WHERE 浏览 1000 AND 评论 100”,没错,这是最简单的实现方式,但是这里需要注意的是“每天被浏览的次数多于1000 次,被评论的次数多于100 次”这个重要的领域逻辑被隐藏到了 SQL 语句中,SQL 语句显然不属于领域层的范畴,也就是说,我们的领域逻辑泄露了。网站的性能瓶颈分析网站的性能影响因素很多,下面主要从如下4个方面进行分析说明:1)网络负载a)公网负载b)内网负载2)WEB 应用服务器性能a)CPU b)存储,I/O访问c)内存d)并发 TCP/IP 连接数3)数据库服务器性能a)数据库参数配置b)服务器性能(CPU、内存、存储)c)数据结构的合理性网站架构的设计方案3/203/20 4)不同 WEB 应用的处理方式而对不同的性能瓶颈a)对于静态的网站:静态的 HTML 页面严格地由标准的HTML 标示语言构成,并不需要服务器端即时运算生成。这意味着,对一个静态HTML 文档发出访问请求后,服务器端只是简单地将该文档传输到客户端。从服务器运行的那个时间片来看,这个传输过程仅仅占用了很小的CPU 资源。对于静态HTML 的访问瓶颈为:网络带宽、磁盘I/O以及cache(高速缓冲存储器)。b)对于动态页面因为服务器解析动态页面必须在其传输到客户端前就通过服务器来进行解释,这样就会给应用服务器添加额外的性能消耗,如果进一步要访问数据库,则会增加数据库服务器的性能消耗,则动态页面还有额外的瓶颈:应用服务器的性能,数据库服务器的性能。系统架构设计总体思路为提高网站的高并发性能,提高开发效率及运营效率,主要按如下几个思路进行规划设计:负载均衡1)四层交换负载均衡:采用负载均衡器来实现硬件级的四层交换负载均衡,或采用LVS来实现软件的四层交换负载均衡。2)通过第三方软件来实现负载均衡,同时实现页面请求的缓存。通过 Nginx 实现反向代理服务器集群,同时搭建squid 集群以作为静态页面和图片的缓存。3)通过 web 服务器的配置来实现负载均衡即通过 apache 或是 Nginx 将客户请求均衡的分给tomcat1,tomcat2.去处理。网站架构的设计方案4/204/20 WEB 应用开发架构思路1)应用开发实现 MVC 架构三层架构进行web 应用开发2)页面尽可能静态化以减少动态数据访问,如果是资讯类的网站可以考虑采用第三方开源的 CMS 系统来生成静态的内容页面。3)采用 Oscache 实现页面缓存,采用 Memcached 实现数据缓存4)采用独立的图片服务器集群来实现图片资源的存储及WEB 请求数据存储的设计思路1)数据库拆分,把生产数据库和查询数据库分离,对生产数据库采用RAC 实现数据库的集群。2)采用高效的网络文件共享策略,采用图片服务器来实现页面的图片存储。不同网络用户访问考虑1)通过引入 CDN 来解决不同网络服务商的接入速度问题,一般只能解决静态页面的访问问题。2)在不同运营商机房部署服务器,通过镜像技术来实现不同网络服务商的接入速度问题。总体架构网站架构的设计方案5/205/20 网站的开发架构网络拓扑结构备注:Sl网站架构的设计方案6/206/20 采用双防火墙双交换机做网络冗余,保障平台服务采用双防火墙通知接通2 线路互联网接入,设备之间采用VRRP 协议,在任何一个防火墙、互联网发生故障后均可自动将流量切换到另一端,保证网站的正运行,设备或网络恢复后,自动恢复。采用双千兆交换机分别接在2 台防火墙上,当某台设备或者网络链路发生故障后,好设备自动接管已坏设备的工作,不影响网站的整体运行,根据业务及真实服务器的数量,交换机可以随时增加。采用硬件设备负载均衡器,实现网络流量的负载均衡使用硬件设备负载均衡器,将网络流量均衡的分担到WEB 服务器集群各节点服务器,保障平台服务器资源均衡的使用。采用代理服务器,实现软件级的网络负载均衡。数据库服务器分离成生产数据库集群和查询数据库集群,实现生产读写与后台查询统计进行分离,同时生产数据库采用rac 技术进行架构涉及技术的详解负载均衡基于 DNS 的负载均衡-一个域名绑定多个IP DNS 负载均衡技术是最早的负载均衡解决方案,它是通过DNS 服务中的随机名字解析来实现的,在DNS 服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的 Web 服务器,从而达到负载均衡的目的。这种技术的优点是,实现简单、实施容易、成本低、适用于大多数TCP/IP应用;但是,其缺点也非常明显,首先这种方案不是真正意义上的负载均衡,DNS 服务器将Http 请求平均地分配到后台的Web服务器上,而不考虑每个Web 服务器当前的负载情况;如果后台的Web 服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;其次未考虑容错,如果后台的某台Web 服务器出现故障,DNS 服务器仍然会把 DNS 请求分配到这台故障服务器上,导致不能响应客户端。最后一点是致命的,有可能造成相当一部分客户不能享受Web 服务,并且由于DNS 缓存的原因,所造成的后果要持续相当长一段时间(一般 DNS 的刷新周期约为24 小时)。所以在国外最新的建设中心Web 站点方案中,已经很少采用这种方案了。通过硬件四层交换实现负载均衡在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo 中国当初接近2000 台服务器使用了三四台Alteon 就搞定了通过软件四层交换实现负载均衡软件四层交换我们可以使用Linux 上常用的LVS 来解决,LVS 就是 Linux 网站架构的设计方案7/207/20 Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP 配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建 squid 集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性。通过反向代理服务器实现负载均衡反向代理服务器又称为WEB 加速服务器,它位于WEB 服务器的前端,充当 WEB 服务器的内容缓存器,反向代理服务器是针对WEB 服务器设置的,后台WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台WEB 服务器是如何组织架构的。当互联网用户请求WEB 服务时,DNS 将请求的域名解析为反向代理服务器的IP 地址,这样URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台WEB 服务器交互。利用架构涉及技术的详解负载均衡基于 DNS 的负载均衡-一个域名绑定多个IP DNS 负载均衡技术是最早的负载均衡解决方案,它是通过DNS 服务中的随机名字解析来实现的,在DNS 服务器中,可以为多个不同的地址配置同一个名字,而最终查询这个名字的客户机将在解析这个名字时得到其中的一个地址。因此,对于同一个名字,不同的客户机会得到不同的地址,它们也就访问不同地址上的 Web 服务器,从而达到负载均衡的目的。这种技术的优点是,实现简单、实施容易、成本低、适用于大多数TCP/IP应用;但是,其缺点也非常明显,首先这种方案不是真正意义上的负载均衡,DNS 服务器将Http 请求平均地分配到后台的Web服务器上,而不考虑每个Web 服务器当前的负载情况;如果后台的Web 服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;其次未考虑容错,如果后台的某台Web 服务器出现故障,DNS 服务器仍然会把 DNS 请求分配到这台故障服务器上,导致不能响应客户端。最后一点是致命的,有可能造成相当一部分客户不能享受Web 服务,并且由于DNS 缓存的原因,所造成的后果要持续相当长一段时间(一般 DNS 的刷新周期约为24 小时)。所以在国外最新的建设中心Web 站点方案中,已经很少采用这种方案了。通过硬件四层交换实现负载均衡在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo 中国当初接近2000 台服务器使用了三四台Alteon 就搞定了通过软件四层交换实现负载均衡软件四层交换我们可以使用Linux 上常用的LVS 来解决,LVS 就是 Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP 配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上网站架构的设计方案8/208/20 搭建 squid 集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性。通过反向代理服务器实现负载均衡反向代理服务器又称为WEB 加速服务器,它位于WEB 服务器的前端,充当 WEB 服务器的内容缓存器,反向代理服务器是针对WEB 服务器设置的,后台WEB 服务器对互联网用户是透明的,用户只能看到反向代理服务器的地址,不清楚后台WEB 服务器是如何组织架构的。当互联网用户请求WEB 服务时,DNS 将请求的域名解析为反向代理服务器的IP 地址,这样URL 请求将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答、与后台WEB 服务器交互。利用反向代理服务器减轻了后台WEB 服务器的负载,提高了访问速度,同时避免了因用户直接与WEB 服务器通信带来的安全隐患。主防火精.a耻J!J圃,l.Q ii 阻,嚣,晨,臣费蛐 fRRP 冒冒固自凰”霉憬”嚣,民嚣1II,撮,备防火淄备交换饥.且帽跑嗣盟2代理服务嚣良静同瞌剧铸跑集醉剧院!l!量集酣应用凰务量集群生.JI地m罪S集创E弯lRjll务植嗣s,h电 3章侨茸帆锺盘到i列祖E磁盘醉列把”精鲤峭网站架构的设计方案9/209/20 目前有许多反向代理软件,比较有名的有Nginx 和 Squid。Nginx 是由Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,是一个高性能的HTTP 和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器。Squid 是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP 等多种协议,是现在Unix 系统上使用、最多功能也最完整的一套软体。Squid Squid 是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度,下面将重点介绍Squid 反向代理的实现原理和在提高网站性能方面的应用。Squid 反向代理服务器位于本地WEB 服务器和Internet 之间,组织架构如下图:2去形图.-8,Jilt Reverse 1roxy Sc问CVcb Scrt,cont 12量!r.-.龟榈树附糊l.i:,-N-Gi”61.t I 2 80,”.,_.”I abe,”-.,鸣.,.h Sltft a脑F隙诩求姆llpm凰务lll.负鲸均面;内阳P:192 I刷马:11,.,.,帕E二挝噩,j bll务111,组负箴均衡):!I-,-S刷,a来命中,油加串M画画偏mL-_.!S-Q怡id2Sqnd hosg设置:19:2.168.1.2,曾.u,-g龟wM,。,t,.166.t Z1 10 n abc e幅1国墅、吨,r1 h军l,rn192 Ur.vu“.也,、,.凰811.J,组4ttats:2垂塑篝戴司fll癫温元lSq.uid自身的bJUte海,Jt,r,湾lu.:i,dll,存缀得跟备镰。唱ii:“”io,滇军、.僧”.IT倍。e“.,嗣、”“.,.附盹翩.,.,1 恤,俨wu-、”“”电酬剑”.,.¥官叫网站架构的设计方案13/2013/20 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;expires 70;这个配置会将指明到memcached的 abc 这个 key 去取数据。网站架构的设计方案14/2014/20 Nginx 目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404 定向到后端去写入数据。目前有许多反向代理软件,比较有名的有Nginx 和 Squid。Nginx 是由Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,是一个高性能的HTTP 和反向代理服务器,也是一个IMAP/POP3/SMTP 代理服务器。Squid 是由美国政府大力资助的一项研究计划,其目的为解决网络带宽不足的问题,支持HTTP,HTTPS,FTP 等多种协议,是现在Unix 系统上使用、最多功能也最完整的一套软体。Squid Squid 是一个开源的软件,利用它的反向代理技术可以提高网站系统的访问速度,下面将重点介绍Squid 反向代理的实现原理和在提高网站性能方面的应用。Squid 反向代理服务器位于本地WEB 服务器和Internet 之间,组织架构如下图:该请求的资源,则将该请求的资源直接返回给客户端,否则反向代理服务器将向后台的WEB 服务器请求资源,然后将请求的应答返回给客户端,同时也将该应答缓存在本地,供下一个请求者使用。Squid 反向代理一般只缓存可缓冲的数据(比如html 网页和图片等),而一些CGI 脚本程序或者ASP、JSP 之类的动态程序默认不缓存。它根据从WEB 服务器返回的HTTP 头标记来缓冲静态页面,有四个最重要HTTP 头标记:?Last-Modified:告诉反向代理页面什么时间被修改?Expires:告诉反向代理页面什么时间应该从缓冲区中删除?Cache-Control:告诉反向代理页面是否应该被缓冲?Pragma:用来包含实现特定的指令,最常用的是Pragma:no-cache 注:DNS 的轮询机制将某一个域名解析为多个 IP地址。Nginx Nginx(“engine x”)是俄罗斯人 Igor Sysoev(塞索耶夫)编写的一款高性能的HTTP 和反向代理服务器。Nginx 已经在俄罗斯最大的门户网站Rambler Media()上运行了 4年时间,同时俄罗斯超过 20%的虚拟主机平台采用Nginx 作为反向代理服务器。在国内,已经有新浪博客、新浪播客、搜狐通行证、网易新闻、网易博客、金山逍遥网、金山爱词霸、校内网、YUPOO 相册、豆瓣、迅雷看看等多家网站、频道使用Nginx 服务网站架构的设计方案15/2015/20 器。Nginx 特点如下:1)工作在 OSI 模型的第 7层(应用层)2)高并发连接官方测试能够支撑5 万并发连接,在实际生产环境中跑到23 万并发连接数。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)稳定性高用于反向代理,宕机的概率微乎其微。网站架构的设计方案16/2016/20 Nginx+squid 页面缓存来实现反向代理负载均衡3)Apache 做为 HttpServer,通过 mod_jk 连接器连接多个tomcat 应用实例,并进行负载均衡。4)同时还要配置 session 复制,也就是说其中任何一个tomcat 的添加的 session,是要同步复制到其它tomcat,集群内的 tomcat 都有相同的 session,并为系统(包括Apache 和 tomcat)设定Session 超时时间。缓存系统架构方面的缓存Squid 缓存架构方面使用 Squid 进行缓存。注:SQUID 使用了 LM算法,LM就是页面 Header 里时间(Date)和Last-Modified 时间的差。Date 一般是 Squid 从后面取页面的时间,Last-Modified 一般是页面生成时间。Nginx反向代理负我均街动静分离乡统祭构闺 外llht:町,rl2 I i Ne.ox conf配量;;岳阳ft动静份事会如捕:fHPi求垂j:”tr”chdlllllfl i I 咱li n SI I I 21110。”rv:.,阳叩;1且戴均ill!.J.:、,.、.蝇锋”都组NGI例!内二障p:恨国I 2 1 N cfnx Olli量i!鹦萄.吨翻精),;:trvtr I”rtr.J叫.,be co,.:”唱一一;:)i,IJ 1112 16*.J哩,。”L-,._ _ _ J.fflPt阴唱函hup;,胃,也c.c恤负戴绚a,翩翩存的必iiJsciuidl赋第llll)市&ti”自务部叫呻di,.J;d2 suid hnlr设量:192.168.I.2 rww bc.,c幅_J I$明id来命中,语写阳戴绚a!IIcocht4肉帘a存鼠备雷(.Ill)!:.;.,丧事)-戴着草搅!ll!Si山d!J身的“cht.J)t材也l幢房白.wn.网站架构的设计方案17/2017/20 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;expires 70;这个配置会将指明到memcached的 abc 这个 key 去取数据。Nginx 目前没有写入memcached的任何机制,所以要往memcached里写入数据得用后台的动态语言完成,可以利用404 定向到后端去写入数据。OSCache OSCache 由OpenSymphony设计,它是一种开创性的JSP 定制标记应用,提供了在现有JSP 页面之内实现快速内存缓冲的功能,OSCache 是个一个广泛采用的高性能的J2EE 缓存框架,OSCache 能用于任何 Java 应用程序的普通的缓存解决方案。OSCache 有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或 HTTP 请求,任何 java 对象都可以缓存。拥有全面的 API-OSCache API给你全面的程序来控制所有的OSCache 特性。永久缓存-缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。支持集群-集群缓存数据能被单个的进行参数配置,不需要修改代码。缓存记录的过期-你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。OSCache 是当前运用最广的缓存方案,JBoss,Hibernate,Spring等都对其有支持。网站架构的设计方案18/2018/20 OSCache 的特点:1)缓存任何对象:你可以不受限制的缓存部分jsp 页面或 HTTP 请求,任何 java 对象都可以缓存。2)拥有全面的 API:OSCache API 允许你通过编程的方式来控制所有的OSCache 特性。3)永久缓存:缓存能被配置写入硬盘,因此允许在应用服务器的多次生命周期间缓存创建开销昂贵的数据。4)支持集群:集群缓存数据能被单个的进行参数配置,不需要修改代码。5)缓存过期:你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不能满足需要时)。Memcached memcached 是高性能的分布式内存缓存服务器。一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web 应用的速度、提高可扩展性。Memcached 是以 Key/Value 的形式单个对象缓存。自主开发的内存数据缓存服务独立进程方式的缓存服务对于一些常用的动态数据通过开发程序服务缓存在内存中,提供给其他子系统调用,如下面的数据就可以通过这样方式进行缓存。1)用户基本信息及状态的信息缓冲2)列表缓存,就像论坛里帖子的列表3)记录条数的缓存,比如一个论坛板块里有多少个帖子,这样才方便实现分页。4)复杂一点的 group,sum,count 查询,比如积分的分类排名信息发布系统(CMS)可以实现最简单的信息录入自动生成静态页面,对于一个大型网站来说,拥有一套高效、可管理的CMS 是必不可少的。同时,HTML 静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用HTML 静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。在进行 html静态化的时候还可以使用一种折中的方法,就是前端继续使用动态实现,在一定的策略下通过后台模块进行定时把动态网页生成静态页面,并定时判断调用,这网站架构的设计方案19/2019/20 个能实现很多灵活性的操作。为了提高静态HTML 的访问效率,主要可以对以下几个方面进行优化:网络带宽、磁盘 I/O以及 cache(高速缓冲存储器)。数据库配置及优化数据库集群对生产数据库采用RAC 实现数据库的集群。数据库及表的散列把生产数据库和查询数据库进行分离,针对系统业务数据的特点,把大的表进行拆分,对于访问较多的表采用分区表。使用读/写数据库分离,随着系统变得越来越庞大,特别是当它们拥有很差的 SQL 时,一台数据库服务器通常不足以处理负载。但是多个数据库意味着重复,除非你对数据进行了分离。更一般地,这意味着建立主/从副本系统,其中程序会对主库编写所有的Update、Insert和Delete 变更语句,而所有Select 的数据都读取自从数据库(或者多个从数据库)。尽管概念上很简单,但是想要合理、精确地实现并不容易,这可能需要大量的代码工作。因此,即便在开始时使用同一台数据库服务器,也要尽早计划在PHP 中使用分离的DB连接来进行读写操作。如果正确地完成该项工作,那么系统就可以扩展到2台、3台甚至 12台服务器,并具备高可用性和稳定性。拥有良好的DB 配置和备份很多公司都没有良好的备份机制,也不知道如何恰当地完成这项工作。只有imp 是不够的,还需要进行热备份,从而得到超快的速度和超高的可靠性。另外,在将所有备份文件从服务器上转移出来之前要进行压缩和加密。另外还要确保拥有设计合理的、有用的关于安全、性能和稳定性问题的设定,包括防止数据败坏,其中很多设定都是非常重要的。网站架构的设计方案20/2020/20 硬件扩容策略当网站发展到一定阶段,随着用户量不断扩大,现有的网络资源和服务器资源不能满足用户需要的时候,就需要对平台进行服务器和网络的扩容。以下是两种平台扩容的方式:增加服务器对于 web 的并发处理有瓶颈时,新增的web 服务器,把新增的web 服务器填加到 Web 服务器集群中,以增加WEB 的并发处理能力。对于数据库有处理压力时,可以增加数据库服务器,增加数据库服务器加入数据库的集群中。增加存储对于存储容量不能满足业务需要时,可以考虑在磁盘柜中新增加硬盘,甚至考虑新增磁盘柜。升级服务器可以升级服务器的内存、硬盘,甚至考虑用新的性能更高的服务器来替换。网络扩容1)申请更大的网络带宽2)引入 CDN 3)升级内网交换机。