作为程序员,我每隔几年就会做出革命性的发现。在阶段中,我要么领先于曲线,要么落后于曲线π。我学到的一个艰难的经验是,向外扩展并不总是更好,通常,当我们重新组合和扩展时,最大的性能提升就是。

您有什么理由要向外扩展还是向上扩展?价格,性能,愿景,预期用途?如果是这样,这对您有何作用?

我们曾经扩展到数百个节点,这些节点将序列化必要的数据并将其缓存到每个节点,并在记录上运行数学处理。需要对数十亿条记录进行(交叉)分析。进行横向扩展是完美的业务和技术案例。我们一直在优化,直到我们在26小时的壁钟中处理了大约24小时的数据。简而言之,我们租用了一个巨大的(当时)IBM pSeries,将Oracle Enterprise放在上面,索引了我们的数据,并最终在大约6个小时内处理了24小时相同的数据。对我来说是革命。

如此多的企业系统是OLTP,数据却没有分片,但是许多人希望集群化或向外扩展。这是对新技术或感知性能的反应吗?

当今的一般应用程序或我们的编程材料是否更适合横向扩展?我们将来是否应该考虑这一趋势?

最佳答案

毫不奇怪,这完全取决于您的问题。如果您可以轻松地将其划分为没有太多沟通的子问题,那么向外扩展可以带来微不足道的加速。例如,在1B网页中搜索单词可以通过一台机器搜索1B页来完成,也可以通过1M机器分别进行1000页来完成,而不会显着降低效率(因此,速度提高了1,000,000x)。这称为“令人尴尬的平行”。

但是,其他算法确实需要在子部分之间进行更深入的交流。您的需要交叉分析的示例是一个很好的示例,该示例表明交流经常会淹没添加更多盒子的性能。在这些情况下,您需要将通信保持在一个(更大的)盒子内,通过高速互连,而不是像(10-)Gig-E那样“常见”的东西。

当然,这是一个理论上的观点。其他因素,例如I / O,可靠性,易于编程(一台大型共享内存计算机通常比群集所带来的麻烦要少得多)也可以产生很大的影响。

最后,由于使用廉价的商品硬件进行扩展的(通常是极端的)成本优势,集群/网格方法最近吸引了更多的(算法)研究。这使得已经开发出了新的并行化方式,可以最大程度地减少通信,从而在集群上做得更好-而常识则表明,这些类型的算法只能在大型钢铁机器上有效运行...

09-04 22:18