0

我决定在我的 Android 云应用程序中使用 Amazon AWS,这是一个照片共享应用程序。我用 PHP 和 MySql 在 EC2 上建立了一个实例,用于处理简单的请求和存储基本的用户信息。我还设置了一个 S3 服务来存储所有照片。

但现在我想要一些建议。我不确定如何同时处理这三个。EC2 服务器是否应该始终用作使用应用程序的最终用户和 S3 服务之间的中介?或者,Android 上的最终用户是否应该在可能的情况下直接与 S3 通信?

例如,用户在我的应用上注册并决定上传图片。我是否应该将 JPEG 发送到我的 EC2 服务器,然后让服务器将图片发送到 S3?还是应该直接将其发送到 S3,在设备上取回 URL,然后将其发送到我的 EC2 服务器?无论哪种方式,我都需要将 S3 url 地址存储在我的 MySQL 数据库中,以便将它们发送给其他用户,以便他们可以访问新的公共图像。

关于我应该如何做到这一点的任何想法?

4

1 回答 1

2

我不认为你真的有选择。为了安全起见,您将不得不通过 EC2。如果手机应用程序直接上传到 S3,则意味着 S3 存储桶要么是公开可写的,要么访问凭证存储在用户的手机上,这两者都是危险的。这意味着您需要通过 EC2 上传或至少让 EC2 向 S3 颁发时间有限的凭据(不确定后者是否可行或一个好主意)。

如果您愿意允许任何人查看任何图片,那么您可以让 S3 实例公开可读,并且手机应用程序可以从 EC2 实例获取 url,然后直接从 S3 下载图片。这将减轻一些 EC2 负载。

减轻 EC2 负载的另一种方法是拥有一个专用的 EC2 实例,仅用于处理与运行数据库的实例分开的上传。这样,如果您的上传服务器受到重创,您的应用程序仍然可以访问数据库、检索 S3 url 并下载图片。

您还需要考虑应用程序的可扩展性和正常运行时间。Amazon 对单个 EC2 实例甚至单个可用区都没有任何正常运行时间保证,因此如果您希望您的服务器可靠地在那里,您需要至少跨两个可用区进行扩展。(两个区域也不是一个坏主意,但对于大多数应用程序来说太过分了。)

于 2013-01-10T22:02:30.730 回答