
ΠΡΠ΅Π· 2017 Π³. ΡΠΏΠ΅ΡΠ΅Π»ΠΈΡ
ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎ ΡΠ΄ΡΠΎ Π½Π° ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π½Π° ΠΠ»ΡΡΠ°-ΠΠ°Π½ΠΊ ΠΈ Π·Π°ΠΏΠΎΡΠ½Π°Ρ
ΠΌΠ΅ ΡΠ°Π±ΠΎΡΠ° (Π½Π° HighLoad++ 2018 Ρ Π΄ΠΎΠΊΠ»Π°Π΄ Π·Π° ΡΠ΄ΡΠΎΡΠΎ Π½Π° ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΠ»Π°Π΄ΠΈΠΌΠΈΡ ΠΡΡΠ½ΠΊΠΈΠ½, ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π» Π½Π° Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΎΠ½Π½ΠΎ ΡΠ΄ΡΠΎ Π½Π° ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½ΠΈΡ Π±ΠΈΠ·Π½Π΅Ρ Π½Π° ΠΠ»ΡΡΠ°-Π±Π°Π½ΠΊ). Π’Π°Π·ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° Π°Π³ΡΠ΅ΡΠΈΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΠ΄Π΅Π»ΠΊΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π² ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ, Π΄Π° ΠΏΡΠΈΠ²Π΅Π΄e Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ Π²ΠΈΠ΄, Π΄Π° Π³ΠΈ ΡΡΡ
ΡΠ°Π½ΡΠ²Π° ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡ
.
Π ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π΅Π²ΠΎΠ»ΡΠΈΡΠ° ΠΈ ΠΎΠ±ΠΎΠ³Π°ΡΡΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° ΡΠΈ, ΠΈ Π² Π½ΡΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΎΡΡΠ·Π½Π°Ρ ΠΌΠ΅, ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°ΠΌΠ΅ Π½Π΅ΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΎΡ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ ΡΠΎΡΡΡΠ΅Ρ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΡΡΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΡΡΠ³ Π·Π°Π΄Π°ΡΠΈ: ΠΏΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Ρ ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅. ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΠΎΡ Π½Π°Ρ ΠΎΠΏΠΈΡ Π»Π΅Π³Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° Π½ΠΎΠ² ΠΏΡΠΎΠ΄ΡΠΊΡ β (TDG).
ΠΡΠΊΠ°ΠΌ Π΄Π° Π²ΠΈ ΡΠ°Π·ΠΊΠ°ΠΆΠ° Π·Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° TDG ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΡΠ°, Π΄ΠΎ ΠΊΠΎΠΈΡΠΎ ΡΡΠΈΠ³Π½Π°Ρ
ΠΌΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π΄Π° Π²ΠΈ Π·Π°ΠΏΠΎΠ·Π½Π°Ρ Ρ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΈ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΊΠ°ΠΊ Π½Π°ΡΠΈΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ°Π½Π΅ ΠΎΡΠ½ΠΎΠ²Π° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° Π·Π°Π²ΡΡΡΠ΅Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ.
ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡ
ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠΎΠ»ΠΈ, Π²ΡΡΠΊΠ° ΠΎΡ ΠΊΠΎΠΈΡΠΎ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΡΡΠ³ Π·Π°Π΄Π°ΡΠΈ. ΠΠ΄ΠΈΠ½ ΡΡΠ°ΡΡΠΈΡΠ°Π½ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΠΏΠ° ΡΠΎΠ»ΠΈ. Π ΠΊΠ»ΡΡΡΡΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΎΠ»ΠΈ ΠΎΡ Π΅Π΄ΠΈΠ½ ΡΠΈΠΏ:

Connector
ΠΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π·Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Ρ Π²ΡΠ½ΡΠ½ΠΈΡ ΡΠ²ΡΡ; Π·Π°Π΄Π°ΡΠ°ΡΠ° ΠΌΡ Π΅ Π΄Π° ΠΏΡΠΈΠ΅ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠ°, Π΄Π° Ρ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈ Π°ΠΊΠΎ Π΅ ΡΡΠΏΠ΅ΡΠ½Π°, Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π² Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ. ΠΠΎΠ΄Π΄ΡΡΠΆΠ°ΠΌΠ΅ ΡΠΎΡΠΌΠ°ΡΠΈ HTTP, SOAP, Kafka, FIX. ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ, ΡΠΊΠΎΡΠΎ ΡΠ΅ ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° ΠΈ Π·Π° IBM MQ. ΠΠΊΠΎ ΡΠ°Π·Π±ΠΎΡΡΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π°Π²ΡΡΡΠΈ Ρ Π³ΡΠ΅ΡΠΊΠ°, ΠΊΠΎΠ½Π΅ΠΊΡΠΎΡΡΡ ΡΠ΅ Π²ΡΡΠ½Π΅ Π³ΡΠ΅ΡΠΊΠ°; Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠΉ ΡΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈ, ΡΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π΄ΠΎΡΠΈ Π°ΠΊΠΎ Π΅ Π²ΡΠ·Π½ΠΈΠΊΠ½Π°Π»Π° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, Π·Π° Π΄Π° ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΠΎΠ²ΡΠ°ΡΡΡ Π·Π°ΡΠ²ΠΊΠΈ β ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΏΡΠ°Π²ΡΡ Π³ΠΎ ΠΏΡΠ΅ΠΊΠ°Π»Π΅Π½ΠΎ Π½Π°ΡΡΠΎΡΡΠ΅Π»Π½ΠΎ. ΠΠ° Π΄Π° Π½Π΅ Π·Π°Π³ΡΠ±ΠΈΠΌ Π΄Π°Π½Π½ΠΈ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ΠΌΠΎΠ½ΡΠ½Π° ΠΎΠΏΠ°ΡΠΊΠ°: ΠΎΠ±Π΅ΠΊΡΡΡ ΠΏΡΡΠ²ΠΎ ΠΏΠΎΠΏΠ°Π΄Π° Π² Π½Π΅Ρ ΠΈ ΡΠ°ΠΌΠΎ ΡΠ»Π΅Π΄ ΡΡΠΏΠ΅ΡΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ ΠΈΠ·ΡΡΠΈΠ²Π° ΠΎΡ Π½Π΅Ρ. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΈΠ·Π²Π΅ΡΡΠΈΡ Π·Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅, ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π² ΡΠ΅ΠΌΠΎΠ½ΡΠ½Π°ΡΠ° ΠΎΠΏΠ°ΡΠΊΠ°, Π° ΡΠ»Π΅Π΄ ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΈΠ»ΠΈ Ρ Π°ΡΠ΄ΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½Π° ΠΎΠΏΠΈΡ.
ΠΡ ΠΎΠ΄Π΅Π½ ΠΏΡΠΎΡΠ΅ΡΠΎΡ
ΠΡ ΠΎΠ΄Π½ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΠΎΡ ΠΊΠ»Π°ΡΠΈΡΠΈΡΠΈΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΡΠΏΠΎΡΠ΅Π΄ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΠΈΡΠ΅ Π±Π΅Π»Π΅Π·ΠΈ ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ. ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΡΠ° ΠΊΠΎΠ΄ Π½Π° Π΅Π·ΠΈΠΊ Lua, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ Π² ΠΏΠ΅ΡΠ°ΡΠ½ΠΈΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²Π»ΠΈΡΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈ Π² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π²ΠΈΠ΄, Π° ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΏΡΠΈ Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±ΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π»ΠΎΠ³ΠΈΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ° MDM (Master Data Management), ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½ Π½Π° Tarantool Data Grid, ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π½ΠΎΠ² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», Π·Π° Π΄Π° Π½Π΅ Π·Π°Π±Π°Π²ΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π·Π»Π°ΡΠ½Π°ΡΠ° Π·Π°ΠΏΠΈΡΠΊΠ° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠ°ΡΠΎ ΠΎΡΠ΄Π΅Π»Π½Π° Π·Π°Π΄Π°ΡΠ°. ΠΠ΅ΡΠ°ΡΠ½ΠΈΡΠ°ΡΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π·Π°ΡΠ²ΠΊΠΈ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠΎΠ»ΠΈ ΡΠΈΠΏΠ° storage ΠΈ Π°Π³ΡΠ΅Π³Π°ΡΠΈΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° (map/reduce).
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΎΠΏΠΈΡΠ°Π½ΠΈ Π² ΡΠ°ΠΉΠ»ΠΎΠ²Π΅:
sum.lua
local x, y = unpack(...)
return x + yΠ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°, ΠΎΠ±ΡΠ²Π΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°:
ΡΡΠ½ΠΊΡΠΈΠΈ:
sum: { __file: sum.lua }
ΠΠ°ΡΠΎ Lua? Lua Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡ Π΅Π·ΠΈΠΊ. ΠΠ° Π±Π°Π·Π°ΡΠ° Π½Π° Π½Π°ΡΠΈΡ ΠΎΠΏΠΈΡ, ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°ΡΠ° Π·Π°ΠΏΠΎΠ·Π½Π°Π²Π°Π½Π΅ Ρ Π½Π΅Π³ΠΎ, Ρ ΠΎΡΠ°ΡΠ° Π·Π°ΠΏΠΎΡΠ²Π°Ρ Π΄Π° ΠΏΠΈΡΠ°Ρ ΠΊΠΎΠ΄, ΡΠ΅ΡΠ°Π²Π°Ρ ΡΠ΅Ρ Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π ΡΠΎΠ²Π° Π½Π΅ ΡΠ° ΡΠ°ΠΌΠΎ ΠΏΡΠΎΡΠ΅ΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, Π° Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π°Π½Π°Π»ΠΈΡΠΈΡΠ½ΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, Lua ΡΠ°Π±ΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π±ΡΡΠ·ΠΎ.
Π₯ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅
Storage ΡΡΡ ΡΠ°Π½ΡΠ²Π° ΠΏΠ΅ΡΡΠΈΡΡΠ΅Π½ΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΡΠ΅Π΄ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π·Π° ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π° Π΄Π°Π½Π½ΠΈ. ΠΠ° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΡ Π΅ΠΌΠ°ΡΠ° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ. . ΠΡΠΈΠΌΠ΅Ρ:
{
"name": "User",
"type": "record",
"logicalType": "Aggregate",
"fields": [
{ "name": "id", "type": "string"},
{"name": "first_name", "type": "string"},
{"name": "last_name", "type": "string"}
],
"indexes": ["id"]
}ΠΠ° Π±Π°Π·Π°ΡΠ° Π½Π° ΡΠΎΠ²Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° DDL (Data Definition Language) Π·Π° Π‘Π£ΠΠ Π’Π°ΡΠ°Π½ΡΡΠ» ΠΈ ΡΡ Π΅ΠΌΠ° Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅.
ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π΄Π°Π½Π½ΠΈ (Π² ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π΅ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠΈΠ½Ρ ΡΠΎΠ½Π½Π°).
Output processor
ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠ²Π΅Π΄ΠΎΠΌΠΈΠΌ Π²ΡΠ½ΡΠ½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈ Π·Π° ΠΏΠΎΡΡΡΠΏΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ, Π·Π°ΡΠΎΠ²Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠΎΠ»Ρ Output processor. Π‘Π»Π΅Π΄ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅, ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΈΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ Π½Π°ΡΠΈΠ½, ΠΈΠ·ΠΈΡΠΊΠ°Π½ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ) β ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° connector Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅. Π’ΡΠΊ ΡΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅Π½ΠΎΠ²Π°ΡΠΈΠΎΠ½Π½Π° ΠΎΠΏΠ°ΡΠΊΠ°: Π°ΠΊΠΎ ΠΎΠ±Π΅ΠΊΡΡΡ Π½Π΅ Π±ΡΠ΄Π΅ ΠΏΠΎΠ΅Ρ, Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ²ΡΠΎΡΠΈ ΠΎΠΏΠΈΡΠ° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
ΠΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅
Π ΠΎΠ»ΠΈΡΠ΅ connector, input processor ΠΈ output processor Π½ΡΠΌΠ°Ρ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ, ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΉΠΊΠΈ Π½ΠΎΠ²ΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π° ΡΠΎΠ»Ρ ΠΎΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ ΡΠΈΠΏ. ΠΠ° Ρ ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»Π½ΠΎ ΠΌΠ°ΡΠ°Π±ΠΈΡΠ°Π½Π΅, storage ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΡΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈ. Π‘Π»Π΅Π΄ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ² ΡΡΡΠ²ΡΡ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΎΡ ΡΡΠ°ΡΠΈΡΠ΅ ΡΡΡΠ²ΡΡΠΈ Π½Π° ΡΠΎΠ½ΠΎΠ² ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Ρ Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΡΡΠ²ΡΡ; ΡΠΎΠ²Π° ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΈ Π½Π΅ Π²Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΡΡΠ»Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°.
Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅
ΠΠ±Π΅ΠΊΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ Π΄ΡΡΠ³ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΡΠΈΠ³ΡΡΡΠ²Π°ΠΌΠ΅ Π°ΡΠΎΠΌΠ°ΡΠ½ΠΎΡΡ ΠΏΡΠΈ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, Π·Π°ΠΏΠ°Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠ° Ρ Π²ΡΠΈΡΠΊΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π² Π΅Π΄ΠΈΠ½ Π²ΠΈΡΡΡΠ°Π»Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ. Π’Π°ΠΊΠ° ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π° "ΡΠ°Π·ΠΏΠΈΠ»ΡΠ²Π°Π½Π΅" Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° ΠΏΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΡΠ²ΡΡΠ°.
ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½Π½ΠΎΡΡ: Π²ΡΡΠΊΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ° ΡΡΠ·Π΄Π°Π²Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ ΠΈ Π½ΠΈΠ΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΡΡΠ΅Π· ΠΈ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Π» ΡΠ²Π΅ΡΡΡ ΡΠΎΠ³Π°Π²Π°. ΠΠ° Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡ ΠΎΡ Π΄ΡΠ»Π³Π° ΠΈΡΡΠΎΡΠΈΡ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌ Π±ΡΠΎΡ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π΄Π° ΡΡΡ ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° β ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ°, ΡΠΎΠ΅ΡΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π΄Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΌΠ΅ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠ°Π½Π΅ΡΠΎ Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠΏ. ΠΠΎΠΆΠ΅ ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π΄Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠΌ ΠΈΡΡΠΎΡΠΈΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΠΈΠ·ΡΡΠΈΠ²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΡΠΈΠΏ, ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΎΡ 1 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ ΠΈ Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅: ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°ΠΌΠ΅ ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΎΡ ΡΠΊΠ°Π·Π°Π½ΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°ΠΉΠΊΠΈ ΠΌΡΡΡΠΎ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°.
ΠΠ°Π΄Π°ΡΠΈ
ΠΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π°ΡΠ»ΡΠΆΠ°Π²Π° Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊ, ΠΏΠΎ ΠΈΡΠΊΠ°Π½Π΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΎ ΠΎΡ ΠΏΡΡΡΡΠ½ΠΈΠΊΠ°:

Π’ΡΠΊ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΎΡΠ΅ Π΅Π΄Π½Π° ΡΠΎΠ»Ρ β runner. Π’Π°Π·ΠΈ ΡΠΎΠ»Ρ Π½ΡΠΌΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΈ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΡΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Ρ ΡΠ°Π·ΠΈ ΡΠΎΠ»Ρ. ΠΡΠ³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΡΠ° Π½Π° runner Π΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π·Π°Π΄Π°ΡΠΈΡΠ΅. ΠΠ°ΠΊΡΠΎ ΡΠ΅ ΠΊΠ°Π·Π²Π°, ΠΎΡ ΠΏΡΡΡΡΠ½ΠΈΠΊΠ° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π·Π°Π΄Π°ΡΠΈ; ΡΠ΅ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ Π² ΠΎΠΏΠ°ΡΠΊΠ°ΡΠ° Π½Π° storage ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΎΡ runner. Π’ΠΎΠ·ΠΈ ΡΠΈΠΏ Π·Π°Π΄Π°ΡΠΈ ΡΠ΅ Π½Π°ΡΠΈΡΠ° Job. ΠΠΌΠ°ΠΌΠ΅ ΠΈ ΡΠΈΠΏ Π·Π°Π΄Π°ΡΠΈ, Π½Π°ΡΠ΅ΡΠ΅Π½ Task β ΡΠΎΠ²Π° ΡΠ° Π·Π°Π΄Π°ΡΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΈ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊ (ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° cron) ΠΈΠ»ΠΈ ΠΏΠΎ ΠΈΡΠΊΠ°Π½Π΅. ΠΠ° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΡΠ»Π΅Π΄Π΅Π½Π΅ Π½Π° ΡΠ°ΠΊΠΈΠ²Π° Π·Π°Π΄Π°ΡΠΈ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅ Ρ ΡΠ΄ΠΎΠ±Π΅Π½ Π΄ΠΈΡΠΏΠ΅ΡΠ΅Ρ Π½Π° Π·Π°Π΄Π°ΡΠΈ. ΠΠ° Π΄Π° Π±ΡΠ΄Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ ΡΠΎΠ·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π», Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π²ΠΊΠ»ΡΡΠΈΠΌ ΡΠΎΠ»Ρ scheduler; ΡΠ°Π·ΠΈ ΡΠΎΠ»Ρ ΠΈΠΌΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, Π·Π°ΡΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΠ΅ΡΠΎ Π²ΡΡΡΠ½ΠΎΡΡ ΠΈ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ; ΡΡ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ ΡΠΎΠ»ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΡΠ΅ΠΏΠ»ΠΈΠΊΠ°, ΠΊΠΎΡΡΠΎ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°, Π°ΠΊΠΎ ΠΌΠ°ΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ Π½Π΅ ΡΡΠΏΠ΅Π΅.
Logger
ΠΡΠ΅ Π΅Π΄Π½Π° ΡΠΎΠ»Ρ ΡΠ΅ Π½Π°ΡΠΈΡΠ° logger. Π’Ρ ΡΡΠ±ΠΈΡΠ° Π»ΠΎΠ³ΠΎΠ²Π΅ ΠΎΡ Π²ΡΠΈΡΠΊΠΈ ΡΠ»Π΅Π½ΠΎΠ²Π΅ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΡΡ Π½ΠΎΡΠΎ Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΡΠ΅Π³Π»Π΅Π΄ ΠΏΡΠ΅Π· ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°.
Π£ΡΠ»ΡΠ³ΠΈ
ΠΠ°ΡΠ»ΡΠΆΠ°Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π΅, ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π»Π΅ΡΠ½ΠΎ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³ΠΈ. Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ, ΠΊΠ°ΠΊΠ²ΠΈ Π·Π°ΡΠ²ΠΊΠΈ Π΄Π° ΡΠ΅ Π½Π°ΡΠΎΡΠ²Π°Ρ ΠΊΡΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Π½ Π² ΠΏΡΡΡΡΠ½ΠΈΠΊΠ°. Π ΡΠΎΠ·ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΌΠΎΠΆΠ΅ΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ Π½ΡΠΊΠ°ΠΊΡΠ² Π°Π½Π°Π»ΠΈΡΠΈΡΠ΅Π½ Π·Π°ΠΏΠΈΡ ΠΈ Π΄Π° Π²ΡΡΠ½Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°.
Π£ΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ ΠΎΠΏΠΈΡΠ²Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ»:
services:
sum:
doc: "Π΄ΠΎΠ±Π°Π²Ρ Π΄Π²Π΅ ΡΠΈΡΠ»Π°"
function: sum
return_type: int
args:
x: int
y: int
GraphQL API ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΈ ΡΡΠ»ΡΠ³Π°ΡΠ° ΡΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ½Π° Π·Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅:
query {
sum(x: 1, y: 2)
} Π’ΠΎΠ²Π° ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° sum, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π²ΡΡΠ½Π΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°:
3
ΠΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ
ΠΠ° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΈ Π΄Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°ΠΌΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Π½ΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΠΌΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° OpenTracing. Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ ΠΏΡΠΈ Π½ΡΠΆΠ΄Π° Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠΈ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ», Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Zipkin, Π·Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠ°ΠΊ Π΅ ΠΏΡΠΎΡΠ΅ΠΊΠ»ΠΎ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ:

Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΡΡΠ΅ΡΠ½ΠΈ ΠΌΠ΅ΡΡΠΈΠΊΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΡΠ±ΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Prometheus ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Grafana.
ΠΠ΅ΠΏΠ»ΠΎΠΉ
Tarantool Data Grid ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ ΠΎΡ RPM ΠΏΠ°ΠΊΠ΅ΡΠΈ ΠΈΠ»ΠΈ Π°ΡΡ ΠΈΠ², Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π°ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ° ΠΈΠ»ΠΈ Ansible, ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° Kubernetes ().
ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ° (ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ), ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° Π² ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ»ΡΡΡΠ΅Ρ Tarantool Data Grid ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π°ΡΡ ΠΈΠ² ΠΏΡΠ΅Π· UI ΠΈΠ»ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡ, ΡΡΠ΅Π· ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΎΡΠΎ ΠΎΡ Π½Π°Ρ API.
ΠΡΠΈΠΌΠ΅ΡΠΈ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΠ°ΠΊΠ²ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π΄Π°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Tarantool Data Grid? ΠΡΡΡΠ½ΠΎΡΡ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π±ΠΈΠ·Π½Π΅Ρ Π·Π°Π΄Π°ΡΠΈ ΠΏΠΎ Π΅Π΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½ ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΡΡΡ Π½ΠΎΡΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΡ . ΠΠ°ΡΠΎΠ²Π°, Π°ΠΊΠΎ ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°ΡΠ΅ Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΠΎΡΠΎΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½ΠΈ, Π½Π°ΡΠΈΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΏΠ΅ΡΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ Π΄Π° ΡΠ΅ ΡΠΎΠΊΡΡΠΈΡΠ°ΡΠ΅ Π²ΡΡΡ Ρ ΡΠ²ΠΎΡΡΠ° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΆΠ΅Π»Π°Π΅ΠΌ Π΄Π° ΡΡΠ±ΠΈΡΠ°ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΏΠ°Π·Π°ΡΠ° Π½Π° Π½Π΅Π΄Π²ΠΈΠΆΠΈΠΌΠΈ ΠΈΠΌΠΎΡΠΈ, Π·Π° Π΄Π° ΠΏΡΠΈΡΠ΅ΠΆΠ°Π²Π°ΠΌΠ΅ Π²ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π½Π°ΠΉ-ΠΈΠ·Π³ΠΎΠ΄Π½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΠΈ:
- Π ΠΎΠ±ΠΎΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ±ΠΈΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ ΠΎΡΠΊΡΠΈΡΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ β ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π°Ρ Π½Π°ΡΠΈΡΠ΅ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ. Π’Π°Π·ΠΈ Π·Π°Π΄Π°ΡΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ΡΠΈΡΠ΅, ΠΊΠ°ΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π³ΠΎΡΠΎΠ²ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π½Π°ΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΠΊΠΎΠ΄ Π½Π° ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ Π΅Π·ΠΈΠΊ.
- Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° Tarantool Data Grid ΡΠ΅ ΠΏΡΠΈΠ΅ΠΌΠ΅ ΠΈ ΡΡΡ ΡΠ°Π½ΠΈ Π΄Π°Π½Π½ΠΈΡΠ΅. ΠΠΊΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°Ρ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ Π½Π° Lua, ΠΊΠΎΠΉΡΠΎ Π΄Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² Π΅Π΄ΠΈΠ½Π΅Π½ ΡΠΎΡΠΌΠ°Ρ. ΠΠ° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΡΠ΅ Π΄ΡΠ±Π»ΠΈΡΠ°Π½ΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΡΠ° Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° Π°Π³Π΅Π½ΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° ΠΏΠ°Π·Π°ΡΠ°.
- Π‘Π΅Π³Π° ΠΈΠΌΠ°ΡΠ΅ ΠΌΠ°ΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°ΡΠ΅ Ρ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΠΈΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½ΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ ΠΊΡΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΎΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π½Π΅ Π·Π° 24 ΡΠ°ΡΠ° β ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ΅Π΄Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ΄ Π½Π° Lua.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ»Π΅Π΄Π²Π°?
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ Π·Π° Π½Π°Ρ Π΅ ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΡΠΎ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° ΡΡΠ΅Π· . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, IDE Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠ°Π½Π΅ ΠΈ Π΄Π΅Π±ΡΠ³Π²Π°Π½Π΅ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π² ΠΏΡΡΡΡΠ½ΠΈΠΊ.
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠΌΠ΅ Π³ΠΎΠ»ΡΠΌΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π²ΡΠΏΡΠΎΡΠΈΡΠ΅ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ°. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΡ Π€Π‘Π’ΠΠ Π½Π° Π ΡΡΠΈΡ, Π·Π° Π΄Π° ΠΏΠΎΡΠ²ΡΡΠ΄ΠΈΠΌ Π²ΠΈΡΠΎΠΊΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ ΠΈ Π΄Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π½Π° Π»ΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ Π΄ΡΡΠΆΠ°Π²Π½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
