如何创build具有大量持久性数据的多个完全相同的AWS EC2服务器实例?

我有一个CPU密集型数据处理应用程序,我想运行很多(〜100,000)input文件。 应用程序需要一个大的(〜20GB)数据文件才能运行。 我想要做的是

  • 创build一个安装了我的应用程序和相关数据文件的EC2机器映像
  • 启动大量(例如100)这个图像的实例
  • 将我的input文件分成100个批次,并发送一个批次在每个实例上进行处理

我很难找出确保每个实例都可以访问大型数据文件的最佳方法。 数据文件太大,不适合AMI的根文件系统。 我可以使用块存储,但给定的块存储卷只能连接到一个实例,所以我需要100个克隆。

有什么方法可以创build一个自定义的图像,在根filsystem有更多的空间,以便我可以包含我的大型数据文件? 还是有更好的方法来解决这个问题?

如果数据不变,请将其放在EBS卷中并对其进行快照。 当您启动每个新节点时,请根据快照创build一个新卷并装入它。 制作快照是一个相当缓慢的过程,但基于快照创build卷的速度惊人的快!

如果你的数据有点变化,把它放到S3中是一个更简单的过程来维护,数百个节点可以一次拉动数据而不会明显降低速度(相比于单个节点拉下数据)。 总的来说,这将比上面的EBS方法慢,但实现和维护会更简单。

把你的数据文件在S3中。

创build一个基于EBS的“主”实例:

  1. 在实例创build期间挂载实例存储
  2. 在启动时,将大型数据文件复制到实例卷
  3. 在本地处理数据

创build实例的AMI并从AMI启动100个实例。

这样做的好处是每个实例都有自己的本地数据副本,您不会花费金钱在EBS卷上存储多个数据副本。 缺点是在启动时从S3复制数据文件,但一旦复制,处理文件应该是快速的,因为它是本地的。

选项:

  1. 使用S3存储区来存储您的input数据。 将其安装在多个工作者实例上。

  2. 创build一个“主”实例,与您的工作者实例共享来自EBS卷(例如通过NFS)的input文件。