缓存方式的对比与选择
摘要:如果说要对web站点的动态页面、web服务、动态图片等进行优化,的方法是利用缓存;一般而言,请求动态页面,我们会把重叠利用的资源缓存数据,使得请求速度加快。
说到缓存,我们所指的是由动态内容自行实现的缓存机制,这其中包括整页缓存、局部缓存、数据缓存等,除此之外,还有代码解释器缓存、缓存服务器。
本章为大家介绍缓存方式的对比与选择
这里我们几种缓存方式对应的压力测试结果汇总一下,如表4-1所示。
如图4-1所示的对比图可以更加直观地呈现出它们的差异

图4-1 各种缓存方式压力测试结果对比图
也许你一眼看到 APC cache的性能优势,当然,这不是APC的特权,主要归咎于它使用了本地内存来存储缓存数据。但是需要提醒的是,无论是APC还是memcache,都使用内存来存储HTML缓存,所以缓存命中率是100%,而在实际情况中,一个站点包含了大量的动态页面,如果你为缓存分配的内存空间不足以容纳所有的缓存数据,便会使得缓存命中率大幅度下降,吞吐量也会随之降低。
这并不夸张,假如你的站点有数十万个动态网页需要保存HTML缓存,假设每个缓存为100K,那么10万个缓存的总大小是1G,如果你希望为每个缓存保持较长的有效期,那么需要准备好足够的内存空间,好吧,购买更多的内存,这似乎已经成为一个经济问题。但是,一旦本地内存达到上限,这似乎又变成了一个技术问题,往往到了这时候,你的站点规模已经让你不得不考虑比性能更加重要的问题,那是如何扩展缓存存储区,显然,使用memcache已经迈开了关键的一步。
速度而言,memcache不如使用本机内存的速度快,但出于多方面的考虑,结合你的站点规模,也许你会觉得值得。首先,Web服务器特别是web应用服务器,本身的内存是相当宝贵的,它要满足HTTP进程和脚本解释器的大量开销,无法拿出大量的空间来存放HTML缓存;其次,使用本机内存不具备良好的扩展性,一旦缓存数据和站点负载大幅度增加,为了保证较高的缓存命中率,必须加大缓存空间,本机内存显然成为瓶颈,而使用独立的缓存服务器可以通过增加服务器来快速扩展,构成多台服务器构成的分布式缓存系统,这在后边我们会深入探讨。
当然,对于小规模或者初创时期的Web站点,如果需要缓存的动态网页比较少,这时候使用APC内存缓存仍然不失为一个快速有效的方案,即便是规模膨胀后,快速重构缓存机制,并且迁移缓存数据,也不是一件多么复杂的事情,只要做好充分的准备可以了。