我们有一个应用程序,它将在 S3 中存储大量数据并将其提供给全球受众,从而最大限度地减少延迟。因此,我们一直在使用 Amazon CloudFront 进行测试,并看到了良好的结果。
但是,我们需要一个薄的中间件层(做安全等),我们想把它放在 EC2 中。由于安全限制,此中间件层将从 S3/CloudFront 进行文件流式传输:
S3/CloudFront -> EC2 -> 客户端
我们可以在地理上分布 EC2 节点(美国东部/西部和爱尔兰),但问题是欧盟的客户端会访问我们的美国服务器并从那里获取数据,从而使 CloudFront 的大部分性能优势没有实际意义。我一直在研究 EC2 文档,但我找不到一种内置的方法来获得 EC2 的地理分布版本(如 CloudFront)。
Elastic Load Balancing 听起来像是要走的路,但我似乎无法找到一种方法来根据路由进行定向……最好,我们希望将大量内容保持在 EC2/S3/etc 之外。最低限度(出于显而易见的原因)。
任何想法如何在 EC2/S3 框架内做到这一点?DNS/路由技巧?
谢谢!
使用中间层通常会抵消分布式 CDN 的好处,因为在大型中央数据中心中您将只有几个节点来提供内容,而不是许多边缘缓存节点。如果您的计划确实需要首先通过服务器传输内容,请跳过 CloudFront 并坚持使用 S3,因为您不会从中获得任何好处。
更好的方法是将“安全等”的含义正式化。看看您是否可以使用 CDN 中内置的身份验证和访问控制。S3 和 Cloudfront 使用签名来提供对谁可以访问内容的广泛控制,您甚至可以创建将在几小时或几分钟后过期的限时 URL 。这些特殊的 url 可以由您的网站创建,这样用户就不能深度链接到内容或与其他人共享链接,并且通常提供足够好的安全性,仍然可以让您从边缘缓存中受益。
我对 Amazon 文档不是很熟悉,但 Windows Azure 也有共享访问签名的概念,它允许您委派上传或下载的权限,而无需释放您的私钥。Channel 9 上最近有一期 Cloud Cover 插曲很好地描述了如何创建共享访问签名以及如何使用它们来保护内容并在 CDN 上委派权限。
您可以使用支持根据用户所在国家/地区将请求路由到不同服务器的 DNS 服务,但如果您从 EC2 提供数据,则使用 Cloudfront 可能没有意义,而且从外观上看,使用 S3 也没有意义,因为您总是从 EC2 实例发送数据。
也许如果您提供更多关于您发送的数据类型的信息,一个更好的解决方案可能会变得可见。
您可以部署全球负载平衡解决方案,其中使用地理邻近性将客户端(通过 DNS 答案)引导到最近的数据中心。您可以在云中运行一些软件解决方案(在您的情况下为 EC2),例如 Zeus GLB。您甚至可以获取免费评估并在您的环境中进行测试。