ืื™ืš ื•ืœืžื” ื›ืชื‘ื ื• ืฉื™ืจื•ืช ืžื“ืจื’ื™ ื‘ืขื•ืžืก ื’ื‘ื•ื” ืขื‘ื•ืจ 1C: Enterprise: Java, PostgreSQL, Hazelcast

ื‘ืžืืžืจ ื–ื” ื ื“ื‘ืจ ืขืœ ืื™ืš ื•ืœืžื” ื”ืชืคืชื—ื ื• ืžืขืจื›ืช ืื™ื ื˜ืจืืงืฆื™ื” โ€“ ืžื ื’ื ื•ืŸ ื”ืžืขื‘ื™ืจ ืžื™ื“ืข ื‘ื™ืŸ ื™ื™ืฉื•ืžื™ ืœืงื•ื— ืœืฉืจืชื™ 1C:Enterprise - ืžื”ื’ื“ืจืช ืžืฉื™ืžื” ื•ืขื“ ื—ืฉื™ื‘ื” ื“ืจืš ืคืจื˜ื™ ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ื•ื”ื™ื™ืฉื•ื.

ืžืขืจื›ืช ื”ืื™ื ื˜ืจืืงืฆื™ื” (ืœื”ืœืŸ: SV) ื”ื™ื ืžืขืจื›ืช ื”ื•ื“ืขื•ืช ืžื‘ื•ื–ืจืช, ืกื•ื‘ืœื ื™ืช ืœืชืงืœื•ืช ืขื ืžืกื™ืจื” ืžื•ื‘ื˜ื—ืช. SV ืžืชื•ื›ื ืŸ ื›ืฉื™ืจื•ืช ื‘ืขื•ืžืก ื’ื‘ื•ื” ืขื ืžื“ืจื’ื™ื•ืช ื’ื‘ื•ื”ื”, ื–ืžื™ืŸ ื”ืŸ ื›ืฉื™ืจื•ืช ืžืงื•ื•ืŸ (ืžืกื•ืคืง ืขืœ ื™ื“ื™ 1C) ื•ื”ืŸ ื›ืžื•ืฆืจ ื‘ื™ื™ืฆื•ืจ ื”ืžื•ื ื™ ืฉื ื™ืชืŸ ืœืคืจื•ืก ื‘ืžืชืงื ื™ ื”ืฉืจืช ืฉืœื›ื.

SV ืžืฉืชืžืฉ ื‘ืื—ืกื•ืŸ ืžื‘ื•ื–ืจ ืœื•ื– ื•ืžื ื•ืข ื—ื™ืคื•ืฉ Elasticsearch. ื ื“ื‘ืจ ื’ื ืขืœ ื’'ืื•ื•ื” ื•ื›ื™ืฆื“ ืื ื• ืžืจื—ื™ื‘ื™ื ืืช 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 ืฉื•ื ื•ืช (ืœืžืฉืœ ื‘ื™ืŸ Trade Management ืœื—ืฉื‘ื•ื ืื•ืช). ืืคืœื™ืงืฆื™ื•ืช 1C ืฉื•ื ื•ืช ื™ื›ื•ืœื•ืช ืœืคืขื•ืœ ืขืœ ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ืคืœื˜ืคื•ืจืžืช 1C:Enterprise, ืœื”ื™ื•ืช ืžืžื•ืงืžื•ืช ื‘ืฉืจืชื™ื ืฉื•ื ื™ื ื•ื›ื•'. ื‘ืชื ืื™ื ื›ืืœื”, ื™ื™ืฉื•ื SV ื›ืžื•ืฆืจ ื ืคืจื“ ื”ืžืžื•ืงื "ื‘ืฆื“" ืฉืœ ื”ืชืงื ื•ืช 1C ื”ื•ื ื”ืคืชืจื•ืŸ ื”ืื•ืคื˜ื™ืžืœื™.

ืื– ื”ื—ืœื˜ื ื• ืœื™ืฆื•ืจ SV ื›ืžื•ืฆืจ ื ืคืจื“. ืื ื• ืžืžืœื™ืฆื™ื ืœื—ื‘ืจื•ืช ืงื˜ื ื•ืช ืœื”ืฉืชืžืฉ ื‘ืฉืจืช ื”-CB ืฉื”ืชืงื ื• ื‘ืขื ืŸ ืฉืœื ื• (wss://1cdialog.com) ื›ื“ื™ ืœื”ื™ืžื ืข ืžื”ืขืœื•ื™ื•ืช ื”ืชืงื•ืจื•ืช ื”ืงืฉื•ืจื•ืช ืœื”ืชืงื ื” ืžืงื•ืžื™ืช ื•ืชืฆื•ืจื” ืฉืœ ื”ืฉืจืช. ืœืงื•ื—ื•ืช ื’ื“ื•ืœื™ื ืขืฉื•ื™ื™ื ืœืžืฆื•ื ืฉืžื•ืžืœืฅ ืœื”ืชืงื™ืŸ ืฉืจืช CB ืžืฉืœื”ื ื‘ืžืชืงื ื™ื ืฉืœื”ื. ื”ืฉืชืžืฉื ื• ื‘ื’ื™ืฉื” ื“ื•ืžื” ื‘ืžื•ืฆืจ SaaS ื‘ืขื ืŸ ืฉืœื ื• 1cFresh - ื”ื•ื ืžื™ื•ืฆืจ ื›ืžื•ืฆืจ ื‘ื™ื™ืฆื•ืจ ื”ืžื•ื ื™ ืœื”ืชืงื ื” ื‘ืืชืจื™ ืœืงื•ื—ื•ืช, ื•ื’ื ื ืคืจืก ื‘ืขื ืŸ ืฉืœื ื• https://1cfresh.com/.

ื™ื™ืฉื•ื

ื›ื“ื™ ืœื”ืคื™ืฅ ืืช ืกื‘ื™ืœื•ืช ื”ืขื•ืžืก ื•ื”ืชืงืœื•ืช, ื ืคืจื•ืก ืœื ื™ื™ืฉื•ื Java ืื—ื“, ืืœื ื›ืžื”, ืขื ืžืื–ืŸ ืขื•ืžืกื™ื ืœืคื ื™ื”ื. ืื ืืชื” ืฆืจื™ืš ืœื”ืขื‘ื™ืจ ื”ื•ื“ืขื” ืžืฆื•ืžืช ืœืฆื•ืžืช, ื”ืฉืชืžืฉ ื‘-publish/subscribe ื‘-Hazelcast.

ื”ืชืงืฉื•ืจืช ื‘ื™ืŸ ื”ืœืงื•ื— ืœืฉืจืช ื”ื™ื ื‘ืืžืฆืขื•ืช websocket. ื–ื” ืžืชืื™ื ื”ื™ื˜ื‘ ืœืžืขืจื›ื•ืช ื‘ื–ืžืŸ ืืžืช.

ืžื˜ืžื•ืŸ ืžื‘ื•ื–ืจ

ื‘ื—ืจื ื• ื‘ื™ืŸ Redis, Hazelcast ื•-Ehcache. ื–ื” 2015. Redis ื‘ื“ื™ื•ืง ื”ื•ืฆื™ืื” ืืฉื›ื•ืœ ื—ื“ืฉ (ื—ื“ืฉ ืžื“ื™, ืžืคื—ื™ื“), ื™ืฉ Sentinel ืขื ื”ืจื‘ื” ื”ื’ื‘ืœื•ืช. Ehcache ืœื ื™ื•ื“ืข ืื™ืš ืœื”ืจื›ื™ื‘ ืœืืฉื›ื•ืœ (ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื–ื• ื”ื•ืคื™ืขื” ืžืื•ื—ืจ ื™ื•ืชืจ). ื”ื—ืœื˜ื ื• ืœื ืกื•ืช ืืช ื–ื” ืขื Hazelcast 3.4.
Hazelcast ืžื•ืจื›ื‘ ืœืืฉื›ื•ืœ ืžืชื•ืš ื”ืงื•ืคืกื”. ื‘ืžืฆื‘ ืฆื•ืžืช ื™ื—ื™ื“, ื”ื•ื ืœื ืžืื•ื“ ืฉื™ืžื•ืฉื™ ื•ื™ื›ื•ืœ ืœืฉืžืฉ ืจืง ื›ืžื˜ืžื•ืŸ - ื”ื•ื ืœื ื™ื•ื“ืข ืื™ืš ืœื–ืจื•ืง ื ืชื•ื ื™ื ืœื“ื™ืกืง, ืื ืืชื” ืžืื‘ื“ ืืช ื”ืฆื•ืžืช ื”ื™ื—ื™ื“, ืืชื” ืžืื‘ื“ ืืช ื”ื ืชื•ื ื™ื. ืื ื• ืคื•ืจืกื™ื ืžืกืคืจ Hazelcasts, ื‘ื™ื ื™ื”ื ืื ื• ืžื’ื‘ื™ื ื ืชื•ื ื™ื ืงืจื™ื˜ื™ื™ื. ืื ื—ื ื• ืœื ืžื’ื‘ื™ื ืืช ื”ืžื˜ืžื•ืŸ - ื–ื” ืœื ืžืคืจื™ืข ืœื ื•.

ืขื‘ื•ืจื ื•, Hazelcast ื”ื•ื:

  • ืื—ืกื•ืŸ ื”ืคืขืœื•ืช ืžืฉืชืžืฉ. ืœื•ืงื— ื”ืจื‘ื” ื–ืžืŸ ืœื”ื™ื›ื ืก ืœืžืกื“ ื”ื ืชื•ื ื™ื ืœืกืฉืŸ ื‘ื›ืœ ืคืขื, ืื– ืฉืžื ื• ืืช ื›ืœ ื”ืคืขืœื•ืช ื‘-Hazelcast.
  • ืžื˜ืžื•ืŸ. ืื ืืชื” ืžื—ืคืฉ ืคืจื•ืคื™ืœ ืžืฉืชืžืฉ, ื‘ื“ื•ืง ืืช ื”ืžื˜ืžื•ืŸ. ื›ืชื‘ ื”ื•ื“ืขื” ื—ื“ืฉื” - ื”ื›ื ืก ืื•ืชื” ืœืžื˜ืžื•ืŸ.
  • ื ื•ืฉืื™ื ืœืชืงืฉื•ืจืช ื‘ื™ืŸ ืžื•ืคืขื™ ื™ื™ืฉื•ืžื™ื. ื”ืฆื•ืžืช ื™ื•ืฆืจ ืื™ืจื•ืข ื•ืžืฆื™ื‘ ืื•ืชื• ื‘ื ื•ืฉื Hazelcast. ืฆืžืชื™ ื™ื™ืฉื•ืžื™ื ืื—ืจื™ื ื”ืจืฉื•ืžื™ื ืœื ื•ืฉื ื–ื” ืžืงื‘ืœื™ื ื•ืžืขื‘ื“ื™ื ืืช ื”ืื™ืจื•ืข.
  • ืžื ืขื•ืœื™ ืืฉื›ื•ืœ. ืœื“ื•ื’ืžื”, ืื ื• ื™ื•ืฆืจื™ื ื“ื™ื•ืŸ ื‘ืืžืฆืขื•ืช ืžืคืชื— ื™ื™ื—ื•ื“ื™ (ื“ื™ื•ืŸ ื™ื—ื™ื“ ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ 1C):

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

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

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

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

ื‘ื“ืงื ื• ืฉืื™ืŸ ืขืจื•ืฅ. ืœืงื—ื ื• ืืช ื”ืžื ืขื•ืœ, ื‘ื“ืงื ื• ืื•ืชื• ืฉื•ื‘ ื•ื™ืฆืจื ื• ืื•ืชื•. ืื ืœื ืชื‘ื“ื•ืง ืืช ื”ืžื ืขื•ืœ ืœืื—ืจ ืฉืœืงื—ืช ืืช ื”ืžื ืขื•ืœ, ืื– ื™ืฉ ืกื™ื›ื•ื™ ืฉื’ื ืฉืจืฉื•ืจ ืื—ืจ ื‘ื“ืง ื‘ืื•ืชื• ืจื’ืข ื•ืขื›ืฉื™ื• ื™ื ืกื” ืœื™ืฆื•ืจ ืืช ืื•ืชื• ื“ื™ื•ืŸ - ืื‘ืœ ื”ื•ื ื›ื‘ืจ ืงื™ื™ื. ืœื ื ื™ืชืŸ ืœื ืขื•ืœ ื‘ืืžืฆืขื•ืช ื ืขื™ืœืช java ืžืกื•ื ื›ืจื ืช ืื• ืจื’ื™ืœื”. ื“ืจืš ืžืกื“ ื”ื ืชื•ื ื™ื - ื–ื” ืื™ื˜ื™, ื•ื—ื‘ืœ ืขืœ ืžืกื“ ื”ื ืชื•ื ื™ื; ื“ืจืš Hazelcast - ื–ื” ืžื” ืฉืืชื” ืฆืจื™ืš.

ื‘ื—ื™ืจืช DBMS

ื™ืฉ ืœื ื• ื ื™ืกื™ื•ืŸ ืจื‘ ื•ืžื•ืฆืœื— ื‘ืขื‘ื•ื“ื” ืขื PostgreSQL ื•ืฉื™ืชื•ืฃ ืคืขื•ืœื” ืขื ืžืคืชื—ื™ ื”-DBMS ื”ื–ื”.

ื–ื” ืœื ืงืœ ืขื ืืฉื›ื•ืœ PostgreSQL - ื™ืฉ XL, XC, ืฆื™ื˜ื•ืก, ืื‘ืœ ื‘ืื•ืคืŸ ื›ืœืœื™ ืืœื” ืœื NoSQLs ืฉืžืชืจื—ื‘ื™ื ืžื”ืงื•ืคืกื”. ืœื ื”ืชื™ื™ื—ืกื ื• ืœ-NoSQL ื›ืื—ืกื•ืŸ ื”ืจืืฉื™; ื–ื” ื”ื™ื” ืžืกืคื™ืง ืฉืœืงื—ื ื• ืืช Hazelcast, ืฉืœื ืขื‘ื“ื ื• ืื™ืชื• ืงื•ื“ื ืœื›ืŸ.

ืื ืืชื” ืฆืจื™ืš ืœืฉื ื•ืช ืงื ื” ืžื™ื“ื” ืฉืœ ืžืกื“ ื ืชื•ื ื™ื ื™ื—ืกื™, ื–ื” ืื•ืžืจ ืจื™ืกื•ืง. ื›ื™ื“ื•ืข, ื‘-sharding ืื ื• ืžื—ืœืงื™ื ืืช ืžืกื“ ื”ื ืชื•ื ื™ื ืœื—ืœืงื™ื ื ืคืจื“ื™ื ื›ืš ืฉื›ืœ ืื—ื“ ืžื”ื ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžืžื•ืงื ืขืœ ืฉืจืช ื ืคืจื“.

ื”ื’ืจืกื” ื”ืจืืฉื•ื ื” ืฉืœ ื”ืจืกื™ืก ืฉืœื ื• ื”ื ื™ื—ื” ืืช ื”ื™ื›ื•ืœืช ืœื”ืคื™ืฅ ื›ืœ ืื—ืช ืžื”ื˜ื‘ืœืื•ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ืขืœ ืคื ื™ ืฉืจืชื™ื ืฉื•ื ื™ื ื‘ืคืจื•ืคื•ืจืฆื™ื•ืช ืฉื•ื ื•ืช. ื™ืฉ ื”ืจื‘ื” ื”ื•ื“ืขื•ืช ื‘ืฉืจืช A - ื‘ื‘ืงืฉื”, ื‘ื•ื ื ืขื‘ื™ืจ ื—ืœืง ืžื”ื˜ื‘ืœื” ื”ื–ื• ืœืฉืจืช B. ื”ื”ื—ืœื˜ื” ื”ื–ื• ืคืฉื•ื˜ ืฆืจื—ื” ืขืœ ืื•ืคื˜ื™ืžื™ื–ืฆื™ื” ืžื•ืงื“ืžืช, ืื– ื”ื—ืœื˜ื ื• ืœื”ื’ื‘ื™ืœ ืืช ืขืฆืžื ื• ืœื’ื™ืฉื” ืฉืœ ืจื™ื‘ื•ื™ ื“ื™ื™ืจื™ื.

ืขืœ ืจื™ื‘ื•ื™ ื“ื™ื™ืจื™ื ืชื•ื›ืœื• ืœืงืจื•ื ืœืžืฉืœ ื‘ืืชืจ Citus Data.

ืœ-SV ื™ืฉ ืืช ื”ืžื•ืฉื’ื™ื ืฉืœ ืืคืœื™ืงืฆื™ื” ื•ืžื ื•ื™. ืืคืœื™ืงืฆื™ื” ื”ื™ื ื”ืชืงื ื” ืกืคืฆื™ืคื™ืช ืฉืœ ืืคืœื™ืงืฆื™ื” ืขืกืงื™ืช, ื›ื’ื•ืŸ ERP ืื• Accounting, ืขื ื”ืžืฉืชืžืฉื™ื ื•ื”ื ืชื•ื ื™ื ื”ืขืกืงื™ื™ื ืฉืœื”. ืžื ื•ื™ ื”ื•ื ืืจื’ื•ืŸ ืื• ืื“ื ืฉื”ืืคืœื™ืงืฆื™ื” ืจืฉื•ืžื” ืžื˜ืขืžื• ื‘ืฉืจืช SV. ืœืžื ื•ื™ ื™ื›ื•ืœื™ื ืœื”ื™ื•ืช ืžืกืคืจ ืืคืœื™ืงืฆื™ื•ืช ืจืฉื•ืžื•ืช, ื•ื™ื™ืฉื•ืžื™ื ืืœื• ื™ื›ื•ืœื™ื ืœื”ื—ืœื™ืฃ ื”ื•ื“ืขื•ืช ื‘ื™ื ื™ื”ืŸ. ื”ืžื ื•ื™ ื”ืคืš ืœืฉื•ื›ืจ ื‘ืžืขืจื›ืช ืฉืœื ื•. ื ื™ืชืŸ ืœืืชืจ ื”ื•ื“ืขื•ืช ืžืžืกืคืจ ืžื ื•ื™ื™ื ื‘ืžืกื“ ื ืชื•ื ื™ื ืคื™ื–ื™ ืื—ื“; ืื ืื ื• ืจื•ืื™ื ืฉืžื ื•ื™ ื”ืชื—ื™ืœ ืœื™ื™ืฆืจ ืชื ื•ืขื” ืจื‘ื”, ื ืขื‘ื™ืจ ืื•ืชื• ืœืžืกื“ ื ืชื•ื ื™ื ืคื™ื–ื™ ื ืคืจื“ (ืื• ืืคื™ืœื• ืœืฉืจืช ืžืกื“ ื ืชื•ื ื™ื ื ืคืจื“).

ื™ืฉ ืœื ื• ืžืกื“ ื ืชื•ื ื™ื ืจืืฉื™ ืฉื‘ื• ืžืื•ื—ืกื ืช ื˜ื‘ืœืช ื ื™ืชื•ื‘ ืขื ืžื™ื“ืข ืขืœ ืžื™ืงื•ืžื ืฉืœ ื›ืœ ืžืกื“ื™ ื”ื ืชื•ื ื™ื ืฉืœ ื”ืžื ื•ื™ื™ื.

ืื™ืš ื•ืœืžื” ื›ืชื‘ื ื• ืฉื™ืจื•ืช ืžื“ืจื’ื™ ื‘ืขื•ืžืก ื’ื‘ื•ื” ืขื‘ื•ืจ 1C: Enterprise: Java, PostgreSQL, Hazelcast

ื›ื“ื™ ืœืžื ื•ืข ืžืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™ ืœื”ื™ื•ืช ืฆื•ื•ืืจ ื‘ืงื‘ื•ืง, ืื ื• ืฉื•ืžืจื™ื ืืช ื˜ื‘ืœืช ื”ื ื™ืชื•ื‘ (ื•ื ืชื•ื ื™ื ืื—ืจื™ื ื”ื ื—ื•ืฆื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช) ื‘ืžื˜ืžื•ืŸ.

ืื ื‘ืกื™ืก ื”ื ืชื•ื ื™ื ืฉืœ ื”ืžื ื•ื™ ื™ืชื—ื™ืœ ืœื”ืื˜, ื ื—ืชื•ืš ืื•ืชื• ืœืžื—ื™ืฆื•ืช ื‘ืคื ื™ื. ื‘ืคืจื•ื™ืงื˜ื™ื ืื—ืจื™ื ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื”ื pg_pathman.

ืžื›ื™ื•ื•ืŸ ืฉืื™ื‘ื•ื“ ื”ื•ื“ืขื•ืช ืžืฉืชืžืฉ ื–ื” ืจืข, ืื ื• ืžืชื—ื–ืงื™ื ืืช ืžืกื“ื™ ื”ื ืชื•ื ื™ื ืฉืœื ื• ืขื ื”ืขืชืงื™ื. ื”ืฉื™ืœื•ื‘ ืฉืœ ื”ืขืชืงื™ื ืกื™ื ื›ืจื•ื ื™ื™ื ื•ื-ืกื™ื ื›ืจื•ื ื™ื™ื ืžืืคืฉืจ ืœืš ืœื‘ื˜ื— ืืช ืขืฆืžืš ื‘ืžืงืจื” ืฉืœ ืื•ื‘ื“ืŸ ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™. ืื•ื‘ื“ืŸ ื”ื•ื“ืขื” ื™ืชืจื—ืฉ ืจืง ืื ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™ ื•ื”ืขื•ืชืง ื”ืกื™ื ื›ืจื•ื ื™ ืฉืœื• ื™ื™ื›ืฉืœื• ื‘ื•-ื–ืžื ื™ืช.

ืื ื”ืขืชืง ืกื™ื ื›ืจื•ื ื™ ืื•ื‘ื“, ื”ื”ืขืชืง ื”ืืกื™ื ื›ืจื•ื ื™ ื”ื•ืคืš ืœืกื™ื ื›ืจื•ื ื™.
ืื ืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™ ืื‘ื“, ื”ืขืชืง ื”ืกื™ื ื›ืจื•ื ื™ ื”ื•ืคืš ืœืžืกื“ ื”ื ืชื•ื ื™ื ื”ืจืืฉื™, ื•ื”ืขื•ืชืง ื”ืืกื™ื ื›ืจื•ื ื™ ื”ื•ืคืš ืœืขืชืง ืกื™ื ื›ืจื•ื ื™.

Elasticsearch ืœื—ื™ืคื•ืฉ

ืžื›ื™ื•ื•ืŸ ืฉื‘ื™ืŸ ื”ื™ืชืจ ื’ื SV ื”ื•ื ืฉืœื™ื—, ื”ื•ื ืžืฆืจื™ืš ื—ื™ืคื•ืฉ ืžื”ื™ืจ, ื ื•ื— ื•ื’ืžื™ืฉ, ืชื•ืš ื”ืชื—ืฉื‘ื•ืช ื‘ืžื•ืจืคื•ืœื•ื’ื™ื”, ืชื•ืš ืฉื™ืžื•ืฉ ื‘ื”ืชืืžื•ืช ืœื ืžื“ื•ื™ืงื•ืช. ื”ื—ืœื˜ื ื• ืœื ืœื”ืžืฆื™ื ืืช ื”ื’ืœื’ืœ ืžื—ื“ืฉ ื•ืœื”ืฉืชืžืฉ ื‘ืžื ื•ืข ื”ื—ื™ืคื•ืฉ ื”ื—ื™ื ืžื™ Elasticsearch, ืฉื ื•ืฆืจ ืขืœ ื‘ืกื™ืก ื”ืกืคืจื™ื™ื” ืœื•ืกื™ืŸ. ืื ื• ื’ื ืคื•ืจืกื™ื ืืช Elasticsearch ื‘ืืฉื›ื•ืœ (ืžืืกื˜ืจ โ€“ ื ืชื•ื ื™ื โ€“ ื ืชื•ื ื™ื) ื›ื“ื™ ืœืžื ื•ืข ื‘ืขื™ื•ืช ื‘ืžืงืจื” ืฉืœ ื›ืฉืœ ื‘ืฆืžืชื™ ื™ื™ืฉื•ืžื™ื.

ื‘-github ืžืฆืื ื• ืชื•ืกืฃ ืžื•ืจืคื•ืœื•ื’ื™ื” ืจื•ืกื™ืช ืขื‘ื•ืจ Elasticsearch ื•ื”ืฉืชืžืฉ ื‘ื•. ื‘ืื™ื ื“ืงืก Elasticsearch ืื ื• ืžืื—ืกื ื™ื ืฉื•ืจืฉื™ ืžื™ืœื™ื (ืฉื”ืชื•ืกืฃ ืงื•ื‘ืข) ื•-N-grams. ื›ืืฉืจ ื”ืžืฉืชืžืฉ ืžื–ื™ืŸ ื˜ืงืกื˜ ืœื—ื™ืคื•ืฉ, ืื ื• ืžื—ืคืฉื™ื ืืช ื”ื˜ืงืกื˜ ื”ืžื•ืงืœื“ ื‘ื™ืŸ N-ื’ืจื. ื›ืืฉืจ ืชื™ืฉืžืจ ื‘ืื™ื ื“ืงืก, ื”ืžื™ืœื” "ื˜ืงืกื˜ื™ื" ืชืคื•ืฆืœ ืœ-N-ื’ืจืžื™ื ื”ื‘ืื™ื:

[ืืœื”, tek, tex, text, texts, ek, ex, ext, texts, ks, kst, ksty, st, sty, you],

ื•ื’ื ืฉื•ืจืฉ ื”ืžื™ืœื” "ื˜ืงืกื˜" ื™ื™ืฉืžืจ. ื’ื™ืฉื” ื–ื• ืžืืคืฉืจืช ืœืš ืœื—ืคืฉ ื‘ืชื—ื™ืœืช ื”ืžื™ืœื”, ื‘ืืžืฆืข ื•ื‘ืกื•ืฃ ื”ืžื™ืœื”.

ื”ืชืžื•ื ื” ื”ื’ื“ื•ืœื”

ืื™ืš ื•ืœืžื” ื›ืชื‘ื ื• ืฉื™ืจื•ืช ืžื“ืจื’ื™ ื‘ืขื•ืžืก ื’ื‘ื•ื” ืขื‘ื•ืจ 1C: Enterprise: Java, PostgreSQL, Hazelcast
ื—ื–ืจื” ืขืœ ื”ืชืžื•ื ื” ืžืชื—ื™ืœืช ื”ืžืืžืจ, ืืš ืขื ื”ืกื‘ืจื™ื:

  • ืžืื–ืŸ ืฉื ื—ืฉืฃ ื‘ืื™ื ื˜ืจื ื˜; ื™ืฉ ืœื ื• nginx, ื–ื” ื™ื›ื•ืœ ืœื”ื™ื•ืช ื›ืœ ืื—ื“.
  • ืžื•ืคืขื™ ื™ื™ืฉื•ืžื™ Java ืžืชืงืฉืจื™ื ื–ื” ืขื ื–ื” ื‘ืืžืฆืขื•ืช Hazelcast.
  • ืœืขื‘ื•ื“ื” ืขื ืฉืงืข ืื™ื ื˜ืจื ื˜ ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื• Netty.
  • ืืคืœื™ืงืฆื™ื™ืช Java ื›ืชื•ื‘ื” ื‘-Java 8 ื•ืžื•ืจื›ื‘ืช ืžื—ื‘ื™ืœื•ืช OSGi. ื”ืชื•ื›ื ื™ื•ืช ื›ื•ืœืœื•ืช ืžืขื‘ืจ ืœ-Java 10 ื•ืžืขื‘ืจ ืœืžื•ื“ื•ืœื™ื.

ืคื™ืชื•ื— ื•ื‘ื“ื™ืงื•ืช

ื‘ืชื”ืœื™ืš ื”ืคื™ืชื•ื— ื•ื”ื‘ื“ื™ืงื” ืฉืœ ื”-SV, ื ืชืงืœื ื• ื‘ืžืกืคืจ ืชื›ื•ื ื•ืช ืžืขื ื™ื™ื ื•ืช ืฉืœ ื”ืžื•ืฆืจื™ื ืฉืื ื• ืžืฉืชืžืฉื™ื ื‘ื”ื.

ื‘ื“ื™ืงืช ืขื•ืžืกื™ื ื•ื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ

ื”ืฉื—ืจื•ืจ ืฉืœ ื›ืœ ืžื”ื“ื•ืจืช SV ื›ืจื•ืš ื‘ื‘ื“ื™ืงืช ืขื•ืžืก. ื–ื” ืžืฆืœื™ื— ื›ืืฉืจ:

  • ื”ื‘ื“ื™ืงื” ืขื‘ื“ื” ืžืกืคืจ ื™ืžื™ื ื•ืœื ื”ื™ื• ืชืงืœื•ืช ืฉื™ืจื•ืช
  • ื–ืžืŸ ื”ืชื’ื•ื‘ื” ืœืคืขื•ืœื•ืช ืžืคืชื— ืœื ืขืœื” ืขืœ ืกืฃ ื ื•ื—
  • ื”ืจืขื” ื‘ื‘ื™ืฆื•ืขื™ื ื‘ื”ืฉื•ื•ืื” ืœื’ืจืกื” ื”ืงื•ื“ืžืช ื”ื™ื ืœื ื™ื•ืชืจ ืž-10%

ืื ื• ืžืžืœืื™ื ืืช ืžืื’ืจ ื”ื‘ื“ื™ืงื•ืช ื‘ื ืชื•ื ื™ื - ืœืฉื ื›ืš ืื ื• ืžืงื‘ืœื™ื ืžื™ื“ืข ืขืœ ื”ืžื ื•ื™ ื”ืคืขื™ืœ ื‘ื™ื•ืชืจ ืžืฉืจืช ื”ื”ืคืงื”, ืžื›ืคื™ืœื™ื ืืช ืžืกืคืจื™ื• ื‘-5 (ืžืกืคืจ ื”ื”ื•ื“ืขื•ืช, ื”ื“ื™ื•ื ื™ื, ื”ืžืฉืชืžืฉื™ื) ื•ื‘ื•ื“ืงื™ื ื–ืืช ื›ืš.

ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื•ืช ืขื•ืžืก ืฉืœ ืžืขืจื›ืช ื”ืื™ื ื˜ืจืืงืฆื™ื” ื‘ืฉืœื•ืฉ ืชืฆื•ืจื•ืช:

  1. ืžื‘ื—ืŸ ืžืืžืฅ
  2. ื—ื™ื‘ื•ืจื™ื ื‘ืœื‘ื“
  3. ืจื™ืฉื•ื ืžื ื•ื™

ื‘ืžื”ืœืš ืžื‘ื—ืŸ ื”ืžืืžืฅ ืื ื—ื ื• ืžืฉื™ืงื™ื ื›ืžื” ืžืื•ืช ืฉืจืฉื•ืจื™ื, ื•ื”ื ื˜ื•ืขื ื™ื ืืช ื”ืžืขืจื›ืช ืœืœื ื”ืคืกืงื”: ื›ืชื™ื‘ืช ื”ื•ื“ืขื•ืช, ื™ืฆื™ืจืช ื“ื™ื•ื ื™ื, ืงื‘ืœืช ืจืฉื™ืžืช ื”ื•ื“ืขื•ืช. ืื ื• ืžื“ืžื™ื ืคืขื•ืœื•ืช ืฉืœ ืžืฉืชืžืฉื™ื ืจื’ื™ืœื™ื (ืงื‘ืœ ืจืฉื™ืžื” ืฉืœ ื”ื•ื“ืขื•ืช ืฉืœื ื ืงืจืื•, ื›ืชื•ื‘ ืœืžื™ืฉื”ื•) ื•ืคืชืจื•ื ื•ืช ืชื•ื›ื ื” (ืœืฉื“ืจ ื—ื‘ื™ืœื” ื‘ืชืฆื•ืจื” ืื—ืจืช, ืœืขื‘ื“ ื”ืชืจืื”).

ืœื“ื•ื’ืžื”, ื›ืš ื ืจืื” ื—ืœืง ืžืžื‘ื—ืŸ ื”ืžืืžืฅ:

  • ืžืฉืชืžืฉ ืžืชื—ื‘ืจ
    • ืžื‘ืงืฉ ืืช ื”ื“ื™ื•ื ื™ื ืฉืœื ื ืงืจืื•
    • ืกื‘ื™ืจื•ืช ืฉืœ 50% ืœืงืจื•ื ื”ื•ื“ืขื•ืช
    • ืกื‘ื™ืจื•ืช ืฉืœ 50% ืœืฉืœื•ื— ื”ื•ื“ืขื•ืช ื˜ืงืกื˜
    • ื”ืžืฉืชืžืฉ ื”ื‘ื:
      • ื™ืฉ ืกื™ื›ื•ื™ ืฉืœ 20% ืœื™ืฆื•ืจ ื“ื™ื•ืŸ ื—ื“ืฉ
      • ื‘ื•ื—ืจ ื‘ืืงืจืื™ ื›ืœ ืื—ื“ ืžื”ื“ื™ื•ื ื™ื ืฉืœื•
      • ื ื›ื ืก ืคื ื™ืžื”
      • ืžื‘ืงืฉ ื”ื•ื“ืขื•ืช, ืคืจื•ืคื™ืœื™ ืžืฉืชืžืฉื™ื
      • ื™ื•ืฆืจ ื—ืžืฉ ื”ื•ื“ืขื•ืช ื”ืžื•ืคื ื•ืช ืœืžืฉืชืžืฉื™ื ืืงืจืื™ื™ื ืžื”ื“ื™ื•ืŸ ื”ื–ื”
      • ืžืฉืื™ืจ ื“ื™ื•ืŸ
      • ื—ื•ื–ืจ 20 ืคืขืžื™ื
      • ืžืชื ืชืง, ื—ื•ื–ืจ ืœืชื—ื™ืœืช ื”ืกืงืจื™ืคื˜

    • ืฆ'ืื˜ ื‘ื•ื˜ ื ื›ื ืก ืœืžืขืจื›ืช (ืžื“ืžื” ื”ื•ื“ืขื•ืช ืžืงื•ื“ ืืคืœื™ืงืฆื™ื”)
      • ื™ืฉ ืกื™ื›ื•ื™ ืฉืœ 50% ืœื™ืฆื•ืจ ืขืจื•ืฅ ื—ื“ืฉ ืœื”ื—ืœืคืช ื ืชื•ื ื™ื (ื“ื™ื•ืŸ ืžื™ื•ื—ื“)
      • ืกื‘ื™ืจื•ืช ืฉืœ 50% ืœื›ืชื•ื‘ ื”ื•ื“ืขื” ืœื›ืœ ืื—ื“ ืžื”ืขืจื•ืฆื™ื ื”ืงื™ื™ืžื™ื

ื”ืชืจื—ื™ืฉ "ื—ื™ื‘ื•ืจื™ื ื‘ืœื‘ื“" ื”ื•ืคื™ืข ืžืกื™ื‘ื” ื›ืœืฉื”ื™. ื™ืฉ ืžืฆื‘: ืžืฉืชืžืฉื™ื ื—ื™ื‘ืจื• ืืช ื”ืžืขืจื›ืช, ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ื”ืกืชื‘ื›ื•. ื›ืœ ืžืฉืชืžืฉ ืžื“ืœื™ืง ืืช ื”ืžื—ืฉื‘ ื‘ืฉืขื” 09:00 ื‘ื‘ื•ืงืจ, ื™ื•ืฆืจ ื—ื™ื‘ื•ืจ ืœืฉืจืช ื•ืฉื•ืชืง. ื”ื—ื‘ืจ'ื” ื”ืืœื” ืžืกื•ื›ื ื™ื, ื™ืฉ ื”ืจื‘ื” ืžื”ื - ื”ื—ื‘ื™ืœื•ืช ื”ื™ื—ื™ื“ื•ืช ืฉื™ืฉ ืœื”ื ื”ืŸ PING/PONG, ืื‘ืœ ื”ื ืฉื•ืžืจื™ื ืขืœ ื”ื—ื™ื‘ื•ืจ ืœืฉืจืช (ื”ื ืœื ื™ื›ื•ืœื™ื ืœืฉืžื•ืจ ืขืœ ื–ื” - ืžื” ืื ื™ืฉ ื”ื•ื“ืขื” ื—ื“ืฉื”). ื”ื‘ื“ื™ืงื” ืžืฉื—ื–ืจืช ืžืฆื‘ ืฉื‘ื• ืžืกืคืจ ืจื‘ ืฉืœ ืžืฉืชืžืฉื™ื ื›ืืœื” ืžื ืกื™ื ืœื”ื™ื›ื ืก ืœืžืขืจื›ืช ืชื•ืš ื—ืฆื™ ืฉืขื”. ื–ื” ื“ื•ืžื” ืœืžื‘ื—ืŸ ืžืืžืฅ, ืื‘ืœ ื”ืžื™ืงื•ื“ ืฉืœื• ื”ื•ื ื“ื•ื•ืงื ื‘ืงืœื˜ ื”ืจืืฉื•ืŸ ื”ื–ื” - ื›ื“ื™ ืฉืœื ื™ื”ื™ื• ื›ืฉืœื™ื (ืื“ื ืœื ืžืฉืชืžืฉ ื‘ืžืขืจื›ืช, ื•ื”ื™ื ื›ื‘ืจ ื ื•ืคืœืช - ืงืฉื” ืœื—ืฉื•ื‘ ืขืœ ืžืฉื”ื• ื™ื•ืชืจ ื’ืจื•ืข).

ืกืงืจื™ืคื˜ ืจื™ืฉื•ื ื”ืžื ื•ื™ ืžืชื—ื™ืœ ืžื”ื”ืฉืงื” ื”ืจืืฉื•ื ื”. ืขืจื›ื ื• ืžื‘ื—ืŸ ืžืืžืฅ ื•ื”ื™ื™ื ื• ื‘ื˜ื•ื—ื™ื ืฉื”ืžืขืจื›ืช ืœื ืžืื˜ื” ื‘ืžื”ืœืš ื”ื”ืชื›ืชื‘ื•ืช. ืื‘ืœ ืžืฉืชืžืฉื™ื ื”ื’ื™ืขื• ื•ื”ืจื™ืฉื•ื ื”ืชื—ื™ืœ ืœื”ื™ื›ืฉืœ ืขืงื‘ ืคืกืง ื–ืžืŸ. ื‘ืขืช ื”ื”ืจืฉืžื” ื”ืฉืชืžืฉื ื• / dev / ืืงืจืื™, ืฉืงืฉื•ืจื” ืœืื ื˜ืจื•ืคื™ื” ืฉืœ ื”ืžืขืจื›ืช. ืœืฉืจืช ืœื ื”ื™ื” ื–ืžืŸ ืœืฆื‘ื•ืจ ืžืกืคื™ืง ืื ื˜ืจื•ืคื™ื” ื•ื›ืืฉืจ ื”ืชื‘ืงืฉื” SecureRandom ื—ื“ืฉ, ื”ื•ื ืงืคื ื‘ืžืฉืš ืขืฉืจื•ืช ืฉื ื™ื•ืช. ื™ืฉ ื”ืจื‘ื” ื“ืจื›ื™ื ืœืฆืืช ืžื”ืžืฆื‘ ื”ื–ื”, ืœืžืฉืœ: ืœืขื‘ื•ืจ ืœ-/dev/urandom ื”ืคื—ื•ืช ืžืื•ื‘ื˜ื—, ืœื”ืชืงื™ืŸ ืœื•ื— ืžื™ื•ื—ื“ ืฉื™ื•ืฆืจ ืื ื˜ืจื•ืคื™ื”, ืœื™ืฆื•ืจ ืžืกืคืจื™ื ืืงืจืื™ื™ื ืžืจืืฉ ื•ืœืื—ืกืŸ ืื•ืชื ื‘-pool. ืกื’ืจื ื• ื–ืžื ื™ืช ืืช ื”ื‘ืขื™ื” ื‘ื‘ืจื™ื›ื”, ืืš ืžืื– ืื ื• ืžื‘ืฆืขื™ื ื‘ื“ื™ืงื” ื ืคืจื“ืช ืœืจื™ืฉื•ื ืžื ื•ื™ื™ื ื—ื“ืฉื™ื.

ืื ื• ืžืฉืชืžืฉื™ื ื›ืžื—ื•ืœืœ ืขื•ืžืกื™ื JMeter. ื–ื” ืœื ื™ื•ื“ืข ืื™ืš ืœืขื‘ื•ื“ ืขื websocket; ื–ื” ืฆืจื™ืš ืชื•ืกืฃ. ื”ืจืืฉื•ื ื™ื ื‘ืชื•ืฆืื•ืช ื”ื—ื™ืคื•ืฉ ืขื‘ื•ืจ ื”ืฉืื™ืœืชื” "jmeter websocket" ื”ื: ืžืืžืจื™ื ืž- BlazeMeter, ืฉืžืžืœื™ืฆื™ื ืชื•ืกืฃ ืžืืช Maciej Zaleski.

ืฉื ื”ื—ืœื˜ื ื• ืœื”ืชื—ื™ืœ.

ื›ืžืขื˜ ืžื™ื“ ืœืื—ืจ ื”ืชื—ืœืช ื‘ื“ื™ืงื•ืช ืจืฆื™ื ื™ื•ืช, ื’ื™ืœื™ื ื• ืฉ-JMeter ื”ื—ืœ ืœื“ืœื•ืฃ ื–ื™ื›ืจื•ืŸ.

ื”ืชื•ืกืฃ ื”ื•ื ืกื™ืคื•ืจ ื’ื“ื•ืœ ื ืคืจื“; ืขื 176 ื›ื•ื›ื‘ื™ื, ื™ืฉ ืœื• 132 ืžื–ืœื’ื•ืช ื‘-github. ื”ื›ื•ืชื‘ ืขืฆืžื• ืœื ื”ืชื—ื™ื™ื‘ ืœื–ื” ืžืื– 2015 (ืœืงื—ื ื• ืืช ื–ื” ื‘-2015, ืื– ื–ื” ืœื ืขื•ืจืจ ื—ืฉื“ื•ืช), ื›ืžื” ื‘ืขื™ื•ืช github ื‘ื ื•ื’ืข ืœื“ืœื™ืคื•ืช ื–ื™ื›ืจื•ืŸ, 7 ื‘ืงืฉื•ืช ืžืฉื™ื›ื” ืœื ืกื’ื•ืจื•ืช.
ืื ืชื—ืœื™ื˜ ืœื‘ืฆืข ื‘ื“ื™ืงืช ืขื•ืžืก ื‘ืืžืฆืขื•ืช ืชื•ืกืฃ ื–ื”, ืื ื ืฉื™ื ืœื‘ ืœื“ื™ื•ื ื™ื ื”ื‘ืื™ื:

  1. ื‘ืกื‘ื™ื‘ืช ืจื™ื‘ื•ื™ ื—ื•ื˜ื™ื, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘-LinkedList ืจื’ื™ืœ, ื•ื”ืชื•ืฆืื” ื”ื™ื™ืชื” NPE ื‘ื–ืžืŸ ืจื™ืฆื”. ื ื™ืชืŸ ืœืคืชื•ืจ ื–ืืช ืขืœ ื™ื“ื™ ืžืขื‘ืจ ืœ-ConcurrentLinkedDeque ืื• ืขืœ ื™ื“ื™ ื‘ืœื•ืงื™ื ืžืกื•ื ื›ืจื ื™ื. ื‘ื—ืจื ื• ืœืขืฆืžื ื• ืืช ื”ืืคืฉืจื•ืช ื”ืจืืฉื•ื ื” (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. ื“ืœื™ืคืช ื–ื™ื›ืจื•ืŸ; ื‘ืขืช ื ื™ืชื•ืง, ืคืจื˜ื™ ื”ื—ื™ื‘ื•ืจ ืœื ื ืžื—ืงื™ื (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. ื‘ืžืฆื‘ ืกื˜ืจื™ืžื™ื ื’ (ื›ืืฉืจ ื”-websocket ืื™ื ื• ืกื’ื•ืจ ื‘ืกื•ืฃ ื”ื“ื’ื™ืžื”, ืืœื ื ืขืฉื” ื‘ื• ืฉื™ืžื•ืฉ ืžืื•ื—ืจ ื™ื•ืชืจ ื‘ืชื•ื›ื ื™ืช), ื“ืคื•ืกื™ ื”ืชื’ื•ื‘ื” ืื™ื ื ืคื•ืขืœื™ื (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 ืœ-hazelcast ื•ืจืื™ื ื• "ืžืกื•ืจ ืขื•ืœื”" - ื–ื” ื ืงืจื ื‘ืื•ืคืŸ ืงื‘ื•ืข 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 ื ื•ืฆืจ ืขื‘ื•ืจ ื›ืœ ืžื ื•ื™ ื•ื ืžื—ืง ื›ืืฉืจ ืœื ื”ื™ื” ืฆื•ืจืš ื‘ื•. ื”ื—ืœื˜ื ื• ืฉื ืชื—ื™ืœ ืืช Map , ื”ืžืคืชื— ื™ื”ื™ื” ืฉื ื”ืžื ื•ื™, ื•ื”ืขืจื›ื™ื ื™ื”ื™ื• ืžื–ื”ื™ ื”ืคืขืœื” (ืžืžื ื• ืชื•ื›ืœ ืœืงื‘ืœ ืžื–ื”ื™ ืžืฉืชืžืฉ, ื‘ืžื™ื“ืช ื”ืฆื•ืจืš).

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 ื•ืœืฉืžื•ืจ ืืช ื”ืžื•ื ื” ืฉื, ื•ืื– ื”ื‘ื™ืฆื•ืขื™ื ืฉืœ ื”ืฉื’ืช ืžื–ื”ื” ื—ื“ืฉ ื”ื incrementAndGet ื‘ืชื•ืกืคืช ื”ื–ืžืŸ ืœื‘ืงืฉื” ืœ-Hazelcast. ืื‘ืœ ืœ-Hazelcast ื™ืฉ ืžืฉื”ื• ืื•ืคื˜ื™ืžืœื™ ื™ื•ืชืจ - FlakeIdGenerator. ื‘ื™ืฆื™ืจืช ืงืฉืจ ืขื ื›ืœ ืœืงื•ื—, ื”ื ืžืงื‘ืœื™ื ื˜ื•ื•ื— ืชืขื•ื“ืช ื–ื”ื•ืช, ืœืžืฉืœ, ื”ืจืืฉื•ืŸ - ืž-1 ืขื“ 10, ื”ืฉื ื™ - ืž-000 ืขื“ 10 ื•ื›ืŸ ื”ืœืื”. ื›ืขืช ื”ืœืงื•ื— ื™ื›ื•ืœ ืœื”ื ืคื™ืง ืžื–ื”ื™ื ื—ื“ืฉื™ื ื‘ืขืฆืžื• ืขื“ ืฉื”ื˜ื•ื•ื— ืฉื”ื•ื ืคืง ืœื• ื™ืกืชื™ื™ื. ื–ื” ืขื•ื‘ื“ ืžื”ืจ, ืื‘ืœ ื›ืฉืžืคืขื™ืœื™ื ืžื—ื“ืฉ ืืช ื”ืืคืœื™ืงืฆื™ื” (ื•ืืช ื”ืœืงื•ื— Hazelcast), ืžืชื—ื™ืœ ืจืฆืฃ ื—ื“ืฉ - ื•ืžื›ืืŸ ื”ื“ื™ืœื•ื’ื™ื ื•ื›ื•'. ื‘ื ื•ืกืฃ, ืžืคืชื—ื™ื ืœื ืžืžืฉ ืžื‘ื™ื ื™ื ืœืžื” ื”ืžื–ื”ื™ื ื”ื ืžืกืคืจื™ื ืฉืœืžื™ื, ืื‘ืœ ื”ื ื›ืœ ื›ืš ืœื ืขืงื‘ื™ื™ื. ืฉืงืœื ื• ื”ื›ืœ ื•ืขื‘ืจื ื• ืœ-UUID.

ืื’ื‘, ืœืžื™ ืฉืจื•ืฆื” ืœื”ื™ื•ืช ื›ืžื• ื˜ื•ื•ื™ื˜ืจ, ื™ืฉ ืกืคืจื™ื™ืช Snowcast ื›ื–ื• - ื–ื• ื™ื™ืฉื•ื ืฉืœ Snowflake ืขืœ ื’ื‘ื™ Hazelcast. ืืชื” ื™ื›ื•ืœ ืœืฆืคื•ืช ื‘ื• ื›ืืŸ:

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

ืื‘ืœ ืœื ื”ื’ืขื ื• ืœื–ื” ื™ื•ืชืจ.

TransactionalMap.replace

ื”ืคืชืขื” ื ื•ืกืคืช: 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 ื—ื“ืฉ ืœืœื ื–ืžืŸ ื”ืฉื‘ืชื”

ืจืืฉื™ืช, ื”ื—ืœื˜ื ื• ืœื”ืงืœื™ื˜ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉืœ ื”ืฉื™ืขื•ืจื™ื ืฉืœื ื• ื‘ื”ืื–ืœืงืกื˜. ืœื“ื•ื’ืžื”, ื™ืฉ ืœื ื• ืžื—ืœืงื” 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 ืœื ืฆืจื™ืš ืœื“ืขืช ืืช ืžื‘ื ื” ื”ืฉื™ืขื•ืจื™ื ืฉืœื ื•, ื•ืื ื—ื ื• ื™ื›ื•ืœื™ื ืœืขื“ื›ืŸ ืœืœื ื–ืžืŸ ื”ืฉื‘ืชื”. ื’ื™ืจืกืื•ืช ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ ื“ื•ืžื™ื™ืŸ ื ืฉืœื˜ืช ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื”. ื’ืจืกืื•ืช ืฉื•ื ื•ืช ืฉืœ ื”ืืคืœื™ืงืฆื™ื” ื™ื›ื•ืœื•ืช ืœืจื•ืฅ ื‘ื•-ื–ืžื ื™ืช, ื•ื™ืชื›ืŸ ืžืฆื‘ ืฉื‘ื• ื”ืืคืœื™ืงืฆื™ื” ื”ื—ื“ืฉื” ื›ื•ืชื‘ืช ืื•ื‘ื™ื™ืงื˜ื™ื ืขื ืฉื“ื•ืช ื—ื“ืฉื™ื, ืืš ื”ื™ืฉื ื” ืขื“ื™ื™ืŸ ืœื ื™ื•ื“ืขืช ืขืœ ืฉื“ื•ืช ืืœื•. ื•ื‘ืžืงื‘ื™ืœ, ื”ืืคืœื™ืงืฆื™ื” ื”ื—ื“ืฉื” ืงื•ืจืืช ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื ื›ืชื‘ื• ืขืœ ื™ื“ื™ ื”ืืคืœื™ืงืฆื™ื” ื”ื™ืฉื ื” ืฉืื™ืŸ ืœื”ื ืฉื“ื•ืช ื—ื“ืฉื™ื. ืื ื• ืžื˜ืคืœื™ื ื‘ืžืฆื‘ื™ื ื›ืืœื” ื‘ืชื•ืš ื”ืืคืœื™ืงืฆื™ื”, ืืš ืœืฉื ื”ืคืฉื˜ื•ืช ืื™ื ื ื• ืžืฉื ื™ื ืื• ืžื•ื—ืงื™ื ืฉื“ื•ืช, ืื ื• ืจืง ืžืจื—ื™ื‘ื™ื ืืช ื”ืžื—ืœืงื•ืช ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืฉื“ื•ืช ื—ื“ืฉื™ื.

ื›ื™ืฆื“ ืื ื• ืžื‘ื˜ื™ื—ื™ื ื‘ื™ืฆื•ืขื™ื ื’ื‘ื•ื”ื™ื

ืืจื‘ืข ื ืกื™ืขื•ืช ืœื”ืื–ืœืงืกื˜ - ื˜ื•ื‘, ืฉืชื™ื™ื ืœืžืื’ืจ - ืจืข

ืžืขื‘ืจ ืœืžื˜ืžื•ืŸ ืขื‘ื•ืจ ื ืชื•ื ื™ื ื”ื•ื ืชืžื™ื“ ื˜ื•ื‘ ื™ื•ืชืจ ืžืืฉืจ ืžืขื‘ืจ ืœืžืกื“ ื”ื ืชื•ื ื™ื, ืื‘ืœ ืืชื” ื’ื ืœื ืจื•ืฆื” ืœืื—ืกืŸ ืจืฉื•ืžื•ืช ืฉืื™ื ืŸ ื‘ืฉื™ืžื•ืฉ. ืื ื—ื ื• ืžืฉืื™ืจื™ื ืืช ื”ื”ื—ืœื˜ื” ืœื’ื‘ื™ ืžื” ืœืžื˜ืžื•ืŸ ืขื“ ืœืฉืœื‘ ื”ืื—ืจื•ืŸ ืฉืœ ื”ืคื™ืชื•ื—. ื›ืืฉืจ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื—ื“ืฉื” ืžืงื•ื“ื“ืช, ืื ื• ืžืคืขื™ืœื™ื ืจื™ืฉื•ื ืฉืœ ื›ืœ ื”ืฉืื™ืœืชื•ืช ื‘-PostgreSQL (log_min_duration_statement ืœ-0) ื•ืžืจื™ืฆื™ื ื‘ื“ื™ืงื•ืช ืขื•ืžืก ืœืžืฉืš 20 ื“ืงื•ืช. ื‘ืืžืฆืขื•ืช ื”ื™ื•ืžื ื™ื ืฉื ืืกืคื•, ื›ืœื™ ืขื–ืจ ื›ืžื• pgFouine ื•-pgBadger ื™ื›ื•ืœื™ื ืœื‘ื ื•ืช ื“ื•ื—ื•ืช ืื ืœื™ื˜ื™ื™ื. ื‘ื“ื•ื—ื•ืช, ืื ื• ืžื—ืคืฉื™ื ื‘ืขื™ืงืจ ืฉืื™ืœืชื•ืช ืื™ื˜ื™ื•ืช ื•ืชื›ื•ืคื•ืช. ืขื‘ื•ืจ ืฉืื™ืœืชื•ืช ืื™ื˜ื™ื•ืช, ืื ื• ื‘ื•ื ื™ื ืชื•ื›ื ื™ืช ื‘ื™ืฆื•ืข (EXPLAIN) ื•ืžืขืจื™ื›ื™ื ื”ืื ื ื™ืชืŸ ืœื”ืื™ืฅ ืฉืื™ืœืชื” ื›ื–ื•. ื‘ืงืฉื•ืช ืชื›ื•ืคื•ืช ืขื‘ื•ืจ ืื•ืชื ื ืชื•ื ื™ ืงืœื˜ ืžืฉืชืœื‘ื™ื ื”ื™ื˜ื‘ ื‘ืžื˜ืžื•ืŸ. ืื ื• ืžื ืกื™ื ืœืฉืžื•ืจ ืฉืื™ืœืชื•ืช "ืฉื˜ื•ืช", ื˜ื‘ืœื” ืื—ืช ืœื›ืœ ืฉืื™ืœืชื”.

ื ื™ืฆื•ืœ

SV ื›ืฉื™ืจื•ืช ืžืงื•ื•ืŸ ื”ื•ืคืขืœ ื‘ืื‘ื™ื‘ 2017, ื•ื›ืžื•ืฆืจ ื ืคืจื“, SV ืฉื•ื—ืจืจ ื‘ื ื•ื‘ืžื‘ืจ 2017 (ื‘ืื•ืชื” ืชืงื•ืคื” ื‘ืกื˜ื˜ื•ืก ื’ืจืกืช ื‘ื˜ื).

ื‘ืžืฉืš ื™ื•ืชืจ ืžืฉื ื” ืฉืœ ืคืขื™ืœื•ืช ืœื ื”ื™ื• ื‘ืขื™ื•ืช ืจืฆื™ื ื™ื•ืช ื‘ืชืคืขื•ืœ ื”ืฉื™ืจื•ืช ื”ืžืงื•ื•ืŸ ืฉืœ CB. ืื ื• ืขื•ืงื‘ื™ื ืื—ืจ ื”ืฉื™ืจื•ืช ื”ืžืงื•ื•ืŸ ื‘ืืžืฆืขื•ืช ื–ืื‘ื™ืงืก, ืœืืกื•ืฃ ื•ืœืคืจื•ืก ืž ื‘ืžื‘ื•ืง.

ื”ืคืฆืช ืฉืจืช SV ืžืกื•ืคืงืช ื‘ืฆื•ืจื” ืฉืœ ื—ื‘ื™ืœื•ืช ืžืงื•ืจื™ื•ืช: RPM, DEB, MSI. ื‘ื ื•ืกืฃ ืขื‘ื•ืจ Windows ืื ื• ืžืกืคืงื™ื ืžืชืงื™ืŸ ื™ื—ื™ื“ ื‘ืฆื•ืจื” ืฉืœ EXE ื™ื—ื™ื“ ืฉืžืชืงื™ืŸ ืืช ื”ืฉืจืช, Hazelcast ื•- Elasticsearch ืขืœ ืžื›ื•ื ื” ืื—ืช. ื‘ืชื—ื™ืœื” ื”ืชื™ื™ื—ืกื ื• ืœื’ืจืกื” ื–ื• ืฉืœ ื”ื”ืชืงื ื” ื›ื’ืจืกืช "ื”ื“ื’ืžื”", ืืš ื›ืขืช ื”ืชื‘ืจืจ ื›ื™ ื–ื•ื”ื™ ืืคืฉืจื•ืช ื”ืคืจื™ืกื” ื”ืคื•ืคื•ืœืจื™ืช ื‘ื™ื•ืชืจ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”