Компајбилна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° дистрибуираног систСма

Π£ ΠΎΠ²ΠΎΠΌ посту ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° ΠΏΠΎΠ΄Π΅Π»ΠΈΠΌΠΎ Π·Π°Π½ΠΈΠΌΡ™ΠΈΠ² Π½Π°Ρ‡ΠΈΠ½ Π±Π°Π²Ρ™Π΅ΡšΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ дистрибуираног систСма.
ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° јС прСдстављСна Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρƒ Π‘Ρ†Π°Π»Π° Ρ˜Π΅Π·ΠΈΠΊΡƒ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°Ρ‡ΠΈΠ½. Π”Π΅Ρ‚Π°Ρ™Π½ΠΎ јС описан ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅. Π Π°Π·ΠΌΠ°Ρ‚Ρ€Π°Ρ˜Ρƒ сС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈ аспСкти ΠΏΡ€Π΅Π΄Π»ΠΎΠ³Π°, ΡƒΠΊΡ™ΡƒΡ‡ΡƒΡ˜ΡƒΡ›ΠΈ ΡƒΡ‚ΠΈΡ†Π°Ρ˜ Π½Π° ΡƒΠΊΡƒΠΏΠ°Π½ процСс Ρ€Π°Π·Π²ΠΎΡ˜Π°.

Компајбилна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° дистрибуираног систСма

(Π½Π° руском)

Π£Π²ΠΎΠ΄

Π˜Π·Π³Ρ€Π°Π΄ΡšΠ° робусних дистрибуираних систСма Π·Π°Ρ…Ρ‚Π΅Π²Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Ρƒ исправнС ΠΈ ΠΊΠΎΡ…Π΅Ρ€Π΅Π½Ρ‚Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π½Π° свим Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎ Ρ€Π΅ΡˆΠ΅ΡšΠ΅ јС ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ тСкстуалног описа ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅ (Ρ‚Π΅Ρ€Ρ€Π°Ρ„ΠΎΡ€ΠΌ, ансиблС ΠΈΠ»ΠΈ Π½Π΅ΡˆΡ‚ΠΎ слично) ΠΈ аутоматски гСнСрисаних ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΡ… Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° (чСсто β€” Π½Π°ΠΌΠ΅ΡšΠ΅Π½ΠΈΡ… Π·Π° сваки Ρ‡Π²ΠΎΡ€/ΡƒΠ»ΠΎΠ³Ρƒ). Π’Π°ΠΊΠΎΡ’Π΅ бисмо ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° користимо истС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ истих Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° сваком ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½ΠΎΠΌ Ρ‡Π²ΠΎΡ€Ρƒ (Ρƒ супротном бисмо ΠΈΠΌΠ°Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ са Π½Π΅ΠΊΠΎΠΌΠΏΠ°Ρ‚ΠΈΠ±ΠΈΠ»Π½ΠΎΡˆΡ›Ρƒ). Π£ ΠˆΠ’Πœ свСту Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈ Π΄Π° Π±ΠΈ Π±Π°Ρ€ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π° Ρ€Π°Π·ΠΌΠ΅Π½Ρƒ ΠΏΠΎΡ€ΡƒΠΊΠ° Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π΄Π° Π±ΡƒΠ΄Π΅ истС Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ Π½Π° свим ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½ΠΈΠΌ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°.

Π¨Ρ‚Π° јС са Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ΠΌ систСма? Наравно, Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° ΠΈΠΌΠ°ΠΌΠΎ Ρ˜Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Π΅ тСстовС Π·Π° свС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ ΠΏΡ€Π΅ Π½Π΅Π³ΠΎ ΡˆΡ‚ΠΎ ΠΏΡ€Π΅Ρ’Π΅ΠΌΠΎ Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜ΡΠΊΠ΅ тСстовС. Π”Π° бисмо ΠΌΠΎΠ³Π»ΠΈ Π΄Π° Скстраполирамо Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° Π½Π° Π²Ρ€Π΅ΠΌΠ΅ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ°, Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌΠΎ Π΄Π° су Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ свих Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π΅ ΠΈΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½Ρƒ ΠΈΠ·Π²ΠΎΡ’Π΅ΡšΠ° ΠΈΡƒ ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΡƒ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ°.

Када ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅Ρ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜ΡΠΊΠ΅ тСстовС, чСсто јС ΠΌΠ½ΠΎΠ³ΠΎ лакшС ΠΈΠΌΠ°Ρ‚ΠΈ исту ΠΏΡƒΡ‚Π°ΡšΡƒ класС Π½Π° свим Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°. Π‘Π°ΠΌΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌΠΎ Π΄Π° сС иста ΠΏΡƒΡ‚Π°ΡšΠ° класС користи ΠΏΡ€ΠΈ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΡƒ. (ΠœΠΎΠ³ΡƒΡ›Π΅ јС користити Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΏΡƒΡ‚Π°ΡšΠ΅ класа Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°, Π°Π»ΠΈ јС Ρ‚Π΅ΠΆΠ΅ прСдставити ΠΎΠ²Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎ јС ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΠΈ.) Π”Π°ΠΊΠ»Π΅, Π΄Π° Π±ΠΈ ствари Π±ΠΈΠ»Π΅ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π΅, Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ›Π΅ΠΌΠΎ само ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π΅ ΠΏΡƒΡ‚Π°ΡšΠ΅ класа Π½Π° свим Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΈΠΌΠ° Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΡ˜Ρƒ Π΄Π° сС Ρ€Π°Π·Π²ΠΈΡ˜Π° зајСдно са софтвСром. ΠžΠ±ΠΈΡ‡Π½ΠΎ користимо Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ Π΄Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΡƒΡ˜Π΅ΠΌΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅
Ρ„Π°Π·Π΅ Π΅Π²ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π΅ софтвСра. Π§ΠΈΠ½ΠΈ сС Ρ€Π°Π·ΡƒΠΌΠ½ΠΈΠΌ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ΠΌ Π²Π΅Ρ€Π·ΠΈΡ˜Π°ΠΌΠ° ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Ρ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ са Π½Π΅ΠΊΠΈΠΌ ΠΎΠ·Π½Π°ΠΊΠ°ΠΌΠ°. Ако ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ само јСдна ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠΈ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ користити Ρ˜Π΅Π΄Π½Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠΊΠ°ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€. ПонСкад ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°Ρ‚ΠΈ вишС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ… ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ°. А Π·Π° свако ΠΎΠΊΡ€ΡƒΠΆΠ΅ΡšΠ΅ Ρ›Π΅ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΄Π° Ρ‚Ρ€Π΅Π±Π°Ρ‚ΠΈ посСбна Π³Ρ€Π°Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Π”Π°ΠΊΠ»Π΅, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΌΠΎΠ³Ρƒ Π±ΠΈΡ‚ΠΈ ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π΅ Π³Ρ€Π°Π½ΠΎΠΌ ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ Π΄Π° Π±ΠΈ сС Π½Π° Ρ˜Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Π»Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Π‘Π²Π°ΠΊΠ° ΠΎΠ·Π½Π°ΠΊΠ° Π³Ρ€Π°Π½Π΅ ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π° ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜Ρƒ јСдној ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜ΠΈ дистрибуираних Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°, ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π°, СкстСрних рСсурса, Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΠΏΡƒΡ‚Π°ΡšΠ° класа Π½Π° сваком Ρ‡Π²ΠΎΡ€Ρƒ. ОвдС Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠΊΡ€ΠΈΡ‚ΠΈ само Ρ˜Π΅Π΄Π½Ρƒ Π³Ρ€Π°Π½Ρƒ ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Ρ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΠΌΠΎΡ›Ρƒ Ρ‚Ρ€ΠΎΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Π΅ Π΄Π΅Ρ†ΠΈΠΌΠ°Π»Π½Π΅ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ (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

Ови Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ ΠΎΠ±Π°Π²Ρ™Π°Ρ˜Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΡƒΠ»ΠΎΠ³Π΅, ΠΏΠΎΠΊΡ€Π΅Ρ›Ρƒ Π½Π΅ΠΊΠ΅ услугС ΠΈ Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡƒΠ΄Ρƒ Ρƒ могућности Π΄Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Ρ˜Ρƒ са Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ° ΠΏΠΎΠΌΠΎΡ›Ρƒ ВЦП/Π₯ВВП Π²Π΅Π·Π°.

Π—Π° ВЦП Π²Π΅Π·Ρƒ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ Π±Π°Ρ€ Π±Ρ€ΠΎΡ˜ ΠΏΠΎΡ€Ρ‚Π°. Π’Π°ΠΊΠΎΡ’Π΅ ΠΆΠ΅Π»ΠΈΠΌΠΎ Π΄Π° Π±ΡƒΠ΄Π΅ΠΌΠΎ сигурни Π΄Π° ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ ΠΈ сСрвСр Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°Ρ˜Ρƒ истим ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ. Π”Π° бисмо ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π°Π»ΠΈ Π²Π΅Π·Ρƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°, Ρ…Π°Ρ˜Π΄Π΅ Π΄Π° Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡˆΠ΅ΠΌΠΎ слСдСћу класу:

case class TcpEndPoint[Protocol](node: NodeId, port: Port[Protocol])

Π³Π΄Π΅ Port јС само јСдан Int Ρƒ Π΄ΠΎΠ·Π²ΠΎΡ™Π΅Π½ΠΎΠΌ опсСгу:

type PortNumber = Refined[Int, Closed[_0, W.`65535`.T]]

Π Π°Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ

Π²ΠΈΠ΄Π΅Ρ‚ΠΈ ΠΏΡ€Π΅Ρ‡ΠΈΡˆΡ›Π΅Π½ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π£ΠΊΡ€Π°Ρ‚ΠΊΠΎ, ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° додавањС врСмСнских ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ° Π·Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠ²ΠΈΠΌΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Int Π΄ΠΎΠ·Π²ΠΎΡ™Π΅Π½ΠΎ јС само Π΄Π° ΠΈΠΌΠ° 16-Π±ΠΈΡ‚Π½Π΅ врСдности којС ΠΌΠΎΠ³Ρƒ прСдстављати Π±Ρ€ΠΎΡ˜ ΠΏΠΎΡ€Ρ‚Π°. НС ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π·Π°Ρ…Ρ‚Π΅Π² Π·Π° ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ ΠΎΠ²Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π·Π° овај приступ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ. Π‘Π°ΠΌΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄Π° сС Π΄ΠΎΠ±Ρ€ΠΎ ΡƒΠΊΠ»Π°ΠΏΠ°.

Π—Π° Π₯ВВП (Π Π•Π‘Π’) ΠΌΠΎΠΆΠ΄Π° Ρ›Π΅ Π½Π°ΠΌ Ρ‚Ρ€Π΅Π±Π°Ρ‚ΠΈ ΠΈ ΠΏΡƒΡ‚Π°ΡšΠ° услугС:

type UrlPathPrefix = Refined[String, MatchesRegex[W.`"[a-zA-Z_0-9/]*"`.T]]
case class PortWithPrefix[Protocol](portNumber: PortNumber, pathPrefix: UrlPathPrefix)

Ѐантомски Ρ‚ΠΈΠΏ

Π”Π° бисмо ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠΎΠ²Π°Π»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Ρ‚ΠΎΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π΅, користимо Π‘Ρ†Π°Π»Π° карактСристику Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡΠ°ΡšΠ° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° Protocol који сС Π½Π΅ користи Ρƒ Ρ€Π°Π·Ρ€Π΅Π΄Ρƒ. Π’ΠΎ јС Ρ‚Π·Π² фантомски Ρ‚ΠΈΠΏ. Π£ Ρ‚ΠΎΠΊΡƒ Ρ€Π°Π΄Π° Ρ€Π΅Ρ‚ΠΊΠΎ Π½Π°ΠΌ Ρ‚Ρ€Π΅Π±Π° инстанца ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, Π·Π°Ρ‚ΠΎ јС Π½Π΅ Ρ‡ΡƒΠ²Π°ΠΌΠΎ. Π’ΠΎΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π΅ овај фантомски Ρ‚ΠΈΠΏ дајС Π΄ΠΎΠ΄Π°Ρ‚Π½Ρƒ сигурност Ρ‚ΠΈΠΏΠ°. НС ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΡ€ΠΎΡ›ΠΈ ΠΏΠΎΡ€Ρ‚ са Π½Π΅Ρ‚Π°Ρ‡Π½ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ.

ЈСдан ΠΎΠ΄ Π½Π°Ρ˜Ρ‡Π΅ΡˆΡ›Π΅ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° јС Π Π•Π‘Π’ АПИ са Јсон ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜ΠΎΠΌ:

sealed trait JsonHttpRestProtocol[RequestMessage, ResponseMessage]

Π³Π΄Π΅ RequestMessage јС основни Ρ‚ΠΈΠΏ ΠΏΠΎΡ€ΡƒΠΊΠ° којС ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅ послати сСрвСру ΠΈ ResponseMessage јС ΠΏΠΎΡ€ΡƒΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π° са сСрвСра. Наравно, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΊΡ€Π΅ΠΈΡ€Π°Ρ‚ΠΈ Π΄Ρ€ΡƒΠ³Π΅ описС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° који ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Ρ˜Ρƒ ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½ΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» са ΠΆΠ΅Ρ™Π΅Π½ΠΎΠΌ ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΎΡˆΡ›Ρƒ.

Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ ΠΎΠ²ΠΎΠ³ поста користићСмо Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜Ρƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°:

sealed trait SimpleHttpGetRest[RequestMessage, ResponseMessage]

Π£ ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ ΠΏΠΎΡ€ΡƒΠΊΠ° са Π·Π°Ρ…Ρ‚Π΅Π²ΠΎΠΌ сС додајС Π£Π Π›-Ρƒ, Π° ΠΏΠΎΡ€ΡƒΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π° сС Π²Ρ€Π°Ρ›Π° ΠΊΠ°ΠΎ ΠΎΠ±ΠΈΡ‡Π°Π½ стринг.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° услугС сС ΠΌΠΎΠΆΠ΅ описати ΠΈΠΌΠ΅Π½ΠΎΠΌ услугС, ΠΊΠΎΠ»Π΅ΠΊΡ†ΠΈΡ˜ΠΎΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π° ΠΈ Π½Π΅ΠΊΠΈΠΌ зависностима. ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ›ΠΈΡ… Π½Π°Ρ‡ΠΈΠ½Π° ΠΊΠ°ΠΊΠΎ свС ΠΎΠ²Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π΅ прСдставити Ρƒ Π‘Ρ†Π°Π»ΠΈ (Π½ΠΏΡ€. HList, алгСбарски Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°). Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ ΠΎΠ²ΠΎΠ³ поста користићСмо ΡƒΠ·ΠΎΡ€ΠΊΠ΅ ΠΊΠΎΠ»Π°Ρ‡Π° ΠΈ прСдстављати ΠΊΠΎΠΌΠ°Π΄Π΅ (ΠΌΠΎΠ΄ΡƒΠ»Π΅) који сС ΠΌΠΎΠ³Ρƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°Ρ‚ΠΈ ΠΊΠ°ΠΎ особинС. (Π£Π·ΠΎΡ€Π°ΠΊ ΠΊΠΎΠ»Π°Ρ‡Π° нијС услов Π·Π° овај приступ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ који сС ΠΌΠΎΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Ρ‚ΠΈ. Π’ΠΎ јС само јСдна ΠΌΠΎΠ³ΡƒΡ›Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° идСјС.)

Зависности сС ΠΌΠΎΠ³Ρƒ прСдставити ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ ΡƒΠ·ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ»Π°Ρ‡Π° ΠΊΠ°ΠΎ ΠΊΡ€Π°Ρ˜ΡšΠΈΡ… Ρ‚Π°Ρ‡Π°ΠΊΠ° Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°:

  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)
  }

Π•Ρ†Ρ…ΠΎ сСрвису јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ само конфигурисан ΠΏΠΎΡ€Ρ‚. И ΠΈΠ·Ρ˜Π°Π²Ρ™ΡƒΡ˜Π΅ΠΌΠΎ Π΄Π° овај ΠΏΠΎΡ€Ρ‚ ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π° Π΅Ρ…ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌΡƒ Π΄Π° Ρƒ ΠΎΠ²ΠΎΠΌ Ρ‚Ρ€Π΅Π½ΡƒΡ‚ΠΊΡƒ Π½Π΅ ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° Π½Π°Π²ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈ ΠΏΠΎΡ€Ρ‚, Ρ˜Π΅Ρ€ особина Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π° Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π΅ апстрактних ΠΌΠ΅Ρ‚ΠΎΠ΄Π°. Ако користимо апстрактнС ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅, ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ Ρ›Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ‚ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Ρƒ инстанци ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. ОвдС смо ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ (8081) ΠΈ користићС сС ΠΊΠ°ΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½Π° врСдност Π°ΠΊΠΎ јС прСскочимо Ρƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΡ˜ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ.

МоТСмо Π΄Π° прогласимо зависност Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π° услугС Π΅Ρ…ΠΎ:

  trait EchoClientConfig[A] {
    def testMessage: String = "test"
    def pollInterval: FiniteDuration
    def echoServiceDependency: HttpSimpleGetEndPoint[_, EchoProtocol[A]]
  }

Зависност ΠΈΠΌΠ° исти Ρ‚ΠΈΠΏ ΠΊΠ°ΠΎ ΠΈ echoService. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, Π·Π°Ρ…Ρ‚Π΅Π²Π° исти ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». Π”Π°ΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π±ΠΈΡ‚ΠΈ сигурни Π΄Π° Ρ›Π΅, Π°ΠΊΠΎ ΠΏΠΎΠ²Π΅ΠΆΠ΅ΠΌΠΎ ΠΎΠ²Π΅ Π΄Π²Π΅ зависности, Ρ€Π°Π΄ΠΈΡ‚ΠΈ исправно.

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° услуга

БСрвису јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π·Π° ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ ΠΈ Π³Ρ€Π°Ρ†ΠΈΠΎΠ·Π½ΠΎ гашСњС. (ΠœΠΎΠ³ΡƒΡ›Π½ΠΎΡΡ‚ гашСња сСрвиса јС ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Π° Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅.) ΠžΠΏΠ΅Ρ‚ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΡ†ΠΈΡ˜Π° Π·Π° ΠΎΠ΄Ρ€Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ Ρ‚Π°ΠΊΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ Π·Π° Π΄Π°Ρ‚Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ³Π»ΠΈ бисмо Π΄Π° користимо класС Ρ‚ΠΈΠΏΠ°). Π—Π° овај пост Ρ›Π΅ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ користити Π¦Π°ΠΊΠ΅ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½. МоТСмо прСдстављати услугу користСћи 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]
  }

Π³Π΄Π΅

  • Config β€” Ρ‚ΠΈΠΏ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΊΠΎΡ˜Ρƒ Π·Π°Ρ…Ρ‚Π΅Π²Π° овај стартСр сСрвиса
  • AddressResolver β€” Ρ€ΡƒΠ½Ρ‚ΠΈΠΌΠ΅ ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ који ΠΈΠΌΠ° могућност Π΄Π° добијС стварнС адрСсС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° (наставитС Π΄Π° Ρ‡ΠΈΡ‚Π°Ρ‚Π΅ Π·Π° Π΄Π΅Ρ‚Π°Ρ™Π΅).

остали Ρ‚ΠΈΠΏΠΎΠ²ΠΈ ΠΏΠΎΡ‚ΠΈΡ‡Ρƒ ΠΈΠ· cats:

  • F[_] β€” Ρ‚ΠΈΠΏ Π΅Ρ„Π΅ΠΊΡ‚Π° (Π£ Π½Π°Ρ˜Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Π΅ΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ F[A] ΠΌΠΎΠ³Π°ΠΎ Π±ΠΈΡ‚ΠΈ ΠΏΡ€Π°Π²Π΅Π΄Π°Π½ () => A. Π£ ΠΎΠ²ΠΎΠΌ посту Ρ›Π΅ΠΌΠΎ користити cats.IO.)
  • Reader[A,B] β€” јС мањС-вишС синоним Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Ρƒ A => B
  • cats.Resource β€” ΠΈΠΌΠ° Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΡΡ‚ΠΈΡ†Π°ΡšΠ΅ ΠΈ ΠΎΡΠ»ΠΎΠ±Π°Ρ’Π°ΡšΠ΅
  • Timer β€” ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° спавањС/ΠΌΠ΅Ρ€Π΅ΡšΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π°
  • ContextShift - Π°Π½Π°Π»ΠΎΠ³ ΠΎΠ΄ ExecutionContext
  • Applicative β€” ΠΎΠΌΠΎΡ‚Π°Ρ‡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° Π½Π° снази (скоро ΠΌΠΎΠ½Π°Π΄Π°) (ΠΌΠΎΠ³Π»ΠΈ бисмо Π³Π° Π΅Π²Π΅Π½Ρ‚ΡƒΠ°Π»Π½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π½Π΅Ρ‡ΠΈΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ)

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ›ΠΈ овај ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ услуга. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, услуга која Π½Π΅ Ρ€Π°Π΄ΠΈ Π½ΠΈΡˆΡ‚Π°:

  trait ZeroServiceImpl[F[_]] extends ServiceImpl[F] {
    type Config <: Any
    def resource(...): ResourceReader[F, Config, Unit] =
      Reader(_ => Resource.pure[F, Unit](()))
  }

(Π’ΠΈΠ΄ΠΈ Π˜Π·Π²ΠΎΡ€Π½ΠΈ ΠΊΠΎΠ΄ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Π΄Ρ€ΡƒΠ³ΠΈΡ… услуга β€” Π΅Ρ†Ρ…ΠΎ сСрвицС,
Π΅Ρ†Ρ…ΠΎ Ρ†Π»ΠΈΠ΅Π½Ρ‚ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΎΡ€ΠΈ.)

Π§Π²ΠΎΡ€ јС јСдан ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ који ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ услуга (ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ Π»Π°Π½Ρ†Π° рСсурса ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π¦Π°ΠΊΠ΅ ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½):

object SingleNodeImpl extends ZeroServiceImpl[IO]
  with EchoServiceService
  with EchoClientService
  with FiniteDurationLifecycleServiceImpl
{
  type Config = EchoConfig[String] with EchoClientConfig[String] with FiniteDurationLifecycleConfig
}

Π˜ΠΌΠ°Ρ˜Ρ‚Π΅ Π½Π° ΡƒΠΌΡƒ Π΄Π° Ρƒ Ρ‡Π²ΠΎΡ€Ρƒ Π½Π°Π²ΠΎΠ΄ΠΈΠΌΠΎ Ρ‚Π°Ρ‡Π°Π½ Ρ‚ΠΈΠΏ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ који јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ ΠΎΠ²ΠΎΠΌ Ρ‡Π²ΠΎΡ€Ρƒ. ΠšΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ Π½Π°ΠΌ Π½Π΅ Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ ΠΎΠ±Ρ˜Π΅ΠΊΠ°Ρ‚ (Π¦Π°ΠΊΠ΅) са Π½Π΅Π΄ΠΎΠ²ΠΎΡ™Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Ρ˜Π΅Ρ€ свака карактСристика услугС Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡˆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ΅ Π½Π° Config Ρ‚ΠΈΠΏ. Π’Π°ΠΊΠΎΡ’Π΅ Π½Π΅Ρ›Π΅ΠΌΠΎ ΠΌΠΎΡ›ΠΈ Π΄Π° ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ Ρ‡Π²ΠΎΡ€ Π±Π΅Π· ΠΏΡ€ΡƒΠΆΠ°ΡšΠ° ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅.

Π Π΅Π·ΠΎΠ»ΡƒΡ†ΠΈΡ˜Π° адрСсС Ρ‡Π²ΠΎΡ€Π°

Π”Π° бисмо успоставили Π²Π΅Π·Ρƒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° Π½Π°ΠΌ јС ΠΏΡ€Π°Π²Π° адрСса Π΄ΠΎΠΌΠ°Ρ›ΠΈΠ½Π° Π·Π° сваки Ρ‡Π²ΠΎΡ€. МоТда Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΠ·Π½Π°Ρ‚ΠΎ каснијС ΠΎΠ΄ осталих Π΄Π΅Π»ΠΎΠ²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Π”Π°ΠΊΠ»Π΅, ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ Π½Π°ΠΌ јС Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Π˜Π”-Π° Ρ‡Π²ΠΎΡ€Π° ΠΈ њСговС стварнС адрСсС. Ово ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ΅ јС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π°:

case class NodeAddress[NodeId](host: Uri.Host)
trait AddressResolver[F[_]] {
  def resolve[NodeId](nodeId: NodeId): F[NodeAddress[NodeId]]
}

ΠŸΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ›ΠΈΡ… Π½Π°Ρ‡ΠΈΠ½Π° Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Ρ‚Π°ΠΊΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅.

  1. Ако Π·Π½Π°ΠΌΠΎ стварнС адрСсС ΠΏΡ€Π΅ ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ°, Ρ‚ΠΎΠΊΠΎΠΌ ΠΈΠ½ΡΡ‚Π°Π½Ρ†ΠΈΡ€Π°ΡšΠ° хостова Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°, ΠΎΠ½Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡˆΠ΅ΠΌΠΎ Π‘Ρ†Π°Π»Π° ΠΊΠΎΠ΄ са стварним адрСсама ΠΈ Π·Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ Π³Ρ€Π°Π΄ΡšΡƒ (која Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ°, Π° Π·Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π΅). Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ наша Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° ΠΌΠ°ΠΏΠΈΡ€Π°ΡšΠ° јС статички ΠΏΠΎΠ·Π½Π°Ρ‚Π° ΠΈ ΠΌΠΎΠΆΠ΅ сС ΠΏΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΠΈ Π½Π° Π½Π΅ΡˆΡ‚ΠΎ ΠΏΠΎΠΏΡƒΡ‚ Π° Map[NodeId, NodeAddress].
  2. ПонСкад добијамо стварнС адрСсС Ρ‚Π΅ΠΊ каснијС ΠΊΠ°Π΄Π° јС Ρ‡Π²ΠΎΡ€ стварно ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚, ΠΈΠ»ΠΈ Π½Π΅ΠΌΠ°ΠΌΠΎ адрСсС Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° који још нису ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°Ρ‚ΠΈ услугу ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°ΡšΠ° која сС ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ ΠΏΡ€Π΅ свих осталих Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° ΠΈ сваки Ρ‡Π²ΠΎΡ€ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π΅ΠΊΠ»Π°ΠΌΠΈΡ€Π° ΡΠ²ΠΎΡ˜Ρƒ адрСсу Ρƒ Ρ‚ΠΎΡ˜ услузи ΠΈ Π΄Π° сС ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚ΠΈ Π½Π° зависности.
  3. Ако ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌΠΎ /etc/hosts, ΠΌΠΎΠΆΠ΅ΠΌΠΎ користити ΡƒΠ½Π°ΠΏΡ€Π΅Π΄ дСфинисана ΠΈΠΌΠ΅Π½Π° хостова (Π½ΠΏΡ€ my-project-main-node echo-backend) ΠΈ само ΠΏΠΎΠ²Π΅ΠΆΠΈΡ‚Π΅ ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ са ИП адрСсом Ρƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅.

Π£ ΠΎΠ²ΠΎΠΌ посту Π½Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ²Π°ΠΌΠΎ ΠΎΠ²Π΅ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π΅ Π΄Π΅Ρ‚Π°Ρ™Π½ΠΈΡ˜Π΅. Π£ ствари, Ρƒ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ ΠΈΠ³Ρ€Π°Ρ‡ΠΊΠ΅ сви Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ Ρ›Π΅ ΠΈΠΌΠ°Ρ‚ΠΈ исту ИП адрСсу - 127.0.0.1.

Π£ ΠΎΠ²ΠΎΠΌ посту Ρ›Π΅ΠΌΠΎ Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΡ‚ΠΈ Π΄Π²Π° распорСда дистрибуираног систСма:

  1. ИзглСд јСдног Ρ‡Π²ΠΎΡ€Π°, Π³Π΄Π΅ су свС услугС ΡΠΌΠ΅ΡˆΡ‚Π΅Π½Π΅ Π½Π° јСдном Ρ‡Π²ΠΎΡ€Ρƒ.
  2. ИзглСд са Π΄Π²Π° Ρ‡Π²ΠΎΡ€Π°, Π³Π΄Π΅ су услуга ΠΈ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π° Π° јСдан Ρ‡Π²ΠΎΡ€ распорСд јС слСдСћи:

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° јСдног Ρ‡Π²ΠΎΡ€Π°

object SingleNodeConfig extends EchoConfig[String] 
  with EchoClientConfig[String] with FiniteDurationLifecycleConfig
{
  case object Singleton // identifier of the single node 
  // configuration of server
  type NodeId = Singleton.type
  def nodeId = Singleton

  /** Type safe service port specification. */
  override def portNumber: PortNumber = 8088

  // configuration of client

  /** We'll use the service provided by the same host. */
  def echoServiceDependency = echoService

  override def testMessage: UrlPathElement = "hello"

  def pollInterval: FiniteDuration = 1.second

  // lifecycle controller configuration
  def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 requests, not 9.
}

ОвдС ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ Ρ˜Π΅Π΄Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ која ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΡ˜Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ сСрвСра ΠΈ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π°. Π’Π°ΠΊΠΎΡ’Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡˆΠ΅ΠΌΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ³ циклуса који Ρ›Π΅ Π½Π°ΠΊΠΎΠ½ Ρ‚ΠΎΠ³Π° Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΡ‚ΠΈ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π° ΠΈ сСрвСра lifetime ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» ΠΏΡ€ΠΎΠ»Π°Π·ΠΈ.

Π˜ΡΡ‚ΠΈ скуп ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° услугС ΠΌΠΎΠΆΠ΅ сС користити Π·Π° ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ распорСда систСма са Π΄Π²Π° одвојСна Ρ‡Π²ΠΎΡ€Π°. Π‘Π°ΠΌΠΎ Ρ‚Ρ€Π΅Π±Π° Π΄Π° стварамо Π΄Π²Π΅ одвојСнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Ρ‡Π²ΠΎΡ€Π° са ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ˜ΡƒΡ›ΠΈΠΌ услугама:

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΄Π²Π° Ρ‡Π²ΠΎΡ€Π°

  object NodeServerConfig extends EchoConfig[String] with SigTermLifecycleConfig
  {
    type NodeId = NodeIdImpl

    def nodeId = NodeServer

    override def portNumber: PortNumber = 8080
  }

  object NodeClientConfig extends EchoClientConfig[String] with FiniteDurationLifecycleConfig
  {
    // NB! dependency specification
    def echoServiceDependency = NodeServerConfig.echoService

    def pollInterval: FiniteDuration = 1.second

    def lifetime: FiniteDuration = 10500.milliseconds // additional 0.5 seconds so that there are 10 request, not 9.

    def testMessage: String = "dolly"
  }

ΠŸΠΎΠ³Π»Π΅Π΄Π°Ρ˜Ρ‚Π΅ ΠΊΠ°ΠΊΠΎ спСцифицирамо зависност. ПомињСмо ΠΏΡ€ΡƒΠΆΠ΅Π½Ρƒ услугу Π΄Ρ€ΡƒΠ³ΠΎΠ³ Ρ‡Π²ΠΎΡ€Π° ΠΊΠ°ΠΎ зависност ΠΎΠ΄ Ρ‚Ρ€Π΅Π½ΡƒΡ‚Π½ΠΎΠ³ Ρ‡Π²ΠΎΡ€Π°. Π’ΠΈΠΏ зависности јС ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ Ρ˜Π΅Ρ€ садрТи фантомски Ρ‚ΠΈΠΏ који ΠΎΠΏΠΈΡΡƒΡ˜Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». И Ρ‚ΠΎΠΊΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π° Ρ€Π°Π΄Π° ΠΈΠΌΠ°Ρ›Π΅ΠΌΠΎ исправан Π˜Π” Ρ‡Π²ΠΎΡ€Π°. Ово јС јСдан ΠΎΠ΄ Π²Π°ΠΆΠ½ΠΈΡ… аспСката ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ приступа ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ. ΠŸΡ€ΡƒΠΆΠ° Π½Π°ΠΌ могућност Π΄Π° само јСдном поставимо ΠΏΠΎΡ€Ρ‚ ΠΈ Π΄Π° сС ΡƒΠ²Π΅Ρ€ΠΈΠΌΠΎ Π΄Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΡ€Π°ΠΌΠΎ исправан ΠΏΠΎΡ€Ρ‚.

Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π΄Π²Π° Ρ‡Π²ΠΎΡ€Π°

Π—Π° ΠΎΠ²Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ користимо ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ истС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ услуга. НСма Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈΡ… ΠΏΡ€ΠΎΠΌΠ΅Π½Π°. ΠœΠ΅Ρ’ΡƒΡ‚ΠΈΠΌ, ΠΌΠΈ ΠΊΡ€Π΅ΠΈΡ€Π°ΠΌΠΎ Π΄Π²Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅ Ρ‡Π²ΠΎΡ€Π° којС садрТС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ скуп услуга:

  object TwoJvmNodeServerImpl extends ZeroServiceImpl[IO] with EchoServiceService with SigIntLifecycleServiceImpl {
    type Config = EchoConfig[String] with SigTermLifecycleConfig
  }

  object TwoJvmNodeClientImpl extends ZeroServiceImpl[IO] with EchoClientService with FiniteDurationLifecycleServiceImpl {
    type Config = EchoClientConfig[String] with FiniteDurationLifecycleConfig
  }

ΠŸΡ€Π²ΠΈ Ρ‡Π²ΠΎΡ€ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° сСрвСр ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π° ΠΌΡƒ јС само ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° страни сСрвСра. Π”Ρ€ΡƒΠ³ΠΈ Ρ‡Π²ΠΎΡ€ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π° ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚Π° ΠΈ Ρ‚Ρ€Π΅Π±Π° ΠΌΡƒ Π΄Ρ€ΡƒΠ³ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Оба Ρ‡Π²ΠΎΡ€Π° Π·Π°Ρ…Ρ‚Π΅Π²Π°Ρ˜Ρƒ Π½Π΅ΠΊΠ΅ Π΄ΠΎΠΆΠΈΠ²ΠΎΡ‚Π½Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ ΠΎΠ²Π΅ ΠΏΠΎΡˆΡ‚Π°Π½ΡΠΊΠ΅ услугС Ρ‡Π²ΠΎΡ€ Ρ›Π΅ ΠΈΠΌΠ°Ρ‚ΠΈ бСсконачан ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΈ Π²Π΅ΠΊ који сС ΠΌΠΎΠΆΠ΅ ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΡ‚ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ SIGTERM, Π΄ΠΎΠΊ Ρ›Π΅ Π΅Ρ…ΠΎ ΠΊΠ»ΠΈΡ˜Π΅Π½Ρ‚ ΠΏΡ€Π΅ΠΊΠΈΠ½ΡƒΡ‚ΠΈ Π½Π°ΠΊΠΎΠ½ конфигурисаног ΠΊΠΎΠ½Π°Ρ‡Π½ΠΎΠ³ Ρ‚Ρ€Π°Ρ˜Π°ΡšΠ°. Π’ΠΈΠ΄ΠΈΡ‚Π΅ стартСр Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° Π΄Π΅Ρ‚Π°Ρ™Π΅.

Π£ΠΊΡƒΠΏΠ°Π½ процСс Ρ€Π°Π·Π²ΠΎΡ˜Π°

Π₯ајдС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΊΠΎ овај приступ мСња Π½Π°Ρ‡ΠΈΠ½ Π½Π° који Ρ€Π°Π΄ΠΈΠΌΠΎ са ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ.

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΊΠ°ΠΎ ΠΊΠΎΠ΄ Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½Π° ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚. Π§ΠΈΠ½ΠΈ сС Ρ€Π°Π·ΡƒΠΌΠ½ΠΈΠΌ ΠΎΠ΄Π²ΠΎΡ˜ΠΈΡ‚ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΎΠ΄ осталих Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π° ΠΊΠΎΠ΄Π°. ЧСсто ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°Ρ‚ΠΈ ΠΌΠ½ΠΎΡˆΡ‚Π²ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΈΡΡ‚ΠΎΡ˜ Π±Π°Π·ΠΈ ΠΊΠΎΠ΄Π°. И Π½Π°Ρ€Π°Π²Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠΌΠ°Ρ‚ΠΈ вишС Π²Π΅Ρ€Π·ΠΈΡ˜Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΡ… Π³Ρ€Π°Π½Π°. Π£ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΈΠ·Π°Π±Ρ€Π°Ρ‚ΠΈ ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Π΅ Π²Π΅Ρ€Π·ΠΈΡ˜Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈ Ρ‚ΠΎ Ρ›Π΅ остати константно ΠΊΠ°Π΄ Π³ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΎΠ²Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ.

ΠŸΡ€ΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΡΡ‚Π°Ρ˜Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ΄Π°. Π”Π°ΠΊΠ»Π΅, Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π±ΡƒΠ΄Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ²Π΅Π½ истим процСсом ΠΎΡΠΈΠ³ΡƒΡ€Π°ΡšΠ° ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π°:

Π£Π»Π°Π·Π½ΠΈΡ†Π° -> ПР -> ΠΏΡ€Π΅Π³Π»Π΅Π΄ -> спајањС -> ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π° ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π° -> ΠΊΠΎΠ½Ρ‚ΠΈΠ½ΡƒΠΈΡ€Π°Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Π½Π°

ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ слСдСћС послСдицС приступа:

  1. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° јС ΠΊΠΎΡ…Π΅Ρ€Π΅Π½Ρ‚Π½Π° Π·Π° ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Ρƒ инстанцу систСма. Π§ΠΈΠ½ΠΈ сС Π΄Π° Π½Π΅ ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½Ρƒ Π²Π΅Π·Ρƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°.
  2. НијС Π»Π°ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ само Ρƒ јСдном Ρ‡Π²ΠΎΡ€Ρƒ. Π§ΠΈΠ½ΠΈ сС Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½ΠΈΠΌ Π΄Π° сС ΠΏΡ€ΠΈΡ˜Π°Π²ΠΈΡ‚Π΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π½Π΅ΠΊΠ΅ тСкстуалнС Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅. Π”Π°ΠΊΠ»Π΅, ΠΎΠ΄ΡΡ‚ΡƒΠΏΠ°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΡΡ‚Π°Ρ˜Π΅ мањС ΠΌΠΎΠ³ΡƒΡ›Π΅.
  3. МалС ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ нијС Π»Π°ΠΊΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ.
  4. Π’Π΅Ρ›ΠΈΠ½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Ρ›Π΅ ΠΏΡ€Π°Ρ‚ΠΈΡ‚ΠΈ исти процСс Ρ€Π°Π·Π²ΠΎΡ˜Π° ΠΈ ΠΏΡ€ΠΎΡ›ΠΈ Ρ›Π΅ Π½Π΅ΠΊΠΈ ΠΏΡ€Π΅Π³Π»Π΅Π΄.

Π”Π° Π»ΠΈ Π½Π°ΠΌ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ посСбно ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠ΅? ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° садрТи осСтљивС ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ којС бисмо ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° Π΄Ρ€ΠΆΠΈΠΌΠΎ Π²Π°Π½ Π΄ΠΎΡ…Π²Π°Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ™ΡƒΠ΄ΠΈ. Π”Π°ΠΊΠ»Π΅, ΠΌΠΎΠΆΠ΄Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ Π²Ρ€Π΅Π΄Π½ΠΎ Ρ‡ΡƒΠ²Π°Ρ‚ΠΈ одвојСно ΡΠΏΡ€Π΅ΠΌΠΈΡˆΡ‚Π΅ са ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΌ приступом којС Ρ›Π΅ садрТати ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠ΅. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΠΈ Π½Π° Π΄Π²Π° Π΄Π΅Π»Π° – јСдан који садрТи Π½Π°Ρ˜ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ΠΈΡ˜Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠ΅ ΠΈ онај који садрТи Ρ‚Π°Ρ˜Π½ΠΈ Π΄Π΅ΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Ово Π±ΠΈ ΠΎΠΌΠΎΠ³ΡƒΡ›ΠΈΠ»ΠΎ приступ Π²Π΅Ρ›ΠΈΠ½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€Π° вСликој Π²Π΅Ρ›ΠΈΠ½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Π΄ΠΎΠΊ Π±ΠΈ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΎ приступ заиста осСтљивим стварима. Π’ΠΎ јС Π»Π°ΠΊΠΎ постићи ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ ΡΡ€Π΅Π΄ΡšΠΈΡ… особина са ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½ΠΈΠΌ врСдностима ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π°.

Π’Π°Ρ€ΠΈΡ˜Π°Ρ†ΠΈΡ˜Π΅

Π₯ајдС Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ прСдности ΠΈ нСдостаткС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ приступа Ρƒ ΠΏΠΎΡ€Π΅Ρ’Π΅ΡšΡƒ са Π΄Ρ€ΡƒΠ³ΠΈΠΌ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ°ΠΌΠ° ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ.

ΠŸΡ€Π΅ свСга, Π½Π°Π²Π΅ΡˆΡ›Π΅ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ аспСктС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ Π½Π°Ρ‡ΠΈΠ½Π° Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅:

  1. ВСкстуални Ρ„Π°Ρ˜Π» Π½Π° Ρ†ΠΈΡ™Π½ΠΎΡ˜ машини.
  2. Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ΠΊΡ™ΡƒΡ‡/врСдност (Π½ΠΏΡ€ etcd/zookeeper).
  3. ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π΅ потпроцСса којС сС ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠ½ΠΎΠ²ΠΎ конфигурисати/ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ Π±Π΅Π· ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎΠ³ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ° процСса.
  4. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π²Π°Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΠ°Ρ‚Π° ΠΈ Π²Π΅Ρ€Π·ΠΈΡ˜Π°.

ВСкстуална Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° дајС ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½Ρƒ флСксибилност Ρƒ смислу Π°Π΄-Ρ…ΠΎΡ† ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ. Администратор систСма ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€ΠΈΡ˜Π°Π²ΠΈ Π½Π° Ρ†ΠΈΡ™Π½ΠΈ Ρ‡Π²ΠΎΡ€, ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρƒ ΠΈ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½Π΅ услугу. Ово ΠΌΠΎΠΆΠ΄Π° Π½Π΅Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ Π·Π° Π²Π΅Ρ›Π΅ систСмС. Иза ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Π½Π΅ ΠΎΡΡ‚Π°Ρ˜Ρƒ Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ Ρ‚Ρ€Π°Π³ΠΎΠ²ΠΈ. ΠŸΡ€ΠΎΠΌΠ΅Π½Ρƒ Π½Π΅ ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠ°Ρ€ ΠΎΡ‡ΠΈΡ˜Ρƒ. МоТда Ρ›Π΅ Π±ΠΈΡ‚ΠΈ Ρ‚Π΅ΡˆΠΊΠΎ ΠΎΡ‚ΠΊΡ€ΠΈΡ‚ΠΈ ΡˆΡ‚Π° јС ΠΈΠ·Π°Π·Π²Π°Π»ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρƒ. НијС тСстирано. Из пСрспСктивС дистрибуираног систСма, администратор ΠΌΠΎΠΆΠ΅ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ Π·Π°Π±ΠΎΡ€Π°Π²ΠΈΡ‚ΠΈ Π΄Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρƒ јСдном ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°.

(Π‘Ρ‚Π², Π°ΠΊΠΎ Π½Π° ΠΊΡ€Π°Ρ˜Ρƒ Π±ΡƒΠ΄Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠΎ Π΄Π° користимо тСкстуалнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ΅, ΠΌΠΎΡ€Π°Ρ›Π΅ΠΌΠΎ само Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ парсСр + Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ који Π±ΠΈ ΠΌΠΎΠ³Π°ΠΎ Π΄Π° ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅ исто Config ΡƒΠΊΡƒΡ†Π°Ρ˜Ρ‚Π΅ ΠΈ Ρ‚ΠΎ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ²ΠΎΡ™Π½ΠΎ Π΄Π° ΠΏΠΎΡ‡Π½Π΅Ρ‚Π΅ Π΄Π° користитС тСкстуалнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Ово Ρ‚Π°ΠΊΠΎΡ’Π΅ ΠΏΠΎΠΊΠ°Π·ΡƒΡ˜Π΅ Π΄Π° јС слоТСност ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ° ΠΌΠ°Π»ΠΎ мања ΠΎΠ΄ слоТСности ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° заснованих Π½Π° тСксту, Ρ˜Π΅Ρ€ Π½Π°ΠΌ јС Ρƒ Π²Π΅Ρ€Π·ΠΈΡ˜ΠΈ заснованој Π½Π° тСксту ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ Π΄ΠΎΠ΄Π°Ρ‚Π½ΠΈ ΠΊΠΎΠ΄.)

Π¦Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ΠΊΡ™ΡƒΡ‡/врСдност јС Π΄ΠΎΠ±Π°Ρ€ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° Π΄ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Ρƒ ΠΌΠ΅Ρ‚Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. ОвдС Ρ‚Ρ€Π΅Π±Π° Π΄Π° размислимо ΠΎ Ρ‚ΠΎΠΌΠ΅ ΡˆΡ‚Π° сматрамо ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΠΌ врСдностима, Π° ΡˆΡ‚Π° само ΠΏΠΎΠ΄Π°Ρ†ΠΈΠΌΠ°. Π—Π°Π΄Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π° C => A => B ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π½Π°Π·ΠΈΠ²Π°ΠΌΠΎ Ρ€Π΅Ρ‚ΠΊΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΈΠΌ врСдностима C β€žΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°β€œ, Π΄ΠΎΠΊ чСсто мСњани ΠΏΠΎΠ΄Π°Ρ†ΠΈ A - само унСситС ΠΏΠΎΠ΄Π°Ρ‚ΠΊΠ΅. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρ‚Ρ€Π΅Π±Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜ΠΈ Ρ€Π°Π½ΠΈΡ˜Π΅ ΠΎΠ΄ ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° A. Π˜ΠΌΠ°Ρ˜ΡƒΡ›ΠΈ Ρƒ Π²ΠΈΠ΄Ρƒ ΠΎΠ²Ρƒ ΠΈΠ΄Π΅Ρ˜Ρƒ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Ρ€Π΅Ρ›ΠΈ Π΄Π° јС ΠΎΡ‡Π΅ΠΊΠΈΠ²Π°Π½Π° учСсталост ΠΏΡ€ΠΎΠΌΠ΅Π½Π° ΠΎΠ½ΠΎ ΡˆΡ‚ΠΎ Π±ΠΈ сС ΠΌΠΎΠ³Π»ΠΎ користити Π·Π° Ρ€Π°Π·Π»ΠΈΠΊΠΎΠ²Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΡ… ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ° ΠΎΠ΄ само ΠΏΠΎΠ΄Π°Ρ‚Π°ΠΊΠ°. Π’Π°ΠΊΠΎΡ’Π΅ ΠΏΠΎΠ΄Π°Ρ†ΠΈ ΠΎΠ±ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ»Π°Π·Π΅ ΠΈΠ· јСдног ΠΈΠ·Π²ΠΎΡ€Π° (корисника), Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΄ΠΎΠ»Π°Π·ΠΈ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ ΠΈΠ·Π²ΠΎΡ€Π° (администратора). Π‘Π°Π²Ρ™Π΅ΡšΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° који сС ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ Π½Π°ΠΊΠΎΠ½ процСса ΠΈΠ½ΠΈΡ†ΠΈΡ˜Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π΅ Π΄ΠΎΠ²ΠΎΠ΄ΠΈ Π΄ΠΎ ΠΏΠΎΠ²Π΅Ρ›Π°ΡšΠ° слоТСности Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. Π—Π° Ρ‚Π°ΠΊΠ²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΌΠΎΡ€Π°Ρ›Π΅ΠΌΠΎ Π΄Π° сС Π±Π°Π²ΠΈΠΌΠΎ ΡšΠΈΡ…ΠΎΠ²ΠΈΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ испорукС, Ρ€Π°ΡˆΡ‡Π»Π°ΡšΠΈΠ²Π°ΡšΠ΅ΠΌ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜ΠΎΠΌ, Ρ€ΡƒΠΊΠΎΠ²Π°ΡšΠ΅ΠΌ Π½Π΅Ρ‚Π°Ρ‡Π½ΠΈΠΌ врСдностима. Π‘Ρ‚ΠΎΠ³Π°, Π΄Π° бисмо смањили слоТСност ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, Π±ΠΎΡ™Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ Π΄Π° смањимо Π±Ρ€ΠΎΡ˜ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° који сС ΠΌΠΎΠ³Ρƒ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚ΠΈ Ρ‚ΠΎΠΊΠΎΠΌ ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° (ΠΈΠ»ΠΈ ΠΈΡ… Ρ‡Π°ΠΊ ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ Слиминисати).

Из пСрспСктивС ΠΎΠ²ΠΎΠ³ поста Ρ‚Ρ€Π΅Π±Π°Π»ΠΎ Π±ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠΎ Ρ€Π°Π·Π»ΠΈΠΊΡƒ ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ статичких ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π°. Ако Π»ΠΎΠ³ΠΈΠΊΠ° сСрвиса Π·Π°Ρ…Ρ‚Π΅Π²Π° Ρ€Π΅Ρ‚ΠΊΡƒ ΠΏΡ€ΠΎΠΌΠ΅Π½Ρƒ Π½Π΅ΠΊΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€Π° Ρ‚ΠΎΠΊΠΎΠΌ Ρ€Π°Π΄Π°, ΠΎΠ½Π΄Π° ΠΈΡ… ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π½Π°Π·Π²Π°Ρ‚ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ°. Π˜Π½Π°Ρ‡Π΅ су статичнС ΠΈ ΠΌΠΎΠ³Ρƒ сС конфигурисати ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ приступа. Π—Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΡƒ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΌΠΎΠ³Ρƒ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ приступи. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅Π»ΠΎΠ²ΠΈ систСма ΠΌΠΎΠ³Ρƒ сС ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ са Π½ΠΎΠ²ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠΌΠ° Π½Π° сличан Π½Π°Ρ‡ΠΈΠ½ ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ сС ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ одвојСни процСс дистрибуираног систСма.
(МојС скромно ΠΌΠΈΡˆΡ™Π΅ΡšΠ΅ јС Π΄Π° ΠΈΠ·Π±Π΅Π³Π°Π²Π°ΠΌ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈΠ·Π²Ρ€ΡˆΠ°Π²Π°ΡšΠ° Ρ˜Π΅Ρ€ Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Ρ›Π°Π²Π° слоТСност систСма.
МоТда Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ˜Π΅ ослонити сС Π½Π° ΠΏΠΎΠ΄Ρ€ΡˆΠΊΡƒ ОБ-Π° Π·Π° ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ процСса. Мада, Ρ‚ΠΎ ΠΌΠΎΠΆΠ΄Π° нијС ΡƒΠ²Π΅ΠΊ ΠΌΠΎΠ³ΡƒΡ›Π΅.)

ЈСдан Π²Π°ΠΆΠ°Π½ аспСкт ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ° статичкС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ који ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ Π½Π°Π²ΠΎΠ΄ΠΈ Ρ™ΡƒΠ΄Π΅ Π΄Π° Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ (Π±Π΅Π· Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π°Π·Π»ΠΎΠ³Π°) јС ΠΏΡ€Π΅ΠΊΠΈΠ΄ сСрвиса Ρ‚ΠΎΠΊΠΎΠΌ Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Заиста, Π°ΠΊΠΎ ΠΌΠΎΡ€Π°ΠΌΠΎ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌΠΎ статичку ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ, ΠΌΠΎΡ€Π°ΠΌΠΎ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ систСм ΠΊΠ°ΠΊΠΎ Π±ΠΈ Π½ΠΎΠ²Π΅ врСдности посталС Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π΅. Π—Π°Ρ…Ρ‚Π΅Π²ΠΈ Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π·Π°ΡΡ‚ΠΎΡ˜Π° сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΡ˜Ρƒ Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ систСмС, Ρ‚Π°ΠΊΠΎ Π΄Π° Ρ‚ΠΎ ΠΌΠΎΠΆΠ΄Π° нијС Ρ‚ΠΎΠ»ΠΈΠΊΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ. Ако јС ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΎ, ΠΎΠ½Π΄Π° ΠΌΠΎΡ€Π°ΠΌΠΎ ΡƒΠ½Π°ΠΏΡ€Π΅Π΄ ΠΏΠ»Π°Π½ΠΈΡ€Π°Ρ‚ΠΈ Π±ΠΈΠ»ΠΎ којС ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ‚Π°ΡšΠ΅ систСма. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ³Π»ΠΈ бисмо Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠΎ ΠŸΡ€Π°ΠΆΡšΠ΅ΡšΠ΅ АВБ Π•Π›Π‘ Π²Π΅Π·Π΅. Π£ ΠΎΠ²ΠΎΠΌ ΡΡ†Π΅Π½Π°Ρ€ΠΈΡ˜Ρƒ ΠΊΠ°Π΄ Π³ΠΎΠ΄ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΠΎΠΊΡ€Π΅Π½Π΅ΠΌΠΎ систСм, ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ ΠΏΠΎΠΊΡ€Π΅Ρ›Π΅ΠΌΠΎ Π½ΠΎΠ²Ρƒ инстанцу систСма, Π° Π·Π°Ρ‚ΠΈΠΌ ΠΏΡ€Π΅Π±Π°Ρ†ΠΈΠΌΠΎ Π•Π›Π‘ Π½Π° ΡšΡƒ, Π΄ΠΎΠΊ старом систСму Π΄ΠΎΠ·Π²ΠΎΡ™Π°Π²Π°ΠΌΠΎ Π΄Π° Π·Π°Π²Ρ€ΡˆΠΈ ΡΠ΅Ρ€Π²ΠΈΡΠΈΡ€Π°ΡšΠ΅ ΠΏΠΎΡΡ‚ΠΎΡ˜Π΅Ρ›ΠΈΡ… Π²Π΅Π·Π°.

Π¨Ρ‚Π° јС са Π΄Ρ€ΠΆΠ°ΡšΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΡƒΠ½ΡƒΡ‚Π°Ρ€ вСрзионисаног Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΈΠ»ΠΈ споља? ΠžΠ΄Ρ€ΠΆΠ°Π²Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° Π·Π½Π°Ρ‡ΠΈ Ρƒ Π²Π΅Ρ›ΠΈΠ½ΠΈ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π° Π΄Π° јС ΠΎΠ²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΏΡ€ΠΎΡˆΠ»Π° исти процСс ΠΎΡΠΈΠ³ΡƒΡ€Π°ΡšΠ° ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π° ΠΊΠ°ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ΠΈ. Π”Π°ΠΊΠ»Π΅, Π½Π΅ΠΊΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡ‚ΠΈ сигуран Π΄Π° јС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π΄ΠΎΠ±Ρ€ΠΎΠ³ ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π° ΠΈ ΠΏΠΎΡƒΠ·Π΄Π°Π½Π°. Напротив, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Ρƒ посСбном Ρ„Π°Ρ˜Π»Ρƒ Π·Π½Π°Ρ‡ΠΈ Π΄Π° Π½Π΅ΠΌΠ° Ρ‚Ρ€Π°Π³ΠΎΠ²Π° ΠΊΠΎ јС ΠΈ Π·Π°ΡˆΡ‚ΠΎ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅ Ρƒ Ρ‚ΠΎΡ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ. Π”Π° Π»ΠΈ јС ΠΎΠ²ΠΎ Π²Π°ΠΆΠ½ΠΎ? Π’Π΅Ρ€ΡƒΡ˜Π΅ΠΌΠΎ Π΄Π° јС Π·Π° Π²Π΅Ρ›ΠΈΠ½Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΈΡ… систСма Π±ΠΎΡ™Π΅ ΠΈΠΌΠ°Ρ‚ΠΈ стабилну ΠΈ ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ.

Π’Π΅Ρ€Π·ΠΈΡ˜Π° Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΎΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π΄Π° сС сазна ΠΊΠ°Π΄Π° јС ΠΊΡ€Π΅ΠΈΡ€Π°Π½, којС врСдности садрТи, којС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ су ΠΎΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π΅/ΠΎΠ½Π΅ΠΌΠΎΠ³ΡƒΡ›Π΅Π½Π΅, ΠΊΠΎ јС ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€Π°Π½ Π·Π° сваку ΠΏΡ€ΠΎΠΌΠ΅Π½Ρƒ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ. МоТда Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ ΠΌΠ°Π»ΠΎ Ρ‚Ρ€ΡƒΠ΄Π° Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π°Π΄Ρ€ΠΆΠΈ ΡƒΠ½ΡƒΡ‚Π°Ρ€ Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚Π° ΠΈ Ρ‚ΠΎ јС ΠΈΠ·Π±ΠΎΡ€ дизајна.

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ МанС

ОвдС бисмо ΠΆΠ΅Π»Π΅Π»ΠΈ Π΄Π° истакнСмо Π½Π΅ΠΊΠ΅ прСдности ΠΈ Π΄Π° Ρ€Π°Π·ΠΌΠΎΡ‚Ρ€ΠΈΠΌΠΎ Π½Π΅ΠΊΠ΅ нСдостаткС ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΠ³ приступа.

ΠŸΡ€Π΅Π΄Π½ΠΎΡΡ‚ΠΈ

ΠšΠ°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΡΡ‚ΠΈΠΊΠ΅ компајбилнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½ΠΎΠ³ дистрибуираног систСма:

  1. Π‘Ρ‚Π°Ρ‚ΠΈΡ‡ΠΊΠ° ΠΏΡ€ΠΎΠ²Π΅Ρ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Ово дајС висок Π½ΠΈΠ²ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π΅ΡšΠ°, Π΄Π° јС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° исправна с ΠΎΠ±Π·ΠΈΡ€ΠΎΠΌ Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ° Ρ‚ΠΈΠΏΠ°.
  2. Π‘ΠΎΠ³Π°Ρ‚ јСзик ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. ΠžΠ±ΠΈΡ‡Π½ΠΎ су Π΄Ρ€ΡƒΠ³ΠΈ приступи ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ Π½Π° највишС ΠΏΡ€ΠΎΠΌΠ΅Π½Ρ™ΠΈΠ²Π΅ Π·Π°ΠΌΠ΅Π½Π΅.
    ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ›ΠΈ Π‘Ρ†Π°Π»Π° ΠΌΠΎΠΆΠ΅ сС користити ΡˆΠΈΡ€ΠΎΠΊ спСктар Ρ˜Π΅Π·ΠΈΡ‡ΠΊΠΈΡ… карактСристика Π΄Π° Π±ΠΈ сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠ±ΠΎΡ™ΡˆΠ°Π»Π°. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄Π° користимо особинС Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½Π΅ врСдности, ΠΎΠ±Ρ˜Π΅ΠΊΡ‚Π΅ Π·Π° ΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΎΠ³ опсСга, Π½Π° којС сС ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠ·ΠΈΠ²Π°Ρ‚ΠΈ valс дСфинисан само јСдном Ρƒ ΡΠΏΠΎΡ™Π°ΡˆΡšΠ΅ΠΌ опсСгу (Π”Π Π˜). ΠœΠΎΠ³ΡƒΡ›Π΅ јС користити Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π½Π΅ сСквСнцС ΠΈΠ»ΠΈ инстанцС ΠΎΠ΄Ρ€Π΅Ρ’Π΅Π½ΠΈΡ… класа (Seq, Map, Π˜Ρ‚Π΄).
  3. Π”Π‘Π›. Π‘Ρ†Π°Π»Π° ΠΈΠΌΠ° ΠΏΡ€ΠΈΡΡ‚ΠΎΡ˜Π½Ρƒ ΠΏΠΎΠ΄Ρ€ΡˆΠΊΡƒ Π·Π° Π”Π‘Π› писцС. ОвС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡ˜Π΅ сС ΠΌΠΎΠ³Ρƒ користити Π·Π° ΡƒΡΠΏΠΎΡΡ‚Π°Π²Ρ™Π°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΎΠ³ јСзика који јС погоднији ΠΈ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΡ’Π΅Π½ΠΈΡ˜ΠΈ ΠΊΡ€Π°Ρ˜ΡšΠ΅ΠΌ кориснику, Ρ‚Π°ΠΊΠΎ Π΄Π° јС ΠΊΠΎΠ½Π°Ρ‡Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π±Π°Ρ€Π΅ΠΌ Ρ‡ΠΈΡ‚Ρ™ΠΈΠ²Π° ΠΎΠ΄ странС корисника Π΄ΠΎΠΌΠ΅Π½Π°.
  4. Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ‚Π΅Ρ‚ ΠΈ кохСрСнтност ΠΌΠ΅Ρ’Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°. ЈСдна ΠΎΠ΄ прСдности посСдовања ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π·Π° Ρ†Π΅ΠΎ дистрибуирани систСм Π½Π° јСдном мСсту јС Π΄Π° сС свС врСдности Π΄Π΅Ρ„ΠΈΠ½ΠΈΡˆΡƒ стриктно јСдном, Π° Π·Π°Ρ‚ΠΈΠΌ ΠΏΠΎΠ½ΠΎΠ²ΠΎ користС Π½Π° свим мСстима Π³Π΄Π΅ су Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½Π΅. Π’Π°ΠΊΠΎΡ’Π΅ унСситС Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π΅ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΠ³ ΠΏΠΎΡ€Ρ‚Π° Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅ Π΄Π° Ρ›Π΅ Ρƒ свим ΠΌΠΎΠ³ΡƒΡ›ΠΈΠΌ исправним ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°ΠΌΠ° Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ систСма Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈ исти јСзик. ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ СксплицитнС зависности ΠΈΠ·ΠΌΠ΅Ρ’Ρƒ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° ΡˆΡ‚ΠΎ ΠΎΡ‚Π΅ΠΆΠ°Π²Π° Π·Π°Π±ΠΎΡ€Π°Π²Ρ™Π°ΡšΠ΅ ΠΏΡ€ΡƒΠΆΠ°ΡšΠ° Π½Π΅ΠΊΠΈΡ… услуга.
  5. Висок ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚ ΠΏΡ€ΠΎΠΌΠ΅Π½Π°. Π£ΠΊΡƒΠΏΠ°Π½ приступ проласка ΠΏΡ€ΠΎΠΌΠ΅Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΊΡ€ΠΎΠ· Π½ΠΎΡ€ΠΌΠ°Π»Π°Π½ ПР процСс успоставља високС стандардС ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π° ΠΈΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ.
  6. Π˜ΡΡ‚ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Кад Π³ΠΎΠ΄ ΠΈΠ·Π²Ρ€ΡˆΠΈΠΌΠΎ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ, аутоматска ΠΏΡ€ΠΈΠΌΠ΅Π½Π° осигурава Π΄Π° сС сви Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ Π°ΠΆΡƒΡ€ΠΈΡ€Π°Ρ˜Ρƒ.
  7. ΠŸΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Ρ™Π΅ΡšΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π΅ ΠΌΠΎΡ€Π° Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π° ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π°Π²Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΈ Ρ€ΡƒΠΊΡƒΡ˜Π΅ Π½Π΅Ρ‚Π°Ρ‡Π½ΠΈΠΌ врСдностима ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Ово ΠΏΠΎΡ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Ρ™ΡƒΡ˜Π΅ Ρ†Π΅Π»ΠΎΠΊΡƒΠΏΠ½Ρƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Ρƒ. (НСки пораст слоТСности јС Ρƒ самој ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ, Π°Π»ΠΈ Ρ‚ΠΎ јС свСстан компромис ΠΊΠ° бСзбСдности.) ΠŸΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΎ јС Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΎ Π²Ρ€Π°Ρ‚ΠΈΡ‚ΠΈ сС Π½Π° ΡƒΠΎΠ±ΠΈΡ‡Π°Ρ˜Π΅Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ β€” само Π΄ΠΎΠ΄Π°Ρ˜Ρ‚Π΅ Π΄Π΅Π»ΠΎΠ²Π΅ који Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ˜Ρƒ. Π›Π°ΠΊΡˆΠ΅ јС Π·Π°ΠΏΠΎΡ‡Π΅Ρ‚ΠΈ са ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½ΠΎΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΎΠΌ ΠΈ ΠΎΠ΄Π»ΠΎΠΆΠΈΡ‚ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Ρƒ Π΄ΠΎΠ΄Π°Ρ‚Π½ΠΈΡ… Π΄Π΅Π»ΠΎΠ²Π° Π·Π° Π½Π΅ΠΊΠ° каснија Π²Ρ€Π΅ΠΌΠ΅Π½Π°.
  8. ВСрсионирана ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. Π—Π±ΠΎΠ³ Ρ‡ΠΈΡšΠ΅Π½ΠΈΡ†Π΅ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΡ€Π°Ρ‚Π΅ исти процСс Ρ€Π°Π·Π²ΠΎΡ˜Π°, ΠΊΠ°ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ добијамо Π°Ρ€Ρ‚Π΅Ρ„Π°ΠΊΡ‚ са Ρ˜Π΅Π΄ΠΈΠ½ΡΡ‚Π²Π΅Π½ΠΎΠΌ Π²Π΅Ρ€Π·ΠΈΡ˜ΠΎΠΌ. ΠžΠΌΠΎΠ³ΡƒΡ›Π°Π²Π° Π½Π°ΠΌ Π΄Π° Π²Ρ€Π°Ρ‚ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π°ΠΊΠΎ јС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ. МоТСмо Ρ‡Π°ΠΊ Π΄Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ која јС ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅Π½Π° ΠΏΡ€Π΅ Π³ΠΎΠ΄ΠΈΠ½Ρƒ Π΄Π°Π½Π° ΠΈ ΠΎΠ½Π° Ρ›Π΅ функционисати Π½Π° ΠΏΠΎΡ‚ΠΏΡƒΠ½ΠΎ исти Π½Π°Ρ‡ΠΈΠ½. Π‘Ρ‚Π°Π±ΠΈΠ»Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠ±ΠΎΡ™ΡˆΠ°Π²Π° прСдвидљивост ΠΈ поузданост дистрибуираног систСма. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° јС фиксирана Ρƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ° ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅ сС Π»Π°ΠΊΠΎ ΠΌΠ΅ΡšΠ°Ρ‚ΠΈ Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΌ систСму.
  9. ΠœΠΎΠ΄ΡƒΠ»Π°Ρ€Π½ΠΎΡΡ‚. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈ ΠΎΠΊΠ²ΠΈΡ€ јС ΠΌΠΎΠ΄ΡƒΠ»Π°Ρ€Π°Π½ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ сС ΠΌΠΎΠ³Ρƒ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΎΠ²Π°Ρ‚ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½Π΅
    ΠΏΠΎΠ΄Ρ€ΠΆΠ°Π²Π°Ρ˜Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ (поставкС/ΠΈΠ·Π³Π»Π΅Π΄ΠΈ). ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ, ΠΌΠΎΠ³ΡƒΡ›Π΅ јС ΠΈΠΌΠ°Ρ‚ΠΈ ΠΌΠ°Π»ΠΈ распорСд јСдног Ρ‡Π²ΠΎΡ€Π° ΠΈ поставку вишС Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° Π²Π΅Π»ΠΈΠΊΠΎΠ³ ΠΎΠ±ΠΈΠΌΠ°. Π Π°Π·ΡƒΠΌΠ½ΠΎ јС ΠΈΠΌΠ°Ρ‚ΠΈ вишС распорСда ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠ΅.
  10. Π’Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅. Π—Π° ΠΏΠΎΡ‚Ρ€Π΅Π±Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° ΠΌΠΎΠΆΠ΅ сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚ΠΈ Π»Π°ΠΆΠ½Π° услуга ΠΈ користити јС ΠΊΠ°ΠΎ зависност Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°Ρ‡ΠΈΠ½. НСколико Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΡ… распорСда Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ° са Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚ΠΈΠΌ Π΄Π΅Π»ΠΎΠ²ΠΈΠΌΠ° замСњСним Π»Π°ΠΆΠ½ΠΈΠΌ ΠΌΠΎΠΆΠ΅ сС ΠΎΠ΄Ρ€ΠΆΠ°Π²Π°Ρ‚ΠΈ истоврСмСно.
  11. Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½ΠΎ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅. ПонСкад јС Ρƒ дистрибуираним систСмима Ρ‚Π΅ΡˆΠΊΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜ΡΠΊΠ΅ тСстовС. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ›ΠΈ описани приступ бСзбСдној ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅Ρ‚Π½ΠΎΠ³ дистрибуираног систСма, ΠΌΠΎΠΆΠ΅ΠΌΠΎ ΠΏΠΎΠΊΡ€Π΅Π½ΡƒΡ‚ΠΈ свС дистрибуиранС Π΄Π΅Π»ΠΎΠ²Π΅ Π½Π° јСдном сСрвСру Π½Π° контролисан Π½Π°Ρ‡ΠΈΠ½. Π›Π°ΠΊΠΎ јС ΠΎΠΏΠΎΠ½Π°ΡˆΠ°Ρ‚ΠΈ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Ρƒ
    ΠΊΠ°Π΄Π° јСдна ΠΎΠ΄ услуга постанС нСдоступна.

МанС

ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ сС Ρ€Π°Π·Π»ΠΈΠΊΡƒΡ˜Π΅ ΠΎΠ΄ β€žΠ½ΠΎΡ€ΠΌΠ°Π»Π½Π΅β€œ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ ΠΌΠΎΠΆΠ΄Π° Π½Π΅Ρ›Π΅ ΠΎΠ΄Π³ΠΎΠ²Π°Ρ€Π°Ρ‚ΠΈ свим ΠΏΠΎΡ‚Ρ€Π΅Π±Π°ΠΌΠ°. Π•Π²ΠΎ Π½Π΅ΠΊΠΈΡ… нСдостатака ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°Π½Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅:

  1. Π‘Ρ‚Π°Ρ‚ΠΈΡ‡ΠΊΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°. МоТда нијС ΠΏΠΎΠ³ΠΎΠ΄Π°Π½ Π·Π° свС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π΅. Π£ Π½Π΅ΠΊΠΈΠΌ ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²ΠΈΠΌΠ° ΠΏΠΎΡΡ‚ΠΎΡ˜ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π·Π° Π±Ρ€Π·ΠΈΠΌ Ρ„ΠΈΠΊΡΠΈΡ€Π°ΡšΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Ρƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΡšΠΈ Π·Π°ΠΎΠ±ΠΈΠ»Π°Π·Π΅Ρ›ΠΈ свС сигурноснС ΠΌΠ΅Ρ€Π΅. Овај приступ ΠΎΡ‚Π΅ΠΆΠ°Π²Π°. ΠšΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΏΠΎΠ½ΠΎΠ²Π½ΠΎ Ρ€Π°ΡΠΏΠΎΡ€Π΅Ρ’ΠΈΠ²Π°ΡšΠ΅ су ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π½Π°ΠΊΠΎΠ½ Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅ Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜ΠΈ. Ово јС ΠΈ карактСристика ΠΈ Ρ‚Π΅Ρ€Π΅Ρ‚.
  2. Π“Π΅Π½Π΅Ρ€ΠΈΡΠ°ΡšΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Када ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π³Π΅Π½Π΅Ρ€ΠΈΡˆΠ΅ Π½Π΅ΠΊΠΈ Π°Π»Π°Ρ‚ Π·Π° Π°ΡƒΡ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΡ˜Ρƒ, овај приступ Π·Π°Ρ…Ρ‚Π΅Π²Π° Π½Π°ΠΊΠ½Π°Π΄Π½Ρƒ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Ρƒ (која Π±ΠΈ Π·Π°ΡƒΠ·Π²Ρ€Π°Ρ‚ ΠΌΠΎΠ³Π»Π° Π΄Π° Π½Π΅ успС). МоТда Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ Π΄ΠΎΠ΄Π°Ρ‚Π½ΠΈ Π½Π°ΠΏΠΎΡ€ΠΈ Π΄Π° сС овај Π΄ΠΎΠ΄Π°Ρ‚Π½ΠΈ ΠΊΠΎΡ€Π°ΠΊ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡˆΠ΅ Ρƒ систСм ΠΈΠ·Π³Ρ€Π°Π΄ΡšΠ΅.
  3. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΈ. Данас јС Ρƒ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π°Π»Π°Ρ‚Π° који сС ΠΎΡΠ»Π°ΡšΠ°Ρ˜Ρƒ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ заснованС Π½Π° тСксту. НСки ΠΎΠ΄ ΡšΠΈΡ…
    Π½Π΅Ρ›Π΅ Π±ΠΈΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½Ρ™ΠΈΠ²ΠΎ ΠΊΠ°Π΄Π° сС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°.
  4. ΠŸΠΎΡ‚Ρ€Π΅Π±Π½Π° јС ΠΏΡ€ΠΎΠΌΠ΅Π½Π° Ρƒ Π½Π°Ρ‡ΠΈΠ½Ρƒ Ρ€Π°Π·ΠΌΠΈΡˆΡ™Π°ΡšΠ°. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈ ΠΈ Π”Π΅Π²ΠžΠΏΡ су ΡƒΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ са тСкстуалним ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΈΠΌ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°ΠΌΠ°. ИдСја ΠΎ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΡƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΌΠΎΠ³Π»Π° Π±ΠΈ ΠΈΠΌ ΠΈΠ·Π³Π»Π΅Π΄Π°Ρ‚ΠΈ Ρ‡ΡƒΠ΄Π½Π°.
  5. ΠŸΡ€Π΅ ΡƒΠ²ΠΎΡ’Π΅ΡšΠ° компајбилнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Π½ јС процСс Ρ€Π°Π·Π²ΠΎΡ˜Π° софтвСра високог ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π°.

ΠŸΠΎΡΡ‚ΠΎΡ˜Π΅ Π½Π΅ΠΊΠ° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ΠΎΠ³ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°:

  1. Ако ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ Π΄ΠΎΠ΄Π°Ρ‚Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ ΠΊΠΎΡ˜Ρƒ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Ρ‡Π²ΠΎΡ€Π° Π½Π΅ Π·Π°Ρ…Ρ‚Π΅Π²Π°, ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»Π΅Ρ€ Π½Π°ΠΌ Π½Π΅Ρ›Π΅ ΠΏΠΎΠΌΠΎΡ›ΠΈ Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΡ˜Π΅ΠΌΠΎ одсуство ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π΅. Ово Π±ΠΈ сС ΠΌΠΎΠ³Π»ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ HList ΠΈΠ»ΠΈ АДВ (класС ΡΠ»ΡƒΡ‡Π°Ρ˜Π΅Π²Π°) Π·Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Ρ‡Π²ΠΎΡ€Π° умСсто особина ΠΈ ΡƒΠ·ΠΎΡ€ΠΊΠ° ΠΊΠΎΠ»Π°Ρ‡Π°.
  2. ΠœΠΎΡ€Π°ΠΌΠΎ Π΄Π° ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΠΌΠΎ Π½Π΅ΠΊΠΈ шаблон Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½ΠΎΡ˜ Π΄Π°Ρ‚ΠΎΡ‚Π΅Ρ†ΠΈ: (package, import, object Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΡ˜Π΅;
    override def'с Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ који ΠΈΠΌΠ°Ρ˜Ρƒ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π½Π΅ врСдности). Ово сС ΠΌΠΎΠΆΠ΅ Π΄Π΅Π»ΠΈΠΌΠΈΡ‡Π½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΠΈ ΠΊΠΎΡ€ΠΈΡˆΡ›Π΅ΡšΠ΅ΠΌ Π”Π‘Π›-Π°.
  3. Π£ ΠΎΠ²ΠΎΠΌ посту Π½Π΅ ΠΏΠΎΠΊΡ€ΠΈΠ²Π°ΠΌΠΎ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΡƒ Ρ€Π΅ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ кластСра сличних Ρ‡Π²ΠΎΡ€ΠΎΠ²Π°.

Π—Π°ΠΊΡ™ΡƒΡ‡Π°ΠΊ

Π£ ΠΎΠ²ΠΎΠΌ посту смо Ρ€Π°Π·Π³ΠΎΠ²Π°Ρ€Π°Π»ΠΈ ΠΎ идСји ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Ρ™Π°ΡšΠ° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Ρƒ ΠΈΠ·Π²ΠΎΡ€Π½ΠΎΠΌ ΠΊΠΎΠ΄Ρƒ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π°Π½ Π½Π°Ρ‡ΠΈΠ½. ΠŸΡ€ΠΈΡΡ‚ΡƒΠΏ Π±ΠΈ сС ΠΌΠΎΠ³Π°ΠΎ користити Ρƒ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°ΠΌΠ° ΠΊΠ°ΠΎ Π·Π°ΠΌΠ΅Π½Π° Π·Π° ΠΊΠΌΠ» ΠΈ Π΄Ρ€ΡƒΠ³Π΅ тСкстуалнС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. Упркос Ρ‚ΠΎΠΌΠ΅ ΡˆΡ‚ΠΎ јС наш ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½ Ρƒ Π‘Ρ†Π°Π»Π°-Ρƒ, ΠΌΠΎΠ³Π°ΠΎ Π±ΠΈ сС прСвСсти ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³Π΅ компајбилнС јСзикС (ΠΊΠ°ΠΎ ΡˆΡ‚ΠΎ су ΠšΠΎΡ‚Π»ΠΈΠ½, Π¦#, Π‘Π²ΠΈΡ„Ρ‚, ΠΈΡ‚Π΄.). Овај приступ Π±ΠΈ сС ΠΌΠΎΠ³Π°ΠΎ испробати Ρƒ Π½ΠΎΠ²ΠΎΠΌ ΠΏΡ€ΠΎΡ˜Π΅ΠΊΡ‚Ρƒ ΠΈ, Ρƒ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ Π΄Π° сС Π½Π΅ ΡƒΠΊΠ»Π°ΠΏΠ° Π΄ΠΎΠ±Ρ€ΠΎ, ΠΏΡ€Π΅Ρ›ΠΈ Π½Π° стари Π½Π°Ρ‡ΠΈΠ½.

Наравно, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΠ±ΠΈΠ»Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π·Π°Ρ…Ρ‚Π΅Π²Π° висок ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚ процСса Ρ€Π°Π·Π²ΠΎΡ˜Π°. Π—Π°ΡƒΠ·Π²Ρ€Π°Ρ‚, ΠΎΠ±Π΅Ρ›Π°Π²Π° Π΄Π° Ρ›Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡ‚ΠΈ јСднако ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚Π½Ρƒ робусну ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ.

Овај приступ сС ΠΌΠΎΠΆΠ΅ ΠΏΡ€ΠΎΡˆΠΈΡ€ΠΈΡ‚ΠΈ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΡ‚Π΅ Π½Π°Ρ‡ΠΈΠ½Π΅:

  1. Могли Π±ΠΈ сС користити ΠΌΠ°ΠΊΡ€ΠΎΠΈ Π΄Π° Π±ΠΈ сС ΠΈΠ·Π²Ρ€ΡˆΠΈΠ»Π° Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅ ΠΈ Π΄Π° Π½Π΅ успС Ρƒ Π²Ρ€Π΅ΠΌΠ΅ ΠΊΠΎΠΌΠΏΠ°Ρ˜Π»ΠΈΡ€Π°ΡšΠ° Ρƒ ΡΠ»ΡƒΡ‡Π°Ρ˜Ρƒ нСуспСха Π±ΠΈΠ»ΠΎ ΠΊΠ°ΠΊΠ²ΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅ΡšΠ° пословнС Π»ΠΎΠ³ΠΈΠΊΠ΅.
  2. Π”Π‘Π› Π±ΠΈ сС ΠΌΠΎΠ³Π°ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ‚ΠΈ Π΄Π° прСдставља ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ Π½Π° Π½Π°Ρ‡ΠΈΠ½ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΡ’Π΅Π½ кориснику Π΄ΠΎΠΌΠ΅Π½Π°.
  3. Π”ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Ρ™Π°ΡšΠ΅ рСсурсима са аутоматским подСшавањима ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π΅. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ€ΠΎΡ˜ Ρ‡Π²ΠΎΡ€ΠΎΠ²Π° кластСра, ΠΌΠΎΠΆΠ΄Π° бисмо ΠΆΠ΅Π»Π΅Π»ΠΈ (1) Π΄Π° Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈ Π΄ΠΎΠ±ΠΈΡ˜Ρƒ ΠΌΠ°Π»ΠΎ ΠΈΠ·ΠΌΠ΅ΡšΠ΅Π½Ρƒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Ρƒ; (2) ΠΌΠ΅Π½Π°ΡŸΠ΅Ρ€ кластСра Π·Π° ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π° ΠΎ Π½ΠΎΠ²ΠΈΠΌ Ρ‡Π²ΠΎΡ€ΠΎΠ²ΠΈΠΌΠ°.

Ρ…Π²Π°Π»Π°

Π–Π΅Π»Π΅ΠΎ Π±ΠΈΡ… Π΄Π° сС Π·Π°Ρ…Π²Π°Π»ΠΈΠΌ ΠΠ½Π΄Ρ€Π΅Ρ˜Ρƒ Баксонову, ΠŸΠ°Π²Π»Ρƒ ΠŸΠΎΠΏΠΎΠ²Ρƒ, Антону ΠΠ΅Ρ…Π°Ρ˜Π΅Π²Ρƒ ΡˆΡ‚ΠΎ су Π΄Π°Π»ΠΈ инспиративнС ΠΏΠΎΠ²Ρ€Π°Ρ‚Π½Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ˜Π΅ ΠΎ Π½Π°Ρ†Ρ€Ρ‚Ρƒ ΠΎΠ²ΠΎΠ³ поста којС су ΠΌΠΈ ΠΏΠΎΠΌΠΎΠ³Π»Π΅ Π΄Π° Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ јаснијС.

Π˜Π·Π²ΠΎΡ€: Π²Π²Π².Ρ…Π°Π±Ρ€.Ρ†ΠΎΠΌ

ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ хостинг Π·Π° ΡΠ°Ρ˜Ρ‚ΠΎΠ²Π΅ са Π”Π”ΠΎΠ‘ Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, Π’ΠŸΠ‘ Π’Π”Π‘ сСрвСрС πŸ”₯ ΠšΡƒΠΏΠΈΡ‚Π΅ ΠΏΠΎΡƒΠ·Π΄Π°Π½ Π²Π΅Π± хостинг са DDoS Π·Π°ΡˆΡ‚ΠΈΡ‚ΠΎΠΌ, VPS VDS сСрвСрС | ProHoster