所以下一个添到这张图上的复杂工具是什么呢?也许真正的方法是能简化事情的。 例如内存:在数据库机器上有很多内存,用做缓冲和计算;Memcached机器上也有很多内存。这些系统中的内存总和至少跟你的工作数据集一样大。如果不是,你就赚到了(under-bought,低阶买到好货)。而且,我非常怀疑你的缓存层是否100%高效。我打赌你有大量数据在被替换掉之前没有被读取过,我还打赌你从来没跟踪过。这不意味着你是个坏孩子,而意味着缓存比起其所值,更是个麻烦。 这些组件共有的很多特性看起来,是可以相互组合,并且互补的。只要它们被安排得合理。 一旦你采用下面的公理:系统应该是分布式的,而数据应该是数字化的(solid-state是纯电气的,而不是mechanical机械式的),有意思的事情出现了:模型更简单了。在查询触发时才会用到的临时内存数据结构是仅有的结构。随机访问不再是大罪,而是商业的正常过程。你不必担心分页,或者再均衡(rebalancing),或者数据的位置。
这是个优美、简单的架构。就像负载均衡器抽象了应用程序服务器,SQL聚合器(aggregators)抽象了读写的组织细节。把数据存放策略的核心放在稳定的API之下,可以在少量中断的情况下允许两边变化。 现在,一切都好了,我们最终到达了历史最后的美好之地,对吧?
不管你在何时,对计算艺术状态的自满都是错误的。总会有其他瓶颈。
这是AMD的Barcelona芯片,相当现代化的设计。它有4个核,但是大部分表面都被缓存和核心(core)周围的I/O区域占据,就像WalMart周围的大型停车场一样。奔腾时代,缓存区域只占晶圆(die)的15%。第三次计算领域的革命在于,CPU相对于内存快了多少。因此晶圆上大片昂贵的区域都为缓存保留着。 过去,数据库性能的主要关注点在内存和硬盘的延迟,现在我们打趣CPU和内存的延迟不是同样的问题,但是它确实是。
而且我们装作共享内存是存在的,但却不是。有那么多核心和内存,总会有些核心离部分内存很近。
|