Amazon web services 如何增加AWS EC2实例的网络带宽?

Amazon web services 如何增加AWS EC2实例的网络带宽?,amazon-web-services,amazon-ec2,bandwidth,Amazon Web Services,Amazon Ec2,Bandwidth,我们在AWS EC2中托管了一个c4.8XL类型的站点。这是一个相当大的系统,拥有大量内存和计算资源。本周末,数千名用户试图在2小时内访问该系统。虽然它没有崩溃,但速度慢了很多,没有达到预期的水平。对统计数据的分析表明,有限的网络带宽是经济放缓的主要原因。CPU使用率保持在6%以下,但NetworkIn和NetworkOut在这段时间内似乎分别达到了60MB和200MB的峰值。虽然我不是一个网络爱好者,但一些在线阅读似乎表明,通过一个NIC的所有流量可能是网络带宽有限的主要原因。这是真的吗?在不

我们在AWS EC2中托管了一个c4.8XL类型的站点。这是一个相当大的系统,拥有大量内存和计算资源。本周末,数千名用户试图在2小时内访问该系统。虽然它没有崩溃,但速度慢了很多,没有达到预期的水平。对统计数据的分析表明,有限的网络带宽是经济放缓的主要原因。CPU使用率保持在6%以下,但NetworkIn和NetworkOut在这段时间内似乎分别达到了60MB和200MB的峰值。虽然我不是一个网络爱好者,但一些在线阅读似乎表明,通过一个NIC的所有流量可能是网络带宽有限的主要原因。这是真的吗?在不同类型的EC2实例上托管站点是否有助于增加网络带宽?以下是在重载情况下networkIn和networkOut指标的外观


是的,亚马逊有一个埃尼弹性网络接口的概念。而您可以向实例添加NIC;它仍然是一个逻辑接口。网络管道的供应和可用性在很大程度上取决于(完全取决于)您选择的实例类型。Amazon有几种类型/系列的实例,如R、I、C、D、G——分别在内存、IO、计算、密集存储和GPU方面进行了优化。你可以看看你能不能把max挤出来

无论您选择什么样的实例类型,实际上都会达到一个阈值,并且无法扩展到某个点之外。可伸缩性与其他可伸缩性因素(如内存/CPU)相比尤其独特


修改您的体系结构,而不是使用非常大/更大的实例,而是在和ELB后面使用几个中型或大型实例。

如果您受到带宽限制,当您达到限制时,该图将变得平坦。此外,正如其他人指出的,只有1MB/s的输出和3MB/s的输入,我可以在连接外部互联网的t2.micro上做更多的事情

系统如何处理每个请求?以下是我要看的事情列表,顺序如下:

  • 线程:应用程序中是否存在只有一个线程可以访问资源的瓶颈?这将使CPU使用率保持在较低水平,但会导致您看到的模式
  • 应用程序或服务器中存在错误的并发模式。负载测试,并寻找它变得越来越慢,随着连接的增加,而什么也不做
  • 单个CPU:一个CPU的负载率是否达到100%,而其他CPU大多处于空闲状态?(对于30+个内核,一个饱和的CPU只会给你3%的CPU使用率)。一个CPU饱和+其他CPU空闲通常意味着并发性问题,可能是在连接处理中
  • 内存使用是什么样的?你到底在用swap吗?(如果是这样的话,这是一个非常糟糕的迹象,并且会引发问题)。如果内存使用过多,则内存中的会话存储或处理程序线程池的大小过大通常是错误的
  • 磁盘I/O或外部网络请求:您是否正在读取或写入每个请求?vmstat将告诉您是否花费了很长时间等待I/O服务。如果是这样的话,我会先看看日志记录。
    • c4.8XL大型实例仅使用EBS,如果存储是磁性的,并且您写入访问日志,则每秒可以进行几百次写入。通用SSD每GB基本容量可提供3个IO/s,但可以突发到3000,直到IO点数用完为止
    • 操作系统将尝试合并写操作,但会有数千次并发操作

如果您的请求非常小,那么在网络层创建连接或每秒数据包时,您可能会遇到瓶颈,这并非不可能,但也不太可能。

您的网络输入和输出速度实际上大于50mb/s。如果您的CPU和内存保持在合理的范围内,那么您的实例就可以了。您还应该检查数据库上的连接日志(假设您在系统中运行RDB),速度减慢实际上可能是由于数据库上的响应速度慢导致web服务器响应速度慢


此外,您应该使用AWS Loadbalancer运行系统,并在网络输入/输出上使用触发器设置和自动缩放。这样,就可以启动一个辅助实例来帮助暂时增加网络上的负载。如果根本原因确实是数据库连接的增加,那么负载平衡器将无法解决此问题。相反,您希望改进缓存设置,以减少每个用户/连接到您网站的数据库的负担。

为什么只有一个实例?你能水平伸缩吗?我可以,也许我应该。我了解与单个实例相关的风险,但应用程序没有什么业务价值,这些风险是可以接受的。这是一年一次的事。水平扩展以满足CPU或内存或存储限制是可以理解的,但为了获得更高的带宽而不得不这样做似乎是一件很糟糕的事情。不过,200MB网络输入和60MB网络输出似乎太低,可能是我错了。我甚至不确定它是否每秒。AWS CloudWatch没有明确说明这一点。虽然您的实例有一个10 Gbit的网络接口,但不清楚它是否能够从ec2到internet实现该性能,或者性能是否仅限于实例间通信。您所获得的吞吐量约为1.8 Gbps,并带有开销。您是否启用了增强型网络?显然,AWS默认以60秒的间隔测量带宽。所以一般来说,我从ec2实例的峰值使用率中得到的是1MB/秒的网络输出和3.3MB/秒的网络输入。哇!这真是难以置信的低。但仍然不确定如何修复它@MikeBrant如果您仍然需要通过具有类似甚至更低带宽限制的负载平衡器,水平扩展将有何帮助?谢谢。基于我上面的评论还有其他想法吗?如果您仍然需要使用类似或甚至类似的负载平衡器,那么使用几个实例会有什么帮助