最近我创建了一个 Web 应用程序。该应用程序有一些静态部分(库、类等)和动态部分(图像、缓存、日志等)。但是,应用程序的一些静态部分需要很少的更改。我们称它们为部分静态。总体而言,有静止的,部分静态和动态的部分。
因此,我正在尝试将我的应用程序适配到 Amazon AWS(EC2 和 S3)。我认为将所有应用程序文件放入 EC2 实例不是一个好主意。我正在考虑将静态和部分静态部分放入 EC2,将动态部分放入 S3。
- 一旦我的应用程序在 EC2 上稳定下来,我就会创建一个 AMI 并将其复制到新实例。
- 每当我需要更改部分静态部分时,我都会终止除一个实例之外的所有 EC2 实例,然后进行更改。更改后,我会创建新实例。
- 上传的文件、图像等动态部分将由所有实例共享,不会引起任何同步问题。
这是使用 EC2 和 S3 的适当方式吗?
答案1
我正在考虑将静态和部分静态部分放到 EC2,将动态部分放到 S3。
我觉得你用的是静止的和动态的与我们大多数人的理解不同。静态数据是用户上传的图像。动态数据是代码生成的东西。我认为你关注的是数据可能变化的频率。也许你的意思是用户图像是静态的,一旦上传,它们就永远不会改变,而静态 HTML 文件你可能偶尔会更新。接下来,我将分别用我自己的术语来指静态和动态:按原样提供的文件和生成数据的代码文件。
静态文件应托管在 S3 上。即使您最终可能会更改它们或停止引用它们。最好只是让文件的每个版本都有一个唯一的名称。
动态数据应托管在您的 EC2 实例上。理想情况下,您将有一种无需终止实例即可更新该数据的方法,这可能是一种共享文件系统,它允许您让所有节点同步它们所服务的内容。或者,如果可以接受节点从不同代码提供服务的时间间隔较小,您也可以使用脚本来推送文件。