group-telegram.com/Golang_google/3030
Last Update:
Π Datadog ΠΎΠ±Π½ΠΎΠ²ΠΈΠ»ΠΈ Go Π΄ΠΎ Π²Π΅ΡΡΠΈΠΈ 1.24 ΠΈ ΡΡΠ°Π·Ρ Π·Π°ΠΌΠ΅ΡΠΈΠ»ΠΈ ΡΠ΅Π·ΠΊΠΎΠ΅ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΡΠ΅ΠΌΡ?
Π Go 1.24 ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π½ΠΎΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ
Π΅Ρ-ΡΠ°Π±Π»ΠΈΡ β Swiss Tables, Π²Π΄ΠΎΡ
Π½ΠΎΠ²Π»ΡΠ½Π½Π°Ρ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΎΠΌ ΠΎΡ Google.
π Π§ΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΎΡΡ Π² Go:
β Π±ΠΎΠ»ΡΡΠ΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ
overflow-Π±Π°ΠΊΠ΅ΡΠΎΠ²
β ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ load factor Π΄ΠΎ 87.5%
β Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΡ Π³ΠΈΠ±ΡΠ΅: split Π²ΠΌΠ΅ΡΡΠΎ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ
β ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΈ Π»ΡΡΡΠ΅ ΠΊΡΡ-Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ
π ΠΡΠΈΠΌΠ΅Ρ:
map Ρ 3.5 ΠΌΠ»Π½ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²:
β’ Go 1.23 β 726 MiB Π½Π° Π±Π°ΠΊΠ΅ΡΡ
β’ Go 1.24 β 217 MiB
β ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ: ~500 MiB Π½Π° ΠΎΠ΄Π½Ρ ΠΊΠ°ΡΡΡ
ΠΠΎ Π½Π°ΡΡΠΎΡΡΠ°Ρ ΠΌΠ°Π³ΠΈΡ Π½Π°ΡΠ°Π»Π°ΡΡ ΠΏΠΎΠ·ΠΆΠ΅:
π οΈ ΠΠ½ΠΈ Π½Π°ΡΠ»ΠΈ, ΡΡΠΎ Π² ΡΡΡΡΠΊΡΡΡΠ΅ Response
:
β’ Π±ΡΠ»ΠΈ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»Ρ (`RoutingKey`, `LastModified`)
β’ ΠΏΠΎΠ»Π΅ ShardType
Π±ΡΠ»ΠΎ int
, Ρ
ΠΎΡΡ Ρ
Π²Π°ΡΠ°Π»ΠΎ uint8
ΠΠΎΡΠ»Π΅ ΡΠΈΡΡΠΊΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ ΡΠΏΠ°Π» Ρ 56 Π΄ΠΎ 24 Π±Π°ΠΉΡ β ΠΈ ΡΡΠΎ Π΄Π°Π»ΠΎ Π΅ΡΡ -250 MiB RSS Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π°.
π‘ ΠΡΠ²ΠΎΠ΄Ρ:
1. ΠΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Go = Π±Π΅ΡΠΏΠ»Π°ΡΠ½Π°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΊΠ°ΡΡ
2. ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ
= Π΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΡΠΈΡΠ°
3. ΠΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ β must-have
π Π ΠΈΡΠΎΠ³Π΅: ΡΠΎΡΠ½ΠΈ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
π ΠΠΎΠ»Π½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ:
https://www.datadoghq.com/blog/engineering/go-swiss-tables
@golang_google