我试图在S3中重新组织大约1.5亿个非常小的对象。最大的是13 MB。其中约99.9%小于200 KB。其中约98%小于2 KB。我需要每秒处理至少100个密钥才能使时间变得模糊不清。
我一直在尝试使用m4.xlarge中的Java SDK同时下载和处理它们。我使用了50个线程,每个线程1)从RabbitMQ获取密钥,2)从S3下载文件,3)解压缩文件,4)将其拆分为消息,以及5)将拆分消息重新发布到RabbitMQ中进行重组。
实际上,应用程序难以维持每秒20个密钥(以第1步的入站队列衡量)。它似乎很可能是第2步--S3--它阻碍了流程;逻辑和其他IO似乎可以忽略不计。这表明用于S3和S3的Java SDK仅允许每秒大约40 KB的下载量,这当然是荒谬的。
我知道大量的小物件远非理想 - 这是我尝试重新组织它们的重要原因 - 我可以要求AWS优化转移(我正在做) ,但除此之外,只是增加并发性(这似乎已经足够),我可以采取哪些步骤来提高吞吐量?