内部网络通常使用1 Gbps或更快速的连接。光纤连接或绑定允许服务器之间更高的带宽。现在,想象一下来自API的JSON响应的平均大小。一秒钟内可以通过1 Gbps连接传输多少此类响应?
让我们实际进行数学计算。1 Gbps是131,072 KB /秒。如果平均JSON响应为5 KB(相当多!),则仅使用一对机器即可通过电线每秒发送26214响应。还算不错,不是吗?
这就是为什么网络连接通常不是瓶颈。
微服务的另一方面是您可以轻松扩展。想象一下,两台服务器,一台托管API,另一台使用API。如果连接成为瓶颈,只需添加另外两台服务器,即可使性能提高一倍。
这是我们之前的26 214每秒响应对于应用程序规模而言变得太小的时候。您添加了其他九对,现在可以提供262140个响应。
但是,让我们回到我们的服务器对并进行一些比较。
如果对数据库的平均非缓存查询平均需要10毫秒,则每秒只能查询100个查询。100个查询。26214条回复。达到每秒26 214个响应的速度需要大量的缓存和优化(如果响应实际上需要做一些有用的事情,例如查询数据库;“ Hello World”风格的响应不符合要求)。
现在,在我的计算机上,用于Google主页的DOMContentLoaded发生了394毫秒。发送请求后。每秒少于3个请求。对于Programmers.SE主页,它发生了603毫秒。发送请求后。每秒甚至不到2个请求。顺便说一句,我有一个100 Mbps的互联网连接和一台快速的计算机:许多用户将等待更长的时间。
如果瓶颈是服务器之间的网络速度,那么这两个站点实际上可以在为页面提供服务时对不同的API进行数千次调用。
这两种情况表明,网络在理论上可能不会成为您的瓶颈(在实践中,您应该进行实际的基准测试和性能分析,以确定在特定硬件上托管的特定系统的瓶颈的确切位置)。花在进行实际工作(将是SQL查询,压缩等)并将结果发送给最终用户上的时间更为重要。
考虑数据库
通常,使用数据库将数据库与Web应用程序分开托管。这可能会引起关注:托管应用程序的服务器与托管数据库的服务器之间的连接速度如何?
似乎确实在某些情况下,连接速度会出现问题,即当您存储大量不需要由数据库本身处理并且现在应该可用的数据时(即大的二进制文件)。但是这种情况很少见:在大多数情况下,传输速度与处理查询本身的速度相比并没有那么大。
真正重要的传输速度是公司在NAS上托管大型数据集的时间,并且多个客户端同时访问NAS。SAN就是解决方案。话虽如此,这不是唯一的解决方案。Cat 6电缆可支持最高10 Gbps的速度;绑定也可用于提高速度,而无需更改电缆或网络适配器。存在其他解决方案,涉及跨多个NAS的数据复制。
忘记速度;考虑可扩展性
Web应用程序的重要一点是能够扩展。尽管实际性能很重要(因为没人愿意花钱购买功能更强大的服务器),但可伸缩性却更为重要,因为可伸缩性可让您在需要时投入更多的硬件。
同样,虚拟机在十年前被视为巨大的性能问题。实际上,将应用程序托管在服务器上与将其托管在虚拟机上对性能产生重要影响。尽管今天的差距要小得多,但仍然存在。
尽管性能有所下降,但虚拟环境由于其提供的灵活性而变得非常流行。
与网络速度一样,您可能会发现VM是实际的瓶颈,并且根据您的实际规模,直接托管应用程序就可以节省数十亿美元,而无需VM。但这对于99.9%的应用程序不会发生:它们的瓶颈在其他地方,并且由于VM的损失而造成的几微秒损失的缺点很容易通过硬件抽象和可伸缩性的优势得到补偿。