将 EC2 与 AWS Amazon 的 S3 和 RDS 相结合

将 EC2 与 AWS Amazon 的 S3 和 RDS 相结合

我想知道以下方案是否可行。另外,如果您认为我发现了错误,请随时指出。

我必须为一家公司提出并创建一个系统架构模式,该公司目前在 3 个不同位置运行 3 台不同的服务器(不同的服务器提供商),每台服务器托管大约 50++ 个网站。

所以,现在的情况是这样的:

  • 服务器1:

    • website1.com
    • website2.com
    • website3.com
    • website4.com
    • ....
  • 服务器2:

    • website21.com
    • website22.com
    • website23.com
    • website24.com
    • ....
  • 服务器3:

    • website31.com
    • website32.com
    • website33.com
    • website34.com
    • ....

Server1 有一个很大的 MySql 数据库,其他每个服务器(server2、server3 和包含的 server1)都通过远程 mysql 连接使用该数据库。

所以,

来自 server1 服务器的 MySQL 服务器:

  • server1(本地)
  • server2 (远程)
  • server3 (远程)

域 website1.com 下的 Server1 有一个包含图像的文件夹,服务器上的所有其他网站(包括 server1)都必须访问这些图像。

例如:

website1.com 使用图片文件 image/image1.jpg,同时 website2.com 和 website3.com 使用相同的 image1.jpg 作为 http://website1.com/image/image1.jpg

此外,每个服务器上的每个网站每次都会检查文件是否存在。实际上,检查是由 php 完成的,在服务器端。它们使用 本地检查图像是否存在,if_file_exist()并使用 远程检查图像是否存在if (getheaders() ==200 )

例如

如果访问者尝试访问 website1.com,则 website1.com(实际上是服务器 1)将检查if website1.com/image/image1.jpg exists。同样,如果访问者尝试访问 website21.com,则 website21(实际上是服务器 2)将检查if header of http://website1.com/image/image1.jpg == 200

所以,

server1 上的 website1.com/image/image1.jpg 访问所有网站并检查该图片是否存在:

  • website1.com
  • website2.com
  • ....
  • website21.com
  • website22.com
  • ....
  • website31.com
  • website32.com
  • ....

在我看来,

最好的情况可能是这样的:

3 个 AWS EC2 实例作为运行服务器。1 个 AWS S3 存储桶,其中包含 /image/ 文件夹中的所有文件 1 个 RDS 数据库,为 3 个 EC2 实例中托管的所有网站提供服务。

在这种情况下,

一个 EC2 实例可以从 S3 存储桶中获取并检查文件是否存在,并且同一个 EC2 实例将从 RDS 获取数据库上的数据。

如果我是正确的,那么从 EC2 实例检查文件是否存在并从 S3 获取文件的延迟应该非常低,因为它应该是通过 AWS 基础设施“本地”进行的。

并且由于同样的原因,对共享 RDS 的查询应该更快、更安全。

所以,

如果访问者访问 website1.com

我们将有以下内容:

website1.com -> EC1 实例

  • EC1 中的 html/php 文件
  • 从 RDS 获取查询数据
  • 从 S3 存储桶获取图像数据

website21.com -> EC2 实例

  • 来自 EC2 的 html/php 文件
  • 从 RDS 获取查询数据
  • 从 S3 存储桶获取图像数据

这是一个可行的方案吗?还是我发现了错误?

您还看到其他选择吗?

另外一个选择:

通过使用 Amazon CloudFront 代替 S3 是否可以更快地解决问题?

编辑

由于以下原因,应进行检查:

image1.jpg 是一张图片。image1-es.jpg 是针对特定国家 ES(西班牙)的专用图片。

换句话说,服务器应该检查是否有专门针对来自 ES(西班牙)的访问者的图像,如果没有,则服务器提供一般图像。

答案1

您的计划可能会奏效,但可能不是最佳方案。S3 不是文件系统,因此您的应用程序可能需要重写才能利用它。有些软件可以让它看起来有点像文件系统。

你最好使用

  • EC2 虚拟机
  • EBS 卷最有可能只运行操作系统。如果您不担心与其他实例共享文件,则可以将部分或全部文件(静态 + PHP)放在 EBS 卷上。
  • EFS(Elasic 文件系统)用于存储共享文件。如果您运行 Wordpress,整个 Wordpress 安装都可以在这里进行 - 这样,如果您扩展到运行同一网站的多个 Ec2 实例,您的 wp-content 文件夹等将共享,并且您只需维护一个 Wordpress 实例。请注意,这可能仍处于测试阶段。
  • CloudFront 用于 CDN 文件传输
  • 数据库的 RDS

提供特定区域的文件是您的软件和亚马逊基础设施的责任。

相关内容