您现在的位置是:网站首页>技术百科技术百科
可扩展架构
小大寒2024-01-01[技术百科]博学多闻
可扩展架构本文介绍了可扩展架构的基本概念及其在系统设计中的应用。讨论了如何通过垂直和水平扩展来应对增加的工作负载,并指出了扩展过程中的线性可扩展性问题。文章还探讨了任务并行化、负载平衡、多任务处理及多线程的概念,强调了为实现系统的高效扩展,任务必须能够独立并并行执行。此外,还提到了一些特殊硬件的利用以及并行化任务的要求。 《本文来源》
可扩展架构
可扩展架构是一种能够随着工作负载增加而扩展的架构。换句话说,如果工作负载超出了现有软件和硬件的容量,您可以通过扩展系统(包括软件和硬件)来应对更大的工作负载。
可扩展性因素
当您扩展系统的硬件容量时,理想情况下,系统能够处理的工作负载也应当以相同的比例扩展。如果硬件容量增加一倍,系统应当能够处理两倍的工作负载。这种理想的情况被称为“线性可扩展性”。
然而,线性可扩展性往往难以实现。扩展硬件通常会带来一些额外的开销,这意味着硬件容量增加一倍时,系统所能处理的工作负载往往不足两倍。
在扩展硬件时,系统可以处理的额外工作负载就构成了系统的可扩展性因素。可扩展性因素可能因扩展的系统部分而异。
垂直和水平可扩展性
扩展系统的方式主要有两种:垂直扩展和水平扩展。
垂直扩展
垂直扩展是指通过将软件部署到硬件更强大的计算机上来扩展系统。新的计算机通常具有比现有计算机更强大的 CPU、更多内存、更快的硬盘等硬件资源。

水平扩展
水平扩展则是通过增加更多部署了软件的计算机来扩展系统。新增的计算机一般具有与当前计算机相同的硬件容量,或者与现有硬件在购买时的性能相当(随着时间的推移,计算机性能会不断提升)。

架构可扩展性要求
从开发者的角度来看,垂直扩展是扩展软件最简单的方法。您只需将软件部署到更强大的机器上,性能便能得到提升。然而,一旦您满足了标准硬件要求,继续购买更强大的 CPU、更大更快的内存模块和硬盘等,额外的性能提升将不成比例地增加成本。更重要的是,如果您的软件没有优化以利用更多的 CPU,那么即使添加更多 CPU,性能也不会得到显著提升。
相较之下,水平扩展的实现较为复杂。为了使您的软件能够充分利用多台计算机,软件需要具备并行执行任务的能力。软件并行任务执行的能力越强,其水平扩展的潜力就越大。
任务并行化
任务的并行化可以在多个层面上实现:
- 将独立的任务分配到不同的计算机上。
- 将独立的任务分配到同一计算机上的不同 CPU 上。
- 将独立的任务分配到同一 CPU 上的多个线程中。
此外,您还可以利用计算机上的特殊硬件,例如具有多个 CPU 核心的显卡,或者 InfiniBand 网络接口卡等。

负载平衡
将任务分配到多个计算机上通常称为“负载平衡”。负载平衡将在未来的文章中更详细探讨。
多任务处理与多线程
在同一台计算机上执行多个不同的应用程序(可能使用同一个 CPU 或不同的 CPU)称为“多任务处理”。多任务处理通常由操作系统来管理,因此软件开发者不需要过多干预。开发者需要关注的则是如何将应用程序分解为更小、更独立但又能协作的进程,这些进程可以被分配到不同的 CPU 或计算机上。
将同一应用程序内的任务分配到不同的线程上称为“多线程”。我有一篇关于 Java 多线程的单独教程,因此这里不再深入探讨该话题。
完全并行化
为了实现完全的并行化,任务必须独立于其他并行执行的任务。这意味着每个并行任务不应依赖于其他任务的数据或状态。

为了能够完全分发任务到任意计算机上,任务必须能够访问执行所需的数据。具体而言,这取决于您开发的应用程序类型,因此在这里无法详细展开。
阅读完毕,很棒哦!