问题标签 [scalability]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 在多核机器上扩展多线程应用程序
我正在做一个项目,我们需要更多的性能。随着时间的推移,我们继续改进设计以更多地并行工作(线程和分布式)。然后最新的步骤是将其中的一部分移到具有 16 个内核的新机器上。我发现我们需要重新考虑如何在共享内存模型中扩展至那么多内核。例如,标准内存分配器不够好。
人们会推荐什么资源?
到目前为止,我发现 Sutter 的专栏 Dr. Dobbs 是一个好的开始。我刚拿到多处理器编程的艺术和关于英特尔线程构建块的 O'Reilly 书
sharepoint - SharePoint 列表可扩展性
我对文档库特别感兴趣,但就一般 SharePoint 列表而言,任何人都可以回答以下问题...?
- SharePoint 列表可以包含的最大项目数是多少?
- 单个 SharePoint 服务器可以托管的最大列表数是多少?
- 当列表中的项目数接近最大值时,过滤是否会变慢,如果是,可以做些什么来改进它?
algorithm - 如何使我的应用程序能够很好地扩展?
一般来说,什么样的设计决策有助于应用程序很好地扩展?
(注意:刚刚了解了Big O Notation,我希望在这里收集更多编程原则。我试图通过在下面回答我自己的问题来解释 Big O Notation,但我希望社区能够改进这个问题和答案。)
迄今为止的回应
1) 定义缩放。您是否需要针对虚拟环境中的大量用户、流量、对象进行扩展?
2)看看你的算法。他们所做的工作量是否会与实际工作量成线性关系——即要循环的项目数量、用户数量等?
3)看看你的硬件。您的应用程序是否经过设计,如果一台机器跟不上,您可以在多台机器上运行它?
次要想法
1)不要太快优化太多 - 先测试。也许瓶颈会发生在不可预见的地方。
2)也许扩展的需求不会超过摩尔定律,也许升级硬件会比重构便宜。
database - 你能推荐一个水平扩展的数据库吗?
通常,数据库服务器是我们必须购买的最大、最昂贵的机器,因为垂直扩展是唯一的选择。是否有任何数据库可以很好地水平扩展(即跨多个商品机器)?这种方法有什么限制?
wcf - WCF 将如何扩展到大量客户端用户?
有没有人知道使用 Microsoft 的 WCF 构建的 Web 服务将如何扩展到大量用户?
我正在考虑的级别是 1000 多个客户端用户连接到为我们的应用程序提供业务逻辑的 WCF 服务集合,并且这些服务与数据库通信 - 类似于传统的 3 层架构。
是否有任何特殊的问题会降低性能,或者是否有任何设计经验可以实现这种级别的可扩展性?
asp.net - 将 ViewState 移出页面?
我们正试图尽可能减轻我们的页面负载。由于 ViewState 有时会膨胀到 100k 的页面,我很想完全消除它。
我很想听听其他人用来将 ViewState 移动到自定义提供程序的一些技术。
也就是说,有几点需要注意:
- 我们平均每小时为 200 万独立访客提供服务。
- 正因为如此,数据库读取一直是一个严重的性能问题,所以我不想将 ViewState 存储在数据库中。
- 我们还支持负载平衡器,因此任何解决方案都必须与用户在每次回发时从机器跳到机器一起工作。
想法?
java - Solaris 上 Java/C++ 的高可用性和可扩展平台
我有一个在 Solaris 上混合了 Java 和 C++ 的应用程序。代码的 Java 方面运行 Web UI 并在我们正在与之交谈的设备上建立状态,而 C++ 代码对从设备返回的数据进行实时处理。共享内存用于将设备状态和上下文信息从 Java 代码传递到 C++ 代码。Java 代码使用 PostgreSQL 数据库来保持其状态。
我们遇到了一些非常严重的性能瓶颈,现在我们可以扩展的唯一方法是增加内存和 CPU 数量。由于共享内存设计,我们被困在一个物理盒子上。
这里真正的大热门是 C++ 代码。Web 界面相当轻松地用于配置设备;我们真正苦苦挣扎的地方是处理设备在配置后提供的数据量。
我们从设备返回的每条数据都有一个标识符,它指向设备上下文,我们需要查找它。现在有一系列由 Java/UI 代码维护并由 C++ 代码引用的共享内存对象,这就是瓶颈。由于这种架构,我们无法将 C++ 数据处理转移到另一台机器上。我们需要能够横向扩展,以便不同的机器可以处理各种设备子集,但随后我们就失去了进行上下文查找的能力,这就是我要解决的问题:如何卸载真实的-时间数据处理到其他盒子,同时仍然能够参考设备上下文。
我应该指出,我们无法控制设备本身使用的协议,而且这种情况不可能发生变化。
我们知道我们需要摆脱这种情况,以便能够通过向集群添加更多机器来进行横向扩展,而我正处于研究如何做到这一点的早期阶段。
现在,我将 Terracotta 视为一种扩展 Java 代码的方法,但我还没有弄清楚如何扩展 C++ 以匹配。
除了扩展性能外,我们还需要考虑高可用性。应用程序需要几乎始终可用——不是绝对 100%,这不符合成本效益,但我们需要做一些合理的工作来应对机器中断。
如果你必须承担我被赋予的任务,你会怎么做?
编辑:根据@john channing 提供的数据,我正在研究 GigaSpaces 和 Gemstone。Oracle Coherence 和 IBM ObjectGrid 似乎仅限于 java。
.net - .NET 的扩展性如何?
(首先我要明确一点,我不是 .NET 开发人员,并且不依赖于任何其他环境。)
最近,我听说伦敦证券交易所下跌了一整天。我还听说该软件是用 .NET 编写的。到目前为止,他们在忙碌的日子里会遇到性能下降。人们似乎在指责 .NET。
我不想讨论这个故事,但它让我想起了 .NET 如何扩展的问题?.NET 有多大?
sqlite - SQLite 的可扩展性如何?
我最近阅读了这个关于SQLite vs MySQL的问题,答案指出 SQLite 不能很好地扩展,但是官方网站也证实了这一点。
SQLite 的可扩展性如何,它的最高限制是什么?
java - 我应该为我的业务层使用 EJB3 还是 Spring?
我的团队正在开发一种带有 Web 前端的面向服务的新产品。在讨论我们将使用什么技术时,我们决定运行 JBoss 应用程序服务器、Flex 前端(可能使用 Adobe AIR 进行桌面部署)以及连接客户端和服务器的 Web 服务。
在为我们的业务逻辑使用哪种服务器技术时,我们陷入了僵局。最大的争论是在 EJB3 和 Spring 之间,我们最大的担忧是可伸缩性和性能,以及代码库的可维护性。
以下是我的问题:
- 支持或反对 EJB3 与 Spring 的论点是什么?
- 我可以期待每个陷阱有哪些陷阱?
- 我在哪里可以找到好的基准信息?