2012-02-24 135 views
5

我正在使用REST API将大量小项目传递给S3。平均有效载荷是〜10个字节。Amazon S3:每秒最大PUT请求数

的项目都进入一个水桶,并随机名称(即没有字典顺序)

从EC2,我已经成功的4-500每秒的速度。我正在使用一个由96个线程组成的线程池,其中有64个TCP连接。

我偶尔会得到一个HTTP 500,但还没有收到503 - 意味着表明客户端降低了请求的速度。

有没有人知道我可以实际获得什么?我知道EC2和S3之间的管道可以管理20 MB/s的吞吐量,所以我希望做得更好一点。

回答

1

使用REST传输这种微小的有效负载时,您看到的性能不佳并不奇怪。

做得更好的方法是重构协议或存储的本质,以免事务开销不是主导因素。

事实上,管道的大小对于你的问题来说并不重要,因为你用HTTP开销完全填充管道;例如,如果您可以将连接的吞吐量增加一倍,那么您将能够发送两倍的无用开销,并且实际上不会改变可用数据。

+1

我意识到正在传输的大部分数据都是HTTP信息。我无法控制协议; S3仅限REST和HTTP。不幸的是,由于我的应用程序的性质,S3没有批处理功能;将小块数据打包成大块数据是不可行的。 – user756079 2012-02-24 06:28:52

+0

有没有你没有把这些东西放入SimpleDB的原因,它支持批量放置操作?他们是否需要直接通过HTTP访问? – Daan 2012-02-24 07:41:25

+0

@ user756079 - 我知道您无法控制传输协议,但您可以控制通过该通道发送的内容。既然有一个因素是你不能改变的,那么你必须要做的就是重新思考你的有效载荷的内容(和大小)。 – msw 2012-02-24 13:22:46