作为一名程序员,我每隔几年就会做出革命性的发现.我要么在曲线之前,要么在此阶段后面约为π.我学到的一个难点是,缩小OUT并不总是更好,通常最大的性能提升是在我们重新组合和扩大规模时.
你有什么理由扩大规模?价格,性能,愿景,预计用量?如果是这样,这对你有什么影响?
我们曾经扩展到数百个节点,这些节点将序列化并将必要的数据缓存到每个节点,并在记录上运行数学处理.需要(交叉)分析许多,数十亿条记录.采用横向扩展是完美的业务和技术案例.我们一直在优化,直到我们在26小时挂机时处理了大约24小时的数据.简而言之,我们租用了一个巨大的(当时)IBM pSeries,将Oracle Enterprise放在其上,索引我们的数据并最终在大约6小时内处理相同的24小时数据.革命对我来说.
如此多的企业系统都是OLTP而且数据没有经过分析,但许多人的愿望是集群或横向扩展.这是对新技术或感知表现的反应吗?
今天的应用程序或我们的编程matras是否更适合横向扩展?我们/我们是否应该在将来始终考虑这一趋势?
因为扩大规模
而且在某种程度上,因为这就是谷歌所做的.
毫不奇怪,这完全取决于您的问题。如果您可以轻松地将其划分为沟通不多的子问题,那么横向扩展会带来微不足道的加速。例如,在 1B 网页中搜索单词可以由一台机器搜索 1B 页面来完成,或者由 1M 台机器每台搜索 1000 个页面来完成,而不会显着降低效率(因此加速了 1,000,000 倍)。这被称为“尴尬并行”。
然而,其他算法确实需要子部分之间进行更密集的通信。您需要交叉分析的示例是一个完美的示例,说明通信通常会淹没添加更多盒子所带来的性能增益。在这些情况下,您需要在(更大的)盒子内保持通信,通过高速互连,而不是像 (10-)Gig-E 这样“常见”的东西。
当然,这是一个相当理论化的观点。其他因素,例如 I/O、可靠性、易于编程(一台大型共享内存机器通常比集群少得多)也会产生很大的影响。
最后,由于使用廉价商品硬件进行扩展的(通常是极端的)成本效益,集群/网格方法最近吸引了更多的(算法)研究。这使得开发出新的并行化方法,最大限度地减少通信,从而在集群上做得更好——而常识表明这些类型的算法只能在大型机器上有效运行......