
O relatório é dedicado ao tópico de otimização de desempenho, mas não totalmente, mas aos pecados da otimização de desempenho (no VictoriaMetrics).
Vídeo
Eu vou te dizer o que é depois. Primeiro, vou falar um pouco sobre mim.

- Eu sou Alexander Valyalkin. Meu apelido é valyala.
- Eu sou o autor de bibliotecas Go, como Fasthttp , Fastjson , Quicktemplate . Essas bibliotecas são otimizadas para velocidade.
- .
- 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 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.
Bate-papo por telegrama: https://t.me/VictoriaMetrics_ru1