驳:《缓存黄金原则:让数据更靠近CPU》

园友 PHP淮北 的文章中有一段:

原文引用缓存黄金原则:让数据更靠近 CPU。

CPU-->CPU 一级缓存-->二级缓存-->内存-->硬盘-->LAN-->WAN


在经本人质疑后得知该话的原文作者是支付宝架构师冯大辉,虽然这个头衔咋一听上去确实很吓人,不过做技术的真谛就在于追求真知,提高自己,不畏权贵。

我反对此言论的理由有三:


1、某条原则,被冠以“黄金”二字可见其通用性和认可度应该是相当高的,或者被证明能提供高效生产力,否则就是自己往脸上贴黄金了。


 我们从一些书中确实能经常遇到“黄金法则”,这些法则早已被认可,并被证明是高效的,例如,编程中的:OCP(开闭原则)软件实体应当对修改关闭,对扩展开放;ISP(接口隔离原则)尽量应用专门的接口,而不是单一的总接口,接口应该面向用户,将依赖建立在最小的接口上。生活中的:在野外沿着河流走,能大大提高获救的机会;别尝试和你现在的老板做朋友……太多了,我不一一例举,大家发现它们的字里行间蕴含真理,是技术或生活的良好总结,可以为我所用。
 而我要批驳的这一条“黄金法则”,则让我们既看不到精华所在,也充满歧义,既没有被认可,也没办法证明是高效的。


2、从计算机硬件层面来看,CPU=》FSB=》北桥芯片(连接DIMM,AGP,PCI-E等)=》南桥芯片(连接PCI,IDE,SATA,Lan等),离CPU越"远",确实会更耗时间,我们所做的应用程序,只有可能存在于内存或硬盘中,当然我不排除某些神人为了让数据更靠近CPU而经常纠结于把缓存放在CPU的一级缓存呢还是二级缓存,恕我愚钝,我只知道内存和CPU的缓存都是非常有限和宝贵的,把大量数据缓存放在这里真的会变成“黄金”吗?

 

冯·诺依曼计算机指出,计算机有五部分组成,运算器,控制器,存储器,输入设备,输出设备。
现在数据缓存应该放到哪里?存储器!
存储器又分为
内部存储器,叫做内存
外部存储器,叫做外存,一般由硬盘等外部存储介质组成。
除了外存和内存,还能放哪里。

我们来复习一下数据大小标准

MegByte
GitByte
TeraByte
PetaByte
ExaByte
ZettaByte
YottaByte

它们之间的进制是1024,随着数据量越来越大,这个教条主义也越来越显得不靠谱.

现在你的上司告诉你“小李啊,把这半天产生的10PB数据给缓存一下吧。”,你会因为这个“黄金教条”急忙做哪件事?匆匆忙忙找CPU?我看应该是找内存或硬盘吧。

具体WEB数据缓存应用中,决定了我们不可能以此作为指导思想。


 另外,原文中有提到Lan和WAN,原来LAN也可以放缓存,有人跟我提了分布式缓存,可以这样理解,LAN是局域网上的存储设备,WAN是广域网上的存储设备?
为什么它们排在硬盘的后面。所以我只能理解为网卡或网线了。
,也就是说依据此推论你可(我真不知道原来这里也能存放缓存,看来我真的弱智到家了)。以把缓存放到网卡或网线里,或者交换机、路由器、光纤里也说不定,交换机和路由器确实有缓存,但那只是用于设备寻址需要而做的自己的缓存,跟我们所要讨论的缓存技术不沾边。

 

3、谁需要数据?是用户,有效的缓存会让用户更快地取到他们所需要的数据,我认为缓存确实为了让数据更靠近某物,但绝不是CPU,而应该是用户。(需求导向原则,卖房子的经常用它)


 如果把原话改成,“让数据更容易被CPU读取”,或许我还可以送作者一朵鲜花,但既然已经说死了,我只好随手把地上的东西除了黄金以外都砸向作者了。希望原文作者您能笑纳。

另外我总结了一些建议,也请所有人一并笑纳:

1、即便是大牛也不要随便就写什么“黄金法则”,你可以是建议性质的,而不是那么肯定的,仿佛违背者就要受到教会处决一样。

2、真正的大师绝不会说“我说的话就是黄金”。

3、我们在转载的时候,需要加以甄别,这个世上太多“砖家”。

4、技术大牛也不要危言耸听,诸如“Linq已死”,“微软要完了”之类的纯属无稽之谈

5、真金不怕火炼,希望原文作者出来把我驳倒。

 

其实这篇文章根本不应该由我来写,只是它居于博客园首页时间太久,又有误导别人之嫌,我实在忍不住了才写下此篇。希望能引起重视,或者有其他的意见能引发出来也未尝不是一件好事,毕竟,我们不惧怕所谓拿着黄金往自己脸上抹的“大牛”。

 

 

posted @ 2011-10-26 17:31  活跃的毛虫  阅读(5230)  评论(114编辑  收藏  举报