Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast

Π’ΠΎ ΠΎΠ²Π°Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π° ќС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ ΠΈ Π·ΠΎΡˆΡ‚ΠΎ сС Ρ€Π°Π·Π²ΠΈΠ²ΠΌΠ΅ БистСм Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° – ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ кој прСнСсува ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ клиСнтскитС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ сСрвСритС 1C:Enterprise - ΠΎΠ΄ ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡšΠ΅ Π·Π°Π΄Π°Ρ‡Π° Π΄ΠΎ Ρ€Π°Π·ΠΌΠΈΡΠ»ΡƒΠ²Π°ΡšΠ΅ Π½ΠΈΠ· Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈΡ‚Π΅ Π·Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°.

БистСмот Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° (Π²ΠΎ Π½Π°Ρ‚Π°ΠΌΠΎΡˆΠ½ΠΈΠΎΡ‚ тСкст ΠΊΠ°ΠΊΠΎ SV) Π΅ дистрибуиран, Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ‚Π΅Π½ систСм Π·Π° ΠΏΠΎΡ€Π°ΠΊΠΈ со Π·Π°Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° испорака. SV Π΅ Π΄ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Π½ ΠΊΠ°ΠΊΠΎ услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ со Π³ΠΎΠ»Π΅ΠΌΠ° приспособливост, достапна ΠΈ ΠΊΠ°ΠΊΠΎ онлајн услуга (ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½Π° ΠΎΠ΄ 1C) ΠΈ ΠΊΠ°ΠΊΠΎ масовно ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС распорСди Π½Π° Π²Π°ΡˆΠΈΡ‚Π΅ сопствСни сСрвСрски ΠΊΠ°ΠΏΠ°Ρ†ΠΈΡ‚Π΅Ρ‚ΠΈ.

SV користи дистрибуирано ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ ЛСскина ΠΈ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡ Еластична ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅. ЌС Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ ΠΈ Π·Π° Java ΠΈ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ Π³ΠΎ скалирамС PostgreSQL.
Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ изјава

Π—Π° Π΄Π° станС јасно Π·ΠΎΡˆΡ‚ΠΎ Π³ΠΎ создадовмС БистСмот Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π°, ќС Π²ΠΈ ΠΊΠ°ΠΆΠ°ΠΌ ΠΌΠ°Π»ΠΊΡƒ Π·Π° Ρ‚ΠΎΠ° ΠΊΠ°ΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π° Ρ€Π°Π·Π²ΠΎΡ˜ΠΎΡ‚ Π½Π° Π΄Π΅Π»ΠΎΠ²Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π²ΠΎ 1C.

Π—Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ, ΠΌΠ°Π»ΠΊΡƒ Π·Π° нас Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π·Π½Π°Π°Ρ‚ ΡˆΡ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ :) Ја ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΡˆΠΊΠ°Ρ‚Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° 1C:Enterprise. ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° Π΄Π΅Π»ΠΎΠ²Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° ΡˆΡ‚ΠΎ ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° Π΄Π΅Π»ΠΎΠ²Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π²ΠΎ мСѓуплатформско ΠΎΠΏΠΊΡ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅.

ΠŸΠ°Ρ€Π°Π΄ΠΈΠ³ΠΌΠ° Π·Π° Ρ€Π°Π·Π²ΠΎΡ˜ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр

Π”Π΅Π»ΠΎΠ²Π½ΠΈΡ‚Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ создадСни Π½Π° 1C: Enterprise Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π½Π° Ρ‚Ρ€ΠΈ Π½ΠΈΠ²ΠΎΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСр Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° β€žDBMS – сСрвСр Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ – ΠΊΠ»ΠΈΠ΅Π½Ρ‚β€œ. ΠšΠΎΠ΄ΠΎΡ‚ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° напишан Π²ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ јазик 1C, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²Ρ€ΡˆΠΈ Π½Π° сСрвСрот Π·Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈΠ»ΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚. Π¦Π΅Π»Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° со ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° (Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡƒΠΌΠΈ, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈ, ΠΈΡ‚Π½.), ΠΊΠ°ΠΊΠΎ ΠΈ Ρ‡ΠΈΡ‚Π°ΡšΠ΅Ρ‚ΠΎ ΠΈ ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, сС Π²Ρ€ΡˆΠΈ само Π½Π° сСрвСрот. Ѐункционалноста Π½Π° Ρ„ΠΎΡ€ΠΌΠΈΡ‚Π΅ ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅Ρ˜Ρ Π΅ исто Ρ‚Π°ΠΊΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π° Π½Π° сСрвСрот. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ Π²Ρ€ΡˆΠΈ ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅, ΠΎΡ‚Π²ΠΎΡ€Π°ΡšΠ΅ ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π°ΡšΠ΅ Ρ„ΠΎΡ€ΠΌΠΈ, β€žΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°β€œ со корисникот (ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ°, ΠΏΡ€Π°ΡˆΠ°ΡšΠ°...), ΠΌΠ°Π»ΠΈ прСсмСтки Π²ΠΎ обрасци ΠΊΠΎΠΈ Π±Π°Ρ€Π°Π°Ρ‚ Π±Ρ€Π· ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, мноТСњС Π½Π° Ρ†Π΅Π½Π°Ρ‚Π° ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡ‡ΠΈΠ½Π°), Ρ€Π°Π±ΠΎΡ‚Π° со Π»ΠΎΠΊΠ°Π»Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ, Ρ€Π°Π±ΠΎΡ‚Π° со ΠΎΠΏΡ€Π΅ΠΌΠ°.

Π’ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π·Π°Π³Π»Π°Π²Ρ˜Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΈΡ‚Π΅ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΡ€Π° Сксплицитно Π΄Π° Π½Π°Π²Π΅Π΄Π°Ρ‚ ΠΊΠ°Π΄Π΅ ќС сС ΠΈΠ·Π²Ρ€ΡˆΠΈ ΠΊΠΎΠ΄ΠΎΡ‚ - ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ &AtClient / &AtServer (&AtClient / &AtServer Π²ΠΎ англиската Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° 1C сСга ќС ΠΌΠ΅ ΠΏΠΎΠΏΡ€Π°Π²Π°Ρ‚ вСлСјќи Π΄Π΅ΠΊΠ° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²ΠΈΡ‚Π΅ сС Π²ΡΡƒΡˆΠ½ΠΎΡΡ‚ ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ, Π½ΠΎ Π·Π° нас сСга ΠΎΠ²Π° Π½Π΅ Π΅ Π²Π°ΠΆΠ½ΠΎ.

МоТС Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ‚Π΅ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° сСрвСрот ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚, Π½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°Ρ‚Π΅ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° сСрвСрот. Ова Π΅ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ΅ ΡˆΡ‚ΠΎ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ ΠΎΠ΄ повСќС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ. ОсобСно, Π·Π°Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° сСрвСрот ΠΌΠΎΡ€Π° Π΄Π° Π±ΠΈΠ΄Π΅ напишан Π½Π° Ρ‚Π°ΠΊΠΎΠ² Π½Π°Ρ‡ΠΈΠ½ ΡˆΡ‚ΠΎ ќС сС ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π° Π½Π° ист Π½Π°Ρ‡ΠΈΠ½ Π±Π΅Π· Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΊΠ°Π΄Π΅ сС ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π° - ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΎΠ΄ сСрвСрот. И Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅ сСрвСрски ΠΊΠΎΠ΄ ΠΎΠ΄ Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ΄ Π½Π° сСрвСрот, Π½Π΅ΠΌΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΊΠ°ΠΊΠΎ Ρ‚Π°ΠΊΠΎΠ². И бидСјќи Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° сСрвСрот, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΡˆΡ‚ΠΎ Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ°Π» ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Ρ‚Π²ΠΎΡ€ΠΈ, Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΈ сСрвСрот повСќС Π½Π΅ΠΌΠ° Π΄Π° ΠΈΠΌΠ° ΠΊΠΎΠ³ΠΎ Π΄Π° ΠΏΠΎΠ²ΠΈΠΊΠ°.

Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast
Код ΡˆΡ‚ΠΎ сС справува со ΠΊΠ»ΠΈΠΊΠ½ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΊΠΎΠΏΡ‡Π΅: ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ сСрвСрска ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ΄ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ќС Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ клиСнтска ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΎΠ΄ сСрвСрот Π½Π΅ΠΌΠ°

Ова Π·Π½Π°Ρ‡ΠΈ Π΄Π΅ΠΊΠ° Π°ΠΊΠΎ сакамС Π΄Π° испратимС нСкоја ΠΏΠΎΡ€Π°ΠΊΠ° ΠΎΠ΄ сСрвСрот Π΄ΠΎ клиСнтската Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π΅ΠΊΠ° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° β€žΠ΄ΠΎΠ»Π³ΠΎΡ‚Ρ€Π°Ρ˜Π½ΠΈΠΎΡ‚β€œ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ Π΅ Π·Π°Π²Ρ€ΡˆΠ΅Π½ΠΎ ΠΈ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°Ρ˜ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π³Π»Π΅Π΄Π°, Π½Π΅ΠΌΠ°ΠΌΠ΅ Ρ‚Π°ΠΊΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄. Π’Ρ€Π΅Π±Π° Π΄Π° користитС Ρ‚Ρ€ΠΈΠΊΠΎΠ²ΠΈ, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π½ΠΎ Π΄Π° Π³ΠΎ Π°Π½ΠΊΠ΅Ρ‚ΠΈΡ€Π°Ρ‚Π΅ сСрвСрот ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚. Но, овој пристап Π³ΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π° систСмот со Π½Π΅ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΠΎΠ²ΠΈΡ†ΠΈ ΠΈ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ Π½Π΅ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΌΠ½ΠΎΠ³Ρƒ Π΅Π»Π΅Π³Π°Π½Ρ‚Π½ΠΎ.

И, исто Ρ‚Π°ΠΊΠ°, ΠΈΠΌΠ° ΠΏΠΎΡ‚Ρ€Π΅Π±Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π° ќС пристигнС тСлСфонски ΠΏΠΎΠ²ΠΈΠΊ SIP- ΠΊΠΎΠ³Π° ΡƒΠΏΠ°Ρ‚ΡƒΠ²Π°Ρ‚Π΅ ΠΏΠΎΠ²ΠΈΠΊ, извСстСтС ја клиСнтската Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π·Π° ΠΎΠ²Π° Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ користи Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°Ρ‡ΠΎΡ‚ Π·Π° Π΄Π° Π³ΠΎ најдС Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π½Π° страна ΠΈ Π΄Π° ΠΌΡƒ ΠΏΠΎΠΊΠ°ΠΆΠ΅ Π½Π° корисникот ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€Π½Π°Ρ‚Π° страна ΡˆΡ‚ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°. Или, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π° ќС пристигнС Π½Π°Ρ€Π°Ρ‡ΠΊΠ° Π²ΠΎ ΠΌΠ°Π³Π°Ρ†ΠΈΠ½ΠΎΡ‚, извСстСтС ја клиСнтската Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ Π·Π° ΠΎΠ²Π°. ΠžΠΏΡˆΡ‚ΠΎ Π·Π΅ΠΌΠ΅Π½ΠΎ, ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ случаи ΠΊΠΎΠ³Π° Ρ‚Π°ΠΊΠΎΠ² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π±ΠΈ Π±ΠΈΠ» корисСн.

Π‘Π°ΠΌΠΎΡ‚ΠΎ производство

НаправСтС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ Π·Π° ΠΏΠΎΡ€Π°ΠΊΠΈ. Π‘Ρ€Π·, сигурСн, со Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°Π½Π° испорака, со моТност Π·Π° флСксибилно ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ. Π’Ρ€Π· основа Π½Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΡ‚, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ гласник (ΠΏΠΎΡ€Π°ΠΊΠΈ, Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠΎΠ²ΠΈΡ†ΠΈ) ΡˆΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ 1C.

Π”ΠΈΠ·Π°Ρ˜Π½ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΎ систСмот Π΄Π° Π±ΠΈΠ΄Π΅ Ρ…ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»Π½ΠΎ скалабилСн. Π—Π³ΠΎΠ»Π΅ΠΌΠ΅Π½ΠΎΡ‚ΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΌΠΎΡ€Π° Π΄Π° сС ΠΏΠΎΠΊΡ€ΠΈΠ΅ со Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°ΡšΠ΅ Π½Π° Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° јазли.

РСализация

РСшивмС Π΄Π° Π½Π΅ Π³ΠΎ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°ΠΌΠ΅ сСрвСрскиот Π΄Π΅Π» Π½Π° SV Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΠΎ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° 1C: Enterprise, Ρ‚ΡƒΠΊΡƒ Π΄Π° Π³ΠΎ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ посСбСн ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄, Ρ‡ΠΈΡ˜ API ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΠΎΠ²ΠΈΠΊΠ° ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° 1C. Ова бСшС Π½Π°ΠΏΡ€Π°Π²Π΅Π½ΠΎ ΠΎΠ΄ повСќС ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, ΠΎΠ΄ ΠΊΠΎΠΈ Π³Π»Π°Π²Π½Π°Ρ‚Π° бСшС Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ сакав Π΄Π° ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ°ΠΌ Ρ€Π°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 1C (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со Ρ‚Ρ€Π³ΠΎΠ²ΠΈΡ˜Π° ΠΈ смСтководство). Π Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ 1C ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° 1C:Enterprise, Π΄Π° сС Π½Π°ΠΎΡ“Π°Π°Ρ‚ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСрвСри ΠΈΡ‚Π½. Π’ΠΎ Ρ‚Π°ΠΊΠ²ΠΈ услови, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° SV ΠΊΠ°ΠΊΠΎ посСбСн ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π»ΠΎΡ†ΠΈΡ€Π°Π½ β€žΠ½Π° ΡΡ‚Ρ€Π°Π½Π°β€œ Π½Π° инсталациитС 1C Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅.

Π’Π°ΠΊΠ°, Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ SV ΠΊΠ°ΠΊΠΎ посСбСн ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄. ΠŸΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΌΠ°Π»ΠΈΡ‚Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π΄Π° Π³ΠΎ користат сСрвСрот CB ΡˆΡ‚ΠΎ Π³ΠΎ инсталиравмС Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΎΠ±Π»Π°ΠΊ (wss://1cdialog.com) Π·Π° Π΄Π° Π³ΠΈ ΠΈΠ·Π±Π΅Π³Π½Π°Ρ‚ рСТискитС Ρ‚Ρ€ΠΎΡˆΠΎΡ†ΠΈ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΈ со Π»ΠΎΠΊΠ°Π»Π½Π°Ρ‚Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π° Π½Π° сСрвСрот. Π“ΠΎΠ»Π΅ΠΌΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ смСтаат Π΄Π΅ΠΊΠ° Π΅ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡Π»ΠΈΠ²ΠΎ Π΄Π° инсталираат сопствСн CB сСрвСр Π²ΠΎ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΊΠ°ΠΏΠ°Ρ†ΠΈΡ‚Π΅Ρ‚ΠΈ. НиС користСвмС сличСн пристап Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΎΠ±Π»Π°ΠΊ SaaS ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ 1cΠ‘Π²Π΅ΠΆΠΎ - сС ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄ΡƒΠ²Π° ΠΊΠ°ΠΊΠΎ масовно ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π·Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅, Π° исто Ρ‚Π°ΠΊΠ° Π΅ распорСдСн Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ ΠΎΠ±Π»Π°ΠΊ https://1cfresh.com/.

ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°

Π—Π° Π΄Π° ја дистрибуирамС Ρ‚ΠΎΠ»Π΅Ρ€Π°Π½Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΈ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ, ќС распорСдимС Π½Π΅ Π΅Π΄Π½Π° Java Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, Ρ‚ΡƒΠΊΡƒ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ, со балансСр Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π΅Π΄ Π½ΠΈΠ². Ако Ρ‚Ρ€Π΅Π±Π° Π΄Π° ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΡ‚Π΅ ΠΏΠΎΡ€Π°ΠΊΠ° ΠΎΠ΄ јазол Π½Π° јазол, користСтС ΠΎΠ±Ρ˜Π°Π²ΡƒΠ²Π°ΡšΠ΅/ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚ΠΈ Π½Π° Hazelcast.

ΠšΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΈ сСрвСрот Π΅ ΠΏΡ€Π΅ΠΊΡƒ Π²Π΅Π±-сокСт. Π”ΠΎΠ±Ρ€ΠΎ Π΅ ΠΏΡ€ΠΈΠ»Π°Π³ΠΎΠ΄Π΅Π½ Π·Π° систСми Π²ΠΎ Ρ€Π΅Π°Π»Π½ΠΎ Π²Ρ€Π΅ΠΌΠ΅.

Дистрибуиран кСш

Π˜Π·Π±Ρ€Π°Π²ΠΌΠ΅ ΠΏΠΎΠΌΠ΅Ρ“Ρƒ Redis, Hazelcast ΠΈ Ehcache. 2015 Π΅. РСдис само ΡˆΡ‚ΠΎ објави Π½ΠΎΠ² кластСр (ΠΏΡ€Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π½ΠΎΠ², ΡΡ‚Ρ€Π°ΡˆΠ΅Π½), ΠΈΠΌΠ° Π‘Π΅Π½Ρ‚ΠΈΠ½Π΅Π» со ΠΌΠ½ΠΎΠ³Ρƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ°. Ehcache Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° сС состави Π²ΠΎ кластСр (ΠΎΠ²Π°Π° функционалност сС појави ΠΏΠΎΠ΄ΠΎΡ†Π½Π°). РСшивмС Π΄Π° Π³ΠΎ ΠΏΡ€ΠΎΠ±Π°ΠΌΠ΅ со Hazelcast 3.4.
Hazelcast Π΅ составСн Π²ΠΎ кластСр Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°. Π’ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π½Π° Π΅Π΄Π΅Π½ јазол, Ρ‚ΠΎΡ˜ Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³Ρƒ корисСн ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користи само ΠΊΠ°ΠΊΠΎ кСш - Π½Π΅ Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Π³ΠΈ исфрли ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° дискот, Π°ΠΊΠΎ Π³ΠΎ ΠΈΠ·Π³ΡƒΠ±ΠΈΡ‚Π΅ СдинствСниот јазол, Π³ΠΈ Π³ΡƒΠ±ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅. РаспорСдувамС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Hazelcasts, ΠΌΠ΅Ρ“Ρƒ ΠΊΠΎΠΈ ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½Π° копија Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. НС ΠΏΡ€Π°Π²ΠΈΠΌΠ΅ Ρ€Π΅Π·Π΅Ρ€Π²Π½Π° копија Π½Π° ΠΊΠ΅ΡˆΠΎΡ‚ - Π½Π΅ Π½ΠΈ ΠΏΡ€Π΅Ρ‡ΠΈ Ρ‚ΠΎΠ°.

Π—Π° нас, Hazelcast Π΅:

  • Π‘ΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ Π½Π° кориснички сСсии. ΠŸΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅ Π΄ΠΎΠ»Π³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° сС ΠΎΠ΄ΠΈ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° сСсија сСкој ΠΏΠ°Ρ‚, ΠΏΠ° Π·Π°Ρ‚ΠΎΠ° Π³ΠΈ ставамС ситС сСсии Π²ΠΎ Hazelcast.
  • КСш. Ако Π±Π°Ρ€Π°Ρ‚Π΅ кориснички ΠΏΡ€ΠΎΡ„ΠΈΠ», ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Ρ‚Π΅ Π³ΠΎ ΠΊΠ΅ΡˆΠΎΡ‚. Напиша Π½ΠΎΠ²Π° ΠΏΠΎΡ€Π°ΠΊΠ° - ставСтС ја Π²ΠΎ ΠΊΠ΅ΡˆΠΎΡ‚.
  • Π’Π΅ΠΌΠΈ Π·Π° ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΎΠΌΠ΅Ρ“Ρƒ инстанци Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ. ΠˆΠ°Π·ΠΎΠ»ΠΎΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° настан ΠΈ Π³ΠΎ става Π²ΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚Π° Hazelcast. Π”Ρ€ΡƒΠ³ΠΈΡ‚Π΅ апликациски јазли ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π΅Π½ΠΈ Π½Π° ΠΎΠ²Π°Π° Ρ‚Π΅ΠΌΠ° Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ°Π°Ρ‚ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°Π°Ρ‚ настанот.
  • ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Π±Ρ€Π°Π²ΠΈ. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, создавамС Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ СдинствСн ΠΊΠ»ΡƒΡ‡ (Π΅Π΄ΠΈΠ½Π΅Ρ‡Π½Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ 1C):

conversationKeyChecker.check("Π‘Π•ΠΠ—ΠžΠšΠžΠ›ΠžΠΠšΠ");

      doInClusterLock("Π‘Π•ΠΠ—ΠžΠšΠžΠ›ΠžΠΠšΠ", () -> {

          conversationKeyChecker.check("Π‘Π•ΠΠ—ΠžΠšΠžΠ›ΠžΠΠšΠ");

          createChannel("Π‘Π•ΠΠ—ΠžΠšΠžΠ›ΠžΠΠšΠ");
      });

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ²ΠΌΠ΅ Π΄Π΅ΠΊΠ° Π½Π΅ΠΌΠ° ΠΊΠ°Π½Π°Π». Ја Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ Π±Ρ€Π°Π²Π°Ρ‚Π°, ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ²ΠΌΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈ ја создадовмС. Ако Π½Π΅ ја ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π±Ρ€Π°Π²Π°Ρ‚Π° ΠΏΠΎ ΠΏΡ€Π΅Π·Π΅ΠΌΠ°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π±Ρ€Π°Π²Π°Ρ‚Π°, Ρ‚ΠΎΠ³Π°Ρˆ постои моТност Π²ΠΎ Ρ‚ΠΎΡ˜ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄Π° сС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³Π° нишка ΠΈ сСга ќС сС ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° ја создадС истата Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π° - Π½ΠΎ Ρ‚Π°Π° вСќС постои. НС ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π·Π°ΠΊΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ синхронизирано ΠΈΠ»ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ java Lock. ΠŸΡ€Π΅ΠΊΡƒ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - Π±Π°Π²Π½ΠΎ Π΅, ΠΈ ΡˆΡ‚Π΅Ρ‚Π° Π΅ Π·Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ; ΠΏΡ€Π΅ΠΊΡƒ Hazelcast - Ρ‚ΠΎΠ° Π΅ ΠΎΠ½Π° ΡˆΡ‚ΠΎ Π²ΠΈ Ρ‚Ρ€Π΅Π±Π°.

Π˜Π·Π±ΠΎΡ€ Π½Π° DBMS

ИмамС Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ искуство со Ρ€Π°Π±ΠΎΡ‚Π° со PostgreSQL ΠΈ соработка со Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‡ΠΈΡ‚Π΅ Π½Π° овој DBMS.

НС Π΅ лСсно со кластСрот PostgreSQL - постои XL, XC, Цитус, Π½ΠΎ Π³Π΅Π½Π΅Ρ€Π°Π»Π½ΠΎ, ΠΎΠ²Π° Π½Π΅ сС NoSQL-ΠΈ ΠΊΠΎΠΈ сС скалираат Π½Π°Π΄Π²ΠΎΡ€ ΠΎΠ΄ ΠΊΡƒΡ‚ΠΈΡ˜Π°Ρ‚Π°. НС Π³ΠΎ смСтавмС NoSQL Π·Π° Π³Π»Π°Π²Π½ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅; Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ бСшС ΡˆΡ‚ΠΎ Π³ΠΎ Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ Hazelcast, со кој ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½ΠΎ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π΅Π²ΠΌΠ΅.

Ако Ρ‚Ρ€Π΅Π±Π° Π΄Π° скалиратС Ρ€Π΅Π»Π°Ρ†ΠΈΠΎΠ½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚ΠΎΠ° Π·Π½Π°Ρ‡ΠΈ ΡΠ΅Ρ‡Π΅ΡšΠ΅Ρ‚ΠΎ. Како ΡˆΡ‚ΠΎ Π·Π½Π°Π΅Ρ‚Π΅, со Sharding ја Π΄Π΅Π»ΠΈΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° посСбни Π΄Π΅Π»ΠΎΠ²ΠΈ Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ сСкој ΠΎΠ΄ Π½ΠΈΠ² Π΄Π° Π±ΠΈΠ΄Π΅ поставСн Π½Π° посСбСн сСрвСр.

ΠŸΡ€Π²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ ΡΠΏΠΎΠ΄Π΅Π»ΡƒΠ²Π°ΡšΠ΅ ΠΏΡ€Π΅Ρ‚ΠΏΠΎΡΡ‚Π°Π²ΡƒΠ²Π°ΡˆΠ΅ моТност Π΄Π° ја дистрибуира сСкоја ΠΎΠ΄ Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ Π½Π° Π½Π°ΡˆΠ°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½ΠΈΠ· Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ сСрвСри Π²ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΈ. Има ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΡ€Π°ΠΊΠΈ Π½Π° сСрвСрот А - Π²Π΅ ΠΌΠΎΠ»Π°ΠΌ, ајдС Π΄Π° прСмСстимС Π΄Π΅Π» ΠΎΠ΄ ΠΎΠ²Π°Π° Ρ‚Π°Π±Π΅Π»Π° Π½Π° сСрвСрот Π‘. Оваа ΠΎΠ΄Π»ΡƒΠΊΠ° Сдноставно Π²Ρ€Π΅ΡΠΊΠ°ΡˆΠ΅ Π·Π° ΠΏΡ€Π΅Ρ€Π°Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, ΠΏΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠΌΠ΅ Π½Π° пристап со повСќС станари.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚Π΅ Π·Π° ΠΌΡƒΠ»Ρ‚ΠΈ-Π·Π°ΠΊΡƒΠΏΠ΅Ρ†, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π° Π²Π΅Π±-страницата Цитус ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ.

SV Π³ΠΈ ΠΈΠΌΠ° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΈΡ‚Π΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΈ ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊ. ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π΅ спСцифична ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π° Π½Π° Π΄Π΅Π»ΠΎΠ²Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ Π΅ ERP ΠΈΠ»ΠΈ смСтководство, со Π½Π΅Ρ˜Π·ΠΈΠ½ΠΈΡ‚Π΅ корисници ΠΈ Π΄Π΅Π»ΠΎΠ²Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. ΠŸΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊ Π΅ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° ΠΈΠ»ΠΈ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ† Π²ΠΎ Ρ‡ΠΈΠ΅ ΠΈΠΌΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ рСгистрирана Π²ΠΎ сСрвСрот SV. ΠŸΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊΠΎΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° рСгистрирани Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ ΠΎΠ²ΠΈΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π·ΠΌΠ΅Π½ΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΌΠ΅Ρ“Ρƒ сСбС. ΠŸΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊΠΎΡ‚ стана Π·Π°ΠΊΡƒΠΏΠ΅Ρ† Π²ΠΎ Π½Π°ΡˆΠΈΠΎΡ‚ систСм. ΠŸΠΎΡ€Π°ΠΊΠΈΡ‚Π΅ ΠΎΠ΄ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π»ΠΎΡ†ΠΈΡ€Π°Π°Ρ‚ Π²ΠΎ Π΅Π΄Π½Π° Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ; Π°ΠΊΠΎ Π²ΠΈΠ΄ΠΈΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊΠΎΡ‚ ΠΏΠΎΡ‡Π½Π°Π» Π΄Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΌΠ½ΠΎΠ³Ρƒ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜, Π³ΠΎ прСмСстувамС Π²ΠΎ посСбна Ρ„ΠΈΠ·ΠΈΡ‡ΠΊΠ° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (ΠΈΠ»ΠΈ Π΄ΡƒΡ€ΠΈ ΠΈ посСбСн сСрвСр Π·Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ).

ИмамС Π³Π»Π°Π²Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ сС Ρ‡ΡƒΠ²Π° Ρ€ΡƒΡ‚ΠΈΡ€Π°Ρ‡ΠΊΠ° Ρ‚Π°Π±Π΅Π»Π° со ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π»ΠΎΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ситС Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ.

Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast

Π—Π° Π΄Π° спрСчимС Π³Π»Π°Π²Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄Π° Π±ΠΈΠ΄Π΅ тСсно Π³Ρ€Π»ΠΎ, ја Ρ‡ΡƒΠ²Π°ΠΌΠ΅ Ρ€ΡƒΡ‚ΠΈΡ€Π°Ρ‡ΠΊΠ°Ρ‚Π° Ρ‚Π°Π±Π΅Π»Π° (ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ‚Π΅ чСсто ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ) Π²ΠΎ кСш.

Ако Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊΠΎΡ‚ ΠΏΠΎΡ‡Π½Π΅ Π΄Π° Π·Π°Π±Π°Π²ΡƒΠ²Π°, ќС ја прСсСчСмС Π½Π° ΠΏΠ°Ρ€Ρ‚ΠΈΡ†ΠΈΠΈ Π²Π½Π°Ρ‚Ρ€Π΅. На Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ користимС pg_pathman.

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ Π³ΡƒΠ±Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° корисничкитС ΠΏΠΎΡ€Π°ΠΊΠΈ Π΅ лошо, Π½ΠΈΠ΅ Π³ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΠΌΠ΅ Π½Π°ΡˆΠΈΡ‚Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ со Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ. ΠšΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° синхрони ΠΈ асинхрони Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° сС осигуратС Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° Π³ΡƒΠ±Π΅ΡšΠ΅ Π½Π° Π³Π»Π°Π²Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Π—Π°Π³ΡƒΠ±Π°Ρ‚Π° Π½Π° ΠΏΠΎΡ€Π°ΠΊΠ°Ρ‚Π° ќС сС случи само Π°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ°Ρ€Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΈ Π½Π΅Ρ˜Π·ΠΈΠ½Π°Ρ‚Π° синхрона Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° Π½Π΅ успСат истоврСмСно.

Ако сС ΠΈΠ·Π³ΡƒΠ±ΠΈ синхроната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°, асинхроната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° станува синхрона.
Ако Π³Π»Π°Π²Π½Π°Ρ‚Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ сС ΠΈΠ·Π³ΡƒΠ±ΠΈ, синхроната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° станува Π³Π»Π°Π²Π½Π° Π±Π°Π·Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π° асинхроната Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ° станува синхрона Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°.

ElasticsΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅

Π‘ΠΈΠ΄Π΅Ρ˜ΡœΠΈ, ΠΌΠ΅Ρ“Ρƒ Π΄Ρ€ΡƒΠ³ΠΎΡ‚ΠΎ, SV Π΅ ΠΈ гласник, ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅ Π±Ρ€Π·ΠΎ, ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ ΠΈ флСксибилно ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, зСмајќи ја ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π°Ρ‚Π°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π½Π΅ΠΏΡ€Π΅Ρ†ΠΈΠ·Π½ΠΈ ΡΠΎΠ²ΠΏΠ°Ρ“Π°ΡšΠ°. РСшивмС Π΄Π° Π½Π΅ Π³ΠΎ измислимС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ Ρ‚Ρ€ΠΊΠ°Π»ΠΎΡ‚ΠΎ ΠΈ Π΄Π° Π³ΠΎ користимС бСсплатниот ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‡ Elasticsearch, создадСн Π²Ρ€Π· основа Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° Π›ΡƒΡ†Π΅Π½. НиС, исто Ρ‚Π°ΠΊΠ°, распорСдувамС Elasticsearch Π²ΠΎ кластСр (master – data – data) Π·Π° Π΄Π° Π³ΠΈ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡ€Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π²ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜ Π½Π° нСуспСх Π½Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°.

На github најдовмС Руски ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ Π·Π° ΠΌΠΎΡ€Ρ„ΠΎΠ»ΠΎΠ³ΠΈΡ˜Π° Π·Π° Elasticsearch ΠΈ искористСтС Π³ΠΎ. Π’ΠΎ индСксот Elasticsearch складирамС ΠΊΠΎΡ€Π΅Π½ΠΈ Π½Π° Π·Π±ΠΎΡ€ΠΎΠ²ΠΈ (ΡˆΡ‚ΠΎ Π³ΠΈ ΠΎΠ΄Ρ€Π΅Π΄ΡƒΠ²Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊΠΎΡ‚) ΠΈ N-Π³Ρ€Π°ΠΌΠΈ. Како ΡˆΡ‚ΠΎ корисникот внСсува тСкст Π·Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅, Π³ΠΎ Π±Π°Ρ€Π°ΠΌΠ΅ внСсСниот тСкст ΠΌΠ΅Ρ“Ρƒ N-Π³Ρ€Π°ΠΌΠΈ. Кога ќС сС Π·Π°Ρ‡ΡƒΠ²Π° Π²ΠΎ индСксот, Π·Π±ΠΎΡ€ΠΎΡ‚ β€žΡ‚Π΅ΠΊΡΡ‚ΠΎΠ²ΠΈβ€œ ќС сС ΠΏΠΎΠ΄Π΅Π»ΠΈ Π½Π° слСднитС N-Π³Ρ€Π°ΠΌΠΈ:

[Ρ‚ΠΈΠ΅, Ρ‚Π΅ΠΊ, тСкст, тСкст, тСкстови, Π΅ΠΊ, Скс, Скс, тСкстови, кс, кс, ксти, ст, сти, Ρ‚ΠΈ],

И ΠΊΠΎΡ€Π΅Π½ΠΎΡ‚ Π½Π° Π·Π±ΠΎΡ€ΠΎΡ‚ β€žΡ‚Π΅ΠΊΡΡ‚β€œ исто Ρ‚Π°ΠΊΠ° ќС Π±ΠΈΠ΄Π΅ Π·Π°Ρ‡ΡƒΠ²Π°Π½. Овој пристап Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°Ρ‚Π΅ Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚, Π½Π° срСдината ΠΈ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° Π·Π±ΠΎΡ€ΠΎΡ‚.

Π“ΠΎΠ»Π΅ΠΌΠ°Ρ‚Π° слика

Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast
ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π΅Ρ‚Π΅ ја сликата ΠΎΠ΄ ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ со ΠΎΠ±Ρ˜Π°ΡΠ½ΡƒΠ²Π°ΡšΠ°:

  • БалансСрот ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ Π½Π° Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚; ΠΈΠΌΠ°ΠΌΠ΅ nginx, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π±ΠΈΠ»ΠΎ кој.
  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€ΠΈΡ‚Π΅ Π½Π° Java Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ ΠΊΠΎΠΌΡƒΠ½ΠΈΡ†ΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π½ΠΈ со Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€Π΅ΠΊΡƒ Hazelcast.
  • Π—Π° Ρ€Π°Π±ΠΎΡ‚Π° со Π²Π΅Π±-сокСт ΡˆΡ‚ΠΎ Π³ΠΎ користимС Netty.
  • Јава Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π΅ напишана Π²ΠΎ Java 8 ΠΈ сС состои ΠΎΠ΄ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ OSGi. ΠŸΠ»Π°Π½ΠΎΠ²ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°Π°Ρ‚ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° Java 10 ΠΈ Ρ‚Ρ€Π°Π½Π·ΠΈΡ†ΠΈΡ˜Π° ΠΊΠΎΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Развој ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅

Π’ΠΎ процСсот Π½Π° Ρ€Π°Π·Π²ΠΈΠ²Π°ΡšΠ΅ ΠΈ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° SV, Π½Π°ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ Π½Π° Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ интСрСсни карактСристики Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΡˆΡ‚ΠΎ Π³ΠΈ користимС.

Π’Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°ΡšΠ΅ ΠΈ ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°

ΠžΡΠ»ΠΎΠ±ΠΎΠ΄ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° сСкоС ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° SV Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅. УспСшно Π΅ ΠΊΠΎΠ³Π°:

  • ВСстот Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Π΅Π½Π° ΠΈ нСмашС Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΈ Π²ΠΎ сСрвисот
  • Π’Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π·Π° ΠΊΠ»ΡƒΡ‡Π½ΠΈΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ Π³ΠΎ Π½Π°Π΄ΠΌΠΈΠ½Π° ΡƒΠ΄ΠΎΠ±Π½ΠΈΠΎΡ‚ ΠΏΡ€Π°Π³
  • Π’Π»ΠΎΡˆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° пСрформанситС Π²ΠΎ спорСдба со ΠΏΡ€Π΅Ρ‚Ρ…ΠΎΠ΄Π½Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π΅ Π΅ повСќС ΠΎΠ΄ 10%

НиС ја ΠΏΠΎΠΏΠΎΠ»Π½ΡƒΠ²Π°ΠΌΠ΅ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ со ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - Π·Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ ΠΎΠ²Π°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π½Π°Ρ˜Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΠΎΡ‚ ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΠΊ ΠΎΠ΄ производствСниот сСрвСр, Π³ΠΈ ΠΌΠ½ΠΎΠΆΠΈΠΌΠ΅ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ Π±Ρ€ΠΎΠ΅Π²ΠΈ со 5 (Π±Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ, дискусии, корисници) ΠΈ Π³ΠΎ тСстирамС Π½Π° Ρ‚ΠΎΡ˜ Π½Π°Ρ‡ΠΈΠ½.

НиС спровСдувамС Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° систСмот Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ†ΠΈΡ˜Π° Π²ΠΎ Ρ‚Ρ€ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:

  1. стрСс тСст
  2. Π‘Π°ΠΌΠΎ врски
  3. Π Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ

Π—Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° стрСс-тСстот, стартувамС Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ стотици нишки ΠΈ Ρ‚ΠΈΠ΅ Π³ΠΎ Π²Ρ‡ΠΈΡ‚ΡƒΠ²Π°Π°Ρ‚ систСмот Π±Π΅Π· Π·Π°ΠΏΠΈΡ€Π°ΡšΠ΅: ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΡ€Π°ΠΊΠΈ, ΠΊΡ€Π΅ΠΈΡ€Π°ΡšΠ΅ дискусии, ΠΏΡ€ΠΈΠΌΠ°ΡšΠ΅ листа Π½Π° ΠΏΠΎΡ€Π°ΠΊΠΈ. Π‘ΠΈΠΌΡƒΠ»ΠΈΡ€Π°ΠΌΠ΅ Π΄Π΅Ρ˜ΡΡ‚Π²Π° Π½Π° ΠΎΠ±ΠΈΡ‡Π½ΠΈΡ‚Π΅ корисници (Π΄ΠΎΠ±ΠΈΡ˜Ρ‚Π΅ список со ΠΌΠΎΠΈ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈ ΠΏΠΎΡ€Π°ΠΊΠΈ, ΠΏΠΈΡˆΡƒΠ²Π°Ρ˜Ρ‚Π΅ Π½Π΅ΠΊΠΎΠΌΡƒ) ΠΈ софтвСрски Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ˜Π° (прСнСсуватС ΠΏΠ°ΠΊΠ΅Ρ‚ со Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ˜Π°, ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΡƒΠ²Π°Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅).

На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π° Π΄Π΅Π» ΠΎΠ΄ стрСс тСстот:

  • ΠšΠΎΡ€ΠΈΡΠ½ΠΈΠΊΠΎΡ‚ сС Π½Π°Ρ˜Π°Π²ΡƒΠ²Π°
    • Π“ΠΈ Π±Π°Ρ€Π° Π²Π°ΡˆΠΈΡ‚Π΅ Π½Π΅ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ΠΈ дискусии
    • 50% Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎΡΡ‚ Π΄Π° Ρ‡ΠΈΡ‚Π°Π°Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠΈ
    • 50% Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎΡΡ‚ Π΄Π° ΠΏΠΈΡˆΡƒΠ²Π°Π°Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠΈ
    • Π‘Π»Π΅Π΄Π΅Π½ корисник:
      • Има 20% шанса Π΄Π° создадС Π½ΠΎΠ²Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π°
      • Π‘Π»ΡƒΡ‡Π°Ρ˜Π½ΠΎ ΠΈΠ·Π±ΠΈΡ€Π° која Π±ΠΈΠ»ΠΎ ΠΎΠ΄ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ дискусии
      • Π’Π»Π΅Π³ΡƒΠ²Π° Π²Π½Π°Ρ‚Ρ€Π΅
      • Π‘Π°Ρ€Π° ΠΏΠΎΡ€Π°ΠΊΠΈ, кориснички ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ
      • Π‘ΠΎΠ·Π΄Π°Π²Π° ΠΏΠ΅Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠΈ ΡƒΠΏΠ°Ρ‚Π΅Π½ΠΈ Π΄ΠΎ ΡΠ»ΡƒΡ‡Π°Ρ˜Π½ΠΈ корисници ΠΎΠ΄ ΠΎΠ²Π°Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π°
      • Ја Π½Π°ΠΏΡƒΡˆΡ‚Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π°Ρ‚Π°
      • Π‘Π΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡƒΠ²Π° 20 ΠΏΠ°Ρ‚ΠΈ
      • Π‘Π΅ ΠΎΠ΄Ρ˜Π°Π²ΡƒΠ²Π°, сС Π²Ρ€Π°ΡœΠ° Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° сцСнариото

    • Π’ΠΎ систСмот Π²Π»Π΅Π³ΡƒΠ²Π° Ρ‡Π΅Ρ‚Π±ΠΎΡ‚ (Π΅ΠΌΡƒΠ»ΠΈΡ€Π° ΠΏΠΎΡ€Π°ΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ‚ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°)
      • Има 50% шанса Π΄Π° создадС Π½ΠΎΠ² ΠΊΠ°Π½Π°Π» Π·Π° Ρ€Π°Π·ΠΌΠ΅Π½Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ (ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° Π΄ΠΈΡΠΊΡƒΡΠΈΡ˜Π°)
      • 50% Π²Π΅Ρ€ΠΎΡ˜Π°Ρ‚Π½ΠΎΡΡ‚ Π΄Π° Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ ΠΏΠΎΡ€Π°ΠΊΠ° Π΄ΠΎ нСкој ΠΎΠ΄ постоСчкитС ΠΊΠ°Π½Π°Π»ΠΈ

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΎΡ‚ΠΎ β€žΠ‘Π°ΠΌΠΎ Π²Ρ€ΡΠΊΠΈβ€œ сС појави со ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°. ΠŸΠΎΡΡ‚ΠΎΠΈ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°: корисницитС Π³ΠΎ ΠΏΠΎΠ²Ρ€Π·Π°Π° систСмот, Π½ΠΎ сè ΡƒΡˆΡ‚Π΅ Π½Π΅ сС Π²ΠΊΠ»ΡƒΡ‡ΠΈΡ˜Π°. БСкој корисник Π³ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° ΠΊΠΎΠΌΠΏΡ˜ΡƒΡ‚Π΅Ρ€ΠΎΡ‚ Π²ΠΎ 09:00 часот Π½Π°ΡƒΡ‚Ρ€ΠΎ, воспоставува врска со сСрвСрот ΠΈ ΠΌΠΎΠ»Ρ‡ΠΈ. ОвиС ΠΌΠΎΠΌΡ†ΠΈ сС опасни, Π³ΠΈ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³Ρƒ - СдинствСнитС ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΡˆΡ‚ΠΎ Π³ΠΈ ΠΈΠΌΠ°Π°Ρ‚ сС ΠŸΠ˜ΠΠ“/ΠŸΠžΠΠ“, Π½ΠΎ ја Π·Π°Π΄Ρ€ΠΆΡƒΠ²Π°Π°Ρ‚ врската со сСрвСрот (Π½Π΅ ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° ја Π·Π°Π΄Ρ€ΠΆΠ°Ρ‚ - ΡˆΡ‚ΠΎ Π°ΠΊΠΎ ΠΈΠΌΠ° Π½ΠΎΠ²Π° ΠΏΠΎΡ€Π°ΠΊΠ°). ВСстот Ρ€Π΅ΠΏΡ€ΠΎΠ΄ΡƒΡ†ΠΈΡ€Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ³Π° Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Ρ‚Π°ΠΊΠ²ΠΈ корисници сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°Π°Ρ‚ Π΄Π° сС Π»ΠΎΠ³ΠΈΡ€Π°Π°Ρ‚ Π½Π° систСмот Π·Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° час. Π‘Π»ΠΈΡ‡Π½ΠΎ Π΅ Π½Π° стрСс тСст, Π½ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΠΎΡ‚ фокус Π΅ Ρ‚ΠΎΠΊΠΌΡƒ Π½Π° овој ΠΏΡ€Π² Π²Π»Π΅Π· - Π·Π° Π΄Π° Π½Π΅ΠΌΠ° нСуспСси (Π»ΠΈΡ†Π΅Ρ‚ΠΎ Π½Π΅ Π³ΠΎ користи систСмот, Π° Ρ‚ΠΎΡ˜ вСќС ΠΏΠ°Ρ“Π° - Ρ‚Π΅ΡˆΠΊΠΎ Π΅ Π΄Π° сС замисли Π½Π΅ΡˆΡ‚ΠΎ полошо).

Π‘ΠΊΡ€ΠΈΠΏΡ‚Π°Ρ‚Π° Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° ΠΎΠ΄ ΠΏΡ€Π²ΠΎΡ‚ΠΎ Π»Π°Π½ΡΠΈΡ€Π°ΡšΠ΅. Π‘ΠΏΡ€ΠΎΠ²Π΅Π΄ΠΎΠ²ΠΌΠ΅ стрСс-тСст ΠΈ Π±Π΅Π²ΠΌΠ΅ сигурни Π΄Π΅ΠΊΠ° систСмот Π½Π΅ успорува Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° ΠΊΠΎΡ€Π΅ΡΠΏΠΎΠ½Π΄Π΅Π½Ρ†ΠΈΡ˜Π°Ρ‚Π°. Но, дојдоа корисници ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€ΠΎΠΏΠ°Ρ“Π° ΠΏΠΎΡ€Π°Π΄ΠΈ Ρ‚Π°Ρ˜ΠΌΠ°ΡƒΡ‚. ΠŸΡ€ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Π°Ρ†ΠΈΡ˜Π° користСвмС / dev / ΡΠ»ΡƒΡ‡Π°Ρ˜Π½ΠΎ, ΡˆΡ‚ΠΎ Π΅ ΠΏΠΎΠ²Ρ€Π·Π°Π½ΠΎ со Π΅Π½Ρ‚Ρ€ΠΎΠΏΠΈΡ˜Π°Ρ‚Π° Π½Π° систСмот. Π‘Π΅Ρ€Π²Π΅Ρ€ΠΎΡ‚ нСмашС Π²Ρ€Π΅ΠΌΠ΅ Π΄Π° Π°ΠΊΡƒΠΌΡƒΠ»ΠΈΡ€Π° Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π΅Π½Ρ‚Ρ€ΠΎΠΏΠΈΡ˜Π° ΠΈ ΠΊΠΎΠ³Π° бСшС ΠΏΠΎΠ±Π°Ρ€Π°Π½ Π½ΠΎΠ² SecureRandom, Ρ‚ΠΎΡ˜ Π·Π°ΠΌΡ€Π·Π½Π° дСсСтици сСкунди. Има ΠΌΠ½ΠΎΠ³Ρƒ Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° ΠΈΠ·Π»Π΅Π· ΠΎΠ΄ ΠΎΠ²Π°Π° ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π°, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€: ΠΏΡ€Π΅Ρ„Ρ€Π»Π΅Ρ‚Π΅ сС Π½Π° ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ Π±Π΅Π·Π±Π΅Π΄Π½ΠΈΠΎΡ‚ /dev/urandom, ΠΈΠ½ΡΡ‚Π°Π»ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΡΠΏΠ΅Ρ†ΠΈΡ˜Π°Π»Π½Π° Ρ‚Π°Π±Π»Π° ΡˆΡ‚ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° Π΅Π½Ρ‚Ρ€ΠΎΠΏΠΈΡ˜Π°, Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚Π΅ ΡΠ»ΡƒΡ‡Π°Ρ˜Π½ΠΈ Π±Ρ€ΠΎΠ΅Π²ΠΈ ΠΎΠ΄Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π³ΠΈ Π²ΠΎ Π±Π°Π·Π΅Π½. ΠŸΡ€ΠΈΠ²Ρ€Π΅ΠΌΠ΅Π½ΠΎ Π³ΠΎ Π·Π°Ρ‚Π²ΠΎΡ€ΠΈΠ²ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΡ‚ со Π±Π°Π·Π΅Π½ΠΎΡ‚, Π½ΠΎ ΠΎΡ‚Ρ‚ΠΎΠ³Π°Ρˆ спровСдувамС посСбСн тСст Π·Π° Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€Π°ΡšΠ΅ Π½ΠΎΠ²ΠΈ ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ.

НиС користимС ΠΊΠ°ΠΊΠΎ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ MΠ΅ΠΌΠ΅Ρ‚Ρ€. НС Π·Π½Π°Π΅ ΠΊΠ°ΠΊΠΎ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ со websocket; ΠΌΡƒ Ρ‚Ρ€Π΅Π±Π° ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ. ΠŸΡ€Π²ΠΈΡ‚Π΅ Π²ΠΎ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΠ΄ ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ β€žjmeter websocketβ€œ сС: написи ΠΎΠ΄ BlazeMeter, ΠΊΠΎΠΈ ΠΏΡ€Π΅ΠΏΠΎΡ€Π°Ρ‡ΡƒΠ²Π°Π°Ρ‚ ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ ΠΎΠ΄ ΠœΠ°Ρ†ΠΈΠ΅Ρ˜ ЗалСски.

ΠžΡ‚Ρ‚ΡƒΠΊΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅.

РСчиси вСднаш ΠΎΡ‚ΠΊΠ°ΠΊΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π°Π²ΠΌΠ΅ сСриозно Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, ΠΎΡ‚ΠΊΡ€ΠΈΠ²ΠΌΠ΅ Π΄Π΅ΠΊΠ° JMeter ΠΏΠΎΡ‡Π½Π° Π΄Π° ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡƒΠ²Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°.

ΠŸΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊΠΎΡ‚ Π΅ посСбна Π³ΠΎΠ»Π΅ΠΌΠ° ΠΏΡ€ΠΈΠΊΠ°Π·Π½Π°; со 176 Ρ•Π²Π΅Π·Π΄ΠΈ, ΠΈΠΌΠ° 132 Π²ΠΈΠ»ΡƒΡˆΠΊΠΈ Π½Π° github. Π‘Π°ΠΌΠΈΠΎΡ‚ Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ сС ΠΎΠ±Π²Ρ€Π·Π°Π» Π½Π° Ρ‚ΠΎΠ° ΠΎΠ΄ 2015 Π³ΠΎΠ΄ΠΈΠ½Π° (Π³ΠΎ Π·Π΅Π΄ΠΎΠ²ΠΌΠ΅ Π²ΠΎ 2015 Π³ΠΎΠ΄ΠΈΠ½Π°, Ρ‚ΠΎΠ³Π°Ρˆ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ° сомнСТи), Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со github Π²ΠΎ врска со ΠΏΡ€ΠΎΡ‚Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°, 7 Π½Π΅Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ΠΈ Π±Π°Ρ€Π°ΡšΠ° Π·Π° ΠΏΠΎΠ²Π»Π΅ΠΊΡƒΠ²Π°ΡšΠ΅.
Ако ΠΎΠ΄Π»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π° ΠΈΠ·Π²Ρ€ΡˆΠΈΡ‚Π΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅ Π·Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ овој ΠΏΡ€ΠΈΠΊΠ»ΡƒΡ‡ΠΎΠΊ, Π²Π΅ ΠΌΠΎΠ»ΠΈΠΌΠ΅ ΠΎΠ±Ρ€Π½Π΅Ρ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° слСднитС дискусии:

  1. Π’ΠΎ ΠΎΠΏΠΊΡ€ΡƒΠΆΡƒΠ²Π°ΡšΠ΅ со повСќС нишки, сС ΠΊΠΎΡ€ΠΈΡΡ‚Π΅ΡˆΠ΅ ΠΎΠ±ΠΈΡ‡Π½Π° LinkedList, ΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΎΡ‚ бСшС ΠΠŸΠ• Π²ΠΎ Ρ‚Ρ€Π°Π΅ΡšΠ΅. Ова ΠΌΠΎΠΆΠ΅ Π΄Π° сС Ρ€Π΅ΡˆΠΈ ΠΈΠ»ΠΈ со ΠΏΡ€Π΅Ρ„Ρ€Π»ΡƒΠ²Π°ΡšΠ΅ Π½Π° ConcurrentLinkedDeque ΠΈΠ»ΠΈ со синхронизирани Π±Π»ΠΎΠΊΠΎΠ²ΠΈ. Ја ΠΈΠ·Π±Ρ€Π°Π²ΠΌΠ΅ ΠΏΡ€Π²Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π·Π° сСбС (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. ΠŸΡ€ΠΎΡ‚Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°; ΠΏΡ€ΠΈ ΠΈΡΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΡšΠ΅, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΡ‚Π΅ Π·Π° врската Π½Π΅ сС Π±Ρ€ΠΈΡˆΠ°Ρ‚ (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. Π’ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠΎΡ‚ Π½Π° стриминг (ΠΊΠΎΠ³Π° Π²Π΅Π±-сокСтот Π½Π΅ Π΅ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½ Π½Π° ΠΊΡ€Π°Ρ˜ΠΎΡ‚ ΠΎΠ΄ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΊΠΎΡ‚, Π½ΠΎ сС користи ΠΏΠΎΠ΄ΠΎΡ†Π½Π° Π²ΠΎ ΠΏΠ»Π°Π½ΠΎΡ‚), ΡˆΠ΅ΠΌΠΈΡ‚Π΅ Π½Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡ€ Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Ова Π΅ Π΅Π΄Π½ΠΎ ΠΎΠ΄ ΠΎΠ½ΠΈΠ΅ Π½Π° github. Π¨Ρ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅:

  1. ΠŸΡ€Π΅Π·Π΅Π»Π΅ Π²ΠΈΠ»ΡƒΡˆΠΊΠ° Π•Π»ΠΈΡ€Π°Π½ Коган (@elyrank) – Π³ΠΈ ΠΏΠΎΠΏΡ€Π°Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ 1 ΠΈ 3
  2. РСшСн ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ 2
  3. АТурирана Π΄ΠΈΠ³Π° ΠΎΠ΄ 9.2.14 Π΄ΠΎ 9.3.12
  4. Π—Π°Π²ΠΈΡ‚ΠΊΠ°Π½ SimpleDateFormat Π²ΠΎ ThreadLocal; SimpleDateFormat Π½Π΅ Π΅ Π±Π΅Π·Π±Π΅Π΄Π΅Π½ Π·Π° нишки, ΡˆΡ‚ΠΎ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ NPE ΠΏΡ€ΠΈ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅
  5. ΠŸΠΎΠΏΡ€Π°Π²Π΅Π½ΠΎ Π΅ Π΄Ρ€ΡƒΠ³ΠΎ ΠΈΡΡ‚Π΅ΠΊΡƒΠ²Π°ΡšΠ΅ Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° (врската бСшС ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎ Π·Π°Ρ‚Π²ΠΎΡ€Π΅Π½Π° ΠΊΠΎΠ³Π° бСшС исклучСна)

А сСпак Ρ‚Π΅Ρ‡Π΅!

ΠœΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° ΠΏΠΎΡ‡Π½Π° Π΄Π° истСкува Π½Π΅ Π·Π° Π΅Π΄Π΅Π½ Π΄Π΅Π½, Ρ‚ΡƒΠΊΡƒ Π·Π° Π΄Π²Π°. Апсолутно нСмашС Π²Ρ€Π΅ΠΌΠ΅, ΠΏΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° лансирамС ΠΏΠΎΠΌΠ°Π»ΠΊΡƒ Ρ‚Π΅ΠΌΠΈ, Π½ΠΎ Π½Π° Ρ‡Π΅Ρ‚ΠΈΡ€ΠΈ Π°Π³Π΅Π½Ρ‚ΠΈ. Ова Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° Π±ΠΈΠ΄Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½ΠΎ Π±Π°Ρ€Π΅ΠΌ Π΅Π΄Π½Π° Π½Π΅Π΄Π΅Π»Π°.

Поминаа два дСна...

Π‘Π΅Π³Π° Hazelcast Π΅ Π±Π΅Π· ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°. Π”Π½Π΅Π²Π½ΠΈΡ†ΠΈΡ‚Π΅ ΠΏΠΎΠΊΠ°ΠΆΠ°Π° Π΄Π΅ΠΊΠ° ΠΏΠΎ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄Π΅Π½Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅, Hazelcast ΠΏΠΎΡ‡Π½Π° Π΄Π° сС ΠΆΠ°Π»ΠΈ Π½Π° нСдостаток Π½Π° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°, Π° ΠΏΠΎ Π½Π΅ΠΊΠΎΠ΅ Π²Ρ€Π΅ΠΌΠ΅ кластСрот сС распадна, Π° Ρ˜Π°Π·Π»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ˜Π° Π΄Π° ΡƒΠΌΠΈΡ€Π°Π°Ρ‚ Π΅Π΄Π΅Π½ ΠΏΠΎ Π΅Π΄Π΅Π½. Π“ΠΎ ΠΏΠΎΠ²Ρ€Π·Π°Π²ΠΌΠ΅ JVisualVM со лСшник ΠΈ Π²ΠΈΠ΄ΠΎΠ²ΠΌΠ΅ β€žΠΏΠΈΠ»Π° ΡˆΡ‚ΠΎ сС ΠΊΡ€Π΅Π²Π°β€œ - Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ Π³ΠΎ ΠΏΠΎΠ²ΠΈΠΊΡƒΠ²Π°ΡˆΠ΅ GC, Π½ΠΎ Π½Π΅ моТСшС Π΄Π° ја исчисти ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π°.

Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast

Π‘Π΅ испостави Π΄Π΅ΠΊΠ° Π²ΠΎ hazelcast 3.4, ΠΏΡ€ΠΈ Π±Ρ€ΠΈΡˆΠ΅ΡšΠ΅ Π½Π° ΠΌΠ°ΠΏΠ° / multiMap (map.destroy()), ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°Ρ‚Π° Π½Π΅ Π΅ цСлосно ослободСна:

github.com/hazelcast/hazelcast/issues/6317
github.com/hazelcast/hazelcast/issues/4888

Π“Ρ€Π΅ΡˆΠΊΠ°Ρ‚Π° сСга Π΅ ΠΏΠΎΠΏΡ€Π°Π²Π΅Π½Π° Π²ΠΎ 3.5, Π½ΠΎ Ρ‚ΠΎΠ³Π°Ρˆ бСшС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΎΠ²ΠΌΠ΅ Π½ΠΎΠ²ΠΈ ΠΌΡƒΠ»Ρ‚ΠΈΠΌΠ°ΠΏΠΈ со Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΈ имиња ΠΈ Π³ΠΈ ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Π²ΠΌΠ΅ спорСд Π½Π°ΡˆΠ°Ρ‚Π° Π»ΠΎΠ³ΠΈΠΊΠ°. ΠšΠΎΠ΄ΠΎΡ‚ изглСдашС ΠΎΡ‚ΠΏΡ€ΠΈΠ»ΠΈΠΊΠ° Π²Π°ΠΊΠ°:

public void join(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.put(auth.getUserId(), auth);
}

public void leave(Authentication auth, String sub) {
    MultiMap<UUID, Authentication> sessions = instance.getMultiMap(sub);
    sessions.remove(auth.getUserId(), auth);

    if (sessions.size() == 0) {
        sessions.destroy();
    }
}

Π’ΠΈΠ·ΠΎΠ²:

service.join(auth1, "ΠΠžΠ’Π«Π•_Π‘ΠžΠžΠ‘Π©Π•ΠΠ˜Π―_Π’_ΠžΠ‘Π‘Π£Π–Π”Π•ΠΠ˜Π˜_UUID1");
service.join(auth2, "ΠΠžΠ’Π«Π•_Π‘ΠžΠžΠ‘Π©Π•ΠΠ˜Π―_Π’_ΠžΠ‘Π‘Π£Π–Π”Π•ΠΠ˜Π˜_UUID1");

multiMap бСшС ΠΊΡ€Π΅ΠΈΡ€Π°Π½ Π·Π° сСкоја ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π° ΠΈ сС Π±Ρ€ΠΈΡˆΠ΅ ΠΊΠΎΠ³Π° Π½Π΅ бСшС ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ. РСшивмС Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π΅ΠΌΠ΅ со Мапа , ΠΊΠ»ΡƒΡ‡ΠΎΡ‚ ќС Π±ΠΈΠ΄Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π°Ρ‚Π°, Π° врСдноститС ќС Π±ΠΈΠ΄Π°Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° сСсии (ΠΎΠ΄ ΠΊΠΎΠΈ ΠΏΠΎΡ‚ΠΎΠ° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ±ΠΈΠ΅Ρ‚Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° корисници, Π΄ΠΎΠΊΠΎΠ»ΠΊΡƒ Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ).

public void join(Authentication auth, String sub) {
    addValueToMap(sub, auth.getSessionId());
}

public void leave(Authentication auth, String sub) { 
    removeValueFromMap(sub, auth.getSessionId());
}

Π’Π°Π±Π΅Π»ΠΈΡ‚Π΅ сС ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈΡ˜Π°.

Како ΠΈ Π·ΠΎΡˆΡ‚ΠΎ напишавмС скалабилна услуга со Π³ΠΎΠ»Π΅ΠΌΠΎ ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π·Π° 1C: Enterprise: Java, PostgreSQL, Hazelcast

Π¨Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π½Π°ΡƒΡ‡ΠΈΠ²ΠΌΠ΅ Π·Π° Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅?

  1. JSR223 Ρ‚Ρ€Π΅Π±Π° Π΄Π° Π±ΠΈΠ΄Π΅ напишан Π²ΠΎ ΠΆΠ»Π΅Π± ΠΈ Π΄Π° Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π° кСш Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΡ˜Π° - Ρ‚ΠΎΠ° Π΅ ΠΌΠ½ΠΎΠ³Ρƒ ΠΏΠΎΠ±Ρ€Π·ΠΎ. Π›ΠΈΠ½ΠΊ.
  2. Π“Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈΡ‚Π΅ Π½Π° Jmeter-Plugins сС полСсни Π·Π° Ρ€Π°Π·Π±ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ΄ стандарднитС. Π›ΠΈΠ½ΠΊ.

Π—Π° Π½Π°ΡˆΠ΅Ρ‚ΠΎ искуство со Hazelcast

Hazelcast бСшС Π½ΠΎΠ² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ Π·Π° нас, ΠΏΠΎΡ‡Π½Π°Π²ΠΌΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΠΌΠ΅ со Π½Π΅Π³ΠΎ ΠΎΠ΄ Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 3.4.1, сСга Π½Π°ΡˆΠΈΠΎΡ‚ производствСн сСрвСр Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π²Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° 3.9.2 (Π²ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΡ‚ Π½Π° ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅, Π½Π°Ρ˜Π½ΠΎΠ²Π°Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° Hazelcast Π΅ 3.10).

Π“Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΡšΠ΅ Π˜Π”

ΠŸΠΎΡ‡Π½Π°Π²ΠΌΠ΅ со ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π½Π° Ρ†Π΅Π»ΠΈ Π±Ρ€ΠΎΠ΅Π²ΠΈ. Π”Π° замислимС Π΄Π΅ΠΊΠ° Π½ΠΈ Ρ‚Ρ€Π΅Π±Π° ΡƒΡˆΡ‚Π΅ Π΅Π΄Π΅Π½ Π”ΠΎΠ»Π³ Π·Π° Π½ΠΎΠ² Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚. РСдослСдот Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π΅ Π΅ ΠΏΠΎΠ³ΠΎΠ΄Π½Π°, Ρ‚Π°Π±Π΅Π»ΠΈΡ‚Π΅ сС Π²ΠΊΠ»ΡƒΡ‡Π΅Π½ΠΈ Π²ΠΎ ΠΏΠΎΠ΄Π΅Π»Π±Π°Ρ‚Π° - ΠΈΠ·Π»Π΅Π³ΡƒΠ²Π° Π΄Π΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΠΎΡ€Π°ΠΊΠ° ID=1 Π²ΠΎ DB1 ΠΈ ΠΏΠΎΡ€Π°ΠΊΠ° ID=1 Π²ΠΎ DB2, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ја ставитС ΠΎΠ²Π°Π° ID Π²ΠΎ Elasticsearch, Π½ΠΈΡ‚Ρƒ Π²ΠΎ Hazelcast , Π½ΠΎ Π½Π°Ρ˜Π»ΠΎΡˆΠΎΡ‚ΠΎ Π΅ Π°ΠΊΠΎ сакатС Π΄Π° Π³ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Π΄Π²Π΅ Π±Π°Π·ΠΈ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π²ΠΎ Π΅Π΄Π½Π° (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄Π° ΠΎΠ΄Π»ΡƒΡ‡ΠΈΡ‚Π΅ Π΄Π΅ΠΊΠ° Π΅Π΄Π½Π° Π±Π°Π·Π° Π΅ Π΄ΠΎΠ²ΠΎΠ»Π½Π° Π·Π° ΠΎΠ²ΠΈΠ΅ ΠΏΡ€Π΅Ρ‚ΠΏΠ»Π°Ρ‚Π½ΠΈΡ†ΠΈ). ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ AtomicLongs Π½Π° Hazelcast ΠΈ Π΄Π° Π³ΠΎ Π·Π°Π΄Ρ€ΠΆΠΈΡ‚Π΅ Π±Ρ€ΠΎΡ˜Π°Ρ‡ΠΎΡ‚ Ρ‚Π°ΠΌΡƒ, Π° ΠΏΠΎΡ‚ΠΎΠ° пСрформанситС Π·Π° добивањС Π½Π° Π½ΠΎΠ² ID сС Π·Π³ΠΎΠ»Π΅ΠΌΡƒΠ²Π°Π°Ρ‚ ΠΈ Π΄ΠΎΠ±ΠΈΠ²Π°Ρ‚Π΅ плус Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π·Π° Π±Π°Ρ€Π°ΡšΠ΅ Π΄ΠΎ Hazelcast. Но, Hazelcast ΠΈΠΌΠ° Π½Π΅ΡˆΡ‚ΠΎ ΠΏΠΎΠΎΠΏΡ‚ΠΈΠΌΠ°Π»Π½ΠΎ - FlakeIdGenerator. ΠŸΡ€ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ΠΈΡ€Π°ΡšΠ΅ Π½Π° сСкој ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΈΠΌ сС Π΄Π°Π²Π° опсСг Π½Π° ID, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€Π²ΠΈΠΎΡ‚ – ΠΎΠ΄ 1 Π΄ΠΎ 10, Π²Ρ‚ΠΎΡ€ΠΈΠΎΡ‚ – ΠΎΠ΄ 000 Π΄ΠΎ 10 ΠΈΡ‚Π½. Π‘Π΅Π³Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ ΠΌΠΎΠΆΠ΅ сам Π΄Π° ΠΈΠ·Π΄Π°Π²Π° Π½ΠΎΠ²ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈ Π΄ΠΎΠ΄Π΅ΠΊΠ° Π½Π΅ Π·Π°Π²Ρ€ΡˆΠΈ опсСгот ΡˆΡ‚ΠΎ ΠΌΡƒ Π΅ ΠΈΠ·Π΄Π°Π΄Π΅Π½. Π Π°Π±ΠΎΡ‚ΠΈ Π±Ρ€Π·ΠΎ, Π½ΠΎ ΠΊΠΎΠ³Π° ќС ја рСстартиратС Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° (ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΡ‚ Hazelcast), Π·Π°ΠΏΠΎΡ‡Π½ΡƒΠ²Π° Π½ΠΎΠ²Π° Π½ΠΈΠ·Π° - ΠΎΡ‚Ρ‚ΡƒΠΊΠ° ΠΈ ΠΏΡ€Π΅ΡΠΊΠΎΠΊΠ½ΡƒΠ²Π°ΡšΠ°Ρ‚Π° ΠΈΡ‚Π½. ΠŸΠΎΠΊΡ€Π°Ρ˜ Ρ‚ΠΎΠ°, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅ навистина Π½Π΅ Ρ€Π°Π·Π±ΠΈΡ€Π°Π°Ρ‚ Π·ΠΎΡˆΡ‚ΠΎ Π˜Π” сС Ρ†Π΅Π»ΠΈ Π±Ρ€ΠΎΠ΅Π²ΠΈ, Π½ΠΎ сС Ρ‚ΠΎΠ»ΠΊΡƒ нСконзистСнтни. Π˜Π·ΠΌΠ΅Ρ€ΠΈΠ²ΠΌΠ΅ сè ΠΈ сС ΠΏΡ€Π΅Ρ„Ρ€Π»ΠΈΠ²ΠΌΠ΅ Π½Π° UUID.

ΠŸΠ°Ρ‚Π΅ΠΌ, Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ сакаат Π΄Π° Π±ΠΈΠ΄Π°Ρ‚ ΠΊΠ°ΠΊΠΎ Π’Π²ΠΈΡ‚Π΅Ρ€, постои Ρ‚Π°ΠΊΠ²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Snowcast - ΠΎΠ²Π° Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ˜Π° Π½Π° Snowflake Π½Π° Π²Ρ€Π²ΠΎΡ‚ Π½Π° Hazelcast. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ ΠΎΠ²Π΄Π΅:

github.com/noctarius/snowcast
github.com/twitter/snowflake

Но, Π½ΠΈΠ΅ вСќС Π½Π΅ сС ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠΈΠ²ΠΌΠ΅ Π΄ΠΎ Ρ‚ΠΎΠ°.

TransactionMap.Π·Π°ΠΌΠ΅Π½ΠΈ

Π£ΡˆΡ‚Π΅ Π΅Π΄Π½ΠΎ ΠΈΠ·Π½Π΅Π½Π°Π΄ΡƒΠ²Π°ΡšΠ΅: TransactionalMap.replace Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ. Π•Π²Π΅ Π΅Π΄Π΅Π½ тСст:

@Test
public void replaceInMap_putsAndGetsInsideTransaction() {

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            context.getMap("map").put("key", "oldValue");
            context.getMap("map").replace("key", "oldValue", "newValue");
            
            String value = (String) context.getMap("map").get("key");
            assertEquals("newValue", value);

            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }        
    });
}

Expected : newValue
Actual : oldValue

ΠœΠΎΡ€Π°Π² Π΄Π° напишам своја Π·Π°ΠΌΠ΅Π½Π° ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ getForUpdate:

protected <K,V> boolean replaceInMap(String mapName, K key, V oldValue, V newValue) {
    TransactionalTaskContext context = HazelcastTransactionContextHolder.getContext();
    if (context != null) {
        log.trace("[CACHE] Replacing value in a transactional map");
        TransactionalMap<K, V> map = context.getMap(mapName);
        V value = map.getForUpdate(key);
        if (oldValue.equals(value)) {
            map.put(key, newValue);
            return true;
        }

        return false;
    }
    log.trace("[CACHE] Replacing value in a not transactional map");
    IMap<K, V> map = hazelcastInstance.getMap(mapName);
    return map.replace(key, oldValue, newValue);
}

Π’Π΅ΡΡ‚ΠΈΡ€Π°Ρ˜Ρ‚Π΅ Π½Π΅ само Ρ€Π΅Π΄ΠΎΠ²Π½ΠΈ структури Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Ρ‚ΡƒΠΊΡƒ ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ трансакциски Π²Π΅Ρ€Π·ΠΈΠΈ. Π‘Π΅ случува IMap Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π½ΠΎ TransactionalMap повСќС Π΄Π° Π½Π΅ постои.

Π’ΠΌΠ΅Ρ‚Π½Π΅Ρ‚Π΅ Π½ΠΎΠ² JAR Π±Π΅Π· ΠΏΡ€Π΅ΠΊΠΈΠ½ΠΈ

ΠŸΡ€Π²ΠΎ, Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° снимамС ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ ΠΎΠ΄ Π½Π°ΡˆΠΈΡ‚Π΅ часови Π²ΠΎ Hazelcast. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠΌΠ°ΠΌΠ΅ класа Application, сакамС Π΄Π° ја Π·Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅. Π—Π°Ρ‡ΡƒΠ²Π°Ρ˜:

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
map.set(id, application);

Π§ΠΈΡ‚Π°ΠΌΠ΅:

IMap<UUID, Application> map = hazelcastInstance.getMap("application");
return map.get(id);

Π‘Γ¨ Ρ€Π°Π±ΠΎΡ‚ΠΈ. ΠŸΠΎΡ‚ΠΎΠ° Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π° ΠΈΠ·Π³Ρ€Π°Π΄ΠΈΠΌΠ΅ индСкс Π²ΠΎ Hazelcast Π·Π° Π΄Π° ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΠΌΠ΅ ΠΏΠΎ:

map.addIndex("subscriberId", false);

И ΠΊΠΎΠ³Π° ΠΏΠΈΡˆΡƒΠ²Π°Π° Π½ΠΎΠ² Π΅Π½Ρ‚ΠΈΡ‚Π΅Ρ‚, Ρ‚ΠΈΠ΅ ΠΏΠΎΡ‡Π½Π°Π° Π΄Π° Π΄ΠΎΠ±ΠΈΠ²Π°Π°Ρ‚ ClassNotFoundException. Hazelcast сС ΠΎΠ±ΠΈΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°Π΄Π΅ Π½Π° индСксот, Π½ΠΎ Π½Π΅ знаСшС Π½ΠΈΡˆΡ‚ΠΎ Π·Π° Π½Π°ΡˆΠΈΠΎΡ‚ клас ΠΈ сакашС Π΄Π° ΠΌΡƒ Π±ΠΈΠ΄Π΅ доставСн JAR со ΠΎΠ²Π°Π° класа. Π“ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΠ²ΠΌΠ΅ Ρ‚ΠΎΠΊΠΌΡƒ Ρ‚ΠΎΠ°, сè Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅, Π½ΠΎ сС појави Π½ΠΎΠ² ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ: ΠΊΠ°ΠΊΠΎ Π΄Π° сС Π°ΠΆΡƒΡ€ΠΈΡ€Π° JAR Π±Π΅Π· цСлосно Π΄Π° сС Π·Π°ΠΏΡ€Π΅ кластСрот? Hazelcast Π½Π΅ Π³ΠΎ Π·Π΅ΠΌΠ° Π½ΠΎΠ²ΠΈΠΎΡ‚ JAR Π·Π° Π²Ρ€Π΅ΠΌΠ΅ Π½Π° Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΡšΠ΅ ΠΎΠ΄ јазол Π΄ΠΎ јазол. Π’ΠΎ овој ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ€Π΅ΡˆΠΈΠ²ΠΌΠ΅ Π΄Π΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° ΠΆΠΈΠ²Π΅Π΅ΠΌΠ΅ Π±Π΅Π· ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° индСкси. На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΡ€Π°ΠΈΡˆΡ‚Π°Ρ‚Π°, Π°ΠΊΠΎ користитС Hazelcast ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΎΠ΄Π°Π²Π½ΠΈΡ†Π° со ΠΊΠ»ΡƒΡ‡Π½Π° врСдност, Ρ‚ΠΎΠ³Π°Ρˆ сè ќС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€Π°? НС навистина. ОвдС ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° IMap ΠΈ TransactionalMap Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ. ΠžΠ½Π°ΠΌΡƒ ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ Π½Π° IMap Π½Π΅ ΠΌΡƒ Π΅ Π³Ρ€ΠΈΠΆΠ°, TransactionalMap исфрла Π³Ρ€Π΅ΡˆΠΊΠ°.

IMap. ΠŸΠΈΡˆΡƒΠ²Π°ΠΌΠ΅ 5000 ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ΠΈ, Π³ΠΈ Ρ‡ΠΈΡ‚Π°ΠΌΠ΅. Π‘Π΅ Π΅ ΠΎΡ‡Π΅ΠΊΡƒΠ²Π°Π½ΠΎ.

@Test
void get5000() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application");
    UUID subscriberId = UUID.randomUUID();

    for (int i = 0; i < 5000; i++) {
        UUID id = UUID.randomUUID();
        String title = RandomStringUtils.random(5);
        Application application = new Application(id, title, subscriberId);
        
        map.set(id, application);
        Application retrieved = map.get(id);
        assertEquals(id, retrieved.getId());
    }
}

Но, Ρ‚ΠΎΠ° Π½Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ Ρ‚Ρ€Π°Π½ΡΠ°ΠΊΡ†ΠΈΡ˜Π°, Π΄ΠΎΠ±ΠΈΠ²Π°ΠΌΠ΅ ClassNotFoundException:

@Test
void get_transaction() {
    IMap<UUID, Application> map = hazelcastInstance.getMap("application_t");
    UUID subscriberId = UUID.randomUUID();
    UUID id = UUID.randomUUID();

    Application application = new Application(id, "qwer", subscriberId);
    map.set(id, application);
    
    Application retrievedOutside = map.get(id);
    assertEquals(id, retrievedOutside.getId());

    hazelcastInstance.executeTransaction(context -> {
        HazelcastTransactionContextHolder.setContext(context);
        try {
            TransactionalMap<UUID, Application> transactionalMap = context.getMap("application_t");
            Application retrievedInside = transactionalMap.get(id);

            assertEquals(id, retrievedInside.getId());
            return null;
        } finally {
            HazelcastTransactionContextHolder.clearContext();
        }
    });
}

Π’ΠΎ 3.8, сС појави ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΡ‚ Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅ Π½Π° класа Π½Π° корисници. ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π½Π°Π·Π½Π°Ρ‡ΠΈΡ‚Π΅ Π΅Π΄Π΅Π½ Π³Π»Π°Π²Π΅Π½ јазол ΠΈ Π΄Π° ја Π°ΠΆΡƒΡ€ΠΈΡ€Π°Ρ‚Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° JAR Π½Π° Π½Π΅Π°.

Π‘Π΅Π³Π° цСлосно Π³ΠΎ смСнивмС Π½Π°ΡˆΠΈΠΎΡ‚ пристап: самитС Π³ΠΎ ΡΠ΅Ρ€ΠΈΡ˜Π°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌΠ΅ Π²ΠΎ JSON ΠΈ Π³ΠΎ Π·Π°Ρ‡ΡƒΠ²ΡƒΠ²Π°ΠΌΠ΅ Π²ΠΎ Hazelcast. Hazelcast Π½Π΅ Ρ‚Ρ€Π΅Π±Π° Π΄Π° ја Π·Π½Π°Π΅ структурата Π½Π° Π½Π°ΡˆΠΈΡ‚Π΅ часови ΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠ΅ Π΄Π° сС Π°ΠΆΡƒΡ€ΠΈΡ€Π°ΠΌΠ΅ Π±Π΅Π· ΠΏΡ€Π΅ΠΊΠΈΠ½ΠΈ. Π’Π΅Ρ€Π·ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΠΌΠ΅Π½ΠΎΡ‚ Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€Π°Π½Π° ΠΎΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°. Π Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π²Π΅Ρ€Π·ΠΈΠΈ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Π° ΠΌΠΎΠΆΠ½Π° Π΅ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠ³Π° Π½ΠΎΠ²Π°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΏΠΈΡˆΡƒΠ²Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ со Π½ΠΎΠ²ΠΈ полиња, Π½ΠΎ старата сè ΡƒΡˆΡ‚Π΅ Π½Π΅ Π·Π½Π°Π΅ Π·Π° ΠΎΠ²ΠΈΠ΅ полиња. И Π²ΠΎ исто Π²Ρ€Π΅ΠΌΠ΅, Π½ΠΎΠ²Π°Ρ‚Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Ρ‡ΠΈΡ‚Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ напишани ΠΎΠ΄ старата Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° ΠΊΠΎΠΈ Π½Π΅ΠΌΠ°Π°Ρ‚ Π½ΠΎΠ²ΠΈ полиња. НиС сС справувамС со Ρ‚Π°ΠΊΠ²ΠΈ ситуации Π²ΠΎ Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Π°ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π°Ρ‚Π°, Π½ΠΎ Π·Π°Ρ€Π°Π΄ΠΈ Сдноставност Π½Π΅ ΠΌΠ΅Π½ΡƒΠ²Π°ΠΌΠ΅ ΠΈΠ»ΠΈ Π±Ρ€ΠΈΡˆΠ΅ΠΌΠ΅ полиња, Ρ‚ΡƒΠΊΡƒ само Π³ΠΈ ΠΏΡ€ΠΎΡˆΠΈΡ€ΡƒΠ²Π°ΠΌΠ΅ класитС со додавањС Π½ΠΎΠ²ΠΈ полиња.

Како ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ високи пСрформанси

Π§Π΅Ρ‚ΠΈΡ€ΠΈ ΠΏΠ°Ρ‚ΡƒΠ²Π°ΡšΠ° Π΄ΠΎ Hazelcast - Π΄ΠΎΠ±Ρ€ΠΎ, Π΄Π²Π΅ Π΄ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - лоши

ΠžΠ΄Π΅ΡšΠ΅Ρ‚ΠΎ Π²ΠΎ ΠΊΠ΅ΡˆΠΎΡ‚ Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΅ сСкогаш ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΎ ΠΎΡ‚ΠΊΠΎΠ»ΠΊΡƒ Π΄Π° ΠΎΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π½ΠΎ Π½Π΅ сакатС Π½ΠΈΡ‚Ρƒ Π΄Π° складиратС нСискористСни записи. ΠžΠ΄Π»ΡƒΠΊΠ°Ρ‚Π° Π·Π° Ρ‚ΠΎΠ° ΡˆΡ‚ΠΎ Π΄Π° сС ΠΊΠ΅ΡˆΠΈΡ€Π° ја оставамС Π΄ΠΎ послСдната Ρ„Π°Π·Π° Π½Π° Ρ€Π°Π·Π²ΠΎΡ˜. Кога Π½ΠΎΠ²Π°Ρ‚Π° функционалност Π΅ ΠΊΠΎΠ΄ΠΈΡ€Π°Π½Π°, Π³ΠΎ Π²ΠΊΠ»ΡƒΡ‡ΡƒΠ²Π°ΠΌΠ΅ Π΅Π²ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ситС Π±Π°Ρ€Π°ΡšΠ° Π²ΠΎ PostgreSQL (log_min_duration_statement Π΄ΠΎ 0) ΠΈ Π³ΠΎ ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΠΌΠ΅ Ρ‚Π΅ΡΡ‚ΠΈΡ€Π°ΡšΠ΅Ρ‚ΠΎ Π·Π° ΠΎΠΏΡ‚ΠΎΠ²Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ 20 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ. ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΈ собранитС Π΄Π½Π΅Π²Π½ΠΈΡ†ΠΈ, Π°Π»Π°Ρ‚ΠΊΠΈΡ‚Π΅ ΠΊΠ°ΠΊΠΎ pgFouine ΠΈ pgBadger ΠΌΠΎΠΆΠ°Ρ‚ Π΄Π° Π³Ρ€Π°Π΄Π°Ρ‚ Π°Π½Π°Π»ΠΈΡ‚ΠΈΡ‡ΠΊΠΈ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°ΠΈ. Π’ΠΎ ΠΈΠ·Π²Π΅ΡˆΡ‚Π°ΠΈΡ‚Π΅, првСнствСно Π±Π°Ρ€Π°ΠΌΠ΅ Π±Π°Π²Π½ΠΈ ΠΈ чСсти ΠΏΡ€Π°ΡˆΠ°ΡšΠ°. Π—Π° Π±Π°Π²Π½ΠΈ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°, Π³Ρ€Π°Π΄ΠΈΠΌΠ΅ ΠΏΠ»Π°Π½ Π·Π° ΠΈΠ·Π²Ρ€ΡˆΡƒΠ²Π°ΡšΠ΅ (ΠžΠ‘Ρ˜Π°ΡΠ½Π΅Ρ‚Π΅) ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π½ΡƒΠ²Π°ΠΌΠ΅ Π΄Π°Π»ΠΈ Ρ‚Π°ΠΊΠ²ΠΎΡ‚ΠΎ Π±Π°Ρ€Π°ΡšΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Π±Ρ€Π·Π°. ЧСститС Π±Π°Ρ€Π°ΡšΠ° Π·Π° исти Π²Π»Π΅Π·Π½ΠΈ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π΄ΠΎΠ±Ρ€ΠΎ сС Π²ΠΊΠ»ΠΎΠΏΡƒΠ²Π°Π°Ρ‚ Π²ΠΎ ΠΊΠ΅ΡˆΠΎΡ‚. НиС сС ΠΎΠ±ΠΈΠ΄ΡƒΠ²Π°ΠΌΠ΅ Π΄Π° Π³ΠΈ Π·Π°Π΄Ρ€ΠΆΠΈΠΌΠ΅ ΠΏΡ€Π°ΡˆΠ°ΡšΠ°Ρ‚Π° β€žΡ€Π°ΠΌΠ½ΠΈβ€œ, Π΅Π΄Π½Π° Ρ‚Π°Π±Π΅Π»Π° ΠΏΠΎ Π±Π°Ρ€Π°ΡšΠ΅.

Π•ΠΊΡΠΏΠ»ΠΎΠ°Ρ‚Π°Ρ†ΠΈΡ˜Π°

SV ΠΊΠ°ΠΊΠΎ онлајн услуга бСшС ΠΏΡƒΡˆΡ‚Π΅Π½Π° Π²ΠΎ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π° Π²ΠΎ ΠΏΡ€ΠΎΠ»Π΅Ρ‚Ρ‚Π° 2017 Π³ΠΎΠ΄ΠΈΠ½Π°, Π° ΠΊΠ°ΠΊΠΎ посСбСн ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄, SV бСшС објавСн Π²ΠΎ Π½ΠΎΠ΅ΠΌΠ²Ρ€ΠΈ 2017 Π³ΠΎΠ΄ΠΈΠ½Π° (Ρ‚ΠΎΠ³Π°Ρˆ Π²ΠΎ статус Π½Π° Π±Π΅Ρ‚Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π°).

Π—Π° повСќС ΠΎΠ΄ Π΅Π΄Π½Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ, Π½Π΅ΠΌΠ° сСриозни ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ Π²ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ΡšΠ΅Ρ‚ΠΎ Π½Π° онлајн услугата CB. Ја слСдимС онлајн услугата ΠΏΡ€Π΅ΠΊΡƒ Zabbix, ΡΠΎΠ±ΠΈΡ€Π°Ρ˜Ρ‚Π΅ ΠΈ распорСдСтС ΠΎΠ΄ Бамбус.

Π”ΠΈΡΡ‚Ρ€ΠΈΠ±ΡƒΡ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° сСрвСрот SV сС ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π° Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° домашни ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ: RPM, DEB, MSI. ΠŸΠ»ΡƒΡ Π·Π° Windows ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡƒΠ²Π°ΠΌΠ΅ СдинствСн инсталатСр Π²ΠΎ Ρ„ΠΎΡ€ΠΌΠ° Π½Π° СдинствСн EXE кој Π³ΠΈ инсталира сСрвСрот, Hazelcast ΠΈ Elasticsearch Π½Π° Π΅Π΄Π½Π° машина. ΠŸΡ€Π²ΠΈΡ‡Π½ΠΎ ја Π½Π°Ρ€Π΅ΠΊΡƒΠ²Π°Π²ΠΌΠ΅ ΠΎΠ²Π°Π° Π²Π΅Ρ€Π·ΠΈΡ˜Π° Π½Π° ΠΈΠ½ΡΡ‚Π°Π»Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° ΠΊΠ°ΠΊΠΎ β€žΠ΄Π΅ΠΌΠΎβ€œ Π²Π΅Ρ€Π·ΠΈΡ˜Π°, Π½ΠΎ сСга стана јасно Π΄Π΅ΠΊΠ° ΠΎΠ²Π° Π΅ Π½Π°Ρ˜ΠΏΠΎΠΏΡƒΠ»Π°Ρ€Π½Π°Ρ‚Π° ΠΎΠΏΡ†ΠΈΡ˜Π° Π·Π° Ρ€Π°ΡΠΏΠΎΡ€Π΅Π΄ΡƒΠ²Π°ΡšΠ΅.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€