将可扩展性设计到应用程序中

2024-03-04

这句话是什么意思 - 将可扩展性设计到应用程序中。是否存在可以使应用程序更具可扩展性的设计模式?这个问题主要针对 Web 应用程序或基于 SOA 中间件的应用程序。


当我想到“大规模应用程序”时,我想到了三个截然不同的事情:

  1. 将在大型横向扩展集群(远大于 1024 个核心)上运行的应用程序。

  2. 将处理比物理内存大得多的数据集的应用程序。

  3. 具有非常大的代码源库的应用程序。

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

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

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

最后,还有与源代码库的总体大小相关的可扩展性的情况。在这些情况下,良好的软件工程实践可以帮助最大限度地减少冲突,并保持代码库干净。这本书大规模C++软件设计 https://rads.stackoverflow.com/amzn/click/com/0201633620是我遇到的第一个真正接受为大型源代码软件开发提供最佳实践的挑战的人。本书重点关注 C++ 作为实现语言,但指南和实践可以应用于任何项目或语言。这种类型的应用程序的工程可扩展性涉及对代码结构做出高层决策,以最大限度地减少代码库内的依赖关系(例如,不要有单个 .h,当更改时将强制重建整个代码库,请使用构建系统将尽可能重用 .o)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将可扩展性设计到应用程序中 的相关文章

  • Relational DB vs. Key-Value store

    在我还在上学的时候 key value这个词更多的还是和hash表联系在一起的 而现在 当我看见key value这个词 马上联想到的就是 BigTable SimpleDB和云计算 当下 key value store 或者叫key va
  • Firebase 可扩展性限制

    This post表示当单个节点开始拥有 1 10 百万个子节点时 FireBase 将遇到问题 如果应用程序中的用户超过 1000 万 应该如何处理 在所有示例中 我认为用户只是单个节点 用户 的子节点 Firebase 不适合处理长列表
  • 如何扩展 Quartz 调度程序?

    我计划使用石英调度器因为我读到了很多关于它的好意见 我的问题如下 在任何给定时间 系统中都会有数千个触发器 大多数触发器只会触发一个事件并消失 此外 我很可能在分配后不得不取消许多工作 基于新的输入 Quartz 可以扩展到这个程度吗 推荐
  • 如何让 RabbitMQ 具有可扩展性?

    我尝试测试RabbitMQ 但发现rabbitmq存在一些问题 如果我创建了一个包含 3 个节点的集群 我无法发布 交付超过 6000 s 另一方面 如果我使用一个节点 我可以发布 交付直到 25000 s 这意味着 添加的节点越多 性能就
  • 自动完成的算法?

    我指的是当用户在 Google 中输入搜索词时用于提供查询建议的算法 我主要感兴趣的是 1 最重要的结果 最有可能的查询而不是任何匹配的结果 2 匹配子串 3 模糊匹配 我知道你可以使用 Trie 或广义 trie 来查找匹配项 但它不能满
  • 设计模式或代码味道,功能分解导致的非规范化数据

    我是以下的忠实粉丝http highscalability com http highscalability com 并且一直在我当前的开发中沿着功能边界分解我的应用程序 作为能够扩展服务器端 特别是数据库层 的途径 这涉及到将应用程序的不
  • 并行代码可扩展性差

    最近我一直在分析我的并行计算在 16 核处理器上实际上是如何加速的 我得出的一般公式 线程越多 每个核心的速度就越慢 让我很尴尬 以下是我的CPU负载和处理速度的图表 因此 您可以看到处理器负载增加 但速度增加得慢得多 我想知道为什么会发生
  • Microsoft Sync Framework - 性能和可扩展性

    我正在尝试在 SQL Server 数据库上使用 Microsoft Sync Framework 2 1 将有大量并发最终用户与中央数据库服务器同步 进一步的规格是 1500 concurrent clients connect to 1
  • 为什么我的 scala future 效率不高?

    我在 32 位四核 Core2 系统上运行此 scala 代码 def job i Int s Int Long val r i to 500000000 by s map toLong foldLeft 0L println Job i
  • 为什么 Azure 资源组与特定区域关联?

    我是 Azure 架构的新手 我试图理解为什么 Azure 资源组 在 Azure 上构建的应用程序的逻辑部署存储桶 在定义时与区域相关联 起初我以为它是为了灾难恢复或地理冗余提供全球分布 但后来我意识到单个资源组可以包含不同区域的Web应
  • 检测数据何时发生变化

    好吧 故事是这样的 我有很多特定格式的文件 相当大 大约 25GB 需要导入到数据存储中 这些文件不断更新数据 有时是新的 有时是相同的数据 我正在尝试找出一种算法来检测文件中特定行是否发生更改 以便最大限度地减少更新数据库所花费的时间 目
  • 针对具有大量聚合的大型集群的 ElasticSearch 设置

    背景和当前状态 我们正在将集群从 Cassandra 迁移到完整的 ElasticSearch 集群 我们平均索引文档为每秒约 250 300 个文档 在 ElasticSearch 1 2 0 中 它代表每天约 8Go generic i
  • 将可扩展性设计到应用程序中

    这句话是什么意思 将可扩展性设计到应用程序中 是否存在可以使应用程序更具可扩展性的设计模式 这个问题主要针对 Web 应用程序或基于 SOA 中间件的应用程序 当我想到 大规模应用程序 时 我想到了三个截然不同的事情 将在大型横向扩展集群
  • CouchDB 每用户 db 具有共享数据可扩展性

    I have an application with the following architecture 主 couchdb 需要在用户之间共享数据 EG 如果 user 1 将数据写入云 则会复制到主服务器并返回到 user 2 和 u
  • 真正的缩放是什么?

    我听说人们说他们已经制作了一个可扩展的 Web 应用程序 真正的缩放是什么 开发人员可以采取哪些措施来使其应用程序具有可扩展性 开发人员在扩展过程中会考虑哪些因素 有关使用 ASP NET 和 SQL Server 扩展 Web 应用程序的
  • 哪个更快:多行还是多列?

    在 MySQL 中 返回 100 行 3 列或 1 行 100 列通常更快 更高效 可扩展吗 换句话说 当存储与一条记录相关的许多 key gt value 对时 是将每个 key gt value 对存储在单独的行中并以 record i
  • 可扩展性和弹性有什么区别?

    我听说很多人交替使用这两个术语 但在我看来 它们之间还是有区别的 可扩展性 的能力软件系统在其当前硬件资源上处理更大的工作负载 scale up 或当前和额外的硬件资源 向外扩展 应用程序服务不中断 弹性 的能力硬件层下面 通常是云基础设施
  • 构建可扩展 Web 应用程序的书籍? (数据库性能/调优、网络、一般性能等)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 从计算机科学专业毕业并作为一名从事 Web 应用程序的软件工程师进入 现实世界 后 我对如何正确扩展 W
  • 如何在两个或多个 Heroku dyno 上运行 Meteor 应用程序?

    我有 Meteor 应用程序 它使用 1 dyno 在 Heroku 平台上运行 当我增加测功机数量时 它会停止工作 并在客户端报告一些 XHR 问题 错误 404 有人在两个或更多 Heroku dyno 上成功运行 Meteor 应用程
  • Kafka中如何同时实现分布式处理和高可用?

    我有一个由 n 个分区组成的主题 为了进行分布式处理 我创建了两个在不同机器上运行的进程 他们使用相同的 groupd id 订阅主题并分配 n 2 个线程 每个线程处理单个流 每个进程 n 2 个分区 这样我就可以实现负载分配 但现在如果

随机推荐

  • 使用 HTTP/2 时,缩小和连接 JS/CSS 文件以及使用图像精灵是否仍能提供性能优势?

    使用新的 HTTP 2 协议 向同一服务器重复 HTTP 请求所产生的开销已大大减少 考虑到这一点 缩小和连接 JavaScript CSS 文件以及将图像组合成精灵是否仍然具有任何显着的性能优势 或者当使用 HTTP 2 时这些做法不再有
  • EventSourced Saga 实施

    我已经编写了一个事件源聚合 现在实现了一个事件源传奇 我注意到两者是相似的 并创建了一个事件源对象作为两者派生的基类 我在这里看过一个演示http blog jonathanoliver com cqrs sagas with event
  • Android 手机启动时广播接收器不工作

    我为 ICS 创建了一个锁屏 并将其放置在框架中 我们可以使用它打开应用程序 对于用户效果 我在显示锁定屏幕时启动了动画 该动画是使用 SCREEN ON 广播接收器启动的 但是当手机启动时 即使我注册了广播接收器 它也没有到达 onRec
  • 与使用数据库相比,经典 ASP 和 PHP 之间共享会话

    我们有一个经过多年开发的 ASP 内联网 Web 应用程序 它在 IIS6 上运行 如今 我们希望使用 PHP 语言来添加一些新功能 PHP 在同一台服务器上运行良好 会话变量需要在 ASP 和 PHP 之间共享 我问是否有其他替代方案可以
  • 标记模板文字的 TemplateObject 数组是否被其领域弱引用?

    while c tag str0 e str1 JavaScript 运行时创建一个冻结数组 例如Object freeze str0 str1 但还有一个额外的 raw财产 可以使用该对象作为 a 中的键吗 WeakMap以避免每次循环时
  • 需要 Angular 2 ng

    我在 Angular 2 中制作了一个模型驱动表单 并且只有在未选中上面的复选框时才必须显示其中一个输入字段 我使用 ngIf 执行此操作 我的问题是 仅当未选中该复选框时 如何设置所需的输入 在 Angular 1 x 中 我可以通过视图
  • 递归 XSLT,第 2 部分

    好的 继续我的问题here https stackoverflow com questions 2907332 how can i write an xslt that will recursively include other file
  • 经常将 IRB 历史记录刷新到文件

    irb 可以将命令历史记录写入文件 但只有在 irb 会话结束时才会执行此操作 我想更频繁地写出我的命令历史记录 与每个命令 如 shell 历史记录 一样频繁 但不必如此频繁 是否有 irbrc 设置 或者我必须破解 irb 源 已经多次
  • 将鼠标悬停在图像上方的 Font Awesome 图标居中

    当鼠标悬停在图像上时 我试图将字体很棒的图标置于图像的中心 这是我的 HTML div class profile img container img src http s3 amazonaws com 37assets svn 765 d
  • 如何在 Xamarin Forms 中将 Android 日期选择器设置为微调器(而非日历)模式?

    在 Android 设备上的 Xamarin Forms 中选择日期选择器控件时 将显示日期选择器的日历模式视图 如何更改它以显示微调模式 我找到的唯一示例是更新我的 styles xml 这是我所拥有的 但不起作用
  • CSS 不同的链接样式

    据我所知 使用类似的东西 class a 与使用相同 class a link Right 另外 以下两种款式是一样的吗 class a focus class a hover 最后 下面的样式是鼠标按下时的颜色吧 class a acti
  • Zend Framework 2 - Hydrator 策略未响应且水合

    我基本上实现了这个策略 https github com zendframework zf2 pull 2072 主要区别是 我猜 我使用Doctrine2 调用构造函数类 打印测试回显 但两个函数extract and hydrate 不
  • LINQ:将 lambda 表达式作为参数传递以由方法执行和返回

    因此 场景如下 我有一系列不同的存储库类 每个类都可以使用独立的数据上下文或共享上下文 在使用隔离上下文的情况下 我想向基类添加一个方法 该方法允许我将 lambda 指定为参数 让该表达式由所选存储库的隔离上下文执行并返回 IQuerya
  • 如何设置 Bitmap.Width 和 Bitmap.height

    您好 我已经加载了位图 我需要设置自己的高度和宽度 bitmap height 100 但这个声明不允许我 因为它说 System Drawing Image Width cannot be assigned to it is read o
  • __del__() 如何干扰垃圾回收?

    I read class Account object def init self name balance self name name self balance balance self observers set def del se
  • 如何从 Jenkins 推送到 git?

    以下代码是 Jenkins 中的 执行 Shell 构建步骤 该作业从包含文件的存储库中提取ranger policies policies json 我想要做的是更新该文件 在本例中使用curl 命令 然后将更改提交到源代码管理并更新远程
  • Android模拟器中的相机

    我使用 android SDK 4 0 3 和 eclipse Indigo 我正在尝试开发一个使用相机的应用程序 当我拍照时 会出现以下消息 不幸的是 相机已经停止了 在 Eclipse 控制台中 模拟器 错误 camera client
  • 使用端口(例如 localhost:12345)访问 IPv6 可解析 URL 会导致 Strawberry Perl 5.30.1 中的错误地址

    在启用了 IPv6 的 Windows 10 下使用 Strawberry Perl 5 30 1 时 由于 Perl 的 DNS 解析器中似乎存在错误 因此无法正确解析带有端口号的 URL 对于以下测试 我们有一个简单的 Web 服务器
  • 测试类型是否是分配器的正确方法是什么?

    Writing allocator traits
  • 将可扩展性设计到应用程序中

    这句话是什么意思 将可扩展性设计到应用程序中 是否存在可以使应用程序更具可扩展性的设计模式 这个问题主要针对 Web 应用程序或基于 SOA 中间件的应用程序 当我想到 大规模应用程序 时 我想到了三个截然不同的事情 将在大型横向扩展集群