Solo.io, ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ°Π·Π²ΠΈΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ Π·Π° Π²ΠΎΠ΄Π΅ΡΠ΅ ΠΎΠ±Π»Π°ΠΊ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈ, ΠΈΠ·ΠΎΠ»ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠΈ Π±Π΅Π· ΡΠ΅ΡΠ²Π΅Ρ, Π³ΠΎ ΠΎΠ±ΡΠ°Π²ΠΈ BumbleBee, ΠΊΠΎΠΌΠΏΠ»Π΅Ρ Π°Π»Π°ΡΠΊΠΈ ΡΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½ ΠΊΠΎΠ΄ ΡΠΈΡΠ° ΡΠ΅Π» Π΅ Π΄Π° ΡΠ° ΠΏΠΎΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠ°ΡΠ°, Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°ΡΠ° ΠΈ Π»Π°Π½ΡΠΈΡΠ°ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ eBPF ΠΊΠΎΠΈ ΡΠ°Π±ΠΎΡΠ°Ρ Π²ΠΎ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π½Π° Π²ΠΈΡΡΡΠ΅Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° Π²Π½Π°ΡΡΠ΅. ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π½Π° Linux ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΌΡΠ΅ΠΆΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° ΠΏΡΠΈΡΡΠ°ΠΏΠΎΡ ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΈΡΡΠ΅ΠΌΠΈΡΠ΅. ΠΠΎΠ΄ΠΎΡ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π²ΠΎ Go ΠΈ ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° Apache 2.0.
BumbleBee ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ΅ ΠΏΠ°ΠΊΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° eBPF ΠΊΠ°ΠΊΠΎ ΡΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ Π²ΠΎ ΡΠΎΡΠΌΠ°Ρ OCI (Open Container Initiative), ΠΊΠΎΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ ΡΠΈΡΡΠ΅ΠΌ Π±Π΅Π· ΠΏΡΠ΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°ΡΠ΅ ΠΈ ΡΠΏΠΎΡΡΠ΅Π±Π° Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π²ΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ. ΠΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ°ΡΠ° ΡΠΎ ΠΊΠΎΠ΄ΠΎΡ eBPF Π²ΠΎ ΡΠ°Π΄ΡΠΎΡΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ ΠΊΠΎΠΈ Π΄ΠΎΠ°ΡΠ°Π°Ρ ΠΎΠ΄ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ Π½Π° eBPF, ΡΠ° ΠΏΡΠ΅Π·Π΅ΠΌΠ° BumbleBee, ΠΊΠΎΡ Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π³ΠΈ ΠΈΠ·Π²Π΅Π·ΡΠ²Π° ΠΎΠ²ΠΈΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ Π²ΠΎ ΡΠΎΡΠΌΠ° Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠ°, Ρ ΠΈΡΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ Π΄Π½Π΅Π²Π½ΠΈΡΠΈ, Π΄ΠΎ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° Π°Π»Π°ΡΠΊΠ° Π·Π° Π½Π°Π²ΠΈΠ²Π°ΠΌ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΎΡ ΠΏΡΠΈΡΡΠ°ΠΏ ΠΌΡ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π½Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ Π΄Π° ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ° Π½Π° ΠΏΠΈΡΡΠ²Π°ΡΠ΅ eBPF ΠΊΠΎΠ΄ ΠΈ Π΄Π° Π½Π΅ ΡΠ΅ ΠΎΠ΄Π²Π»Π΅ΠΊΡΠ²Π° ΡΠΎ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠΎ ΠΎΠ²ΠΎΡ ΠΊΠΎΠ΄ ΠΎΠ΄ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΈΠΎΡ ΠΏΡΠΎΡΡΠΎΡ, ΡΠΊΠ»ΠΎΠΏΡΠ²Π°ΡΠ΅ ΠΈ Π²ΡΠΈΡΡΠ²Π°ΡΠ΅ Π²ΠΎ ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ.
ΠΠ° Π΄Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ eBPF, ΡΠ΅ Π½ΡΠ΄ΠΈ Π°Π»Π°ΡΠΊΠ° βΠΏΡΠ΅Π»Π°β Π²ΠΎ ΡΡΠΈΠ»ΠΎΡ Π½Π° Docker, ΡΠΎ ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²Π΅Π΄Π½Π°Ρ Π΄Π° Π³ΠΎ ΠΏΡΠ΅Π·Π΅ΠΌΠ΅ΡΠ΅ eBPF ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ ΠΈ Π΄Π° Π³ΠΎ ΠΈΠ·Π²ΡΡΠΈΡΠ΅ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΡΠΈΡΡΠ΅ΠΌ. ΠΠΎΠΌΠΏΠ»Π΅ΡΠΎΡ ΡΠΎ Π°Π»Π°ΡΠΊΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ ΡΠ°ΠΌΠΊΠ° Π·Π° ΠΊΠΎΠ΄ Π²ΠΎ C Π·Π° ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΠ΅ Π½Π° eBPF Π½Π° ΠΈΠ·Π±ΡΠ°Π½Π° ΡΠ΅ΠΌΠ° (Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠ² ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΠΆΠ°Π½ΠΈ ΡΠ°ΠΌΠΎ ΡΠ°ΠΊΡΠ²Π°ΡΠΈ Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π½Π° ΠΌΡΠ΅ΠΆΠ° ΠΈ Π΄Π°ΡΠΎΡΠ΅ΠΊΠΈ ΡΡΠΎ Π³ΠΈ ΠΏΡΠ΅ΡΡΠ΅ΡΠ½ΡΠ²Π°Π°Ρ ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ Π΄ΠΎ ΠΌΡΠ΅ΠΆΠ½ΠΈΠΎΡ ΡΡΠ΅ΠΊ ΠΈ Π΄Π°ΡΠΎΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ). ΠΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π°ΡΠ° ΡΠ°ΠΌΠΊΠ°, ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ Π±ΡΠ·ΠΎ Π΄Π° ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠ° Π·Π° ΠΊΠΎΡΠ° Π΅ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΈΡΠ°Π½.
ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ BCC (BPF ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅ΡΡΠΊΠ° ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ°), BumbleBee Π½Π΅ Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΊΠΎΠ΄ΠΎΡ Π½Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ Π·Π° ΡΠ΅ΠΊΠΎΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΊΠ΅ΡΠ½Π΅Π»ΠΎΡ Π½Π° Linux (BCC ΠΊΠΎΡΠΈΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ° ΠΏΡΠΈ Π»Π΅ΡΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Clang ΡΠ΅ΠΊΠΎΠ³Π°Ρ ΠΊΠΎΠ³Π° ΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΡΠ²Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° eBPF). ΠΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΡΠ°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ ΡΠΎ ΠΏΡΠ΅Π½ΠΎΡΠ»ΠΈΠ²ΠΎΡΡ, ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π°Ρ Π°Π»Π°ΡΠΊΠΈΡΠ΅ CO-RE ΠΈ libbpf, ΠΊΠΎΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°Π°Ρ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΊΠΎΠ΄ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π°Ρ ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠ°Π»Π΅Π½ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π΅Π½ Π½Π°ΡΠΎΠ²Π°ΡΡΠ²Π°Ρ ΠΊΠΎΡ ΡΠ° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΡΠ²Π° Π²ΡΠΈΡΠ°Π½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° Π½Π° ΡΠ΅ΠΊΠΎΠ²Π½ΠΈΠΎΡ ΠΊΠ΅ΡΠ½Π΅Π» ΠΈ ΡΠΎΡΠΌΠ°ΡΠΎΡ Π½Π° ΡΠΈΠΏΠΎΡ BTF. BumbleBee Π΅ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ Π½Π° libbpf ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΡΠΎΠ»ΠΊΡΠ²Π°ΡΠ΅ ΠΈ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈΡΠ΅ Π»ΠΎΡΠΈΡΠ°Π½ΠΈ Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΠΈ Π½Π° ΠΊΠ°ΡΡΠΈ eBPF RingBuffer ΠΈ HashMap.
ΠΠ° Π΄Π° ΡΠ° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠ΅ ΠΊΠΎΠ½Π΅ΡΠ½Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° eBPF ΠΈ Π΄Π° ΡΠ° Π·Π°ΡΡΠ²Π°ΡΠ΅ ΠΊΠ°ΠΊΠΎ OCI ΡΠ»ΠΈΠΊΠ°, ΡΠ°ΠΌΠΎ ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βbee build file_with_code name:versionβ ΠΈ Π·Π° Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βbee run name:versionβ. Π‘ΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ, Π½Π°ΡΡΠ°Π½ΠΈΡΠ΅ Π΄ΠΎΠ±ΠΈΠ΅Π½ΠΈ ΠΎΠ΄ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ ΡΠ΅ ΡΠ΅ Π΅ΠΌΠΈΡΡΠ²Π°Π°Ρ Π²ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π½ΠΈΠΎΡ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ, Π½ΠΎ Π΄ΠΎΠΊΠΎΠ»ΠΊΡ Π΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° ΠΏΠΎΠΌΠΎΡΠ½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ curl ΠΈΠ»ΠΈ wget Π΄ΠΎ ΠΌΡΠ΅ΠΆΠ½Π°ΡΠ° ΠΏΠΎΡΡΠ° ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠΎ ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠΎΡ. Π Π°ΠΊΡΠ²Π°ΡΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π°Ρ ΠΏΡΠ΅ΠΊΡ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ° ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈ ΡΠΎ OCI, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ ΠΎΠ΄ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ ghcr.io (GitHub Container Registry), ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βbee run ghcr.io/solo-io/bumblebee/tcpconnect: $ (Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° ΠΏΡΠ΅Π»ΠΈ)β. ΠΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈ ΡΠΏΡΠ°Π²ΡΠ²Π°Ρ Π²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠΎ, ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° βbee pushβ ΠΈ Π·Π° Π²ΡΠ·ΡΠ²Π°ΡΠ΅ Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ°ΡΠ° βbee tagβ.
ΠΠ·Π²ΠΎΡ: opennet.ru