我们可以通过两种基本方式扩展软件:“垂直”或“水平”。
垂直缩放 解决了单个服务实例的可伸缩性。扩展大多数软件的一种简单方法就是在功能更强大的计算机上运行它。一个具有更快处理器或更多内存的处理器。我们还可以通过编写代码本身的方式寻求性能上的改进。LMAX是使用这种方法的公司的一个很好的例子。但是,垂直缩放方法有很多缺点。首先,成本很少是线性的;功能越来越强大的硬件往往成倍增加,而且构建性能优化的复杂软件的成本(和约束条件)也相当可观。实际上,过早的性能优化通常会导致过于复杂的软件,难以推理,因此更容易出现缺陷和较高的维护成本。最重要的是,垂直扩展无法解决冗余问题;垂直扩展应用程序只会将一个小的单点故障变成一个很大的单点故障。
水平缩放。 在这里,我们运行应用程序的多个实例,而不是专注于单个实例的性能。这具有线性可伸缩的优势。与其购买更大,更昂贵的盒子,不如购买更多的同一个便宜盒子。有了正确的建筑设计,这种方法就可以大规模扩展。实际上,几乎所有大型互联网规模的公司(Facebook,Google,Twitter等)都采用了这种方法。单个节点的丢失不必影响整个系统。由于这些原因,水平缩放是构建可伸缩的冗余系统的首选方法。