问题标签 [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.

0 投票
22 回答
8132 浏览

concurrency - 您如何利用多核?

作为来自企业 Web 开发领域的HPC领域的人,我总是很想知道“现实世界”中的开发人员如何利用并行计算。现在所有芯片都在走向多核,这一点更加重要,当一个芯片上有数千个核心而不是几个核心时,它会更加重要。

我的问题是:

  1. 这对您的软件路线图有何影响?
  2. 我对有关多核如何影响不同软件领域的真实故事特别感兴趣,因此请在您的答案中指定您所做的开发类型(例如服务器端、客户端应用程序、科学计算等)。
  3. 您如何处理现有代码以利用多核机器,您面临哪些挑战?你在使用OpenMPErlangHaskellCUDATBBUPC还是别的什么?
  4. 随着并发水平的不断提高,您打算做什么,您将如何处理成百上千个内核?
  5. 如果您的领域容易从并行计算中受益,那么解释为什么也很有趣。

最后,我把这个问题描述为一个多核问题,但请随意谈论其他类型的并行计算。如果您正在移植应用程序的一部分以使用MapReduce,或者如果大型集群上的MPI是您的范例,那么也一定要提到这一点。

更新:如果您确实回答了 #5,请提及您是否认为如果内核数(100、1000 等)超过可用内存带宽所能提供的数量(看看每个内核的带宽如何变得越来越小),情况是否会发生变化)。您仍然可以将剩余的内核用于您的应用程序吗?

0 投票
8 回答
6997 浏览

amazon-ec2 - 关于 RightScale 和 Scalr 用于动态 Ec2 实例管理的任何想法

我正在寻找一种成本效益高的工具来管理 Ec2 上的 Web 应用程序。Rightscale 在大狗看来并为此收费。Scalr 看起来是一种更具成本效益的解决方案,但很难找到任何真实的客户体验。

我正在寻找的关键方面是负载均衡器(http 和 https)以及一种在负载增加时自动使额外的 Web 服务器容量在线以及在负载下降时终止实例的方法。

据我所知,很多人都在这里推出自己的东西。我们正在尝试发布一个应用程序,并且真的不想打太多繁重的系统管理员之战。鉴于性能等的重要性,我很高兴能听到来自该领域的建议和经验。

0 投票
2 回答
3708 浏览

scalability - 将图像请求重定向到不同的网络服务器的最佳方法?

我试图通过添加“图像服务器”(用于处理图像请求的专用服务器)并将所有对 .gif、.jpg、.png 等的请求重定向到它来减少我的网络服务器上的负载。

我的问题是,处理重定向的最佳方法是什么?

  • 在防火墙级别?(我可以使用 iptables 做到这一点吗?)
  • 在负载均衡器级别?(ldirectord 能处理这个吗?)
  • 在 apache 级别 - 使用重写规则?

感谢您提供有关执行此操作的最佳方法的任何建议。

- 更新 -

我要补充的一件事是,这些域是为第 3 方托管的,因此我不能指望所有开发人员都修改他们的代码并将他们的图像指向另一台服务器。

0 投票
7 回答
159304 浏览

sql - SQL 数据库设计初学者指南

您知道学习如何设计 SQL 解决方案的好资源吗?

除了基本的语言语法之外,我还在寻找可以帮助我理解的东西:

  1. 要构建哪些表以及如何链接它们
  2. 如何针对不同规模进行设计(小客户端APP到庞大的分布式网站)
  3. 如何编写有效/高效/优雅的 SQL 查询
0 投票
4 回答
1685 浏览

model - 扩展富域模型

领域驱动设计鼓励您使用丰富的领域模型。这意味着所有的领域逻辑都位于领域模型中,并且领域模型是至高无上的。持久性成为一个外部问题,因为理想的领域模型本身对持久性一无所知(例如数据库)。

我一直在一个中等规模的单人项目(> 100k 行 Java)中使用它,我发现了许多优点,主要是它提供的灵活性和可重构性,而不是面向数据库的方法。我可以添加和删除域类,点击几个按钮,一个全新的数据库模式和 SQL 层就会推出。

但是,我经常遇到这样的问题,即我发现很难将富域逻辑与支持应用程序的 SQL 数据库这一事实相协调。通常,这会导致典型的“1+N 查询问题”,即您获取 N 个对象,然后对每个再次触发查询的对象执行一个重要的方法。手动优化此过程允许您在恒定数量的 SQL 查询中执行该过程。

在我的设计中,我允许系统插入这些优化版本。我通过将代码移动到一个“查询模块”中来做到这一点,该模块包含数十个特定于域的查询(例如 getActiveUsers),其中两个都在内存中(幼稚且不可扩展)和基于 SQL(用于部署)的实现。这使我可以优化热点,但有两个主要缺点:

  • 我有效地将我的一些域逻辑移动到它并不真正属于的地方,实际上甚至将其推入 SQL 语句中。
  • 这个过程需要我仔细阅读查询日志以找出热点在哪里,然后我必须重构代码,通过将其降低到查询中来降低其级别抽象。

有没有更好、更简洁的方法来协调域驱动设计及其富域模型与您不能将所有实体都保存在内存中并因此仅限于数据库后端的事实?

0 投票
11 回答
23231 浏览

php - 大型项目没有 PHP?为什么不?

我读过一些帖子,其中有人说(不建议、不讨论、不提供)PHP 不应该用于大型项目。

作为一名主要的 PHP 开发人员,我问了两个问题:

  1. 什么定义了“大型项目”?
  2. 为什么不?使用PHP有哪些陷阱

我经营着一个小型开发团队,从经验中我知道质量构建、组织、文档、评论和封装是我们的首要任务。我们能够使用我们自己的框架和方法开发伟大的项目,但如果我在浪费时间,我仍然不想进一步投资。

想法?

0 投票
3 回答
1033 浏览

ide - Mercurial 实践:与 IDE 和可扩展性一起使用

我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseSVN,但我不喜欢到处都有很多 .svn 文件夹,进行搜索、备份等等难的。然后我发现了分布式 SCM 的兴趣,我选择了明显更简单(比 git)的 Mercurial 方式,仍然是为了我个人的个人需求。我正在学习如何正确使用它,阅读了 wiki 的一部分,并且正在阅读这本优秀的 PDF 书籍。

我经常看到重复,例如在Mercurial 工作实践中,“不要犹豫在本地使用多棵树。Mercurial 使这变得快速且轻量级。 ”和“为您处理的每个功能创建一棵新树。 ”。这些是有趣且明智的建议,但它们有点伤害了我使用集中式 SCM 的小习惯,在那里我们有一个“神圣的”中央存储库,其中分支经过精心规划(并由管理员处理),变更列表必须由(高级)同行检查和不得破坏构建等 :-) 开始在新分支上工作需要相当长的时间......

因此,鉴于上述情况,我有两个问题:

  • 在 IDE 等环境中进行大量克隆有多实用?如果项目有配置/设置文件、makefile 或 Ant 脚本或 shell 脚本或其他需要路径更新的东西怎么办?(是的,可能是个坏主意...)例如,在 Eclipse 中,如果我想编译并运行一个克隆,我必须再做一个项目,调整 Java 构建路径、运行/调试目标等等. 除非 Eclipse 插件可以简化该任务。我想念这里的一些设施吗?

  • 那怎么缩放?我读过 Hg 对于大型代码库是可以的,但我很困惑。在我的工作中,我们有一个大约 200 万行的 Java 应用程序(嗯,几个围绕一个大型通用内核),仅代码就占 110MB。在我的旧(2004)Windows 工作站上进行干净编译需要大约 15 分钟才能生成 50MB 的类文件!我没有看到自己克隆整个项目来更改 3 个文件。那么这里的做法是什么?

我还没有在我的阅读中看到这些问题,所以我希望这将成为一个有用的线程。

0 投票
7 回答
825 浏览

database - 你怎么不做连接?

我最近读了很多关于数据库查询中的连接如何减慢速度的文章。显然 Google App Engine 甚至不允许它们。

我想知道人们如何设计一个没有连接的应用程序。例如,我正在开发一个具有contacts和的应用程序organizations。一个联系人可以在多个组织中,一个组织可以有多个联系人。如果没有连接两个实体的第三张表,怎么可能建立这种关系......

这是否意味着在 GAE 中不能建立多对多关系?您只是省略了需要加入的功能?

我猜您可能organizations在表中有一个 TEXT 列,其中contacts包含以空格分隔的每个联系人的组织 ID 列表。不过这似乎有点奇怪。

0 投票
5 回答
1296 浏览

performance - 文件系统通过大量小文件寻求性能

我正在寻找一个包含大量由 XML API 提供的小文件的服务器。它不会对目录或顺序文件块进行大量迭代——我们正在谈论大量寻找不连续数据的过程。

对于单个文件的请求,BSD UFS 上的寻道时间会随着时间的推移而降低吗?我知道文件系统的 inode 限制基于分区/片的大小,但硬盘驱动器必须为每个文件请求单步遍历 inode 表,然后才能发现数据的位置。什么文件系统在寻道时间方面产生最佳性能?

另一种方法是设置 2-4GB 的“blob”文件,并有一个单独的系统从软件中寻找其中包含的文件。该软件的“inode 表”可以根据当前登录的用户等进行优化交付……这些“inode 表”可能会缓存在 RAM 中,并且只与当前登录的用户相关,从而减少资源浪费.

这两种解决方案在可扩展性和维护方面的评价如何?通过使用第二种解决方案,我可以期待什么样的性能提升(如果有的话)?

0 投票
3 回答
4307 浏览

performance - Web 应用程序的可扩展性和性能,方法?

您使用了哪些不同的方法和技术来成功解决网站的可扩展性和性能问题?我是一名 ASP.NET Web 开发人员,正在探索使用带有 SQL 集群的 WCF 进行 .NET 远程处理,并对存在哪些其他方法(例如“云”)感到好奇。在哪种情况下,您会应用各种方法(例如,方法 a 用于大约 x 多个“活跃”用户)。

我的意思的一个例子,一个 myspace 案例研究:http ://highscalability.com/myspace-architecture