主要内容
可伸缩系统
互联网的生命起始于一个连接各大学和研究机构的网络。当消费者也可以廉价的使用它的时候,它大受欢迎,现在估计有45亿人使用它。
幸运的是,为互联网和网络提供动力的协议是为了可扩展性而设计的。一个可扩展的系统是一个即使在使用人数更高的时候也能正常运行的系统。
互联网可扩展性
哪些功能提高了互联网的可扩展性?
- 任何计算机只要遵守协议都可以通过互联网发送数据。将设备阻止进网,或者阻止程序员学习协议的工作方式的官僚程序是不存在的。
- IPv6地址系统可以独立分配现有联网地址数量的一 兆兆 倍那么多的地址。
- 路由是动态的,所以新的路由器可以在任何时候加入网络,并帮助将数据包在网络中移动。
互联网的设计是可扩展的,但是系统无法无限扩展。
什么会威胁到互联网的可扩展性?
换句话说,如果世界上每一个设备现在都联网并试图下载一部电影,会发生什么?
这里列出几个想法:
- 网络连接带宽有限。大量数据可能可以轻松的流过很高的带宽,但是它可能会很轻易的就超载低带宽的连接,导致延迟或者数据包丢失。
- 路由器限制了它们的通量(每秒可以流动的数据)。一个现代的消费者路由器可能可以有大约1Gbps的通量,而更贵的企业路由器可以有10Gbps的通量。一个电影大约是1-10GB,所以世界的下载马拉松可能会在路由器那里遇到瓶颈。
- 无线路由器经常有连接的设备限制,一般是最高250个设备。如果每个人都尝试着同时使用一个共享的WiFi网络(图书馆或者大学里那样),他们可能会发现自己不能联网。
🤔 基于你所了解的网络知识,还有其他可能影响其可扩展性的因素吗?是好的,还是坏的?
网络应用程序可扩展性
一个基于网络的网络程序也应当可扩展,不管它是iPhone的应用程序,一个网页,还是一个多人游戏。现有几十亿人正在网上,这导致任何程序都有可能突然有很多用户。如果应用程序并没有对应需求的扩展性,用户可能会面对更高的延迟,或者应用程序完全的停止运行。😬
在新冠流行期间,世界各地的人们被要求呆在室内减少感染,很多人都上线寻找真人版服务的在线替代。因为许多学生转移到了可汗学院进行虚拟练习,我们的服务器增加了250%的载荷。
大量的使用量奇袭了我们的系统,其中有几个几乎没有处理突然提出的要求。
例如,我们的新作业通知系统出现了积压,通知将花费几分钟而不是几秒钟到达。
幸运的是,我们的工程师很快的将系统的运行能力提高了,大多数用户并未感到异常。
负载测试
工程队可以通过 负载测试来为使用率的陡升做准备:模拟短时间内的高流量来查看系统在负载之下的性能。负载测试可以发现系统中的瓶颈或者是代码导致的限制。
玩过宝可梦:GO吗?这是一个在2016年夏季出台的手游,大火。游戏开发者在游戏发布之前确实做了加载测试,模拟了他们所期望的最高流量的5倍,服务器波澜不惊。
然而,他们极大的低估了宝可梦:GO的热度。在发布日,他们的服务器上有 50 倍他们所期望的流量。
游戏服务器还未为这种极限负载准备,所以许多玩家打开游戏,看到这令人失望的一幕:
面对来自失望用户的需求和来自网络黑客的多重DDoS打击下,小队设法提高系统的可扩展性。
在重新配置他们的服务器使得它更具可扩展性之后,开发者在其他地区也发布了宝可梦:GO。在三年来,它已经从移动商店内被下载了10亿多次。
可扩展性的范围
一个系统有能力容纳更多的使用者的时候,它就是可扩展的。一些系统无法扩展,只能处理他们所设计的使用量。
可扩展的系统可以处理更多的用户,但是其用量各不相同。一些系统可能只能处理当前用量的两倍,另一些系统可以处理当前用量的1000倍。
当我们设计具有潜在的全球化影响的时候--例如互联网本身或者基于互联网运行的程序的时候,我们需要始终考虑做法的可扩展性。
🙋🏽🙋🏻♀️🙋🏿♂️您对此主题有任何疑问吗? 我们很乐意回答-只需在下面的问题区域中提问即可!