
Laporan ini didedikasikan untuk topik optimasi kinerja, tetapi bukan optimasi kinerja, tetapi dosa-dosa optimasi kinerja (dalam VictoriaMetrics).
Video
Aku akan memberitahumu apa itu nanti. Pertama, saya akan menceritakan sedikit tentang diri saya.

- Saya Alexander Valyalkin. Nama panggilan saya adalah valyala.
- Saya penulis perpustakaan Go seperti Fasthttp , Fastjson , Quicktemplate . Perpustakaan ini dioptimalkan untuk kecepatan.
- .
- timeseries VictoriaMetrics.

? , :
- .
- hardware , , .
- β benchmark games. , benchmarks. production.

, . . , .
Fasthttp, fastjson, VictoriaMetrics. Go . Go. .

Fasthttp. Fasthttp β net/http, , .

Fasthttp , :
- .
- HTTP headers.
- slices maps
key->value. -
requestCtx. - DNS .

c . HTTP Go. .
. http . , . , . , . , . . keep-alive, .
? , , / , . . .

, . , HTTP pipelining .
HTTP pipelining β HTTP , .
. . bufio.NewReader bufio.NewWriter. . : , , Write .
, . , , .
pipelining connection. ? β - , . , , , .

? , , . 4 . . . , bufio.Reader, reader 4- .
4 , . , .
. 4 , . , , Β«flushΒ». . , . .

https://en.wikipedia.org/wiki/HTTP_pipelining#Implementation_status
https://github.com/TechEmpower/FrameworkBenchmarks/issues/4410
.
, HTTP pipelining head of line blocking. - , , HTTP connection , , . , .
. HTTP pipelining . , , HTTP pipelining, . ? HTTP, 2000- , HTTP pipelining, HTTP pipelining. , HTTP pipelining. HTTP 2.0 . , HTTP pipelineing, HTTP 2.0.
HTTP pipelining β , , Techempower benchmarks . Techempower benchmark β , HTTP . , plaintext. 16 pipelining requests . HTTP pipelining fasthttp 2 .
. . , , , .

β HTTP headers.
Fasthttp HTTP headers . HTTP headers. . headers byte slice . byte slice HTTP headers.

Fasthttp, HTTP header . : Β«Hello, world!Β» http http headers.

, http headers. , header Β«X-Forwarded-ForΒ», Fasthttp HTTP header.

? , HTTP , HTTP headers .

β , http . , , . .

slices maps. Fasthttp slices key->value goβ map' , , . . , query args, cookies.

, . key->value byte slices.

slice map.
? , slice map β byte slice. kvs β byte slice . capacity , , , . . . slice, . . -. β [:0], , , kv.value, - .
slice map, kv.value byte slice slice map. , , .

slice map. slice mapβ . , . .

? , slice maps, , query args cookies, β . slice maps , map Go.
, , slice maps maps. . . slice maps .
, β , . . . query args , slice map , map, map.

. query args , , , slice map β O(N) , . . , slice. , slice map, .
β , slice map . , slice map - , , , slice map , .
β , , slice map, slice map. , slice map . .

β RequestCtx . RequestCtx β , http.ResponseWriter http.Request. , RequestHandler. HTTP .
. . RequestCtx. . ctx.Request. RequestHandler RequestCtx response connection. . . . RequestHandler RequestCtx , , , RequestHandler.

? , RequestCtx. , , . .

, , . API . , - RequestCtx RequestHandler - , , . RequestHandler. , Fasthttp, . . RequestCtx , , , .
, β . RequestCtx - request response body, - . RequestCtx , . .

β DNS. Fasthttp . resolve DNS . Fasthttp DNS , . . resolving. Fasthttp mapping name ip .
, . resolveHost. dnsCache mapβa. . , , . , locks. , . , .

? DNS resolving.

β , HTTP , DNS . β Kubernetes, pods, IP-. , , Fasthttp , podβ . , .

Fasthttp . Fastjson .
Fastjson β encoding/json. , . , .

"" fastjson:
.
.
integers floats.

. Fastjson Parser, JSON. , , .
. Parser.Parse. value. value . . . value Parser. foo. b. b .
JSON. v b, , v p, . . . vv, , .

? , JSON.

β , API . , , , JSONβ, .
β , , . . . JSON , , , , 1 , JSON, , 2 , . . . 2 .

β unescaping . Fastjson . escape . escape , . . escape , , .

, , escape , . strings.IndexByte β goβ . .

β , escape .
β , , escape , β , , , . .

β floats integer Fastjson.

, , strconv.

? : Β« strconv ?Β». , . . edge cases. . . , strconv . , , , strconv.
β , 0, .
β , - , .

VictoriaMetrics .

. VictoriaMetrics Prometheus remote write API . protobufs.

protobuf , Prometheus. , , . .

. protobuf. timeseries, labels samples. label name value. Sample, , timestamp.

. labels name string. byte slice. , , , name. byte slice data string. , . . string . , , . .

. slice labels, . . slice labels. . label , label , label. capacity , , .

, . , , protobuf.

, . , string byte slice, byte slice , name. byte slice, protobuf, , , name , .

. β .

β sync.Pool.

. strconv.FormatInt Go . Int, nSmalls, 99 100. base ( , ) 10. small, .

? , , 100, .

, , , . . . , , , .

sync.Pool β .
β . , sync.Pool byte slice, byte slice'.

β CPUs. (pipeline). pipeline , , , . , . . pipeline .
. , β . , , Meltdown Spectre, - .

. . , β ? API. . ..

Fasthttp , . . . benchmarks. ? - 10 %, . . 10 % 200 %?
. . , 10 %, . Fasthttp , TechEmpower benchmarks. c Fasthttp, net/http.
Obrolan Telegram: https://t.me/VictoriaMetrics_ru1