【问题标题】:What really is scaling?什么是真正的缩放?
【发布时间】:2010-12-31 17:31:53
【问题描述】:

我听说人们说他们制作了一个可扩展的 Web 应用程序..

  1. 什么是真正的缩放?

  2. 开发人员可以做些什么来使他们的应用程序可扩展?

  3. 开发者在扩容过程中要注意哪些因素?

  4. 有关使用 asp.net 和 sql server 扩展 Web 应用程序的任何提示和技巧...

【问题讨论】:

  • 这个问题太广泛了,不可能很好地回答。我建议您将其分解为单独的问题。这是一个无法真正回答的讨论问题,当然也无法明确回答。至少它应该是一个维基;虽然我投票结束时“不是一个真正的问题”。
  • 几天前有一个非常相似的问题,但是对于一个特定的问题几乎无法搜索,所以我再也找不到它了:/

标签: scalability


【解决方案1】:

可扩展意味着您的应用已准备好(并且能够处理)未来的增长。它可以处理更高的流量、更多的活动等。使您的网站更具可扩展性可能需要做很多事情。您可以在缓存中存储更多内容,而不是不必要地查询数据库。它可能需要编写更好的查询,将连接保持在最低限度,并释放资源。

资源:

  1. Seattle Conference on Scalability(视频)
  2. Improving .NET Application Performance and Scalability(视频)
  3. Writing Scalable Applications with PHP
  4. Scalability, on Wikipedia

【讨论】:

  • 我不知道,但已经解决了 :-)
【解决方案2】:

我对“可扩展”的 2c 定义是吞吐量随资源线性增长(或至少可预测)的系统。添加一台机器并获得 2 倍吞吐量。添加另一台机器并获得 3 倍的吞吐量。或者,从 2p 机器转移到 4p 机器,并获得 2 倍的吞吐量。

它很少以线性方式工作,但设计良好的系统可以接近线性可扩展性。添加 1 美元的硬件并获得 1 单位的额外性能。

这在网络应用程序中很重要,因为潜在的用户群约为 1b 人。


当应用程序受到许多并发请求时,应用程序内的资源争用会导致可伸缩性受到影响。这样一个系统的最终结果是,无论您使用多少硬件,您都无法让它提供更多的吞吐量。它“顶了”。硬件成本与性能曲线渐近。

例如,如果有一个应用程序范围内的内存结构需要针对每个 Web 事务或交互进行更新,则该结构将成为瓶颈,并会限制应用程序的可扩展性。添加更多 CPU 或更多内存或(可能)更多机器无助于提高吞吐量 - 您仍然会有请求排队以锁定该结构。

通常在事务性应用程序中,瓶颈是数据库或数据库中的特定表。

【讨论】:

  • ~ 1 Gpeople + Google(可能又占了这么多):-)
【解决方案3】:

什么是真正的缩放?


扩展意味着适应使用量和数据量的增加,理想情况下,实现应该是可维护的。

开发人员如何使他们的应用程序具有可扩展性?


使用数据库,但尽可能多地缓存,同时适应用户体验(可能在会话中)。

有关扩展 Web 应用程序的任何提示和技巧...


有很多,但这取决于实施。什么编程语言,什么数据库等。这个问题需要细化。

【讨论】:

  • 您的格式有点令人惊叹。但是,+1 以获得好的答案。
【解决方案4】:

什么是真正的缩放?

扩展是应用程序容量和/或使用量的增加。

开发人员如何使他们的应用程序具有可扩展性?

允许他们的应用程序垂直或水平扩展。

水平缩放是关于并行处理。

垂直缩放是为了更快地做事。这通常意味着更强大的硬件。

通常当人们谈论水平可扩展性时,理想的是具有(接近)线性可扩展性。这意味着,如果一个 5000 美元的生产机器可以处理 2,000 个并发用户,那么再增加 4 个应该可以处理 10,000 个并发用户。越接近那个数字越好。

高度可扩展的应用程序的理想选择是具有近乎无限的近线性水平可扩展性,这样您只需插入另一个盒子,您的容量就会按预期增加,而收益很少或没有递减。

理想情况下,冗余也是等式的一部分,但这通常是一个单独的问题。

这种可扩展性的典型代表当然是 Google。

开发者在扩容过程中关注哪些因素?

  • 应该规划多大的规模?将时间和金钱花在您永远不会遇到的问题上是没有意义的;
  • 纵向扩展是否可行和/或经济?这是首选方案,因为它通常便宜得多(在短期内);
  • 让您的应用程序水平扩展是否值得(通常是巨大的)成本?分布式/多线程应用程序明显编写起来更加困难和昂贵。

有关扩展 Web 应用程序的任何提示和技巧...

是的:

  1. 不用担心永远不会遇到的问题;
  2. 不要太担心您不太可能遇到的问题。很可能在你拥有它们之前很久就已经改变了;
  3. 不要害怕丢弃代码并重新开始。进行自动化测试使这变得容易得多;和
  4. 考虑到开发人员的时间成本很高。

(4) 是一个关键点。你可能有一个写得不好的应用程序,需要 20,000 美元的硬件才能从根本上修复。如今,20,000 美元可以购买大量的电源(64+GB 的 RAM、4 个四核 CPU 等),可能超过 99% 的人都需要。这样做会更便宜,还是花 6 个月重写和调试一个新应用程序以使其更快?

这很容易成为第一个选项。

所以我将在我的列表中添加另一项:务实

【讨论】:

  • 我支持你的最后几点,关于只在必要时担心缩放。 > 95% 的网站/应用程序不会有任何无法通过更好的服务器轻松且廉价地解决的扩展问题。当大问题出现在他们丑陋的头脑中时,你就可以开始担心了。你不是 Twitter:你不会有一百万人突然敲你的门。
  • “拥有自动化测试让这一切变得更容易”是什么意思?喜欢单元测试?
【解决方案5】:

有关此主题的书籍已被撰写。 Scalable Internet Architectures

是一个针对 Internet 应用程序但描述可应用于任何开发工作的原则和实践的优秀案例

【讨论】:

    【解决方案6】:

    我可以建议一个“以用户为中心”的定义吗?

    无论用户数量如何,可扩展的应用程序都可以为每个用户提供一致的体验。

    对于 Web 应用程序,这意味着 24/7 全天候在世界任何地方。但是,鉴于全球可用带宽的多样性以及开发人员对其性能和可用性缺乏控制,我们可能会重新定义如下:

    可扩展的 Web 应用程序提供一致的响应时间,在使用中的服务器 TCP 端口测量,与请求数量无关。

    为实现这一目标,开发人员必须避免或消除所有性能瓶颈。目前最具挑战性的问题是分布式 RDBMS 系统的可扩展性。

    【讨论】:

      猜你喜欢
      • 2010-12-30
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-05
      • 2019-10-04
      • 1970-01-01
      相关资源
      最近更新 更多