Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π±ΠΈΡ
ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΡΠΏΠΎΠ΄Π΅Π»ΠΈΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° Scala ΠΏΠΎ ΡΠΈΠΏΠΎΠ²ΠΎ ΡΠΈΠ³ΡΡΠ΅Π½ Π½Π°ΡΠΈΠ½. ΠΡΠΈΠΌΠ΅ΡΠ½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° Π² Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ. ΠΠ±ΡΡΠΆΠ΄Π°Ρ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ΡΠΎ Π²ΡΡΡ
Ρ ΠΎΠ±ΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°.

()
Introduction
ΠΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° Π·Π΄ΡΠ°Π²ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½Π° ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ. Π’ΠΈΠΏΠΈΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ (terraform, ansible ΠΈΠ»ΠΈ Π½Π΅ΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ) ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (ΡΠ΅ΡΡΠΎ β ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π»/ΡΠΎΠ»Ρ). ΠΡΠΊΠ°ΠΌΠ΅ ΡΡΡΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΡΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π½Π° ΡΡΡΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ Π²ΡΠ·Π΅Π» (Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ΅ ΡΠ±Π»ΡΡΠΊΠ°ΠΌΠ΅ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ Π½Π΅ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ). Π ΡΠ²Π΅ΡΠ° Π½Π° JVM ΡΠΎΠ²Π° ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΏΠΎΠ½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ Π½Π° Π΅Π΄Π½Π° ΠΈ ΡΡΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°ΡΠΈ Π²ΡΠ·Π»ΠΈ.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°? Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠΎΠ΄ΡΠ»Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π΅ΠΊΡΡΡΠ°ΠΏΠΎΠ»ΠΈΡΠ°ΠΌΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ Π²Π΅ΡΡΠΈΠΈΡΠ΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΊΠ°ΠΊΡΠΎ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΡΠ°ΠΊΠ° ΠΈ Π² ΡΡΠ΅Π΄Π°ΡΠ° Π·Π° ΡΠ΅ΡΡΠΎΠ²Π΅.
ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅, ΡΠ΅ΡΡΠΎ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΡΠΈΡ classpath Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ. ΠΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ ΡΡΡΠΈΡΡ classpath ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΡΠΈ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ΡΠΎ. (ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ classpath Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΠ·Π»ΠΈ, Π½ΠΎ Π΅ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π΄Π° ΡΠ΅ ΡΠ°Π·Π³ΡΡΠ½Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.) Π’Π°ΠΊΠ° ΡΠ΅, Π·Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ Π½Π΅ΡΠ°ΡΠ° ΠΏΡΠΎΡΡΠΈ, ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ classpath Π½Π° Π²ΡΠΈΡΠΊΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅Π²ΠΎΠ»ΡΠΈΡΠ° Π·Π°Π΅Π΄Π½ΠΎ ΡΡΡ ΡΠΎΡΡΡΠ΅ΡΠ°. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π²Π΅ΡΡΠΈΠΈ, Π·Π° Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ
Π΅ΡΠ°ΠΏΠΈ Π½Π° Π΅Π²ΠΎΠ»ΡΡΠΈΡΡΠ° Π½Π° ΡΠΎΡΡΡΠ΅ΡΠ°. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°Π·ΡΠΌΠ½ΠΎ Π΄Π° ΠΏΠΎΠΊΡΠΈΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎΠ΄ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅ ΠΈ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Ρ Π½ΡΠΊΠΎΠΈ Π΅ΡΠΈΠΊΠ΅ΡΠΈ. ΠΠΊΠΎ ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ Π΅Π΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²ΠΎΡΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ΠΈΡΠ½Π° Π²Π΅ΡΡΠΈΡ ΠΊΠ°ΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΡΠ΅Π΄ΠΈ. Π Π·Π° Π²ΡΡΠΊΠ° ΡΡΠ΅Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΊΠ»ΠΎΠ½ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π’Π°ΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΅ΡΠΈΠΊΠ΅ΡΠΈΡΠ°Π½ΠΈ Ρ ΠΊΠ»ΠΎΠ½ ΠΈ Π²Π΅ΡΡΠΈΡ, Π·Π° Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Ρ ΡΠ½ΠΈΠΊΠ°Π»Π½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠ΅ΠΊΠΈ Π΅ΡΠΈΠΊΠ΅Ρ Π½Π° ΠΊΠ»ΠΎΠ½ ΠΈ Π²Π΅ΡΡΠΈΡ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°Ρ Π½Π° Π΅Π΄Π½Π°-Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π²ΡΠ·Π»ΠΈ, ΠΏΠΎΡΡΠΎΠ²Π΅, Π²ΡΠ½ΡΠ½ΠΈ ΡΠ΅ΡΡΡΡΠΈ, Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈΡΠ΅ Π² classpath Π½Π° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π». Π’ΡΠΊ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅Π½ ΠΊΠ»ΠΎΠ½ ΠΈ ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΡΠ΅Π· ΡΡΠΈΡΠ°ΡΡΠ½Π° Π΄Π΅ΡΠ΅ΡΠΈΡΠ½Π° Π²Π΅ΡΡΠΈΡ (1.2.3), ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ ΠΊΠ°ΠΊΡΠΎ Π΄ΡΡΠ³ΠΈΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ.
Π ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΡΠ΅ ΡΡΠ΅Π΄ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Ρ ΡΡΡΠ½ΠΎ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅
ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π°. Π’Π°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ°ΡΠ΅ Π·Π°ΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ² ΡΠΎΡΠΌΠ°Ρ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅? ΠΠΈΠ·Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½Π° ΠΎΠΏΡΠΈΡ Π΅ Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π²ΡΡΡΠ΅ Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΎΡ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡ Π°ΡΡΠ΅ΡΠ°ΠΊΡ.
ΠΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ
Π ΡΠΎΠ·ΠΈ ΡΠ°Π·Π΄Π΅Π» ΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠ²Π΅ ΠΏΡΠΎΡΡΠΈ ΡΡΠ»ΡΠ³ΠΈ β ΡΡΠ»ΡΠ³Π° Π·Π° ΠΎΡΡΠ°Π·ΡΠ²Π°Π½Π΅ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° Π·Π° ΠΎΡΡΠ°Π·ΡΠ²Π°Π½Π΅ ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Ρ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Ρ. Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°Ρ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π΄Π²Π΅ΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ. ΠΠ΄Π½Π°ΡΠ° Π΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π΅Π΄ΠΈΠ½ Π²ΡΠ·Π΅Π», Π° Π΄ΡΡΠ³Π°ΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π΄Π²Π° Π²ΡΠ·Π΅Π»Π°.
Π’ΠΈΠΏΠΈΡΠ½Π°ΡΠ° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ·Π΅Π»Π°. ΠΡΠ·Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ Ρ Π½ΡΠΊΠ°ΠΊΡΠ² ΡΠΈΠΏ:
sealed trait NodeId
case object Backend extends NodeId
case object Frontend extends NodeIdΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ
case class NodeId(hostName: String)ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ
object Singleton
type NodeId = Singleton.typeΠ’Π΅Π·ΠΈ Π²ΡΠ·Π»ΠΈ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΎΠ»ΠΈ, ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π½ΡΠΊΠΎΠΈ ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠΈΡΠ°Ρ Ρ Π΄ΡΡΠ³ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ ΡΡΠ΅Π· TCP/HTTP Π²ΡΡΠ·ΠΊΠΈ.
ΠΠ° TCP Π²ΡΡΠ·ΠΊΠ° Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΏΠΎΠ½Π΅ Π΅Π΄ΠΈΠ½ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΠΏΠΎΡΡ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΈ ΡΡΡΠ²ΡΡΡΡ Π³ΠΎΠ²ΠΎΡΡΡ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΠ° Π΄Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅, Π½Π΅ΠΊΠ° ΠΎΠ±ΡΠ²ΠΈΠΌ ΡΠ»Π΅Π΄Π½ΠΈΡ ΠΊΠ»Π°Ρ:
case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])where ΠΠΎΡΡ Π΅ ΠΏΡΠΎΡΡΠΎ Π΅Π΄ΠΈΠ½ Int Π² Π΄ΠΎΠΏΡΡΠΊΠ°Π½ΠΈΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:
type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]Refined ΡΠΈΠΏΠΎΠ²Π΅
ΠΠΈΠΆ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. Π‘ ΠΊΡΠ°ΡΠΊΠΎ ΠΊΠ°Π·Π°Π½ΠΎ, ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΊΡΠΌ Π΄ΡΡΠ³ΠΈ ΡΠΈΠΏΠΎΠ²Π΅. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Int Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΡΠ°ΠΌΠΎ Π΄Π° ΠΈΠΌΠ° 16-Π±ΠΈΡΠΎΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΏΠΎΡΡ. ΠΡΠΌΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄. ΠΡΠΎΡΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΡΠ΅ Π²ΠΏΠΈΡΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±ΡΠ΅.
ΠΠ° HTTP (REST) ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ ΠΈ ΠΏΡΡΡΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°:
type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9\/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)Π€Π°Π½ΡΠΎΠΌΠ΅Π½ ΡΠΈΠΏ
ΠΠ° Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π½Π° Scala Π·Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠΏΠΎΠ² Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΊΠ»Π°ΡΠ°. Π’ΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠ° Π½Π°ΡΠ΅ΡΠ΅Π½ΠΈΡΡ ΡΠ°Π½ΡΠΎΠΌΠ΅Π½ ΡΠΈΠΏ. ΠΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ° ΡΡΠ΄ΠΊΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡΠΆΠ΄Π° ΠΎΡ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ», ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ Ρ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°ΠΌΠ΅. ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΡΠΎΠ·ΠΈ ΡΠ°Π½ΡΠΎΠΌΠ΅Π½ ΡΠΈΠΏ Π΄Π°Π²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΡΠΈΠΏΠΎΠ²Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ. ΠΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎΡΡ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ ΠΏΡΠΎΡΠΎΠΊΠΎΠ».
ΠΠ΄ΠΈΠ½ ΠΎΡ Π½Π°ΠΉ-ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ Π΅ REST API Ρ Json ΡΠ΅ΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ:
sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]where RequestMessage Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΡΠΈΠΏ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΡΠ°ΡΠΈ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ResponseMessage Π΅ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΎΡ ΡΡΡΠ²ΡΡΠ°. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π΄Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°Ρ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Ρ ΠΆΠ΅Π»Π°Π½Π°ΡΠ° ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡ.
ΠΠ° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎ-ΠΏΡΠΎΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°:
sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]Π ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π·Π°ΡΠ²ΠΊΠ° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΡΠΌ url ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΡΠ΅ Π²ΡΡΡΠ° ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ Π½ΠΈΠ·.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΏΠΈΡΠ°Π½Π° ΡΡΠ΅Π· ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΊΠΎΠ»Π΅ΠΊΡΠΈΡ ΠΎΡ ΠΏΠΎΡΡΠΎΠ²Π΅ ΠΈ Π½ΡΠΊΠΎΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ. ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π½Π°ΡΠΈΠ½Π° Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π·ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π² Scala (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, HList, Π°Π»Π³Π΅Π±ΡΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ). ΠΠ° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Cake Pattern ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π»Π½ΠΈ ΡΠ°ΡΡΠΈ (ΠΌΠΎΠ΄ΡΠ»ΠΈ) ΠΊΠ°ΡΠΎ traits. (Cake Pattern Π½Π΅ Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π·Π° ΡΠΎΠ·ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΡΡΠΎ Π΅Π΄Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΠΈΠ΄Π΅ΡΡΠ°.)
ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Ρ Cake Pattern ΠΊΠ°ΡΠΎ ΠΊΡΠ°ΠΈΡΠ° Π½Π° Π΄ΡΡΠ³ΠΈ Π²ΡΠ·Π»ΠΈ:
type EchoProtocol[A] = SimpleHttpGetRest[A, A]
trait EchoConfig[A] extends ServiceConfig {
def portNumber: PortNumber = 8081
def echoPort: PortWithPrefix[EchoProtocol[A]] = PortWithPrefix[EchoProtocol[A]](portNumber, "echo")
def echoService: HttpSimpleGetEndPoint[NodeId, EchoProtocol[A]] = providedSimpleService(echoPort)
}Echo ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΏΡΠΎΡΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ ΠΏΠΎΡΡ. Π Π½ΠΈΠ΅ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΌΠ΅, ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° echo ΠΏΡΠΎΡΠΎΠΊΠΎΠ». ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π½Π° ΡΠΎΠ·ΠΈ Π΅ΡΠ°ΠΏ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ΅Π½ ΠΏΠΎΡΡ, ΡΡΠΉ ΠΊΠ°ΡΠΎ traits ΡΠ°Π·ΡΠ΅ΡΠ°Π²Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π½Π° Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π΅Π½ ΠΈΠ½ΡΡΠ°Π½Ρ. Π’ΡΠΊ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡ
ΠΌΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° (8081) ΠΈ ΡΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΊΠ°ΡΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, Π°ΠΊΠΎ Ρ ΠΏΡΠΎΠΏΡΡΠ½Π΅ΠΌ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠΎΠΆΠ΅ΠΌ Π΄Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°ΠΌΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π½Π° echo ΡΡΠ»ΡΠ³Π°ΡΠ°:
trait EchoClientConfig[A] {
def testMessage: String = "test"
def pollInterval: FiniteDuration
def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
}ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ° ΠΈΠΌΠ° ΡΡΡΠΈΡ ΡΠΈΠΏ ΠΊΠ°ΡΠΎ echoService. ΠΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ, ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΡΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ». Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ Π°ΠΊΠΎ ΡΠ²ΡΡΠΆΠ΅ΠΌ ΡΠ΅Π·ΠΈ Π΄Π²Π΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ, ΡΠ΅ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ.
ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅
Π£ΡΠ»ΡΠ³Π°ΡΠ° ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΡΠΏΠΈΡΠ°Π½Π΅. (ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π° Π΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π·Π° ΡΠ΅ΡΡΠ²Π°Π½Π΅.) ΠΡΠ½ΠΎΠ²ΠΎ, ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΡΠΈΠΈ Π·Π° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°ΠΊΠ°Π²Π° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° Π΄Π°Π΄Π΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅). ΠΠ° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΠ²ΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Cake Pattern. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΡΠ»ΡΠ³Π° Ρ cats.Resource ΠΊΠΎΠ΅ΡΠΎ Π²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°Π½Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈ. ΠΠ° Π΄Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ΅ΠΌ ΡΠ΅ΡΡΡΡ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΠΌΠ°Π»ΠΊΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ. Π’Π°ΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°ΠΊΠ°:
type ResourceReader[F[_], Config, A] = Reader[Config, Resource[F, A]]
trait ServiceImpl[F[_]] {
type Config
def resource(
implicit
resolver: AddressResolver[F],
timer: Timer[F],
contextShift: ContextShift[F],
ec: ExecutionContext,
applicative: Applicative[F]
): ResourceReader[F, Config, Unit]
}where
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡβ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ»ΡΠ³Π°AddressResolverβ ΠΎΠ±Π΅ΠΊΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠΎΠΉΡΠΎ ΠΈΠΌΠ° ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅Π°Π»Π½ΠΈ Π°Π΄ΡΠ΅ΡΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ Π²ΡΠ·Π»ΠΈ (ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΠΉΡΠ΅ Π΄Π° ΡΠ΅ΡΠ΅ΡΠ΅ Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ).
Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ ΠΈΠ΄Π²Π°Ρ ΠΎΡ cats:
F[_]β ΡΠΈΠΏ Π½Π° Π΅ΡΠ΅ΠΊΡΠ° (Π² Π½Π°ΠΉ-ΠΏΡΠΎΡΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉF[A]ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π±ΡΠ΄Π΅() => A. Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅cats.IO.)Reader[A,B]β Π΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈΠ»ΠΈ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ ΡΠΈΠ½ΠΎΠ½ΠΈΠΌ Π½Π° ΡΡΠ½ΠΊΡΠΈΡA => Bcats.Resourceβ ΠΈΠΌΠ° Π½Π°ΡΠΈΠ½ΠΈ Π·Π° ΠΏΡΠΈΠ΄ΠΎΠ±ΠΈΠ²Π°Π½Π΅ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅Timerβ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠΏΠΈΡΠ΅/ΠΌΠ΅ΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ContextShiftβ Π°Π½Π°Π»ΠΎΠ³ Π½Π°ExecutionContextApplicativeβ ΠΎΠΏΠ°ΠΊΠΎΠ²ΠΊΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π΅ΡΠ΅ΠΊΡ (ΠΏΠΎΡΡΠΈ ΠΌΠΎΠ½Π°Π΄Π°) (Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ Π·Π°ΠΌΠ΅Π½ΠΈΠΌ Ρ Π½Π΅ΡΠΎ Π΄ΡΡΠ³ΠΎ)
Π‘ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΎΠ·ΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ»ΡΠ³ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ»ΡΠ³Π°, ΠΊΠΎΡΡΠΎ Π½Π΅ ΠΏΡΠ°Π²ΠΈ Π½ΠΈΡΠΎ:
trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
type Config Resource.pure[F, Unit]( ()))
}(ΠΠΈΠΆΡΠ΅ Π·Π° Π΄ΡΡΠ³ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ β ,
and .)
ΠΡΠ·Π΅Π» Π΅ Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ, ΠΊΠΎΠΉΡΠΎ ΡΡΠ°ΡΡΠΈΡΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ»ΡΠ³ΠΈ (ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΠΈΠ³Π° ΠΎΡ ΡΠ΅ΡΡΡΡΠΈ Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΎ ΠΎΡ Cake Pattern):
object SingleNodeImpl extends ZeroServiceImpl[IO]
with EchoServiceService
with EchoClientService
with FiniteDurationLifecycleServiceImpl
{
type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}ΠΠ±ΡΡΠ½Π΅ΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΠ΅ Π² Π²ΡΠ·Π΅Π»Π° ΡΡΠΎΡΠ½ΡΠ²Π°ΠΌΠ΅ ΡΠΎΡΠ½ΠΈΡ ΡΠΈΠΏ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° Π·Π° ΡΠΎΠ·ΠΈ Π²ΡΠ·Π΅Π». ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½ΡΠΌΠ° Π΄Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π΄Π° ΠΈΠ·Π³ΡΠ°Π΄ΠΈΠΌ ΠΎΠ±Π΅ΠΊΡΠ° (Cake) Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠ΅Π½ ΡΠΈΠΏ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΡΡΠ΅ΠΉΡΠΎΠ²Π΅ Π½Π° ΡΡΠ»ΡΠ³Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΈΠΏΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π½ΡΠΌΠ° Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π²ΡΠ·Π΅Π»Π° Π±Π΅Π· Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΡΠ»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
Π Π°Π·ΡΠ΅ΡΠ°Π²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π°
ΠΠ° Π΄Π° ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ Π²ΡΡΠ·ΠΊΠ°, Π½ΠΈ ΡΡΡΠ±Π²Π° ΠΈΡΡΠΈΠ½ΡΠΊΠΈ Π°Π΄ΡΠ΅Ρ Π½Π° Ρ ΠΎΡΡ Π·Π° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π». Π’ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠ°ΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½ΠΈ ΡΡΡΠ±Π²Π° Π½Π°ΡΠΈΠ½ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π° ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΡΠΊ Π°Π΄ΡΠ΅Ρ. Π’Π°Π·ΠΈ ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΠΈΡ Π΅ ΡΡΠ½ΠΊΡΠΈΡ:
case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}ΠΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π½Π°ΡΠΈΠ½Π° Π΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅ ΡΠ°ΠΊΠ°Π²Π° ΡΡΠ½ΠΊΡΠΈΡ.
- ΠΠΊΠΎ Π·Π½Π°Π΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ ΠΏΡΠ΅Π΄ΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ, ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΡΠ° Π½Π° Ρ
ΠΎΡΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ°ΠΌΠ΅ Scala ΠΊΠΎΠ΄ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ ΠΈ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° (ΠΊΠΎΡΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅). Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ Π½Π°ΡΠ°ΡΠ° ΠΊΠ°ΡΡΠΎΠ³ΡΠ°ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΎΠΏΡΠΎΡΡΠ΅Π½Π° Π΄ΠΎ Π½Π΅ΡΠΎ ΠΊΠ°ΡΠΎ
Map[NodeId, NodeAddress]. - ΠΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π°Π΄ΡΠ΅ΡΠΈ ΡΠ°ΠΌΠΎ Π½Π° ΠΏΠΎ-ΠΊΡΡΠ΅Π½ Π΅ΡΠ°ΠΏ, ΠΊΠΎΠ³Π°ΡΠΎ Π²ΡΠ·Π΅Π»ΡΡ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ ΡΡΠ°ΡΡΠΈΡΠ°Π½, ΠΈΠ»ΠΈ Π½ΡΠΌΠ°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠΈ Π½Π° Π²ΡΠ·Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ° ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ. Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ»ΡΠ³Π° Π·Π° ΠΎΡΠΊΡΠΈΡΠΈΠ΅, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ° ΠΏΡΠ΅Π΄ΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΎΡΡΠ°Π½Π°Π»ΠΈ Π²ΡΠ·Π»ΠΈ ΠΈ Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·Π΅Π» ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ²ΠΈ ΡΠ²ΠΎΡ Π°Π΄ΡΠ΅Ρ Π² ΡΠ°Π·ΠΈ ΡΡΠ»ΡΠ³Π° ΠΈ Π΄Π° ΡΠ΅ Π°Π±ΠΎΠ½ΠΈΡΠ° Π·Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
- ΠΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅
/etc/hosts, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° Ρ ΠΎΡΡΠΎΠ²Π΅ (ΠΊΠ°ΡΠΎmy-project-main-nodeandecho-backend) ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ²ΡΡΠΆΠ΅ΠΌ ΡΠΎΠ²Π° ΠΈΠΌΠ΅ Ρ ip Π°Π΄ΡΠ΅Ρ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅.
Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°ΠΌΠ΅ ΡΠ΅Π·ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π² ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈ. ΠΡΡΡΠ½ΠΎΡΡ Π² Π½Π°ΡΠΈΡ ΠΈΠ³ΡΠ°Π»Π΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ ΡΠ΅ ΠΈΠΌΠ°Ρ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ IP Π°Π΄ΡΠ΅Ρ β 127.0.0.1.
Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π΄Π²Π° ΠΏΠ»Π°Π½Π° Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°:
- Π‘Ρ Π΅ΠΌΠ° Ρ Π΅Π΄ΠΈΠ½ Π²ΡΠ·Π΅Π», ΠΊΡΠ΄Π΅ΡΠΎ Π²ΡΠΈΡΠΊΠΈ ΡΡΠ»ΡΠ³ΠΈ ΡΠ° ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Π²ΡΠ·Π΅Π».
- Π‘Ρ Π΅ΠΌΠ° Ρ Π΄Π²Π° Π²ΡΠ·Π΅Π»Π°, ΠΊΡΠ΄Π΅ΡΠΎ ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π²ΡΠ·Π»ΠΈ.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π·Π° Π΅ ΡΠ»Π΅Π΄Π½Π°ΡΠ°:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ Π²ΡΠ·Π΅Π»
ΠΎΠ±Π΅ΠΊΡ SingleNodeConfig ΡΠ°Π·ΡΠΈΡΡΠ²Π° EchoConfig[String]
Ρ EchoClientConfig[String] Ρ FiniteDurationLifecycleConfig
{
ΡΠ»ΡΡΠ°ΠΉΠ΅Π½ ΠΎΠ±Π΅ΠΊΡ Singleton \/\/ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡ Π²ΡΠ·Π΅Π»
\/\/ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΡΠ²ΡΡΠ°
ΡΠΈΠΏ NodeId = Singleton.type
Π΄Π΅Ρ nodeId = Singleton
\/** Π‘ΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ ΡΠΈΠΏ Π·Π° ΠΏΠΎΡΡ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ°. *\/
ΠΏΡΠ΅ΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π΅Ρ portNumber: PortNumber = 8088
\/\/ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
\/** Π©Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΡΠ»ΡΠ³Π°ΡΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ½Π° ΠΎΡ ΡΡΡΠΈΡ Ρ
ΠΎΡΡ. *\/
Π΄Π΅Ρ echoServiceDependency = echoService
ΠΏΡΠ΅ΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π΅Ρ testMessage: UrlPathElement = "hello"
Π΄Π΅Ρ pollInterval: FiniteDuration = 1.second
\/\/ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° Π½Π° ΠΆΠΈΠ·Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠ»
Π΄Π΅Ρ lifetime: FiniteDuration = 10500.milliseconds \/\/ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ 0.5 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°Ρ 10 Π·Π°ΡΠ²ΠΊΠΈ, Π° Π½Π΅ 9.
}Π’ΡΠΊ ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΡΠ°Π·ΡΠΈΡΡΠ²Π° ΠΊΠ°ΠΊΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°, ΡΠ°ΠΊΠ° ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Ρ Π½Π° ΠΆΠΈΠ·Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠ», ΠΊΠΎΠΉΡΠΎ Π½ΠΎΡΠΌΠ°Π»Π½ΠΎ ΡΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΡΡΠ²ΡΡΠ° ΡΠ»Π΅Π΄ ΠΆΠΈΠ·Π½Π΅Π½ ΡΠΈΠΊΡΠ» ΠΈΠ·ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°.
Π‘ΡΡΠΈΡΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈ ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Ρ Π΄Π²Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ Π²ΡΠ·Π΅Π»Π°. ΠΡΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΡΠ΅ ΡΡΠ»ΡΠ³ΠΈ:
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π΄Π²Π° Π²ΡΠ·Π΅Π»Π°
ΠΎΠ±Π΅ΠΊΡ NodeServerConfig ΡΠ°Π·ΡΠΈΡΡΠ²Π° EchoConfig[String] Ρ SigTermLifecycleConfig
{
ΡΠΈΠΏ NodeId = NodeIdImpl
Π΄Π΅Ρ nodeId = NodeServer
ΠΏΡΠ΅ΠΎΠ²Π΅ΡΠ΅ΡΠ΅ Π΄Π΅Ρ portNumber: PortNumber = 8080
}
ΠΎΠ±Π΅ΠΊΡ NodeClientConfig ΡΠ°Π·ΡΠΈΡΡΠ²Π° EchoClientConfig[String] Ρ FiniteDurationLifecycleConfig
{
\/\/ NB! ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ
Π΄Π΅Ρ echoServiceDependency = NodeServerConfig.echoService
Π΄Π΅Ρ pollInterval: FiniteDuration = 1.second
Π΄Π΅Ρ lifetime: FiniteDuration = 10500.milliseconds \/\/ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ 0.5 ΡΠ΅ΠΊΡΠ½Π΄ΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠΈΠ³Π½Π°Ρ 10 Π·Π°ΡΠ²ΠΊΠΈ, Π° Π½Π΅ 9.
Π΄Π΅Ρ testMessage: String = "dolly"
}ΠΠΈΠΆΡΠ΅ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΡΠ²Π°ΠΌΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ°. Π‘ΠΏΠΎΠΌΠ΅Π½Π°Π²Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π°ΡΠ° ΡΡΠ»ΡΠ³Π° Π½Π° Π΄ΡΡΠ³ΠΈΡ Π²ΡΠ·Π΅Π» ΠΊΠ°ΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ Π½Π° ΡΠ΅ΠΊΡΡΠΈΡ Π²ΡΠ·Π΅Π». Π’ΠΈΠΏΡΡ Π½Π° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡΠ° ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ°Π½ΡΠΎΠΌΠ΅Π½ ΡΠΈΠΏ, ΠΊΠΎΠΉΡΠΎ ΠΎΠΏΠΈΡΠ²Π° ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°. Π ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΈΠΌΠ°ΠΌΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° Π²ΡΠ·Π΅Π»Π°. Π’ΠΎΠ²Π° Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ Π²Π°ΠΆΠ½ΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. Π’ΠΎΠΉ Π½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΠΏΠΎΡΡΠ° ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ ΠΈ Π΄Π° ΡΠ΅ ΡΠ²Π΅ΡΠΈΠΌ, ΡΠ΅ ΡΠ΅ ΠΎΡΠ½Π°ΡΡΠΌΠ΅ ΠΊΡΠΌ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΠΏΠΎΡΡ.
ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° Π΄Π²Π° Π²ΡΠ·Π΅Π»Π°
ΠΠ° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠΎΡΠ½ΠΎ ΡΡΡΠΈΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΡΠ»ΡΠ³ΠΈΡΠ΅. ΠΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΈΠ·ΠΎΠ±ΡΠΎ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΡΠ·Π΄Π°Π²Π°ΠΌΠ΅ Π΄Π²Π΅ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π° Π²ΡΠ·Π»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΡΠ»ΡΠ³ΠΈ:
ΠΎΠ±Π΅ΠΊΡ TwoJvmNodeServerImpl ΡΠ°Π·ΡΠΈΡΡΠ²Π° ZeroServiceImpl[IO] Ρ EchoServiceService ΠΈ SigIntLifecycleServiceImpl {
ΡΠΈΠΏ Config = EchoConfig[String] Ρ SigTermLifecycleConfig
}
ΠΎΠ±Π΅ΠΊΡ TwoJvmNodeClientImpl ΡΠ°Π·ΡΠΈΡΡΠ²Π° ZeroServiceImpl[IO] Ρ EchoClientService ΠΈ FiniteDurationLifecycleServiceImpl {
ΡΠΈΠΏ Config = EchoClientConfig[String] Ρ FiniteDurationLifecycleConfig
}ΠΡΡΠ²ΠΈΡΡ Π²ΡΠ·Π΅Π» ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΡΡΡΠ²ΡΡ ΠΈ ΠΌΡ Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ° ΡΠ°ΠΌΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°. ΠΡΠΎΡΠΈΡΡ Π²ΡΠ·Π΅Π» ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ Π½ΡΠΆΠ΄Π°Π΅ ΡΠ΅ ΠΎΡ Π΄ΡΡΠ³Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π Π΄Π²Π°ΡΠ° Π²ΡΠ·Π΅Π»Π° ΠΈΠΌΠ°Ρ Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΠΏΠ΅ΡΠΈΡΡΠΊΠ°ΡΠΈΡ Π½Π° ΠΆΠΈΠ·Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΡΠ». ΠΠ° ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ, ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°ΡΠΈΡΡ Π²ΡΠ·Π΅Π» ΡΠ΅ ΠΈΠΌΠ° Π±Π΅Π·ΠΊΡΠ°Π΅Π½ ΠΆΠΈΠ·Π½Π΅Π½ ΡΠΈΠΊΡΠ», ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ Ρ SIGTERM, Π΄ΠΎΠΊΠ°ΡΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΡΡ echo ΡΠ΅ Π±ΡΠ΄Π΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ ΡΠ»Π΅Π΄ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΠ΅ΡΠΈΠΎΠ΄. ΠΠΈΠΆΡΠ΅ Π·Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ.
ΠΠ±Ρ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π½Π°ΡΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΡΠ°Π±ΠΎΡΠΈΠΌ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° ΠΈ ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡ. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΠ°Π·ΡΠΌΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΡΠ΄Π΅Π»ΠΈ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ Π½Π° ΠΊΠΎΠ΄Π°. Π§Π΅ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π½Π° ΡΡΡΠ°ΡΠ° ΠΊΠΎΠ΄ΠΎΠ²Π° Π±Π°Π·Π°. Π ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. Π Π΅Π΄Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ Π²Π΅ΡΡΠΈΠΈ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ ΡΠΎΠ²Π° ΡΠ΅ ΠΎΡΡΠ°Π½Π΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ°Π·ΠΏΠΎΡΠ΅Π΄ΠΈΠΌ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΡΠ°Π²Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ΄Π°. Π’Π°ΠΊΠ° ΡΠ΅ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠΊΡΠΈΡΠΈ ΠΎΡ ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ:
ΠΠΈΠ»Π΅Ρ -> PR -> ΠΏΡΠ΅Π³Π»Π΅Π΄ -> ΡΠ»ΠΈΠ²Π°Π½Π΅ -> Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ -> Π½Π΅ΠΏΡΠ΅ΠΊΡΡΠ½Π°ΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π°Ρ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ ΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°:
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° Π·Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ Π½ΡΠΌΠ° Π½Π°ΡΠΈΠ½ Π΄Π° ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½Π° Π²ΡΡΠ·ΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅.
- ΠΠ΅ Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ°ΠΌΠΎ Π² Π΅Π΄ΠΈΠ½ Π²ΡΠ·Π΅Π». ΠΠ·Π³Π»Π΅ΠΆΠ΄Π° Π½Π΅ΡΠ°Π·ΡΠΌΠ½ΠΎ Π΄Π° ΡΠ΅ Π²Π»ΠΈΠ·Π° ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π½ΡΠΊΠΎΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. Π’Π°ΠΊΠ° ΠΏΠ»Π°Π²Π°ΡΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΡΠ°Π²Π° ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ Π²Π΅ΡΠΎΡΡΠ½Π°.
- ΠΠ°Π»ΠΊΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π΅ ΡΠ° Π»Π΅ΡΠ½ΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅.
- ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ ΡΠ»Π΅Π΄Π²Π°Ρ ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ ΠΈ ΡΠ΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΠΏΡΠ΅Π· Π½ΡΠΊΠ°ΠΊΡΠ² ΠΏΡΠ΅Π³Π»Π΅Π΄.
ΠΡΠΆΠ΄Π°Π΅ΠΌ Π»ΠΈ ΡΠ΅ ΠΎΡ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ? ΠΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ ΠΈΠ·Π²ΡΠ½ ΠΎΠ±ΡΠ΅Π³Π° Π½Π° ΠΌΠ½ΠΎΠ³ΠΎ Ρ ΠΎΡΠ°. ΠΠ°ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΈ ΡΡΡΡΠ²Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ ΠΎΡΠ΄Π΅Π»Π½ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ, ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠΎΠ½Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π΄Π²Π΅ ΡΠ°ΡΡΠΈ β Π΅Π΄Π½Π°, ΠΊΠΎΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΎΡΠΊΡΠΈΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡΡΠ° ΠΈ Π΅Π΄Π½Π°, ΠΊΠΎΡΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΡΠ΅ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ°ΡΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π’ΠΎΠ²Π° Π±ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π΄ΠΎΡΡΡΠΏ Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈ Π΄ΠΎ Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈ Π΄ΠΎΡΡΡΠΏΠ° Π΄ΠΎ Π½Π°ΠΈΡΡΠΈΠ½Π° ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ Π½Π΅ΡΠ°. ΠΠ΅ΡΠ½ΠΎ Π΅ Π΄Π° ΠΏΠΎΡΡΠΈΠ³Π½Π΅ΠΌ ΡΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π½ΠΈ ΡΠ΅ΡΡΠΈ Ρ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°ΡΠΈ ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅.
ΠΠ°ΡΠΈΠ°ΡΠΈΠΈ
ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°ΡΠ° ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π΄ΡΡΠ³ΠΈΡΠ΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
ΠΠ° ΠΏΡΡΠ²ΠΎ ΠΌΡΡΡΠΎ, ΡΠ΅ ΠΈΠ·Π±ΡΠΎΠΈΠΌ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°ΡΠΈΠ½ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°:
- Π’Π΅ΠΊΡΡΠΎΠ² ΡΠ°ΠΉΠ» Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΠΌΠ°ΡΠΈΠ½Π°.
- Π¦Π΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ (ΠΊΠ°ΡΠΎ
etcd/zookeeper). - ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΠΏΠΎΠ΄ΠΊΡΠ΅ΠΏΡΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠ΅Π½ΠΈ/ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Π±Π΅Π· ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ°.
- ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ·Π²ΡΠ½ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ» Π½Π° Π²Π΅ΡΡΠΈΠΈΡΠ΅.
Π’Π΅ΠΊΡΡΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ» Π΄Π°Π²Π° ΠΈΠ·Π²Π΅ΡΡΠ½Π° Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡ ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΏΠΎΠ½ΡΠ°Π½Π½ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ. ΠΠ΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° Π²Π»Π΅Π·Π΅ Π² ΡΠ΅Π»Π΅Π²ΠΈΡ Π²ΡΠ·Π΅Π», Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈ ΠΏΡΠΎΠΌΡΠ½Π° ΠΈ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ° ΡΡΠ»ΡΠ³Π°ΡΠ°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° Π΄ΠΎΠ±ΡΠΎ Π·Π° ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. ΠΠ΅ ΠΎΡΡΠ°Π²Π°Ρ ΡΠ»Π΅Π΄ΠΈ ΡΠ»Π΅Π΄ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ°. ΠΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠ΅Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΎΡ Π΄ΡΡΠ³ ΠΏΠΎΠ³Π»Π΅Π΄. ΠΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡΠΈΡΠΈΠ½ΠΈΠ»ΠΎ ΠΏΡΠΎΠΌΡΠ½Π°ΡΠ°. Π’ΠΎ Π½Π΅ Π΅ Π±ΠΈΠ»ΠΎ ΡΠ΅ΡΡΠ²Π°Π½ΠΎ. ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄Π° Π·Π°Π±ΡΠ°Π²ΠΈ Π΄Π° ΠΎΠ±Π½ΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² Π΅Π΄ΠΈΠ½ ΠΎΡ Π΄ΡΡΠ³ΠΈΡΠ΅ Π²ΡΠ·Π»ΠΈ.
(ΠΠ΅ΠΆΠ΄Ρ Π΄ΡΡΠ³ΠΎΡΠΎ, Π°ΠΊΠΎ Π² ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ Π½Π°Π»ΠΎΠΆΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΡΠ΅ ΡΡΡΠ±Π²Π° ΡΠ°ΠΌΠΎ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠ°ΡΡΠ΅Ρ + Π²Π°Π»ΠΈΠ΄Π°ΡΠΎΡ, ΠΊΠΎΠΉΡΠΎ Π±ΠΈ ΠΌΠΎΠ³ΡΠ» Π΄Π° ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ ΡΡΡΠΈΡ ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠΈΠΏ ΠΈ ΡΠΎΠ²Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. Π’ΠΎΠ²Π° ΡΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π°, ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠ° ΠΎΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, ΡΡΠΉ ΠΊΠ°ΡΠΎ Π² ΡΠ΅ΠΊΡΡΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΠΌ ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ ΠΊΠΎΠ΄.)
Π¦Π΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎΡΠΎ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π½Π° ΠΊΠ»ΡΡ-ΡΡΠΎΠΉΠ½ΠΎΡΡ Π΅ Π΄ΠΎΠ±ΡΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ΅ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. Π’ΡΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΌΠΈΡΠ»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΡΠΈΡΠ°ΠΌΠ΅ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π΅ ΠΏΡΠΎΡΡΠΎ Π΄Π°Π½Π½ΠΈ. ΠΠΌΠ°ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΡΠ½ΠΊΡΠΈΡ C => A => B ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π°ΡΠΈΡΠ°ΠΌΠ΅ ΡΡΠ΄ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠΈΡΠ΅ ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ C Β«ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΒ», Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅ΡΡΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ A β ΠΏΡΠΎΡΡΠΎ Π²Ρ
ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΎΡ Π΄Π°Π½Π½ΠΈΡΠ΅ A. ΠΠΌΠ°ΠΉΠΊΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠ°Π·ΠΈ ΠΈΠ΄Π΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ ΠΎΡΠ°ΠΊΠ²Π°Π½Π°ΡΠ° ΡΠ΅ΡΡΠΎΡΠ° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΠΏΡΠΎΡΡΠΎ Π΄Π°Π½Π½ΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠ΄Π²Π°Ρ ΠΎΡ Π΅Π΄ΠΈΠ½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ (ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»), Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈΠ΄Π²Π° ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΈΠ·ΡΠΎΡΠ½ΠΈΠΊ (Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡ). Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠΎΠΌΠ΅Π½ΡΠ½ΠΈ ΡΠ»Π΅Π΄ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠ° ΡΠ°ΠΊΠΈΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΠ° ΠΈΠΌ Π·Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°, Π°Π½Π°Π»ΠΈΠ· ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ°Π½Π΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠΎΠ²Π°, Π·Π° Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ°, Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈΠΌ Π±ΡΠΎΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°Π±ΠΎΡΠ° (ΠΈΠ»ΠΈ Π΄ΠΎΡΠΈ Π΄Π° Π³ΠΈ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ Π½Π°ΠΏΡΠ»Π½ΠΎ).
ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ, ΡΡΡΠ±Π²Π° Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΠΊΠΎ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΠ΄ΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π½ΡΠΊΠΎΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΠΎΠ³Π°Π²Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΈ Π½Π°ΡΠ΅ΡΠ΅ΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΡΠ΅ ΡΠ° ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ΠΈ Ρ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅. ΠΠ° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π° ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ° Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΡΠΈ ΠΎΡ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½ΠΈ Ρ Π½ΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ Π² ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°.
(ΠΠΎΠ΅ΡΠΎ ΡΠΊΡΠΎΠΌΠ½ΠΎ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·Π±ΡΠ³Π²Π° ΠΏΡΠ΅Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΡΠ°Π±ΠΎΡΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠ²Π° ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°.
ΠΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΏΠΎ-ΠΏΡΠΎΡΡΠΎ Π΄Π° ΡΠ°Π·ΡΠΈΡΠ°ΠΌΠ΅ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° ΠΠ‘ Π·Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠΎΠ²Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ.)
ΠΠ΄ΠΈΠ½ Π²Π°ΠΆΠ΅Π½ Π°ΡΠΏΠ΅ΠΊΡ Π½Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ½ΡΠΊΠΎΠ³Π° ΠΊΠ°ΡΠ° Ρ ΠΎΡΠ°ΡΠ° Π΄Π° ΠΎΠ±ΠΌΠΈΡΠ»ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ (Π±Π΅Π· Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ) Π΅ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΡΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΎΠ±Π½ΠΎΠ²ΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠ°ΠΈΡΡΠΈΠ½Π°, Π°ΠΊΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΡΠ°ΡΠΈΡΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, Π·Π° Π΄Π° Π²Π»ΡΠ·Π°Ρ Π² ΡΠΈΠ»Π° Π½ΠΎΠ²ΠΈΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. ΠΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° Π·Π° ΡΠΏΠΈΡΠ°Π½Π΅ Π²Π°ΡΠΈΡΠ°Ρ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΡΠΎΠ»ΠΊΠΎΠ²Π° ΠΊΡΠΈΡΠΈΡΠ½ΠΎ. ΠΠΊΠΎ Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ, ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠ»Π°Π½ΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π° Π²ΡΡΠΊΠΎ ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²Π½Π΅Π΄ΡΠΈΠΌ . Π ΡΠΎΠ·ΠΈ ΡΡΠ΅Π½Π°ΡΠΈΠΉ, Π²ΡΠ΅ΠΊΠΈ ΠΏΡΡ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Π½ΠΎΠ²Π° ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°ΠΌΠ΅ ELB ΠΊΡΠΌ Π½Π΅Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΠΉΠΊΠΈ Π½Π° ΡΡΠ°ΡΠ°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π΄Π° Π·Π°Π²ΡΡΡΠΈ ΠΎΠ±ΡΠ»ΡΠΆΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π²ΡΡΠ·ΠΊΠΈ.
ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΊΠ°ΠΆΠ΅ΡΠ΅ Π·Π° Π·Π°Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π²ΡΡΡΠ΅ Π² Π²Π΅ΡΡΠΈΡΠ°Π½ Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΈΠ»ΠΈ ΠΈΠ·Π²ΡΠ½ Π½Π΅Π³ΠΎ? ΠΠ°Π΄ΡΡΠΆΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ, ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π»Π° ΠΏΡΠ΅Π· ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎΡΠΎ, ΠΊΠ°ΠΊΡΠΎ ΠΈ Π΄ΡΡΠ³ΠΈΡΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡΠΈ. Π’Π°ΠΊΠ° ΡΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΌΠ΅ ΡΠΈΠ³ΡΡΠ½ΠΈ, ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ Ρ Π΄ΠΎΠ±ΡΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈ Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°. ΠΡ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΡΠ°ΠΉΠ» ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΡΠΌΠ° ΡΠ»Π΅Π΄ΠΈ ΠΎΡ ΡΠΎΠ²Π° ΠΊΠΎΠΉ ΠΈ Π·Π°ΡΠΎ Π΅ Π½Π°ΠΏΡΠ°Π²ΠΈΠ» ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ». ΠΠ°ΠΆΠ½ΠΎ Π»ΠΈ Π΅ ΡΠΎΠ²Π°? Π‘ΠΌΡΡΠ°ΠΌΠ΅, ΡΠ΅ Π·Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠ°Π±ΠΈΠ»Π½Π° ΠΈ Ρ Π²ΠΈΡΠΎΠΊΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
ΠΠ΅ΡΡΠΈΡΡΠ° Π½Π° Π°ΡΡΠ΅ΡΠ°ΠΊΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ°Π·Π±Π΅ΡΠ΅ΠΌ ΠΊΠΎΠ³Π° Π΅ ΡΡΠ·Π΄Π°Π΄Π΅Π½, ΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΡΠ΄ΡΡΠΆΠ°, ΠΊΠ°ΠΊΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ/Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ, ΠΊΠΎΠΉ Π΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ΅Π½ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΡΠΈΠ»ΠΈΡ Π΄Π° ΡΠ΅ Π·Π°Π΄ΡΡΠΆΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² Π°ΡΡΠ΅ΡΠ°ΠΊΡ ΠΈ Π΅ Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡΠΊΠΈ ΠΈΠ·Π±ΠΎΡ.
ΠΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΠΌΠΈΠ½ΡΡΠΈ
Π’ΡΠΊ Π±ΠΈΡ ΠΌΠ΅ ΠΈΡΠΊΠ°Π»ΠΈ Π΄Π° ΠΏΠΎΠ΄ΡΠ΅ΡΡΠ°Π΅ΠΌ Π½ΡΠΊΠΎΠΈ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° ΠΈ Π΄Π° ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π½ΡΠΊΠΎΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ Π½Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈ.
ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π°
Π₯Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΠ»ΠΎΡΡΠ½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°:
- Π‘ΡΠ°ΡΠΈΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π’ΠΎΠ²Π° Π΄Π°Π²Π° Π²ΠΈΡΠΎΠΊ ΡΡΠ΅ΠΏΠ΅Π½ Π½Π° ΡΠ²Π΅ΡΠ΅Π½ΠΎΡΡ, ΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½Π°, ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
- ΠΠΎΠ³Π°Ρ Π΅Π·ΠΈΠΊ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΄ΡΡΠ³ΠΈΡΠ΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΡΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈ Π΄ΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Scala, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΎΠ³Π°Ρ Π°ΡΠΎΡΡΠΈΠΌΠ΅Π½Ρ ΠΎΡ Π΅Π·ΠΈΠΊΠΎΠ²ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, Π·Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ traits, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΠΎΠ±Π΅ΠΊΡΠΈ, Π·Π° Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΎΠ±Ρ Π²Π°Ρ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π΅ΠΌ Π½Π°Π²Π°Π»s, Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΡΠ°ΠΌΠΎ Π²Π΅Π΄Π½ΡΠΆ Π² Π²ΡΠ½ΡΠ½ΠΈΡ ΠΎΠ±Ρ Π²Π°Ρ (DRY). ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π±ΡΠΊΠ²Π΅Π½ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠ»Π°ΡΠΎΠ²Π΅ (Seq,Map, ΠΈ Ρ.Π½.). - DSL. Scala ΠΈΠΌΠ° Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½Π΅ Π½Π° ΠΏΠΈΡΠ°ΡΠ΅Π»ΠΈΡΠ΅ Π½Π° DSL. ΠΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ΅Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΠΉΡΠΎ Π΅ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π΅Π½ ΠΈ ΠΏΡΠΈΡΡΠ΅Π»ΡΠΊΠΈ Π½Π°ΡΡΡΠΎΠ΅Π½ Π·Π° ΠΊΡΠ°ΠΉΠ½ΠΈΡ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π», ΡΠ°ΠΊΠ° ΡΠ΅ ΠΊΡΠ°ΠΉΠ½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ½Π΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅ΡΠΈΠΌΠ° ΠΎΡ Π΄ΠΎΠΌΠ΅ΠΉΠ½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅.
- Π¦ΡΠ»ΠΎΡΡΠ½ΠΎΡΡ ΠΈ ΡΡΠ³Π»Π°ΡΡΠ²Π°Π½ΠΎΡΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅. ΠΠ΄Π½Π° ΠΎΡ ΠΏΠΎΠ»Π·ΠΈΡΠ΅ ΠΎΡ Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π·Π° ΡΡΠ»Π°ΡΠ° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° Π΅Π΄Π½ΠΎ ΠΌΡΡΡΠΎ Π΅, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Ρ ΡΡΡΠΈΠΊΡΠ½ΠΎ Π²Π΅Π΄Π½ΡΠΆ ΠΈ ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡΠ½ΠΎΠ²ΠΎ Π½Π°Π²ΡΡΠΊΡΠ΄Π΅, ΠΊΡΠ΄Π΅ΡΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ°, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΈΡΠ΅ ΠΏΠΎ ΡΠΈΠΏ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π½Π° ΠΏΠΎΡΡΠΎΠ²Π΅ΡΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Ρ, ΡΠ΅ Π²ΡΠ² Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π²ΡΠ·Π»ΠΈΡΠ΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡΡ Π½Π° Π΅Π΄ΠΈΠ½ ΠΈ ΡΡΡ Π΅Π·ΠΈΠΊ. ΠΠΌΠ° ΡΠ²Π½ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅, ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ²Π° Π·Π°Π±ΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ Π½ΡΠΊΠΎΠΈ ΡΡΠ»ΡΠ³ΠΈ.
- ΠΠΈΡΠΎΠΊΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅. ΠΠ±ΡΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π·Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΡΠ΅Π· Π½ΠΎΡΠΌΠ°Π»Π½ΠΈΡ PR ΠΏΡΠΎΡΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° Π²ΠΈΡΠΎΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠΈ Π·Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°.
- Π‘ΠΈΠΌΡΠ»ΡΠ°Π½ΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. ΠΠΎΠ³Π°ΡΠΎ ΠΈΠ·Π²ΡΡΡΠΈΠΌ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°, ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·Π»ΠΈ ΡΠ΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ.
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈ Π²Π°Π»ΠΈΠ΄ΠΈΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²Ρ Ρ Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π’ΠΎΠ²Π° ΠΎΠΏΡΠΎΡΡΡΠ²Π° ΡΡΠ»ΠΎΡΡΠ½ΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. (ΠΡΠΊΠΎΠΈ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡΠ° ΡΠ° Π² ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π½ΠΎ ΡΠΎΠ²Π° Π΅ ΠΎΡΡΠ·Π½Π°ΡΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ.) ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΠΌ ΠΊΡΠΌ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ β ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ. ΠΠΎ-Π»Π΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΎΡΠ½Π΅ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ»ΠΎΠΆΠΈ Π²Π½Π΅Π΄ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ Π·Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ.
- ΠΠ΅ΡΡΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠΎΡΠ°Π΄ΠΈ ΡΠ°ΠΊΡΠ°, ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ»Π΅Π΄Π²Π°Ρ ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π² ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π°ΡΡΠ΅ΡΠ°ΠΊΡ Ρ ΡΠ½ΠΈΠΊΠ°Π»Π½Π° Π²Π΅ΡΡΠΈΡ. Π’ΠΎΠ²Π° Π½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° Π²ΡΡΠ½Π΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, Π°ΠΊΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΠΎΠΆΠ΅ΠΌ Π΄ΠΎΡΠΈ Π΄Π° ΡΠ°Π·Π³ΡΡΡΠ°ΠΌΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π΅ Π±ΠΈΠ»Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π° ΠΏΡΠ΅Π΄ΠΈ Π³ΠΎΠ΄ΠΈΠ½Π° ΠΈ ΡΡ ΡΠ΅ ΡΠ°Π±ΠΎΡΠΈ ΡΠΎΡΠ½ΠΎ ΠΏΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½. Π‘ΡΠ°Π±ΠΈΠ»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΠ° ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡΡΠ° Π½Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ°. ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π»Π΅ΡΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠ°Π½Π° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°.
- ΠΠΎΠ΄ΡΠ»Π°ΡΠ½ΠΎΡΡ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΡ ΡΡΠ΅ΠΉΠΌΡΡΡΠΊ Π΅ ΠΌΠΎΠ΄ΡΠ»Π΅Π½ ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠ°Π½ΠΈ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ,
Π·Π° Π΄Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ (Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ/ΠΏΠΎΠ΄ΡΠ΅Π΄Π±ΠΈ). Π ΡΠ°ΡΡΠ½ΠΎΡΡ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠ°Π»ΠΊΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Ρ Π΅Π΄ΠΈΠ½ Π²ΡΠ·Π΅Π» ΠΈ Π³ΠΎΠ»ΡΠΌΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π²ΡΠ·Π»ΠΈ. Π Π°Π·ΡΠΌΠ½ΠΎ Π΅ Π΄Π° ΠΈΠΌΠ° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. - Π’Π΅ΡΡΠ²Π°Π½Π΅. ΠΠ° ΡΠ΅ΡΡΠΎΠ²ΠΈ ΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΌΠΎΠΊΠ° ΡΡΠ»ΡΠ³Π° ΠΈ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°ΡΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΏΠΎ ΡΠΈΠΏΠΎΠ²ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Π½Π°ΡΠΈΠ½. ΠΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, Π² ΠΊΠΎΠΈΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°ΡΡΠΈ ΡΠ° Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΈ Ρ ΠΌΠΎΠΊΠ°.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎ ΡΠ΅ΡΡΠ²Π°Π½Π΅. ΠΠΎΠ½ΡΠΊΠΎΠ³Π° Π² ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΠΈ Π΅ ΡΡΡΠ΄Π½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Π·Π° ΡΠΈΠΏΠΎΠ²ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΡΡΠ»Π°ΡΠ° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°ΠΌΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠ°ΡΡΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΡΡΡΠ²ΡΡ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌ Π½Π°ΡΠΈΠ½. ΠΠ΅ΡΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ Π΅ΠΌΡΠ»ΠΈΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡΡΠ°,
ΠΊΠΎΠ³Π°ΡΠΎ Π΅Π΄Π½Π° ΠΎΡ ΡΡΠ»ΡΠ³ΠΈΡΠ΅ ΡΡΠ°Π½Π΅ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π°.
ΠΠ΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈ
ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π΅ ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΎΡ "Π½ΠΎΡΠΌΠ°Π»Π½Π°ΡΠ°" ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° Π²ΡΠΈΡΠΊΠΈ Π½ΡΠΆΠ΄ΠΈ. ΠΡΠΎ Π½ΡΠΊΠΎΠΈ ΠΎΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΡΠΈΡΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ:
- Π‘ΡΠ°ΡΠΈΡΠ½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. Π’Ρ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π΅ Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π½ΡΠΊΠΎΠΈ ΡΠ»ΡΡΠ°ΠΈ ΠΈΠΌΠ° Π½ΡΠΆΠ΄Π° ΠΎΡ Π±ΡΡΠ·ΠΎ ΠΊΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΡ, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ Π²ΡΠΈΡΠΊΠΈ ΠΌΠ΅ΡΠΊΠΈ Π·Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π·Π°ΡΡΡΠ΄Π½ΡΠ²Π° ΡΠΎΠ²Π°. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ ΡΠ»Π΅Π΄ Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΌΡΠ½Π° Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ°. Π’ΠΎΠ²Π° Π΅ ΠΈ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°, ΠΈ ΡΠ΅ΠΆΠ΅ΡΡ.
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ. ΠΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΎΡ Π½ΡΠΊΠΎΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ, ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄Π²Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ (ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ). ΠΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΡΠΈΠ»ΠΈΡ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΡΠΏΠΊΠ° Π² ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅.
- ΠΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ. ΠΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π΄Π½Π΅Ρ ΠΈ ΡΠ°Π·ΡΠΈΡΠ°Ρ Π½Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎ Π±Π°Π·ΠΈΡΠ°Π½ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΊΠΎΠΈ ΠΎΡ ΡΡΡ
Π½ΡΠΌΠ° Π΄Π° ΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠΈΠΌΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π°. - ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΌΠΈΡΠ»Π΅Π½Π΅ΡΠΎ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ ΠΈ DevOps ΡΠ° ΡΠ²ΠΈΠΊΠ½Π°Π»ΠΈ Ρ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅. ΠΠ΄Π΅ΡΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌ ΡΠ΅ ΡΡΠΎΡΠΈ ΡΡΡΠ°Π½Π½Π°.
- ΠΡΠ΅Π΄ΠΈ Π΄Π° ΡΠ΅ Π²ΡΠ²Π΅Π΄Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π²ΠΈΡΠΎΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΎΡΡΡΠ΅Ρ.
ΠΠΌΠ° Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Ρ:
- ΠΠΊΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΡΠΎ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° Π²ΡΠ·Π΅Π»Π°, ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½ΡΠΌΠ° Π΄Π° Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ Π΄Π° ΠΎΡΠΊΡΠΈΠ΅ΠΌ ΠΎΡΡΡΡΡΠ²Π°ΡΠ°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π°Π΄ΡΠ΅ΡΠΈΡΠ°Π½ΠΎ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ
HListΠΈΠ»ΠΈ ADT (ΠΊΠ»Π°ΡΠΎΠ²Π΅ ΠΏΠΎ ΡΠ»ΡΡΠ°ΠΈ) Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π²ΡΠ·Π»ΠΈ Π²ΠΌΠ΅ΡΡΠΎ ΡΠ΅ΡΡΠΈ ΠΈ Cake Pattern. - Π’ΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½ΡΠΊΠΎΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ»: (
ΠΏΠ°ΠΊΠ΅Ρ,import,ΠΎΠ±Π΅ΠΊΡΠ΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ;
ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌ defβs Π·Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠΌΠ°Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅). Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ ΡΠ°ΡΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΡΠ΅ΡΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° DSL. - Π ΡΠ°Π·ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ Π½Π΅ ΠΏΠΎΠΊΡΠΈΠ²Π°ΠΌΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½Π°ΡΠ° ΡΠ΅ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠΈ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π²ΡΠ·Π»ΠΈ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ ΠΎΠ±ΡΡΠΆΠ΄Π°ΠΌΠ΅ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΏΠΎ ΡΠΈΠΏΠΎΠ²ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Π½Π°ΡΠΈΠ½. ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠΎ Π·Π°ΠΌΠ΅ΡΡΠΈΡΠ΅Π» Π½Π° XML ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ Π½Π°ΡΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ Π½Π° Scala, ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠΈΡΠ°Π½ ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠΈ Π΅Π·ΠΈΡΠΈ (ΠΊΠ°ΡΠΎ Kotlin, C#, Swift ΠΈ Π΄ΡΡΠ³ΠΈ). ΠΠΎΠΆΠ΅ Π΄Π° ΠΎΠΏΠΈΡΠ°ΡΠ΅ ΡΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π² Π½ΠΎΠ² ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ, Π°ΠΊΠΎ Π½Π΅ ΡΠ΅ Π²ΠΏΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠ΅, Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ΡΠ΅ ΠΊΡΠΌ ΡΡΠ°ΡΠΎΠΌΠΎΠ΄Π½ΠΈΡ Π½Π°ΡΠΈΠ½.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π²ΠΈΡΠΎΠΊΠΎΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π Π·Π°ΠΌΡΠ½Π° ΠΎΠ±Π΅ΡΠ°Π²Π° Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π΅Π΄Π½Π°ΠΊΠ²ΠΎ Π²ΠΈΡΠΎΠΊΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ Π½Π° Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ.
Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°Π·ΡΠΈΡΠ΅Π½ ΠΏΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½Π°ΡΠΈΠ½ΠΈ:
- ΠΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΌΠ°ΠΊΡΠΎΡΠΈ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ²Π°Π»ΠΈ ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½Π΅ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π½Π΅ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ°.
- ΠΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ DSL, Π·Π° Π΄Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Π½Π°ΡΠΈΠ½.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ΅ΡΡΡΡΠΈΡΠ΅ Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈΡΠ΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅Π³ΡΠ»ΠΈΡΠ°ΠΌΠ΅ Π±ΡΠΎΡ Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΡΠΊΠ°ΠΌΠ΅ (1) Π²ΡΠ·Π»ΠΈΡΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΌΠ°Π»ΠΊΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ; (2) ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΡΡ Π½Π° ΠΊΠ»ΡΡΡΠ΅ΡΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ Π½ΠΎΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π²ΡΠ·Π»ΠΈΡΠ΅.
ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ
ΠΡΠΊΠ°ΠΌ Π΄Π° Π±Π»Π°Π³ΠΎΠ΄Π°ΡΡ Π½Π° ΠΠ½Π΄ΡΠ΅ΠΉ Π‘Π°ΠΊΡΠΎΠ½ΠΎΠ², ΠΠ°Π²Π΅Π» ΠΠΎΠΏΠΎΠ², ΠΠ½ΡΠΎΠ½ ΠΠ΅Ρ Π°Π΅Π² Π·Π° Π²Π΄ΡΡ Π½ΠΎΠ²ΡΠ²Π°ΡΠ°ΡΠ° ΠΎΠ±ΡΠ°ΡΠ½Π° Π²ΡΡΠ·ΠΊΠ° ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΠΏΠΎΡΡ, ΠΊΠΎΡΡΠΎ ΠΌΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²Ρ ΠΏΠΎ-ΡΡΠ΅Π½.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
