我試圖找到 Go 網(wǎng)絡(luò)服務(wù)器的最大吞吐量。我在 8 核機(jī)器(Intel Xeon 2.5 Mhz)上運(yùn)行 simplewebserver,并在不同的 8 核機(jī)器上運(yùn)行 wrk 工具。Iperf 命令顯示這些機(jī)器之間的速度約為 8-10Gbps。最初,我使用 apache ab 工具犯了一個(gè)錯(cuò)誤,該工具每秒只提供 16k 個(gè)請(qǐng)求。問題與鏈接相同。現(xiàn)在,當(dāng)我切換到 wrk 工具時(shí),我每秒收到大約 90k 個(gè)請(qǐng)求,大約 11MB/秒。在第一臺(tái) 8 核機(jī)器上,我運(yùn)行了 simplewebserver.gopackage mainimport ( "io" "net/http" "runtime")func hello(w http.ResponseWriter, r *http.Request) { io.WriteString(w, "Hello world!")} func main() { runtime.GOMAXPROCS(8) http.HandleFunc("/", hello) http.ListenAndServe(":8000", nil) }在另一臺(tái) 8 核機(jī)器上,我跑了 ./wrk -t8 -c1000 -d10s http://10.0.0.6:8000/結(jié)果:Running 10s test @ http://10.0.0.6:8000/8 threads and 1000 connectionsThread Stats Avg Stdev Max +/- StdevLatency 42.65ms 114.89ms 1.96s 91.33%Req/Sec 11.54k 3.01k 25.10k 74.88%923158 requests in 10.10s, 113.57MB readSocket errors: connect 0, read 0, write 0, timeout 20Requests/sec: 91415.11Transfer/sec: 11.25MB我可以說我已經(jīng)達(dá)到了 golang Web 服務(wù)器的最大吞吐量嗎?我得到 11 MB/秒的速度,這對(duì)于基本程序來說看起來很小。如果我在 www.google.com 頁面上運(yùn)行 wrk 工具,我會(huì)得到大約 200 MB/秒。即使對(duì)于像 kafka(java 服務(wù)器)這樣的大型復(fù)雜計(jì)算系統(tǒng),基準(zhǔn)測(cè)試結(jié)果也超過 70 MB/秒(https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-writes-second-三便宜的機(jī)器)。golang 服務(wù)器如何處理每秒數(shù)百萬個(gè)請(qǐng)求的極端工作負(fù)載(至少超過 100MB/秒)?我有什么假設(shè)錯(cuò)了嗎?更新:我在具有相同規(guī)格的 16 核機(jī)器上運(yùn)行相同的程序。我將 maxprocs 更改為 16,結(jié)果提高到 120k 請(qǐng)求/秒。我覺得我已經(jīng)達(dá)到了 golang http 服務(wù)器的最大值,因此我沒有發(fā)現(xiàn)請(qǐng)求/秒有任何顯著增加。
2 回答

慕斯王
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
Golang net/http 相當(dāng)慢。如果目標(biāo)是最大化請(qǐng)求率,還有其他實(shí)現(xiàn)。例如https://github.com/valyala/fasthttp在我的測(cè)試中,fasthttp 使查詢率翻倍。我的測(cè)試是一個(gè)簡(jiǎn)短的請(qǐng)求和簡(jiǎn)短的回復(fù)。
該庫有一些限制,例如不支持 HTTP/2。如果您需要 REST API 的 HTTP 并且您不是在尋找互操作性,fasthttp 將非常適合
- 2 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報(bào)
0/150
提交
取消