微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将工程可扩展性融入应用程序

这意味着什么 – 将可扩展性设计到应用程序中.是否存在可以使应用程序更具可扩展性的设计模式?这个问题主要是在Web应用程序或基于SOA中间件的应用程序的上下文中.

解决方法

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

>将在大规模扩展群集(远大于1024个核心)上运行的应用程序.
>将处理比物理内存大得多的数据集的应用程序.
>具有非常大的代码源基础的应用程序.

每种“可扩展性”都引入了不同类型的复杂性,并且需要一组不同的妥协.

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐