首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用程序中设计可伸缩性

在应用程序中设计可伸缩性
EN

Stack Overflow用户
提问于 2009-07-02 12:38:49
回答 5查看 886关注 0票数 5

这是什么意思-将可伸缩性工程到应用程序中。有没有可以让应用程序更具伸缩性的设计模式?这个问题主要是在web应用程序或基于SOA中间件的应用程序的上下文中提出的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-02 13:09:56

当我想到“大规模应用程序”时,我想到了三个非常不同的东西:

将在大型横向扩展群集(远远大于1024 cores).

  • Applications )上运行的
  1. 应用程序将处理比具有非常大的代码源代码库的物理memory.
  2. Applications大得多的数据集。

每一种“可伸缩性”都引入了一种不同的复杂性,并且需要一组不同的折衷方案。

横向扩展应用程序通常依赖于使用MPI来协调各种流程的库。一些应用程序是“令人尴尬的并行”,为了完成任务(例如,渲染动画电影的不同帧),不同进程之间只需要很少(甚至不需要)通信。这种类型的应用程序往往受到基于CPU时钟速率或内存带宽的性能限制。在大多数情况下,添加更多的内核几乎总是会增加应用程序的“可伸缩性”。其他应用程序需要不同进程之间的大量消息流量,以确保解决方案的进展。这种风格的应用程序将倾向于绑定到节点之间互连的整体性能。这些消息密集型应用程序可能受益于非常高的带宽、低延迟的互连(例如InfiniBand)。这种应用程序的工程可伸缩性始于最小化所有进程对共享文件或资源的使用。

第二种类型的可伸缩性是在少量服务器(包括单个SMP样式的服务器)上运行的应用程序,但它们处理非常大的数据集或非常多的事务。向系统添加物理内存通常可以提高应用程序的可伸缩性。但是,在某些情况下,物理内存将会耗尽。在大多数情况下,性能瓶颈将与系统的磁盘I/O性能相关。在这些情况下,添加高性能持久存储(例如,剥离硬盘阵列),甚至向某种类型的SAN添加高性能互连,都有助于提高应用程序的可扩展性。这种应用程序的工程可伸缩性从算法决策开始,算法决策将最大限度地减少重复接触相同数据(或设置相同的基础架构)的需要,而不是完成任务所需的重复接触(例如,打开到数据库的持久连接,而不是为每个事务打开新连接)。

最后,存在与源代码基础的整体大小相关的可伸缩性的情况。在这些情况下,良好的软件工程实践可以帮助最小化冲突,并保持代码库的整洁。Large Scale C++ Software Design这本书是我遇到的第一本书,它真正接受了为大型源代码软件开发提供最佳实践的挑战。这本书的重点是C++作为实现语言,但指导方针和实践可以应用于任何项目或语言。在这种风格的应用程序中设计可伸缩性涉及到对代码结构做出高级决策,以最小化代码库中的依赖性(例如,不要有单个.h,当更改时将强制重新构建整个代码库,尽可能使用将重用.o的构建系统)。

票数 7
EN

Stack Overflow用户

发布于 2009-07-02 12:44:33

非常广泛地说,可伸缩性意味着系统负载的增加可以通过必须编组以服务于该负载的资产的比例较小的增加来处理。

如果你的web应用的负载增加了100倍,你会怎么做?

可伸缩性的一个基本原则是识别和消除处理中的潜在瓶颈,包括限制任务的并行化。但这只是一种尝试;我相信你会得到许多其他同样有效的答案。

编辑:请注意,瓶颈不仅仅出现在实际的任务处理中。它们可以是整体流程设置、必要的硬件操作、维护任务、重新设计/重构等等。

票数 1
EN

Stack Overflow用户

发布于 2009-07-02 13:38:34

这里有一些关于web应用程序可伸缩性的很好的资源,可以帮助您入门: Todd Hoff的highscalability.com、Theo Schlossnagle的Scalable Internet Architectures和Cal Henderson的Building Scalable Web Sites。Highscalability.com将为您提供许多值得阅读的演示文稿和文章,包括this one from Danga关于他们如何随着LiveJournal的发展而扩展的文章。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1074114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档