我的问题是关于虚拟机以及如何通过服务器连接到互联网来传递其内容。
我有一个 Ec2 Windows 实例,它的网络连接似乎为 100mbps
如果我要从该 EC2 实例传递内容,那是我的潜在瓶颈吗?
s3 有何不同?我猜 s3 并没有真正的潜在出站瓶颈?
注意:我知道 s3 及其 CDN 更适合静态内容,但是我现在需要探索这种情况。我们的 HTML 页面需要通过 AJAX 访问服务器端页面,并且由于目前没有万无一失的解决方法,我们的内容和服务器需要位于完全相同的域中,因此排除使用 S3。
所需带宽:我不确定,我们最多可以有 100 名用户同时下载视频,可能不会更多。每个视频最多 5mb,但他们最多可以观看 20 个视频。
答案1
我不能代表 Windows 实例发言,但我会假设它们的基本特征与 Linux 实例非常相似。
您对带宽使用的估计是同时下载 100 个视频(我不确定您指的是下载文件还是流式传输视频 - 我假设是后者)。如果我们采用 512kbps 的流速率,则需要大约 51Mbit/s 或 6.5MB/s。
EC2 实例的 I/O 性能(包括带宽)各不相同。I/O 性能分为 3 个级别:低、中、高。但请记住,磁盘 I/O(即来自 EBS 卷的 I/O)也依赖于带宽。您只能真正考虑 EC2 网络内的带宽(因为它在互联网上完全可变)。
一些典型的数字来量化“低”、“中”和“高”(不同的来源对理论值引用不同的数字,因此它们可能不完全准确)。
高的: 理论上:1Gbps = 125MB/s;实际(来源: 750Mbps=95MB/s
缓和: 理论值:250Mbps;实际值(来源,p57): 80Mbps=10MB/s
低的: 理论上:100Mbps;实际(来自我自己的测试):10-15Mbps = 1-2MB/s
(实际上也有一个“非常高”的水平(理论上是 10Gbps)但仅适用于集群计算实例)。
另一个值得一提的是变化程度。在较小的实例中,由于物理组件在更多虚拟机之间共享,因此性能的变化更大。无论如何,您可以预期性能会有大约 +/-20% 的变化(来源:1,2,3)。对于您的情况(根据顶部的假设/计算),您可能需要 13MB/s 的峰值带宽(双倍 6.5MBps,因为磁盘 I/O 也受到网络限制)。如果您要传输带宽较低的内容,您应该能够使用具有“中等”I/O 性能的实例(请参阅实例类型页面),如果您的计算导致更高的带宽需求,则需要具有“高” I/O 性能的实例。简单地流式传输数据不应该受到 CPU 或内存的限制,但维持 100 个同时连接可能至少需要一个中等大小的实例 - 如果带宽是一个问题,基于上述情况,大型实例将是一个更安全的选择)。
我建议对您启动的服务器进行基准测试,看看它们是否满足您的(计算出的)需求。启动两个实例(相同类型)并iperf
使用实例的私有 IP 地址在每个实例上运行 - 如果您使用默认设置运行它,则需要在安全组中打开端口 5001)。此外,EC2 网络之外的大多数测试显示结果在 80-130Mbps 之间(大型实例) - 尽管这些数字不一定有意义。
如果您的设置允许,CDN 更适合您的需求。S3 的带宽限制似乎约为 50MB/s(至少从单个实例来看),如本文,但这高于您的要求(S3 不支持流媒体)。Cloudfront 更适合您的任务(因为它设计为 CDN),默认情况下支持 1000Mbps=125MB/s(来源)可应要求提供更高的带宽,并且还可以传输内容)
答案2
这些数字似乎会随着时间和不同实例类型数量的增加而变化。但许多人都发布了基准测试。我通过谷歌搜索找到了一些好东西[instance category] ec2 network benchmark
。
例如,我想知道一个m4.xlarge
实例的带宽,于是我搜索了一下ec2 m4 network benchmark
。我在《华盛顿邮报》工程博客上找到了这个测试结果:
Type Cost Bandwidth Bandwidth Cost (1Gb/s) Bandwidth Cost EBS optimized
...
m4.xlarge $0.252 791Mb/s $0.320 $0.320
...