ΠΠ·Π»Π΅Π·Π΅ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° ErgoFramework 2.2, ΠΊΠΎΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΏΡΠ»Π΅Π½ ΠΌΡΠ΅ΠΆΠΎΠ² ΡΡΠ΅ΠΊ Erlang ΠΈ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° OTP Π½Π° Π΅Π·ΠΈΠΊΠ° Go. Π€ΡΠ΅ΠΉΠΌΡΡΡΠΊΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π³ΡΠ²ΠΊΠ°Π²ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΎΡ ΡΠ²Π΅ΡΠ° Π½Π° Erlang Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Go Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΠ±ΡΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ gen.Application, gen.Supervisor ΠΈ gen.Server, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ β gen.Stage (ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ pub/sub), gen.Saga (ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ SAGA) ΠΈ gen.Raft (ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Raft).
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΠΏΡΠΎΠΊΡΠΈ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΊΡΠ°ΠΉΠ½ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½Π΅, Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎ Π² Erlang/OTP ΠΈ Elixir. Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π² Π΅Π·ΠΈΠΊΠ° Go Π½ΡΠΌΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Erlang, Π² ΡΡΠ΅ΠΉΠΌΡΡΡΠΊΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ goroutine ΠΊΠ°ΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° gen.Server Ρ ΠΎΠ±Π²ΠΈΠ²ΠΊΠ° βrecoverβ Π·Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΡΡΠ°ΡΠΈΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ MIT.
ΠΡΠ΅ΠΆΠΎΠ²ΠΈΡΡ ΡΡΠ΅ΠΊ Π² ErgoFramework Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° DIST ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π½Π° Erlang. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡΠ°, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ErgoFramework, Π½Π°ΡΠΈΠ²Π½ΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈ Π΅Π·ΠΈΡΠΈ Erlang ΠΈΠ»ΠΈ Elixir (ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Erlang Π½ΠΎΠ΄Π°). Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΡΡ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ gen.Stage Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ ΠΏΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° Elixir GenStage ΠΈ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ Π½Π΅Π³ΠΎ (ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ).
Π Π½ΠΎΠ²ΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅:
- ΠΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π½ΠΎΠ²ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ
- gen.Web β ΡΠ°Π±Π»ΠΎΠ½ Π·Π° ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° Web API Gateway (ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΡΠΎ ΠΊΠ°ΡΠΎ Backend For Frontend). ΠΡΠΈΠΌΠ΅Ρ.
- gen.TCP β ΡΠ°Π±Π»ΠΎΠ½, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ» Π°ΠΊΡΠ΅ΠΏΡΠΎΡΠΈ Π·Π° TCP ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄. ΠΡΠΈΠΌΠ΅Ρ.
- gen.UDP β Π°Π½Π°Π»ΠΎΠ³ Π½Π° ΡΠ°Π±Π»ΠΎΠ½Π° gen.TCP, ΡΠ°ΠΌΠΎ Π·Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ» UDP. ΠΡΠΈΠΌΠ΅Ρ.
- ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Π½ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Events Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΡΡβΓ©vΠ΅Π½Ρβ ΡΠΈΠ½Π° Π²ΡΡΡΠ΅ Π² Π½ΠΎΠ΄Π°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡΠ±ΠΈΡΠΈΡ (pub/sub) ΡΡΠ΅Π΄ Π»ΠΎΠΊΠ°Π»Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΡΠΈΠΌΠ΅Ρ.
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ/Π΄Π΅ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² Π½Π°ΡΠΈΠ²Π½ΠΈΡ ΡΠΈΠΏ Π΄Π°Π½Π½ΠΈ Π½Π° Golang. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π²Π΅ΡΠ΅ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° etf.TermIntoStruct Π·Π° Π²ΡΡΠΊΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΎ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π Π΅Π³ΠΈΡΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π² Π·Π°Π΄Π°Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏ, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ Π½ΠΎΠ΄ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
