If you're seeing this message, it means we're having trouble loading external resources on our website.

如果你被网页过滤器挡住,请确保域名*.kastatic.org*.kasandbox.org 没有被阻止.

主要内容

可伸缩系统

互联网的生命起始于一个连接各大学和研究机构的网络。当消费者也可以廉价的使用它的时候,它大受欢迎,现在估计有45亿人使用它。
以年数作为X轴(1996到2015年),使用人数作为Y轴(从0到30亿人)的图表。图形从7500万开始,以34亿结束。分区显示了每个区域(欧洲与中亚,东亚与太平洋,拉丁美洲与加勒比地区,南亚,北美,中东与北非,撒哈拉以下的非洲)。
按区域分列的1996年至2015年互联网用户数量图表来源:我们的数据化世界
幸运的是,为互联网和网络提供动力的协议是为了可扩展性而设计的。一个可扩展的系统是一个即使在使用人数更高的时候也能正常运行的系统。

互联网可扩展性

哪些功能提高了互联网的可扩展性?
  • 任何计算机只要遵守协议都可以通过互联网发送数据。将设备阻止进网,或者阻止程序员学习协议的工作方式的官僚程序是不存在的。
  • IPv6地址系统可以独立分配现有联网地址数量的一 兆兆 倍那么多的地址。
  • 路由是动态的,所以新的路由器可以在任何时候加入网络,并帮助将数据包在网络中移动。
互联网的设计是可扩展的,但是系统无法无限扩展。
什么会威胁到互联网的可扩展性? 换句话说,如果世界上每一个设备现在都联网并试图下载一部电影,会发生什么?
这里列出几个想法:
  • 网络连接带宽有限。大量数据可能可以轻松的流过很高的带宽,但是它可能会很轻易的就超载低带宽的连接,导致延迟或者数据包丢失。
  • 路由器限制了它们的通量(每秒可以流动的数据)。一个现代的消费者路由器可能可以有大约1Gbps的通量,而更贵的企业路由器可以有10Gbps的通量。一个电影大约是1-10GB,所以世界的下载马拉松可能会在路由器那里遇到瓶颈。
  • 无线路由器经常有连接的设备限制,一般是最高250个设备。如果每个人都尝试着同时使用一个共享的WiFi网络(图书馆或者大学里那样),他们可能会发现自己不能联网。
🤔 基于你所了解的网络知识,还有其他可能影响其可扩展性的因素吗?是好的,还是坏的?

网络应用程序可扩展性

一个基于网络的网络程序也应当可扩展,不管它是iPhone的应用程序,一个网页,还是一个多人游戏。现有几十亿人正在网上,这导致任何程序都有可能突然有很多用户。如果应用程序并没有对应需求的扩展性,用户可能会面对更高的延迟,或者应用程序完全的停止运行。😬
在新冠流行期间,世界各地的人们被要求呆在室内减少感染,很多人都上线寻找真人版服务的在线替代。因为许多学生转移到了可汗学院进行虚拟练习,我们的服务器增加了250%的载荷。
X轴为日期(从3.15,周五到3.19,周三),Y轴未标出的图表。图表在周五上有一个隆起,在周末有两个小隆起,然后周一到周三的隆起越来越高。最后的那个隆起相比于第一个周五的隆起是它的两倍大。
向我们的服务器的请求,时间是3.13,周五到3.18,周三。使用率总是在周六周天降低。
大量的使用量奇袭了我们的系统,其中有几个几乎没有处理突然提出的要求。 例如,我们的新作业通知系统出现了积压,通知将花费几分钟而不是几秒钟到达。
X轴代表时间(3月16日午夜至9:20上午),Y轴没有标记。一条线在0附近跳动,在6点的时候向上突然上升,接近Y轴顶部。
图中显示了在分配通知系统中积压的任务,X轴代表时间,Y轴代表还没有完成的任务。积压一般包含接近于0的任务数量,因为系统在任务被建立的时候就已经将他们处理掉了。但是在这种情况下,系统收到任务的数量远远大于它可以处理掉的,于是积压了巨大的任务积存。
幸运的是,我们的工程师很快的将系统的运行能力提高了,大多数用户并未感到异常。
X轴代表时间(3月16日午夜至9:20上午),Y轴没有标记。一条线在0附近跳动,在6点的时候向上突然上升,在早9点的时候达到顶峰。在9:30时突然陡降,并在其他时候都保持在0附近。
任务通知系统积压的任务。工程师在9:30提高了系统容量。

负载测试

工程队可以通过 负载测试来为使用率的陡升做准备:模拟短时间内的高流量来查看系统在负载之下的性能。负载测试可以发现系统中的瓶颈或者是代码导致的限制。
加载测试的图表。一个服务器被画了出来,很多个箭头指着它。
玩过宝可梦:GO吗?这是一个在2016年夏季出台的手游,大火。游戏开发者在游戏发布之前确实做了加载测试,模拟了他们所期望的最高流量的5倍,服务器波澜不惊。
然而,他们极大的低估了宝可梦:GO的热度。在发布日,他们的服务器上有 50 倍他们所期望的流量。
标题为“每秒云数据存储交易量”。一行被标为“原始的发布目标”,位于y轴底部。另一条是“预期最坏情况”,在第一条线顶部一点。最后一条是实际的流量,它一开始在第一条和第二条之间但是很快就陡升到第二条的50倍。
宝可梦:GO的每秒交易量。实际交易量远超估计值。来源: 谷歌云博客
游戏服务器还未为这种极限负载准备,所以许多玩家打开游戏,看到这令人失望的一幕:
“我们的服务器遇到了一点问题,请稍后再访问。”,宝可梦:Go如是显示。
面对来自失望用户的需求和来自网络黑客的多重DDoS打击下,小队设法提高系统的可扩展性。
来自@PokemonGoApp的一条推特说:“为了确保所有训练师都可以体验#宝可梦GO,我们继续为每个人添加新的资源。谢谢您的耐心。”
在发布的供不应求的时候的一条推特。资料来源:Twitter
在重新配置他们的服务器使得它更具可扩展性之后,开发者在其他地区也发布了宝可梦:GO。在三年来,它已经从移动商店内被下载了10亿多次。

可扩展性的范围

一个系统有能力容纳更多的使用者的时候,它就是可扩展的。一些系统无法扩展,只能处理他们所设计的使用量。
可扩展的系统可以处理更多的用户,但是其用量各不相同。一些系统可能只能处理当前用量的两倍,另一些系统可以处理当前用量的1000倍。
当我们设计具有潜在的全球化影响的时候--例如互联网本身或者基于互联网运行的程序的时候,我们需要始终考虑做法的可扩展性。

🙋🏽🙋🏻‍♀️🙋🏿‍♂️您对此主题有任何疑问吗? 我们很乐意回答-只需在下面的问题区域中提问即可!

想加入讨论吗?

尚无帖子。
你会英语吗?单击此处查看更多可汗学院英文版的讨论.