αα
αααα»αα’αααααααα ααΎαααΉααα·ααΆαα’αααΈαααα αα·αααΌαα ααα»αααααΎαα’αα·αααα
ααααααααα’αααααααα (ααα αααα α ααΆ SV) ααΊααΆααααααααααααΎααΆααααα ααα αΆα αα·αα’ααα±αα ααααααα α»αααΆαα½αααΉαααΆααααααααΆαααΆααΆα SV ααααΌαααΆααα ααΆα‘αΎαααΆααααΆαααααααα»αααααα ααΆαα½αααΉααααααααΆαααααΎααΆαααααααΆαααααα α’αΆα ααααΎααΆαααΆααααααΆααααα’αα‘αΆα (αααααααα 1C) αα·αααΆααα·ααααααααα·ααααΆαα αααΎα αααα’αΆα ααΆααα±ααααααΎααααΆαααα ααΎα§ααααααααΆαααΈαααααααΆαααααα½αααααα’αααα
SV ααααΎααα ααααα»ααααααΆαα
ααα
αΆα
ααΆααααααΎααααα αΆ
ααΎααααΈαααααΆααα±ααα αααΆααααΆα ααα»α’αααΈααΆαααΆααΎααααααΎαααααααααα’αααααααα αααα»αααΉαααααΆααα’αααααααα·α α’αααΈαααααααααΆαα’αα·αααααααααααα·ααΈα’αΆααΈααααααα αααα»α 1C ααααΎαααΆαα
ααΎααααΈα αΆααααααΎαααΆαα½αααΎαααααα·α αααααΆααα’αααααααα·αααΆααααΉαααΆααΎαααααΎα’αααΈ :) ααΎααααα»ααααααΎααααα·ααΆαα αα αααα·ααααΆ 1C: αα ααααΆαα αααα·ααΆααααα½ααααα αΌαα§αααααα’αα·αααααααααααα·ααΈα’αΆααΈααααα ααααΌα ααΆααααααααααΎαααΆααααα’αα»ααααΆαα±αααααααα·ααΈα’αΆααΈαααααααααΎαααΆααααα»αααα·ααΆααΆααααααααα·ααΆα
ααααΌα’αα·αααααααααΆαααΈαααααα-αααΆαααΈααα
αααααα·ααΈα’αΆααΈααααααααααΆααααααΎααα
ααΎ 1C: αα ααααΆαααααΎαααΆααααα»αααααα·αααΈ
αα
αααα»αααΌααααααα·ααΈ ααααααΆααααΈαα·αα·ααΈ αα·ααα»αααΆαααααΌααααααα αΆααααΆαα
αααΆααααΈαααααααααααΌαααΉαααααΌαααΆαααααα·ααααα· - αααααααΎααΆαααααΆα &AtClient / &AtServer (&AtClient / &AtServer ααΆααΆααΆα’αααααααααΆααΆααΆ)α α₯α‘αΌαααα α’αααα’αα·αααααα 1C ααΉααααααααΌααααα»αααααα·ααΆαααΆααΆαααααΆαααΊαα·αααΆ
α’αααα’αΆα α α ααΌααααΆαααΈαααααΈααΌαα’αα·αα·αα ααα»ααααα’ααααα·αα’αΆα α α ααΌααααΆαααΈααααααααΈααΌααααΆαααΈαααααΆαααα αααβααΆβααααα·αβααΌαααααΆαβαααβααΎαβααΆαβαααααΎαβαααβα ααα»ααβαα½αβα ααα½αα ααΆαα·ααα αααααΆαααααΌααααΆαααΈαααααααΌααααααααααΆααααααααααΆααααα·ααααα·ααΆααα·ααΈααΌα ααααΆ αα·αααΆααΆααααΌαααΆαααα α ααΆαα ααααααααΆααααα - ααΈαααΆαααΈαααααα α¬ααΈαααΆαααΈαααα α αΎαβαααα»αααααΈβαααβα α βααΌαβαααΆαααΈαβααβααΈβααΌαβαααΆαααΈαβαααααΎβαααααβααα αααβαα·αααΆαβαααΆαααΈααααααβααΌα βαααααα α αΎααααααΆααααααα»αα’αα‘α»ααααααααα·ααααα·ααααΌααααΆαααΈααα α’αα·αα·αααααααΆαα α ααΆα’αΆα αα·α α ααααΈαααααα·ααΈ α αΎααααΆαααΈαααααΉααααααΆαααααΆααααΆααα α α
ααΌαααααααααααααααΆαα
α»α
αααΌαα»αα ααΆαα α
ααααΎαααΆααααΆαααΈαααααΈαααΆαααΈααααααααΉαααααΎαααΆα ααΆαα α
ααΈαα·αα·ααΈα’αα·αα·ααααΈαααΆαααΈαααααΉααα·α
αααααΆααααααΆ ααααα·αααΎααΎαα ααααααΎααΆααα½αα ααα½αααΈαααΆαααΈααααα ααΆαααααααα·ααΈα’αα·αα·αα α§ααΆα αααααΆ ααΆααααααΎααααΆαααΆααα "ααααΎαααΆαααΌα" ααΆααααα αα α αΎααααΆαααΆαααα’αΆα ααΎαααΆα ααΎααα·αααΆααα·ααΈααΆαααααααααααααα α’αααααααΌαααααΎαααα·α ααΆα§ααΆα ααα αααααααΎααααΆαααΈαααααΈααΌαα’αα·αα·ααααΆαααααΆααα ααα»αααααα·ααΈααΆαααααααααααα»αααααααααααΆαα½αααΉαααΆαα α ααΌααααααααααα·αα αΆαααΆα αα αΎαααΆααΌαα ααΎααα αα·αααΎαααΆαααΆααα
α αΎαβααβααΆαβαααααΌαβααΆαβαα½αβαααβααΆβα§ααΆα αααβαααβααΆαβα α
βααΌαααααβααβααα
ααα·ααααααααα½αα―α
αααααΎαααααααΆαααααΎααΆαα ααΏα αα½αα±αααα»αα α·ααα ααΆαα½αααΉαααΆαααΉααααααΌααααααΆαααΆαααΆααΆ ααΆαα½αααΉααααααααΆααααα»αααΆααααααααααΆααααααΆαααααααα αααααα’ααααΎααααααΆα α’αα»αααααααααα·ααΈααααΎααΆα (ααΆα ααΆαα α ααΆααΈααα’αΌ) αααααααΎαααΆααα αααα»ααααααα·ααΈ 1C α
αα ααΆααααααααα±ααααΆαααα ααααααα ααΆαααΎαα‘αΎαααααααα»αααααΌααααααααααααααααααΆααααααΎαα ααα½αααααΆααα
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
ααΎαααΆααααααα α α·ααααα·ααααα αΌαααααααααΆαααΈααααααα SV αααααααΆαααα αααα»α 1C:Enterprise platform ααα»ααααααΎααααΈα’αα»ααααααΆααΆααα·αααααΆα ααααα‘αα API αααα’αΆα ααααΌαααΆαα α α ααααΈααΌααααααααααααΆααααααα·ααΈ 1C α αααααααΌαααΆαααααΎαααααΆααα ααα»αααα½αα ααα½α αααααααΆαααααααΊαααα»αα ααααααΎα±ααααΆα’αΆα ααααΆααααααΌαααΆααααΆααααααα·ααΈ 1C ααααααααααΆ (α§ααΆα ααααααΆαααΆααααααααααααΆαα·ααααααα αα·αααααααα)α αααααα·ααΈ 1C αααααααααΆα’αΆα ααααΎαααΆαααΎαααααααααααααΆαα 1C: αααα·ααΆαα ααααΆα ααΆαααΈααΆαααα ααΎαααΆαααΈαααααααααααααΆααα αα αααα»αααααααααααααααααΆαα’αα»αααα SV ααΆααα·αααααΆα ααααα‘αααααααΆαααΈααΆαααα "α αα αα" ααααΆαααα‘αΎα 1C ααΊααΆαααααααααΆαααααα’αααα»αα
ααΌα
ααααα αΎα ααΎαααΆααααααα
α
α·ααααααααΎα SV ααΆααα·αααααΆα
ααααα‘ααα ααΎαααααΆαααΆαααα»αα αα»αααΌα
αααααΎαααΆαααΈααα CB αααααΎαααα‘αΎααα
αααα»ααααααααααΎα (wss://1cdialog.com) ααΎααααΈαααααΆαααΆαα
αααΆαααΎααααααΆααααααΉαααΆαααα‘αΎα αα·αααΆαααααααα
ααΆαααααααααααΆαααΈαααα α’αα·αα·ααααα’αΆα
αααααΎαααΆ ααΆααααΌαααΆαααααΆαα±ααααα‘αΎααααΆαααΈααα CB ααααΆαααααα½ααααααα½ααααα
α―αααααααααααα½αααα ααΎαααΆαααααΎαα·ααΈααΆαααααααααααααααΆαα
αααα»αααα·ααα SaaS αααααααααΎαα
αααααα·ααΈ
ααΎααααΈα ααα αΆαααααα»α αα·αααΆαα’ααα±αα ααααααα α»α ααΎαααΉαααΆαααααααΆααααααα·ααΈ Java αα½ααα·αααααα ααα»ααααααΆααααααα·ααΈααΆα αααΎαααΆαα½αααΉαα§ααααααααα»ααα»αααααΆααα ααΈαα»ααα½αααα ααααα·αααΎα’αααααααΌαααΆααααααααΆαααΈ node αα node ααΌαααααΎ Publish/subscribe αα αααα»α Hazelcastα
ααΆαααααΆαααααααααΆαα’αα·αα·αα αα·ααααΆαααΈαααααΊααΆαααα websocket α ααΆααααα’αααααΆαααααααααααααααααΆαα·αα
ααααΆαααααααΆαααααααΆαα ααα αΆα
ααΎαααΆαααααΎαααΎααααΆα Redis, Hazelcast αα·α Ehcache α ααΆααΆααααΆα 2015 α Redis ααΎααααααα
ααααΌαα
αααααααααΈ (ααααΈααααα½αα±ααααααΆα
) ααΆα Sentinel ααΆαα½αααΉαααΆαααΉααααααΉαααΆα
αααΎαα Ehcache αα·αααΉαααΈαααααααααΌααααα»ααα
ααΆα
ααααααα (αα»αααΆααααααΆααααα αΆααααα½ααα
αααααααα)α ααΎαααΆααααααα
α
α·αααααΆαααααααΆααΆαα½α Hazelcast 3.4 α
Hazelcast ααααΌαααΆααααααΌααααα»αααΆα
αααααα
ααααΈαααα’ααα αα
αααα»ααααα node αααα½α ααΆαα·αααΆαααααααααααααΆαααα α αΎαα’αΆα
ααααΎααΆαααααΆααααΆαααααααΆααααα»ααααα - ααΆαα·αααΉαααΈαααααααα
αααα·αααααααα
ααΈααα ααααα·αααΎα’αααααΆαααααααααΆαααααα½α α’αααααΉαααΆααααααα·ααααααα ααΎαααΆαααααααΆα Hazelcasts ααΆα
αααΎα ααααααΆαααΎαααααα»ααα»ααα·ααααααααααΆααα ααΎααα·αααααα»ααα»αααααΆαααααααΆαααα - ααΎααα·ααααααααΈααΆααα
αααααΆαααα½αααΎα Hazelcast ααΊα
- ααΆααααα»αααααα’αααααααΎααααΆααα ααΆααααΌαααΆααααααΌαααΎααααΈα αΌααα ααΆαα database αααααΆαα session ααΆααααα ααΌα ααααααΎαααΆαα session ααΆααα’αααα αααα»α Hazelcastα
- ααααΆααβαααααΆααα ααααα·αααΎα’ααααααα»ααααααααααααααα’αααααααΎααααΆαα ααΌααα·αα·αααααΎαααααΆαααααααΆααα ααΆααααααααΆαααααΈ - ααΆααααΆαα αααα»αααααΆαααααααΆααα
- αααααΆααααααααΆααααΆαααααΆαααααααααΆααααααα·ααΈα ααααΆαααααααΎαααααΉαααα·ααΆααααα½α α αΎαααΆααααΆαα αααα»ααααααΆααα Hazelcast α ααααΆαααααααα·ααΈαααααααααααααΆαααΆααααααΆααααααααα½α αα·αααααΎαααΆαααααΉαααα·ααΆαααα
- ααΆαα αΆααααα αααααα α§ααΆα ααα ααΎααααααΎαααΆααα·ααΆααααΆαααααααΎαααααΉααα·ααααα½α (ααΆααα·ααΆααααΆα―αααααααααα»αααΌαααααΆααα·αααααα 1C)α
conversationKeyChecker.check("ΠΠΠΠΠΠΠΠΠΠΠΠ");
doInClusterLock("ΠΠΠΠΠΠΠΠΠΠΠΠ", () -> {
conversationKeyChecker.check("ΠΠΠΠΠΠΠΠΠΠΠΠ");
createChannel("ΠΠΠΠΠΠΠΠΠΠΠΠ");
});
ααΎαβααΆαβαα·αα·αααβααΎαβααΆβααααΆαβααΆαααβααα ααΎαααΆααααα αα·αα·αααααΆααααααα αα·ααααααΎαααΆα ααααα·αααΎα’ααααα·ααα·αα·αααααΎααααααααΆααααΈα αΆαααααα αααααΆααΆαα±ααΆαααααααααααα‘αΆαααααααααααΆααα·αα·ααααα αααααα α αΎαα₯α‘αΌααααααΉαααααΆααΆααααααΎαααΆααα·ααΆααααΆααΌα ααααΆ - ααα»ααααααΆααΆααα½α α αΎαα α’ααααα·αα’αΆα α αΆαααααααααααΎ java Lock αααααααΎααααΆααααα α¬ααααααΆααΆαααα ααΆααααααΌαααααΆααα·αααααα - ααΆααΊα α αΎαααΆααΆααΆαα’αΆαα·ααααααΆααααΌαααααΆααα·αααααα ααΆαααα Hazelcast - αααα αΎαααΆα’αααΈαααα’αααααααΌαααΆαα
ααΆαααααΎαααΎα DBMS
ααΎαααΆααααα·ααααααααΆαααΌααααΌααΆα αα·ααααααααααα»αααΆαααααΎααΆαααΆαα½α PostgreSQL αα·ααα ααΆαααΆαα½αα’αααα’αα·αααααα DBMS αααα
ααΆαα·αααΆααααα½αααααΆαα½αααΉααααα»α PostgreSQL - ααΆα
ααααα·αααΎα’αααααααΌαααΆαααααΎααΆαααααααΆαααΌαααααΆααα·ααααααααααΆαααααα αααααΆααααααΆ
ααααααααΌαααααΆααααα ααααααααΎααααααααΆααΆαααααααΆαα ααα αΆαααΆααΆαααΈαα½αααααααααα·ααΈααααααΎαααααααΆαααααΆαααΈαααααααααααααΆαααα»ααααΆααΆαααααααααααααΆα ααΆαααΆαααΆα αααΎααα ααΎαααΆαααΈααα A - ααΌαααΎαααααΆααααΈαααααααααΆααΆαααααα αααΆαααΈααα Bα ααΆααααααα α α·ααααααααααΆαααααααααα’αααΈααΆααααααΎαααααα·αααααΆααα»αα’αΆαα» ααΌα ααααααΎαααΆααααααα α α·αααααΆααααααα·ααααα½αααΎααα ααΉααα·ααΈααΆααααααα α»ααα·ααα
α’αααα’αΆα
α’αΆαα’αααΈα’ααααα½αα
αααΎαα§ααΆα ααααα
ααΎααα ααααα
SV ααΆαααααααα·ααααααααα·ααΈ αα·αα’αα·αα·ααα αααααα·ααΈααΊααΆααΆαααα‘αΎαααΆααααΆαααααααααα·ααΈα’αΆααΈααααα ααΌα ααΆ ERP α¬ Accounting ααΆαα½αααΉαα’αααααααΎααααΆαα αα·ααα·ααααααα’αΆααΈαααααααααααΆα α’αα·αα·ααααΊααΆααααΆααα α¬αα»ααααααααααα½αα²ααααΆααααα»αααααΌαααΆαα α»αααααααα αααα»ααααΆαααΈααα SV α α’αα·αα·ααα’αΆα ααΆααααααα·ααΈααΆα αααΎααααααΆαα α»αααααα α αΎααααααα·ααΈααΆαααααα’αΆα ααααΆααααααΌαααΆαααααΆαα αα·ααα ααα α’αα·αα·ααααΆαααααΆαααΆα’ααααα½ααα αααα»αααααααααααααααΎαα ααΆαααΈα’αα·αα·ααααΆα αααΎαα’αΆα ααΆαααΈααΆαααα αααα»αααΌαααααΆααα·ααααααααΆααααααααα½αα ααααα·αααΎααΎαααΎαααΆα’αα·αα·ααααΆαα αΆααααααΎααααααΎαα ααΆα αα αααΎα ααΎαααααΆααααΈααΆαα ααΌαααααΆααα·ααααααααΆαααααααααΆα ααααα‘αα (α¬ααΌααααΈαααααΆαααΈαααααΌαααααΆααα·ααααααααΆα ααααα‘αα)α
ααΎαβααΆαβααΌαααααΆαβαα·ααααααβααααΆααβαααβααΆααΆαβαααααβααααΌαβααααΌαβααΆαβαααααΆβαα»αβααΆαα½αβααΉαβααααααΆαβα’αααΈβααΈααΆααβααβααΌαααααΆαβαα·ααααααβα’αα·αα·ααβααΆααα’ααα
ααΎααααΈααΆαααΆαααΌαααααΆααα·ααααααα
ααααααΈααΆαααΆααααΆαα ααΎααααααΆαα»αααΆααΆαααααΌα (αα·ααα·αααααααααααααΌαααΆαααΉαααΆαααααααααα) αα
αααα»αααααΆαααααααΆααα
ααααα·αααΎααΌαααααΆααα·ααααααααααα’αααααΆαα
αΆααααααΎαααΊα ααΎαααΉαααΆααααΆααΆααΆαααΆααα
ααΆααααα»αα αα
ααΎαααααααααααααααααααΎαααααΎ
αααααΆαααΆαααΆαααααααΆαααααα’αααααααΎααΊαα·αααα’ ααΎααααααΆααΌαααααΆααα·ααααααααααααΎαααΆαα½αααΉαααΆαα ααααα ααΆααα½ααααα αΌαααααΆααααΆαα ααααααΆαααααΆααααα αα·αα’ααααΆαα’αα»ααααΆαα±ααα’αααααΆααΆαααα½αα’ααααααα»αααααΈααΆαααααααΌαααααΆααα·ααααααααααΆααα ααΆαααΆαααααααΆαααΉαααΎαα‘αΎααα»αααααΆααααΌαααααΆααα·ααααααα αααα αα·αααΆαα ααααααΆαααααΆαααααααααααΆαααΆααααααα»ααααααααΆαααααΆα
ααααα·αααΎβααΆαα
ααααβαααβααααΎααααΆαααααβααααΌαααΆαβααΆααααα αααβααΆαα
ααααβα’ααααΆαβααΉαβααααΆαααΆβααααΆαααααα
ααααα·αααΎααΌαααααΆααα·ααααααα
ααααααααΌαααΆαααΆααααα ααΆαα
ααααααααΆαααααααααΆαααΆααΌαααααΆααα·ααααααααααΆαα α αΎαααΆαα
ααααα’ααααΆαααΉαααααΆαααΆααΆαα
ααααααααΆαααααα
Elasticsearch αααααΆααααΆαααααααα
α
αΆααααΆααααΈαααα»αα
αααααααααααααααα SV ααααΆα’αααααΆαααΆαααα ααΆααΆαααΆαααΆαααααααααα αα ααΆααααα½α αα·αα’αΆα
ααααααααΆα ααααα·αααΌαααΈααΌααα·ααααΆ αααααααΎααΆαααααΌαααααα·αα
αααΆααααΆααα ααΎαααΆααααααα
α
α·ααααα·ααααααΎααααα‘αΎααα·α α αΎαααααΎαααΆαααΈααααααααα₯ααα·ααααα Elasticsearch ααααααααΎαα‘αΎααααααα’ααααΎαααααΆααα
αα
ααΎ github ααΎαααΆαααααΎα
α αΎαα«αααααΆααα "α’ααααα" ααααΉαααααΌαααΆααααααΆαα»ααααααα αα·ααΈααΆααααααααα’αα»ααααΆαα±ααα’αααααααααααα ααΎα αααααΆα αα·ααα α α»ααααα ααααααΆαααα
ααΌαααΆααα
ααααΎαααααααααΌαααΌαααΆαααΈααΎαα’ααααα ααα»ααααααΆαα½αααΉαααΆαααααααα
- Balancer ααΆααααααΆααα ααΎα’ααΈαααΊαα·α; ααΎαααΆα nginx ααΆα’αΆα ααΆααΆαα½αα
- αααααα·ααΈ Java ααΆααααααααΆαα αα·ααα ααααΆαααα Hazelcast α
- ααΎααααΈααααΎααΆαααΆαα½ααααααΆα socket ααΎαααααΎ
αα»αααα . - αααααα·ααΈ Java ααααΌαααΆαααααααααα»α Java 8 α αΎαααΆαααααα»α
α’αΌαααΈααΈ . αααααΆααα½αααΆαααΆαααααΎα αααΆααααα»ααα Java 10 αα·αααΆαααααΆααααααΌααα αααΌαα»αα
ααΆαα’αα·αααααααα·αααΆαααααΎααααα
αα αααα»αααααΎαααΆαααααΆααααααΎα αα·αααΆααααα SV ααΎαααΆααα½ααααααααΌααααααααα·ααααα½αα±ααα αΆααα’αΆαααααααα½αα ααα½αααααα·ααααααααΎαααααΎα
αααα»αααΆαααααΎααααα αα·αααΆαααα ααααΆαα’αααα αα αΆα
ααΆαα ααααααΆα SV ααΈαα½ααααΆαααααααααΉαααΆαααααΎααααααααα»αα ααΆαααααααα αααα
- ααΆαααααΎααααααααααΆαααααΎαααΆαα’ααααααααααΆα αααΎαααααα αΎααα·αααΆαααΆααααΆαααααααααΆααααααα
- αααααααΆααααΎααααααααΆααααααα·ααααα·ααΆααααααΉααα·αααΎαααΈααααα·ααααααΆααααα½ααααααα
- ααΆαα α»ααααααααααΆαα’αα»ααααααΎαααααααααα ααΉααααααα»αααΊαα·αααΎαααΈ 10%
ααΎααααααααΌαααααΆααα·ααααααααΆαααααααΆαα½αααΉααα·αααααα - ααΎααααΈααααΎααΌα αααααΎαααα½αααΆαααααααΆαα’αααΈα’αα·αα·ααααααααααα»αααΈαααΆαααΈαααααα·ααααα αα»ααααααααααΆααα 5 (α ααα½αααΆα ααΆααα·ααΆααααΆ α’αααααααΎααααΆαα) α αΎαααΆαααααααΆααΆααα·ααΈαααα
ααΎαα’αα»ααααααΆαααααΎααααααααα»αααααααααααα’αααααααααααα»αααΆαααααααα ααΆααααααααα ααα½αααΈα
- ααΆαααααΎαααααααΆαααΆαααΉα
- ααΆααααααΆααααααα»ααααα
- ααΆαα α»ααααααα’αα·αα·αα
αααα»αα’αα‘α»ααααααααΎαααααααΆαααΆαααΉα ααΎαααΎαααααΎαααΆααααααααα‘αΆαααΆα αααΎααα α αΎααα½ααααααα»αααααααααααααα·ααααα ααΆααααααααΆα αααααΎαααΆααα·ααΆααααΆ ααα½ααααααΈααΆαα ααΎααααααααααΎαααααααΆαααααα’αααααααΎααααααΆ (ααα½αααΆααααααΈααΆαααααα·αααΆααα’αΆααααααααα»α ααααααα ααααΆααααΆαα) αα·ααααααααααΆααααααα·ααΈ (αααααΌααααα ααααααΆαααααααα ααΆααααααααααααα ααααΎαααΆαααΆαααΌαααααΉα)
α§ααΆα ααα αααβααΆβαααααβααβααΆαβααααΎβαααααβαααααααβααΎαβαα βααΌα βααΆα
- α’αααααααΎααααΆααα
αΌα
- ααααΎαα»αααΆααα·ααΆααααΆααααα·αααΆααα’αΆαααααα’αααα
- 50% ααααααΆα’αΆαααΆα
- 50% ααααααΆααΉαααααΎααΆα
- α’αααααααΎααααΆαααααααΆααα
- ααΆαα±ααΆα 20% αααα»αααΆααααααΎαααΆααα·ααΆααααΆααααΈα
- ααααΎαααΎαααΆααα·ααΆααααΆααΆαα½αααααααΆαααα ααααα
- α αΌααα ααΆααααα»α
- ααααΎαα»αααΆα ααααααα’αααααααΎααααΆαα
- αααααΎαααΆαα ααα½αααααΆαααααΎαα ααΆααα’αααααααΎααααΆααα αααααααΈααΆααα·ααΆααααΆαααα
- αα»αααΆααα·ααΆααααΆ
- ααααΎααααααα 20 αα
- α αα αααα‘αααα ααΎαααααααΈααα·αα
- chatbot α
αΌααα
αααα»ααααααααα (ααααΆααααΆαααΆαααααΎααΆαααΈααΌααααααα·ααΈ)
- ααΆαα±ααΆα 50% ααααΆααααααΎαααΆαααααααΈαααααΆααααΆαααααΆααααααΌααα·αααααα (ααΆααα·ααΆααααΆαα·ααα)
- 50% ααααααΆαααααααΆααα ααΆαααααααΆαααΆαα½ααααααΆαααααΆαα
ααααΆααΈαααΌ "ααΆααααααΆααααααα»ααααα" ααΆααααα αΆααααα½ααααααΆααα ααα»αααα½αα ααΆαααααΆαααΆααα½αα α’αααααααΎααααΆααααΆαααααΆαααααααααα ααα»αααααα·αααΆααααΆαα αΌααα½αα α’αααααααΎααααΆααααααΆαααααΎααα»αααααΌααααα αααα 09:00 ααααΉα αααααΎαααΆααααααΆαααα αααΆαααΈααα α αΎααα αααααα αα»ααααΆαααααααΆααααααααααΆαα ααΆααα½αααααΆα αααΎα - αααα αααααα½ααααααααα½αααααΆαααΊ PING/PONG ααα»αααααα½ααααααααΆααΆαααααΆαααα αααΆαααΈααα (αα½ααααα·αα’αΆα αααααΆααΆααΆααα - α α»αααααα·αααΎααΆαααΆαααααΈ) α ααΆαααααΎαααααααααααααΎαα‘αΎααα·αααΌαααααΆαααΆααααα’αααααααΎααααΆαααααααααα½αα ααα½αααααααΆααΆαα αΌααααααααααααα»ααααααααααααααααα ααΆαααααααα ααΉαααΆαααααΎαααααααααααα ααα»ααααααΆααααααα’αΆααααααααααααΆα αααΆααααΆααααΎααΆααααα αΌαααααΌαααα - ααΎααααΈαα»αα±ααααΆαααΆααααΆααα (ααα»αααααααΆαααα·αααααΎαααααααα α αΎαααΆααΆαααααΆααα α»ααα½α αα α αΎα - ααΆαα·ααΆααααα»αααΆααα·αααΈα’αααΈαααα’αΆαααααααΆαααα) α
ααααααΈαα
α»ααααααα’αα·αα·ααα
αΆααααααΎαααΈααΆαα
αΆααααααΎαααααΌαα ααΎαααΆαααααΎαααααααααααα α αΎαααααΆααααΆαααααααααα·αααα
α»αα’αα‘α»ααααααααΎαααααα ααα»ααααβα’αααβααααΎβααΆαβααβααα α αΎαβααΆαβα
α»αβαααααβααΆαβα
αΆααβααααΎαβαααΆαααβαααβααΆαβα’ααβαααα αα
αααα
α»ααααααααΎαααααΎ
ααΎαααααΎααΆαααΆαααΈααααααΎαααααα»α
αααα αΎαααΆαααααααααααΎααααααα α α·αααα αΆααααααΎαα
ααααΎαααααααΆαααααααΆααααΈα αΆααααααΎαααΆαααααΎαααααααααααααα ααΎαααΆαααααΎαααΆ JMeter α αΆααααααΎαααα ααααΆαααΆαα αα αΆαα
αααααα·ααΈαααα½αααΊααΆααΏαααααΆα
ααααα‘αααα½ααααααΆαααααΆα 176 ααΆααΆα 132 αααα
ααΎ github α α’ααααα·αααααααα½αα―ααα·αααΆαααααααααΆα
α·αααα
ααααααΆααα
αΆααααΆααααΈααααΆα 2015 (ααΎαααΆαααααΆαα
ααααΆα 2015 αααααΆααααααΆαα·αααααα±ααααΆαααΆααααααααα) αααα αΆ github ααΆα
αααΎαααΆααααααΉαααΆαααα
ααααΆαα’αααα
αα
αΆα 7 ααααΎααΆαααααα·ααα·αα
ααααα·αααΎα’ααααααααα
α
α·αααααααΎααΆαααααΎααααααααα»ααααααααΎαααααα·ααΈαααα½αααα ααΌαααα
α·ααααα»αααΆααααΎααΆααα·ααΆααααΆααΆααααααα
- αα
αααα»αααα·ααΆααΆααα α»αααα αααααΈ LinkedList ααααααΆααααΌαααΆαααααΎααααΆαα α αΎαααααααααΊ
NPE αα αααα»ααααααααΎαααΆαα αααα’αΆα αααααααΆαααΆααααααΆαααααΌααα ConcurrentLinkedDeque α¬ααααααα»ααααααΆαααααΎααααΆαααααα ααΎαααααΎαααΎααααααΎαααααΌααααααΆαααααα½αααΎα (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43 ). - ααΆαααα
ααααΆαα’αααα
αα
αΆα; αα
αααααααΆα
αααααΆααααααααααααΆαααΆααααααΆαααα·αααααΌαααΆααα»ααα (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44 ). - αα
αααα»αααααααααααΈα (αα
αααααα websocket αα·αααααΌαααΆααα·ααα
α
α»ααααα
ααααααααΌ ααα»ααααααααΌαααΆαααααΎαα
αααααααααα
αααα»ααααααΆα) ααααΆαααααΎααααα·αααααΎαααΆααα (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19 ).
αααβααΊβααΆβαααααβαα½αβαααα»αβα ααααβα’αααβαα βααΎ githubα α’αααΈαααααΎαααΆαααααΎα
- ααΆααα
ααααΌαααααα Elyran Kogan (@elyrank) - ααΆαααααααΆααααα αΆ 1 αα·α 3 - αααααααΆααααα αΆ α’
- ααΆαβααααΎβαα αα α»ααααααααΆαβαααααΆαβααΈ 9.2.14 αα 9.3.12
- ααααααβααΆαααα·α ααααβααΆααααβαα»αβαααα»α ThreadLocal; SimpleDateFormat αα·αααΆααα»ααααα·ααΆααααααααα‘αΆα αααααΆααα ααα NPE αα αααααααΎαααΆα
- αα½ααα»αααΆαααα ααααΆαα’αααα αα αΆααααααααα (ααΆααααααΆααααααΌαααΆααα·ααα·αααααΉαααααΌααα αααααααΆα α)
α αΎααα ααα αΌα!
ααΆαα αα αΆαα αΆααααααΎαα’αααα·αααααααα»ααα½ααααααα ααα»ααααααΆααΈαα αα·αααΆααααααααΆαα ααααα ααΌα ααααα αΎα ααΎαααΆααααααα α α·αααααΎαααααΎαααΆααααααααα‘αΆααα·α ααΆααα»α ααα»αααααα ααΎααααΆααααΆαα ααα½ααα½αα ααααα½ααααααααααααΆαααααΆαα αα ααΆαααα½ααααααΆα αα
ααΈαααααααΆαααααααα»ααα ...
α₯α‘αΌαααα Hazelcast αααα»αα’ααααΆαα αα αΆαα αΎαα αααααα ααα»ααΆααααα αΆαααΆαααααΆααααΈααΆαααααΎαααααααΈαααΈαααα Hazelcast α αΆααααααΎαααα’αΌαααα’ααα’αααΈααΆαααααααΆαα αα αΆαα αΎααααααΆααααΈαααααααα αααααααΆααα½ααααα αΎαααααΆαααα ααααααααααΆαααααααα½ααα ααΎαααΆαααααΆαα JVisualVM αα hazelcast α αΎαααΆαααΎα "ααΆαααΎαααΎαααΎαα‘αΎα" - ααΆααΆαααααΆααα α ααΆ GC ααα»αααααα·αα’αΆα αααα’αΆαα’αααα αα αΆαααΆαααα
ααΆααααααΆαα
αααα»α hazelcast 3.4 αα
ααααα»ααααααΈ / multiMap (map.destroy()) α’αααα
αα
αΆααα·αααααΌαααΆαααααααααΆαααααα»αααα
α₯α‘αΌααααααα α»αααααΌαααΆααα½ααα»ααααα»α 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());
}
ααΆααΆαααΆααααααΎαα‘αΎαα
ααΎααΎαααΆααααα’αααΈαααα’αααΈααΆαααααΎααααααααα»α?
- JSR223 α
αΆαααΆα
αααααΌααααααααΆα
ααα’αΌα αα·ααα½ααααα
αΌαααααΆαααααααΆααα
ααααα - ααΆααΏαααΆαα
αααααααΆαα . - ααααΆα αα Jmeter-Plugins ααΆααααα½ααααααΆαααααΆα ααα·ααααααααΆαα
αααααααΆαα .
α’αααΈαααα·αααααααααααΎαααΆαα½α Hazelcast
Hazelcast ααΊααΆααα·αααααααΈαααααΆαααα½αααΎα ααΎαααΆαα αΆααααααΎαααααΎααΆαααΆαα½αααΆααΈαααα 3.4.1 α₯α‘αΌαααααααΆαααΈαααααα·αααααααααααΎααααα»αααααΎαααΆααααα 3.9.2 (αα αααααααα ααααα α»αααααααααα»ααααα Hazelcast ααΊ 3.10)α
ααΆααααααΎαα’ααααααααΆαααααα
ααΎαα αΆααααααΎαααΆαα½αααΉαααααααααΆααα ααα½ααααα ααΌααααααααΆααΎαααααΌαααΆα Long αα½ααααααααααααααΆααα’αααααΆαααααΈα ααααΆαααα αααα»αααΌαααααΆααα·ααααααααΊαα·ααααααα ααΆααΆαααΆαααααααααΉαααΆαααααα - ααΆααααααΆααΆαααΆα ID=1 αααα»α DB1 αα·αααΆα ID=1 αααα»α DB2 α’ααααα·αα’αΆα ααΆααααααααααΆααααααα αααα»α Elasticsearch α¬αα αααα»α Hazelcast ααΆααα ααα»ααααα’αααΈαααα’αΆααααααααα»ααααααΊααααα·αααΎα’αααα αααααα αΌαααααΆααΌααα·ααααααααΈααΌαααααΆααα·ααααααααΈαα αΌααα αααα»ααα½α (α§ααΆα ααα ααΆααααααα ααΆααΌαααααΆααα·αααααααα½αααΊαααααααααΆαααααααΆααα’αα·αα·ααααΆααααα)α α’αααα’αΆα αααααα AtomicLongs ααΆα αααΎααα Hazelcast α αΎααααααΆααααααα ααΈααα αααααΆααααααΆαα’αα»ααααααααΆαααα½αααΆαααααααααΆααααααΈααΊααΎαα‘αΎαα αΎαααα½αααΆα ααΌαααΉααααααααΆαααααΆααααΆαααααΎαα»ααα Hazelcast α ααα»αααα Hazelcast ααΆαα’αααΈαααααα’αααα»α - FlakeIdGenerator α αα αααααΆααααα’αα·αα·ααααΈαα½αα αα½αααααααΌαααΆαααααααα½αααααααααΆαα α§ααΆα ααα ααΈαα½α - ααΈ 1 ααα 10, ααΈααΈα - ααΈ 000 ααα 10 α αΎαααΌα αααααα ααΎα α₯α‘αΌαααα α’αα·αα·ααα’αΆα α ααα§ααααααααααα’ααααααααΆαααααΈααααααα½αα―ααα αΌαααααα½ααααα ααα±ααααΆαααα ααα ααΆααααΎαααΆααααΆαααΆαααα αα ααα»αααααα αααα’αααα αΆααααααΎααααααα·ααΈα‘αΎααα·α (αα·ααααΆαααΈαααααα Hazelcast) ααααΆααααααΈαα½αααΉαα αΆααααααΎα - ααΌα ααααααΆαααααααα ααΎαααΈαααααα α’αααα’αα·αααααααα·αααΆαα·ααααααΈααΌαα ααα»αααααααααααΆααααΆαα ααα½αααα ααα»ααααααΆαααΆααα·ααααΈαααααΆααααααΆα ααΎαααΆαααααΉαα’αααΈαααααααααΆα α αΎαααααΌααα UUIDsα
αα·ααΆαα’αΈααα αΉααααααΆααα’ααααααα ααααααΎααΌα Twitter ααΆααααααΆααα Snowcast αααααα - αααααΊααΆααΆαα’αα»αααα Snowflake αα ααΎ Hazelcast α α’αααα’αΆα ααΎαααΆαα ααΈαααα
ααα»ααααβααΎαβαα·αβααΆαβαα βαα·αβααΆβαααβααα
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 ααααΈβαααβααααΆαβαααβαααααΆα
ααααΌα ααΎαααΆααααααα α α·ααααααααααΆααααα»ααααααΆααααααααΎααα αααα»α 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 ααααΈααα‘α»ααααα’αΆααααα node-by-node ααα αα α ααα»α ααα ααΎαααΆααααααα α α·αααααΆααΎαα’αΆα ααααα ααααα·αα αΆαααΆα αααααααααα·αα·ααααα αααΆαααΆαα·α ααααα·αααΎα’αααααααΎ 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 ααα ααΎααααα½ααα·αα·αααααααΆα’αα‘αΆαααΆαααα
ααΆαα
ααα
αΆααααΆαααΈααα SV ααααΌαααΆαααααααααααααΆαααααααααα
ααααΎαα RPM, DEB, MSI α ααΌααααααΆαα Windows ααΎαααααααααααα·ααΈααα‘αΎααααα½ααααα»ααααααααα EXE αααα½ααααααα‘αΎα server, Hazelcast αα·α Elasticsearch αα
ααΎαααΆαααΈααααα½αα ααααΌαα‘αΎα ααΎαααΆααααα
αα
ααΎααααααααΆαααα‘αΎααααααΆααΆαααα "ααΆααααα" ααα»ααααα₯α‘αΌααααααΆααΆαααααΆααα
ααΆα
αααΆααααΆαααααΊααΆαααααΎαααααΆαααΆαααααααΆαααααααα·αααααα»αα
ααααα: www.habr.com