问题标签 [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 投票
2 回答
1281 浏览

multithreading - WCF 服务和请求队列

正在使用使用伪代码的手动 POCO 队列类

对于 WCF 来说,请求队列是一种可扩展的方法吗?

0 投票
3 回答
3522 浏览

php - 是什么减少了 PHP 服务器的负载:SimpleXML 或 json_decode?

我开始用 PHP 开发一个 web 应用程序,我希望它会变得非常流行,让我变得有名和富有。:-)

如果到了那个时候,我决定是使用 SimpleXML 将 API 的数据解析为 XML 还是使用 json_decode 可能会对应用程序的可扩展性产生影响。

有谁知道这些方法中哪一种对服务器更有效?

更新:我进行了初步测试,看看哪种方法性能更高。执行起来似乎json_decodesimplexml_load_string. 这并不是非常确定的,因为它不会测试诸如并发进程的可伸缩性之类的东西。我的结论是,我将暂时使用 SimpleXML,因为它支持 XPath 表达式。

结果:

0 投票
10 回答
1952 浏览

.net - LINQ 的可扩展性如何?

最近与同事的对话对这个问题产生了不同的观点。SO成员,你说什么?

我知道,即使是可扩展性的概念也可以用许多不同的方式和背景来理解,但这是讨论的一部分。对于可扩展性的真正含义,每个人似乎都有不同的看法。我也很想看到这里的变化。事实上,我只是针对这个概念发布了一个问题。

0 投票
10 回答
6537 浏览

architecture - 可扩展性对您意味着什么?

我发布了一个关于 linq 的可扩展性的类似问题。在最近的一些对话中,对于可扩展性的实际含义有很多不同的看法,所以这也激发了我提出这个问题。可扩展性对您意味着什么?

0 投票
4 回答
1402 浏览

design-patterns - 分片(原文如此!)Web 层以防止负载平衡器瓶颈?

不能完全无状态的大型网站如何在 Web 层实现极高的可扩展性?

像 eBay 和 Amazon 这样的网站不能完全无国籍,因为它们有购物车或类似的东西。将购物车中的每件商品编码到 URL 中是不可行的,将每件商品编码到 cookie 中并在每次连接时发送也不可行。所以亚马逊只是将会话 ID 存储到正在发送的 cookie 中。所以我知道 eBay 和 Amazon 的 web 层的可扩展性应该比 google 搜索引擎的可扩展性要困难得多,在那里一切都可以被编码到 URL 中。

另一方面,eBay 和亚马逊的规模都非常大。有传言说 eBay 上有大约 15000 个 J2EE 应用服务器。

这些站点如何处理这两者:极端的可扩展性和有状态?由于站点是有状态的,因此进行简单的 DNS 平衡是不可行的。所以人们会假设这些公司有一个基于硬件的负载均衡器,比如 BigIP、Netscaler 或类似的东西,这是该站点的单个 IP 地址背后的唯一设备。此负载均衡器将解密 SSL(如果已编码)、检查 cookie 并根据该 cookie 的会话 id 决定哪个应用程序服务器持有该客户的会话。

但这不可能工作,因为没有单个负载均衡器可以处理数千个应用程序服务器的负载?我想即使是这些硬件负载平衡器也无法扩展到这样的水平。

此外,负载平衡正在为用户透明地完成,即用户不会被转发到不同的地址,但仍然全部集中在 www.amazon.com 上。

所以我的问题是:是否有一些特殊的技巧可以实现网络层的透明分片(而不是通常所做的数据库层)?只要不检查 cookie,就无法知道哪个应用程序服务器正在持有此会话。

编辑:我意识到只需要透明度,如果需要对网站进行爬虫和书签。例如,如果该站点只是一个 Web 应用程序,例如飞机或火车票预订系统,那么将用户重定向到不同 URL 后面的特定 Web 服务器集群应该没有问题,例如 a17.ticketreservation.com。在这种特定情况下,只使用多个应用程序服务器集群是可行的,每个集群都位于自己的负载均衡器后面。有趣的是,我没有找到使用这种概念的网站。 编辑:我发现这个概念在highscalability.com上讨论过,讨论指的是 Lei Zhu 的一篇名为“Web 2.0 应用程序的客户端负载平衡”。Lei Zhu 使用交叉脚本来透明地进行客户端负载平衡。

即使有一些缺点,如书签、xss 等,我确实认为这对于某些特殊情况听起来是一个非常好的主意,即几乎没有内容的 Web 应用程序,不需要被蜘蛛或书签(例如机票预订系统或类似的东西)。那么就不需要透明地进行负载平衡了。

可能存在从主站点到服务器的简单重定向,例如从 www.ticketreservation.com 到 a17.ticketreservation.com 的重定向。从那里用户停留在服务器 a17。a17 不是服务器,而是集群本身,通过它可以实现冗余。

初始重定向服务器本身可以是负载平衡器后面的集群。这样,可以实现非常高的可扩展性,因为 www 后面的主要负载均衡器只在每个会话开始时被命中一次。

当然,重定向到不同的 url 看起来非常讨厌,但是对于单纯的 Web 应用程序(无论如何都不需要蜘蛛、深度链接或深度书签),这对用户来说应该只是一个视觉问题吗?

重定向集群可以轮询应用集群的负载并相应地调整重定向,从而实现平衡而不仅仅是负载分配。

0 投票
5 回答
3750 浏览

database - 数据库可扩展性 - 性能与数据库大小

我正在创建一个应用程序,它必须将最多 32 GB 的数据放入我的数据库中。我正在使用 B-tree 索引,因为读取将具有范围查询(例如 from 0 < time < 1hr)。

一开始(数据库大小 = 0GB),我将获得每毫秒 60 和 70 次写入。在说 5GB 之后,我测试过的三个数据库(H2、berkeley DB、Sybase SQL Anywhere)真的减慢到每毫秒不到 5 次写入。

问题:

  • 这是典型的吗?
  • 如果我删除了索引,我还会看到这个可伸缩性问题吗?
  • 这个问题的原因是什么?

笔记:

每条记录由几个整数组成

0 投票
12 回答
6316 浏览

web-applications - 网络上的可扩展性

我一直在和大学里的一些朋友争论,我们无法确定哪个框架对 Web 应用程序具有更高的可扩展性(并且仍然非常快)。

一个调用jsp,另一个调用ruby,另一个调用php,以此类推。我能否请您澄清一下什么是更具可扩展性的潜力?

Tks,希望我没有重复我搜索过的任何内容,但没有发现任何以前的问题。

编辑:如果您可以对此进行比较,那就太好了:)

0 投票
1 回答
107 浏览

asp.net - 有没有办法在 ASP.NET 中优先考虑 Web 服务

目标是有一种方法来保证某些 Web 服务的特定 SLA(服务级别协议),以保证后端数据库的正常运行时间。理想情况下,这应该在服务中没有特定代码的情况下实现,而是通过控制底层基础设施/管道来实现。

0 投票
2 回答
1035 浏览

design-patterns - 设计模式或代码异味,由于功能分解而导致的非规范化数据

我是http://highscalability.com/的忠实粉丝并且一直在寻找我当前的开发以沿着功能边界分解我的应用程序,作为能够横向扩展服务器端,特别是数据库层的途径。这涉及到将应用程序的不同功能组件(我们有几个客户可以使用的单独模块)实现为服务器上自己的独立应用程序,与服务器联系的客户端知道它需要联系不同的服务以获取不同的数据,因此统一的视图呈现给用户。当不同组件中的数据之间存在链接时,问题就出现了,即一个组件保存所有用户数据,但另一个组件需要引用用户作为某些数据的所有者。我' m 目前通过保存链接每一侧的主键信息来执行此操作(就像它们都存在于单个数据库中一样),但是此链接表需要存在于两个组件中以允许在任一方向上进行查找,即“获取特定用户拥有的东西”和“获取该特定事物的所有者”将各自使用不同的组件。对此的替代方法是将链接数据仅存储在一个组件中,但是反向查找将需要 2 次调用,而不仅仅是 1 次。

我的问题是,这些链接表的重复是我应该避免的某种代码异味,还是当您按照这样的功能线拆分应用程序时,事情就是这样?

0 投票
5 回答
4470 浏览

database - 跨分片搜索?

精简版

如果我将用户分成碎片,我如何提供“用户搜索”?显然,我不希望每次搜索都击中每个碎片。

长版

通过分片,我的意思是有多个数据库,每个数据库都包含总数据的一小部分。对于(一个天真的)示例,数据库 UserA、UserB 等可能包含名称以“A”、“B”等开头的用户。当一个新用户注册时,我简单地检查他的名字并将他放入正确的数据库。当返回的用户登录时,我会再次查看他的姓名以确定从中提取信息的正确数据库。

分片与读取复制的优势在于读取复制不会扩展您的写入。所有发送到主服务器的写入都必须发送到每个从服务器。从某种意义上说,它们都承载相同的写入负载,即使读取负载是分布式的。

同时,分片不关心彼此的写入。如果 Brian 在 UserB 分片上注册,则 UserA 分片不需要听到它。如果 Brian 向 Alex 发送消息,我可以在 UserA 和 UserB 分片上记录该事实。这样,当 Alex 或 Brian 登录时,他可以从自己的分片中检索所有发送和接收的消息,而无需查询所有分片。

到目前为止,一切都很好。搜索呢?在此示例中,如果 Brian 搜索“Alex”,我可以检查 UserA。但是,如果他用姓氏“史密斯”搜索亚历克斯呢?每个碎片都有史密斯。从这里,我看到两个选项:

  1. 让应用程序在每个分片上搜索 Smiths。这可以缓慢(连续查询每个分片)或快速(并行查询每个分片)完成,但无论哪种方式,每个分片都需要参与每次搜索。就像读取复制不会扩展写入一样,搜索命中每个分片也不会扩展您的搜索。您可能会遇到搜索量高到足以压倒每个分片的时间,而添加分片对您没有帮助,因为它们都获得相同的量。
  2. 某种本身可以容忍分片的索引。例如,假设我要搜索的字段数量恒定:名字和姓氏。除了 UserA、UserB 等之外,我还有 IndexA、IndexB 等。当新用户注册时,我会将他附加到我希望找到他的每个索引上。所以我把 Alex Smith 放到 IndexA 和 IndexS 中,他可以在 "Alex" 或 "Smith" 上找到,但没有子字符串。通过这种方式,您不需要查询每个分片,因此搜索可能是可扩展的。

那么搜索可以缩放吗?如果是这样,这种索引方法是否正确?还有其他的吗?