WEB脚本和静态资源的分离。一开始,应用程序脚本和静态资源存储在一起。当并发达到一定程度时,静态资源需要存储在一个特殊的服务器上。静态资源主要包括图片、视频、js、css和一些资源文件等。这些文件很容易分离,因为它们没有状态,所以可以直接存储在响应服务器上,通常使用特殊的域名进行访问。通过不同的域名,浏览器可以直接访问资源服务器,而无需访问应用服务器。
2.页面缓存。页面缓存就是缓存应用生成的页面,这样就不需要每次都生成页面,节省了大量的CPU资源。如果将缓存的页面放入内存,速度会更快。如果使用Nginx服务器,可以使用自己的缓存功能,当然也可以使用专门的Squid服务器。页面缓存的默认失效机制是根据缓存时间来处理的,但是修改数据后可以手动使对应的缓存失效。页面缓存主要用于数据很少变化的页面,但在很多页面中,大部分数据很少变化,少数数据变化非常频繁。例如,显示文章的页面通常可以是静态的。但如果文章后面有“top”和“step”功能,显示的回复数量多,数据变化频繁,会影响静态。这个问题可以通过创建一个静态页面,然后使用Ajax读取和修改响应数据来解决,这样可以一举两得,还可以使用页面缓存,实时显示一些变化频率较高的数据。
事实上,众所周知,效率最高、成本最低的是纯静态html页面,所以我们尽最大努力让我们网站上的页面使用静态页面。这个最简单的方法其实是最有效的。但是对于内容量大、更新频繁的网站,我们无法逐个手动实现,于是就出现了我们通用的信息发布系统CMS。对于一个大型网站来说,新闻渠道甚至其他渠道都是通过信息发布系统来管理和实现的。信息发布系统可以实现最简单的信息录入和自动生成静态页面,还可以具有渠道管理、权限管理和自动抓取功能。对于一个大型网站来说,它有一套高效率。除了门户网站和信息发布网站之外,对于交互要求高的基于社区的网站,尽可能的静态化也是提升性能的必要手段。实时统计社区中的帖子和文章,有更新时重新统计,也是广泛使用的策略,比如Mop的大杂烩,网易社区等。同时,html统计化也是一些缓存策略使用的手段。对于经常使用数据库查询但系统中内容更新很少的应用,可以考虑使用html统计化,比如论坛中论坛的公共设置信息,目前主流论坛可以后台管理,数据库存储。其实这些信息有很大一部分是前台程序调用的,只是更新频率很小。因此,可以考虑在后台静态更新这些内容,从而避免大量的数据库访问请求。
3.集群和分布。
集群是指每个服务器都有相同的功能,在处理请求时可以调用哪个服务器,主要起到分流的作用。分布式就是把不同的服务放在不同的服务器上,可能需要多个服务器来处理一个请求,可以提高一个请求的处理速度,集群和分布式也可以同时使用。集群有两种方式:一种是在静态资源集群中。另一个是应用集群。静态资源聚类相对简单。会话同步是应用集群处理的核心问题。会话同步有两种处理方法:一种是在会话改变后自动同步到其他服务器,另一种是使用程序统一管理会话。群集中的所有服务器都使用同一个会话。Tomcat默认是第一种方式,简单配置即可实现。第二种方式是使用一个特殊的服务器安装Mencached等高效的缓存程序统一管理Session,然后重写Request并覆盖应用程序中的getSession方法,获得服务器中的会话。集群的另一个核心问题是负载平衡,即接收请求并将其分配给该服务器进行处理。这个问题可以通过软件处理或者特殊硬件(比如F5)来解决。