真正的缩放是什么?

时间:2010-01-02 04:56:39

标签: scalability

我听说人们说他们已经制作了可扩展的网络应用程序..

  1. 什么是缩放?

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

  3. 开发人员在扩展过程中需要考虑哪些因素?

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

6 个答案:

答案 0 :(得分:24)

  

什么是缩放?

缩放是指应用程序的容量和/或使用量的增加。

  

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

允许他们的应用程序垂直或水平缩放。

横向缩放是指并行处理。

垂直缩放就是要做得更快。这通常意味着更强大的硬件。

通常,当人们谈论水平可伸缩性时,理想情况是(接近)线性可伸缩性。这意味着,如果一个$ 5k的生产盒可以处理2,000个并发用户,那么再添加4个用户应该可以处理10,000个并发用户。越接近这个数字越好。

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

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

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

  

开发人员在扩展过程中需要考虑哪些因素?

  • 应该计划多少比例?没有必要花时间和金钱来解决你永远不会遇到的问题;
  • 垂直伸缩是否可行和/或经济?这是首选方案,因为它通常更便宜(在短期内);
  • 使您的应用程序水平扩展是否值得(通常很重要)成本?分布式/多线程应用程序显着编写起来更加困难和昂贵。
  

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

是:

  1. 不要担心你永远不会遇到的问题;
  2. 不要担心你不太可能遇到的问题。在你拥有它们之前很久就会发生变化的事情;
  3. 不要害怕丢弃代码并重新开始。自动化测试使这变得容易;和
  4. 考虑到开发人员的时间非常昂贵。
  5. (4)是关键点。您可能有一个写得不好的应用程序,需要20,000美元的硬件来基本修复。如今,20,000美元购买了很多电源(64 + GB RAM,4个四核CPU等),可能超过99%的人需要。这样做或者花费6个月重写和调试新应用程序以使其更快,是否更便宜?

    这很容易成为第一选择。

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

答案 1 :(得分:3)

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

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

这在网络应用中非常重要,因为潜在的用户群大约有1b人。


当应用程序受到许多并发请求时,对应用程序内资源的争用是导致可伸缩性受损的原因。这种系统的最终结果是,无论您使用多少硬件,都无法获得更高的吞吐量。它“顶出”。硬件成本与性能曲线渐近渐近。

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

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

答案 2 :(得分:2)

什么是缩放?


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

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


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

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


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

答案 3 :(得分:1)

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

资源:

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

答案 4 :(得分:1)

已就此主题撰写了书籍。一个针对互联网应用程序但是描述可以在任何开发工作中应用的原则和实践的优秀工具是Scalable Internet Architectures

答案 5 :(得分:1)

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

可扩展的应用程序为每个用户提供一致的体验级别,无论用户数量多少。

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

可扩展的Web应用程序提供一致的响应时间,无论请求数量多少,都在使用的服务器TCP端口上进行测量。

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