除去web服务器本身的各种访问优化之外,我们可以采用很多不同的缓存方式对服务器访问速度进行优化。
动态内容缓存
1 Smarty缓存,缓存内容可以存储在磁盘文件中并设置过期时间防止缓存内容过多,hash访问可以加速缓存访问速度。
为了使缓存更加有效,吞吐提高更多需要将所有不必要的加载库过程或者数据库访问链接过程都在访问缓存的情况下取消掉。除了将缓存放在磁盘文件中之外还可以根据自己的需求将缓存放置在内存中(缓存内容比较少,缓存内容比较固定,命中率很高)或者单独的缓存服务器中(需要缓存的动态网页特别多)。
2 局部不缓存,对于一个网页中只有少量计算的一部分内容来说,对该部分不缓存,最终与其他缓存一起组成整个网页。
3 静态内容缓存(合理使用静态缓存会很大程度上提高吞吐)
动态脚本加速
opcode缓存,opcode是指解释器完成对代码的分析工作后生成的可以直接运行的中间代码,合理追踪代码瓶颈在合适的地方实现opcode缓存
浏览器缓存
浏览器缓存是访问加速一个非常重要的点,服务器可以与浏览器进行http协商(Last-Modified,Etag)来确定缓存内容的过期时间,刷新时间等。Expiress是一个更加宽泛的确定本地缓存过期的机制,在本地缓存过期时间之前,浏览器都不需要向服务器进行请求。
web服务器缓存
lighttpd提供了mod_trigger_b4_dl模块可以在响应数据输出之前将它缓存到memcached缓存服务器当中并随后在URL映射之前查找缓存。在web服务器中直接建立缓存,将http头与内容分开可以方便对头部进行分析直接建立缓存映射进行缓存访问,控制缓存的过期时间同样十分重要。
反向代理缓存
在使用反向代理服务器的情况下也可以直接将缓存放置在反向代理服务器上而不需要将缓存内容放置在web服务器上方便管理。Varnish是一个在反向代理服务器上很好的监控服务器的工具。在反向代理服务器中除去以上所说的缓存方式之外还需要考虑一个比较重要的问题是前端与后端的流量分配因为它连接了用户端和服务器端。
web组件分离
web组件分离可以更好的体现出缓存的优势,在下载任务时多组件的下载任务可以提高浏览器的并发数,与数据库表示高速的连接等。可以根据静态图片,文件,样式表,脚本,视频,动态应用程序等将web组件分开来。
分布式缓存
memcached是一个比较成熟的分布式缓存系统,可以运行于独立的缓存服务器之上,可以针对数据库分为读缓存区和写缓存区。读缓存区最典型的就是用户登陆缓存。对于分布式计算与更新来说,memcached采用了原子递增操作将递增更新应用映入了写缓存区当中。一个简单的写过程表示如下:
1.为memcached缓存中的对应数据项加1,如果该数据项不存在,就创建该数据项并赋值为1,代表该页面是第一次被访问。
2.如果memcached缓存中存在对应数据项,并且累加后的数值为1000,则将这个数据项置0并更新数据库,将数据库中对应数值项赋为1000。
memcahced也可以实现多台缓存服务器的协同工作其中最关键的点就这些缓存服务器之间的负载均衡以及通信工作。