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

时间:2015-03-31 14:37:46

标签: amazon-web-services amazon-ec2 bandwidth

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

networkIn and networkOut metrics chart

3 个答案:

答案 0 :(得分:5)

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

系统对每个请求执行的操作是什么?以下列出了我要查看的内容:

  • 线程:您的应用程序中是否存在瓶颈,只有一个线程可以访问资源?这会使CPU使用率降低,但会导致您看到的模式。
  • 应用程序或服务器中的并发模式错误。负载测试并随着连接的增加而变得越来越慢,而什么都不做。
  • 个别CPU:一个CPU加载到100%而其他CPU大多是空闲的? (使用30多个内核,饱和CPU只能为您提供3%的CPU使用率)。一个饱和的CPU +其他闲置通常意味着并发问题,可能是在连接处理中。
  • 什么是内存使用?你在使用交换吗? (如果是这样的话,这是一个非常糟糕的迹象,并会导致问题)。如果内存使用过多,通常内存中的会话存储或过大的处理程序线程池都会出错。
  • 磁盘I / O或外部网络请求:您是在阅读还是写入每个请求? vmstat会告诉你是否要花很长时间等待I / O得到服务。如果是这样的话,我会先看一下日志。
    • c4.8xlarge实例仅使用EBS,如果存储是磁性的并且您写入访问日志,则每秒可以获得几百次写入。通用SSD为每GB基础提供3 IO / s,但在IO信用耗尽之前可以突破3000.
    • 操作系统会尝试组合写入,但会有数千个并发

这并非不可能,但你不太可能在连接创建或每秒数据包的情况下在网络层遇到瓶颈,如果你的请求非常小。

答案 1 :(得分:0)

您的NetworkIn和Out实际上> 50mb / s。如果您的CPU和内存保持在合理范围内,那么您的实例就可以了。您还应该检查数据库上的连接日志(假设您在系统中运行RDB)实际上可能是因为数据库响应缓慢导致Web服务器响应变慢。

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

答案 2 :(得分:-1)

是亚马逊有一个ENI的概念 - 弹性网络接口。虽然你可以为实例添加额外的NIC;它仍然是一个逻辑接口。网络管道的供应和可用性在很大程度上取决于(完全取决于)您选择的类型实例。亚马逊有几种类型/系列的实例,如R,I,C,D,G - 分别在内存,IO,计算,密集存储,GPU上进行优化。你可以看看你是否可以挤压最大值。他们之外。

无论您选择什么样的实例类型,您实际上都会达到一个阈值,并且无法超出某个点。可扩展性与内存/ CPU等其他可扩展性因素特别相同。

修改你的体系结构,而不是让非常大/更大的实例有几个中型或大型实例和ELB。