首页 > 解决方案 > 如何实现 S3 宣传的 5,500 HEAD rps?

问题描述

链接到 s3 广告请求速率(每个前缀 5500 rps):https ://aws.amazon.com/about-aws/whats-new/2018/07/amazon-s3-announces-increased-request-rate-performance/

我的代码:

package main

import (
    "log"
    "math/rand"
    "net/http"
    "strconv"
    "time"

    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)

func main() {
    sess := session.Must(session.NewSession(&aws.Config{
        Region: aws.String("us-east-1"),
    }))
    client := s3.New(sess)
    for i := 0; i < 1000; i++ {
        go func() {
            r := rand.Intn(35000)
            start := time.Now()
            req, _ := client.HeadObjectRequest(&s3.HeadObjectInput{
                Key:    aws.String("one-prefix/" + strconv.Itoa(r)),
                Bucket: aws.String("MY-BUCKET"),
            })
            req.Sign()
            if _, err := http.DefaultClient.Do(req.HTTPRequest); err != nil {
                log.Println(err)
            }
            log.Println(r, "cost", time.Since(start))
        }()
    }
    <-time.After(10 * time.Second)
}

在一个 m5.large 上完成这些 goroutine 大约需要 5 秒,所以大约 200 rps,这只是宣传的 5500 rps 的一小部分。想知道我做错了什么以及如何使用 s3 产生更好的 rps?

标签: goamazon-s3

解决方案


从您的时间安排中排除会话设置,更重要的是,使用具有 100Gb 网络(或更多...)的实例类型


推荐阅读