go - 如何实现 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?
解决方案
从您的时间安排中排除会话设置,更重要的是,使用具有 100Gb 网络(或更多...)的实例类型
推荐阅读
- javascript - Testcafe 在反应中无法识别我的 DOM
- angular - 如何使用 Angular 运行 Electron?
- java - okHttpClient 响应给出垃圾值
- javascript - 如何创建动态变量并将它们与 useState() 一起使用
- javascript - 修复旋转元素内的文本方向
- r - 在分组的数据框列表上使用 lapply
- c# - 将文件加载为字节数组,而不在内存中分配它 C#
- android - 为什么 Android BillingClient v2 慢速信用卡测试永远不会取消?
- python - 可以通过“conda install”命令安装所有“pip”包吗?
- c# - 循环此 switch case 语句时遇到问题