有关缓存 Cache 的随想
作者:grace 来源:gracecode.com 发布时间:2008-06-09 14:25:00
听说 FaceBook 开放其网站的代码了,期前也算是了解过 FaceBook 的架构,所以重点就是看其代码的质量。
可以毫不夸张的说,FaceBook 的代码质量、风格都不亚于某个开放源代码的项目(当然,并不是每个开源的项目代码都很友好)。我可以用“教科书式”的代码,来形容我眼前所看到的 FaceBook 的源代码。
有点离题了,开发语言(或者工具)的本身,并不能说明系统会有多么的优秀。目前的网络上所能找到的、开源的工具,只要稍加都能很好的提升性能。
锦上添花的就是加上良好的 Cache(缓存)机制。在“上古时代”,人们对于性能上的考虑,还处在程序也算法的优化上。随着 Web2.0 的到来(什么是 Web2.0?)、Ajax 这样的技术的出现,造成服务器处理的请求比平时多得多,此时就需要从宏观上改进整个系统的机制。
很快就出现了大量的相应工具,首先是 Squid、然后是 Memcached,最后是具体到某个语言(比如 PHP)的扩展。正如期前所说的,Ajax 等前端技术的流行,Cache 技术逐渐从“后台”的点心,转成了“正餐”。
重新回到上述的 FaceBook 中,从上往下看(似乎这图不是完整的逻辑,搞不清楚为什么 Database 会在这个位置),所涉及到的 Cache 技术就有 APC、Memcached、CDN 以及 浏览器的缓存。基于这点就能够充分的表明,FaceBook 能够应对如此高的负载的因素之一就是合理的使用 Cache 机制。
Cache 的确是个好东西,但是有时候也带来了不少的麻烦。比如在前端开发过程中,往往就会碰到用户反应样式、脚本无法执行的情况,此时本人就会很机械的告诉他 Ctrl + F5 刷新。
坦白的说,本人认为使用 Cache 在项目中,不应该过分的乐观。Cache 所带来的用户重复刷新(虽然在良好的 Cache 机制下这种情况很少),空间上的逐渐增大(真的是用空间换取时间,想想 FaceBook TB 级别的 Cache 容量吧),这是使用 Cache 所带来的负面效果(但这往往有些技术人员会将此拿来当作炫耀的资本)。
不要将 Cache 作为提升性能的救命稻草。前段时间 Twitter 间歇性的罢工,虽然找到瓶颈是数据库。但本人同时也听到某些观点,诸如“如果 Twitter 有良好的 Cache 机制也许就不会这样”,在这里本人保留意见。
请容我胆大的猜想,也许 Cache 会和 Ajax 一样,最终有一天会消失。技术这玩意也就是这样,没有更好的只有最合适的。退一步讲真的到了那一天,Cache 的替代方案也会造成另外的问题也说不准 -- 以后的事情谁知道呢?
想起了一句话,就是
“计算机原先是为了解决麻烦才搞出来的,但是后来它本身就成了麻烦”。


猜你喜欢
- 游标(Cursor)是处理数据的一种方法,为了查看或者处理结果集中的数据,游标提供了在结果集中一次以行或者多行前进或向后浏览数据的能力。我们
- 功能描述抽奖系统包含如下特点:1、可给不同抽奖者设置不同的权重2、先从价值高的奖品开始抽3、已经中奖的人,不再参与后续的抽奖代码第一个数字表
- 目录前言1.使用全局统一覆盖2.在.vue文件中修改3.修改组件的style样式4. 参考element-ui官方文档的api疑问总结前言修
- 前言最近在搞 Python 课程设计,想要搞一个好看的 UI,惊艳全班所有人。但打开 Qt Creator,Win7 风格的复古的按钮是在让
- 前言:今天我教大家如何利用Python自动化操作Excel,包括:介绍操作Excel的工具包、安装方法及操作Excel具体方法。对于每天有大
- 通常能听到的答案是使用了NULL值的列将会使索引失效,但是如果实际测试过一下,你就知道IS NULL会使用索引.所以上述说法有漏洞.着急的人
- python是支持多线程的,主要是通过thread和threading这两个模块来实现的。thread模块是比较底层的模块,th
- 示例1:pycallclass.cpp:#include <iostream>using namespace std;typed
- 最近学习Python,于是就用Python写了一个抓取Discuz!用户名的脚本,代码很少但是很搓。思路很简单,就是正则匹配title然后提
- 方案:◆1、SELECT TOP PAGESIZE NEWSTITLEFORM NEWSINFO WHERE NEWSID NOT IN(S
- 一、前言python的两个单元测试包分别是 doctest 和 unittest,这两个包的使用起来各有长处,适用于不同的场景doctest
- 业务场景:前后端分离需要对接数据接口。接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比
- Terminal终端命令行Shell设置解决方案File --> Settings --> Tools --> Termi
- 本文实例讲述了Python实现的读取电脑硬件信息功能。分享给大家供大家参考,具体如下:上学那会,老师让我用java获取电脑硬件信息,CPU,
- 遍历字典: keys() 、values() 、items()1. xxx.keys() : 返回字典的所有的key 返回一个序列,序列中保
- <!doctype html><html><head><meta charset="ut
- 1.order by rand()数据多了极慢,随机性非常好,适合非常小数据量的情况。SELECT * FROM table_name AS
- 一 开发环境集成开发工具:jupyter notebook 6.2.5集成开发环境:python 3.10.6第三方库:nump
- 一、什么是索引 减少磁盘I/O和逻辑读次数的最佳方法之一就是使用【索引】 索引允许SQL Server在表中查找数据而不需要扫描整个表。 1
- 现在大多数Centos6.x版本的系统python都是2.x,现因开发需求需要安装前端代码的构建工具glue,故必须要做python版本的升