á áá
á˝áá ááľáĽ áĽáá´áľ áĽá ááá áĽááłáłá áá áĽáááááŤáá
á¨ááľá°ááĽá áľáááą (á¨áá á áá - CB) á¨á°á¨ááá áĽááľá á¨áááá á¨áááĽááľ ááááŞáŤ áľáááľ á˛áá ááľáľá áŤáá ááľá¨áľ ááᢠCB áĽáá° á¨ááľáá áá á áááááľ (á 1C á¨áá¨á ) áĽá á áŤáą á¨á áááá áááááŤáá˝ áá áá°á፠á¨áá˝á á¨áááľ áááľ á¨áá°á á á á áŤáá á¨áá°á áááľ áŤáá á áááááľ áá á¨á°áá¨á°áá˘
SW á¨á°á¨ááá áá¨ááť áá ááá
á¨á˝áአááá
á¨ááľá°ááĽá áľáááąá ááá áĽáá°á°áŤá ááá áááľá¨á ᣠá 1C ááľáĽ á¨áááľ áá°áá áŞáŤáá˝á áĽáľááľ áĽáá´áľ áĽáá°áá°áŤ áľáá˝ áĽáááááłááá˘
á ááááŞáŤáŁ áľá áĽá áá á¨ááá°áááá áááŤáááľ áľáá˝ :) ᨠ1C: á˘áá°áááŤáá á´áááá ááľá¨áá áĽáŤáááá ááᢠá¨ááłáŞáŤ áľáááą á¨á˘áááľ á áááŹá˝á áááá áť ááłáŞáŤá áĽáá˛áá á¨áááľ á áááŹá˝áá˝á á áááľááá á áŤáŁá˘ ááľáĽ áĽáá˛á°áŠ á¨ááŤáľá˝á á¨áŠáŤ ááá áŤáŤáľáłáá˘
á¨á°áá á-á áááá áááľ ááłá
á 1CáĄá˘áá°áááŤáá á¨á°áá አá¨áááľ áá°áá áŞáŤáá˝ á áśáľáľ á°á¨á áá°áŤá
á áá°áá áŞáŤá áŽáľ ááľáĽ á¨áá°áśá˝ áĽá á¨á°ááŁáŽá˝ áŤáľááá˝ áŽáą á¨áľ áĽáá°áá°áá á á ááá
áááá¨áľ á ááŁá¸á - áááŞáŤáá˝á &AtClient / &AtServer (&AtClient / &AtServer á áĽáááááá á¨áááá áľáŞáľ) á áá ááᢠá¨1C ááá˘áá˝ áááŞáŤááš á áľááá áá¸á á áááľ á áá áŤááááá˘
á¨á áááá áŽáľ á¨á°áá á áŽáľ áá°áá áá˝ááᣠááá áá á¨á°áá á áŽáľ á¨á áááá áŽáľ áá°áá á áá˝ááᢠáá á áĽá ááááŤáśá˝ á áĽá á¨á°á°áŤ áá á¨áłá áá°áĽ áá. á á°ááá á¨á áááá áŽáľ á¨á¨áľááá áŚáł á˘á ፠- á¨á°áá áá ááá á¨á áááአá°ááłáłá á áá ááááľ ááá áľááá áľá˘ áĽá á¨áá á¨á áááá áŽáľ áá° á¨á áááá áŽáľ áĽáŞ á¨áá áĽáá°áá áŤá á°áá á á¨ááᢠáĽá á¨á áááá áŽáľ á ááááá áľ áá á¨á°ááá á°áá á á áááŹá˝áá ááááľáŁ áááŁáľ áá˝áá áĽá á áááአá¨áá°ááááľ á ááááá˘
á¨á ááŤá á á
áł á¨ááŤáľá°áááľ áŽáľáĄ á¨á áááá á á°áŤáá á¨á°áá áá ááĽáŤáľ áá°áŤáᣠá¨á°áá á á á°áŤáá á¨á áááአááĽáŤáľ á áá°áŤá
áá áááľ á¨á áááአáá° á°áá áá áá°áá áŞáŤ á ááłááľ áááĽááľ áááá á¨áááá áááłá "á¨á¨á á áá ááŤááľ" áŞáááľ áááľá¨áą á áĽá áˇá áĽá áŞáááą ááłá áá˝áá, áĽáá°áá á áááľ ááááľ á¨ááá. áá´áá˝á áá áá á ááĽá ᣠáááłáᣠá á¨ááá á ááááŠá á¨á°áá á áŽáľ á áá ᢠááá áá áá á ááŤá¨áĽ áľáááąá á ááľááá áĽáŞáá˝á áááá, áĽá á á á ááá á áŁá á¨ááŤáá á áááľáá.
áĽá á°áá ááááľ á á, áááłá, áľáá áá
á áľááá áááá á
á¨áááĽááľ ááááŞáŤ áá´ ááá áŠá˘ ááŁáᣠá áľá°áááᣠááľáľá áŤáá ááľá¨áľáŁ ááááĽááśá˝ á°áááá ááá ááľá áŤááᢠá áľááą áá á áááľá¨áľ á 1C áá°áá áŞáŤáá˝ ááľáĽ á¨áá°áŤ áááĽáá°á (áááĽááśá˝áŁ á¨áŞá˛áŽ áĽáŞáá˝) á°ááĽáá˘
áľáááąá á á ááľá áá°á á¨áá˝á á˛ááá áŤáľááᢠáĽá¨á¨áᨠá¨áááľ áááľ á ááśá˝ ááĽá áá¨áá áá¸áá á áá áľ.
áľáá áŤ
ᨠCB á áááá ááá á ááĽáł áá° 1C: á¨áľáá áľ ááľá¨á ááááá°áľ ááľááá ᣠáá áĽáá° á¨á°áᨠáááľ ááá°áá á ᣠá¤áá á ᨠ1C áá°áá áŞáŤ áááľááá˝ áŽáľ áá ፠áá˝ááᢠáá á¨á°á°á¨áá á á ááŤáł ááááŤáśá˝ áá, ááá ááá á á°ááŤáŠ ᨠ1C á áááŹá˝áá˝ (áááłá á áááľ áĽá á áŤááá˛áá áááŞáŤ ááŤá¨á) ááŤá¨á áááááśá˝á áááááἠáá á. á¨á°ááŤáŠ á¨1C á áááŹá˝áá˝ á á°ááŤáŠ á¨1CáĄá¨á˘áá°áááŤáá ááľá¨ááŁá á°ááŤáŠ á ááááŽá˝ áá ááááŁááá° áá°áŠ áá˝ááᢠá áĽáá°áá ááááľ áááłáὠᨠCB á áĽáá° á¨á°áᨠáááľ áá°áá á, á 1C áááśá˝ "á áá" áá á¨á°ááá á, á áŁá áĽáŠá áááľá áá.
áľááá
, CB áĽáá° á¨á°áᨠáááľ áááĽáŤáľ áá°áá. áá ááľá°á áŠáŁááŤáá˝ á¨á áŤáŁá˘á á áááá áááľ áĽá áá
á¨áľ áá á¨á°áŤáŤááá áľáá áááľáá¨áľ á á°ááá˝á áá á¨áŤáááá á¨CB á áááá (ws://1cdialog.com) áĽáá˛á áá áĽááááŤááᢠáľááá
á°áá áá˝ áá á¨áŤáłá¸áá á¨CB á áááá á á°áááťá¸á áá ááŤá á áá áĽáá°áá á áľááá áááĽáŠáľ áá˝ááᢠá áĽá á¨áłáá SaaS áááľ ááľáĽ á°ááłáłá á áŤááľ á°á áááá˘
áľáá áŤ
ááááľ áľáááľ áĽá áľá á°áľ ááťáťá á ááľ á¨á፠áá°áá áŞáŤá á áá°ááŤá ᣠáá áĽá ᣠá¨áááľ ááá á¨ááľ áááłá¸á áĽááľáááŁááᢠáááĽááľ á¨ááľ áá° ááľááá ááááľ ááá á¨ááá á Hazelcast ááľáĽ áá°á/á°áá áááľ áááááĽá áá ááá˘
á á°áá áá áĽá á á áááአááŤá¨á áááááľ - á ááĽáśáŹáľ á áŠáᢠááĽááá°á áá áľáááśá˝ á áŁá á°áľáá áá.
á¨á°á¨ááá áá¸ááŤ
á RedisᣠHazelcast áĽá Ehcache ááŤá¨á ááá¨áĄá˘ á᪠á 2015ᢠáŹá˛áľ á á˛áľ áááľá°á ááá (á áŁá á á˛áľáŁ á áľááŞ)ᣠáĽá áá°áŚá˝ áŤáá á´áá˛áá á áᢠEhcache áĽáá´áľ áĽáá°áá°á áľáĽ á áŤáá
á (áá
á°ááŁá á áá áá áłá¨)ᢠá Hazelcast 3.4 áááá¨á ááľáááá˘
Hazelcast á¨áłáĽá ááľáĽ á°á°áĽáľá§áᢠá áá á ááľááá ááááľ, á áŁá á áá á áá°áá áĽá áĽáá° áá¸á፠áĽáť áááŁá á áá˝áá - áá¨áá áá° á˛áľá áĽáá´áľ ááŁá áĽááłáá áľ á áŤáá
á, áĽá¸áá ááľááá ááááľ á¨á á, ááᥠáá áá. á ááŤáł Hazelcasts á á°ááá°ááᣠá ááŤá¨áá¸áá ááłá ááἠááľáŹ áĽáá°ááááᢠáá¸ááŤáá ááľáŹ á áá°ááááľá - ááĽáą á áŤáááá˘
ááĽá Hazelcast áá áááĄ-
- á¨á°á áá ááá-áááá˝ áá¨ááť. áá ááľ ááá áá áá° áłáłá¤á ááááľ á¨á á áá áááľáłáᣠáľááá áááá ááá-áááá˝ á Hazelcast ááľáĽ áĽááľáááŁááá˘
- áá¸á፠á¨á°á áá ááááŤá á áááá áá - á áá¸ááŤá ááľáĽ áŤá¨áááĄ. á á˛áľ áááĽááľ áťá - á áá¸ááŤá ááľáĽ áŤáľáááĄáľ.
- á¨áá°áá áŞáŤ ááłááá˝á á¨áááááľ áááśá˝. ááľááá ááááľ á ááľ ááľá°áľ áŤáááŤá áĽá á Hazelcast áááľ áá áŤáľááá áá. ááá áááľ á¨á°áááᥠááá˝ á¨áá°áá áŞáŤ á áááá˝ ááľá°áąá á°ááĽáá áŤáľá°áááłáá˘
- á¨áááľá°á áááááŤáá˝. áááłáᣠááááľá á áአááá áĽáááĽáŤáá (ááááľ-áá á á 1C áá á¨áľ áááá)áĄ-
conversationKeyChecker.check("ĐĐĐĐĐĐĐĐĐĐĐĐ");
doInClusterLock("ĐĐĐĐĐĐĐĐĐĐĐĐ", () -> {
conversationKeyChecker.check("ĐĐĐĐĐĐĐĐĐĐĐĐ");
createChannel("ĐĐĐĐĐĐĐĐĐĐĐĐ");
});
áťáá áĽáá°áá á á¨ááá ááᢠáááááŤáá ááľá°áá, áĽáá°áá ááľá¸á, áá áŠáľ. áááááŤáá á¨áá°áą á áá áŤáá¨áááĄ, á ááŤá áá áá áá á¨ááá°á˝ áĽáľá á á áĽá á áá á°ááłáłá ááááľ áááá á ááááŤá - áĽá á áľááľáá á á. á á°ááłá°á ááá á áá°á á á፠áááá፠á áŠá áááá፠ááľá¨á á ááťááᢠá áá á¨áą á áŠá - ááľ áĽá, áĽá áá°á¨áą á áłáá áá, á Hazelcast á áŠá - á¨áááááľá.
á˛á˘á¤áá¤áľ ááá¨áĽ
ᨠPostgreSQL áá á°á áĽá á¨á°áłáŤ áááľ á áá áĽá á¨áá DBMS ááá˘áá˝ áá á áá°áŁá áá˘
á áááľá°áᣠPostgreSQL ááá á áá°áá - á áá˘
á°ááá
áłáłá¤á áááŁá á áľáááŤáľáááᣠáááľ ááá˘
á¨ááááŞáŤá á¨áťáá˛áá áĽáľáá˝á áĽáŤááłááąá á¨áá°áá áŞáŤá˝á á°áá á¨áŚá˝ á á°ááŤá¨ áá á áá°á°ááŤáŠ á ááááŽá˝ á¨áá°áŤá¨áľ á˝ááł á áľáŚ áá áᢠá á áááá á áá áĽá áááĽááľ - áĽáŁáŽáľá á¨áá á á°áá á¨áĽ á¨á°áá°á ááá áá° á áááá B áĽááááłá áľá˘ áá ááłá áŤáááá áľáááťáťá áĽáť ááŽááᣠáľááá áĽáŤáłá˝áá á áĽá á°á¨áŤá ááááľ áááá°áĽ áá°ááá˘
áľá áĽá á°á¨áŤá áááłá á áľá áŁá˘áŤá áá ááá ἠáá˝áá
á SV ááľáĽ á¨áá°áá áŞáŤá áĽá á¨á°áá áááľ á°áááá˘á á˝áá°-ááłáŚá˝ á á. á áááŹá˝á áĽáá° á˘á áá ááá á áŤááá˛áá áŤá á¨á°á ááááš áĽá á¨áááľ ááᥠáá á¨á°áá°á á¨áááľ áá°áá áŞáŤ áááľ ááᢠá°áááᢠáááľ á áááŹá˝á á CB á áááá á¨á°áááá áľáá áľ ááá ááá°áĽ ááᢠá¨á°áá áááľ á°áááá˘á áĽá á áááŹá˝áá˝ ááááἠáá˝ááᣠáĽá áĽááá áá°áá áŞáŤáá˝ áĽááľ á áĽááľ áááĽááľ ááááἠáá˝ááᢠá°áááá˘á á áĽá áľáááľ á°á¨áŤá ááᢠá¨á ááŤáł á°áááá˘áá˝ áááĽááśá˝ á á ááľ á áŤáá áá á¨áľ ááľáĽ ááá áá˝áá; á ááłááľ á¨á°áá áááľ á°áááá˘áá˝ áĽá áľáŤáá áááá¨áľ áĽáá°ááአá¨á°ááá¨áľá áá°á°áᨠá áŤáá áłáłá¤á (ááá á¨á°áᨠá¨ááἠááł á áááá áĽááłá) áĽáááľá°áááá˘
á¨áááŞáŤ á á¨á´áá á¨ááááĽá áľ áá áłáłá¤á á ááá˘
ááá áłáłá¤á ááá áĽááłáááᣠá¨áááŞáŤ á°áá á¨áĄá (áĽá ááá˝ á á°á°ááá á¨áá á¨á áá¨ááá˝) á áá¸ááŤá ááľáĽ áĽááľáááŁááá˘
á¨á°áá áááľ á°áááá˘á á¨ááἠááł ááĽááľ ááááľ á¨ááá¨, ááľáĄá áá° áááááŽá˝ áĽááááŁáá. á ááá˝ ááŽáááśá˝ áá áľááá
á á¨á´ááá˝á ááá¨ááá, áĽáá áááá
á¨á°á áá áááááśá˝á ááŁáľ ááĽá áľááá á¨ááἠááłááťá˝áá á ááá˝ áĽááľááá áááᢠá¨á°ááłá°á áĽá áŤáá°ááłá°á á ááá˝ áĽáá¨áľ áááá á¨ááἠááł ááĽááľ ááľáľá áĽáá˛á°áĄ áŤáľá˝áááłáᢠá¨áááĽááľ ááĽááľ á¨áá¨á°á°á á á ááľ áá á¨ááá áłáłá¤á ááľááľ áĽá á¨á°ááłá°á á áá á˛á¨á°áľ áĽáť ááá˘
á¨á°ááłá°áá á
á á¨á áᣠáŤáá°ááłá°áá á
á áááłá°ááá˘
ááá áłáłá¤á á¨á áᣠá¨á°ááłá°áá á
á ááá á¨ááἠááł ááááᣠáŤáá°ááłá°áá á
á á¨á°ááłá°á á
á ááááá˘
áááá Elasticsearch
á¨ááá˝ áááŽá˝ á á°á¨ááŞ, CB áĽáá˛á áááĽáá°á áľááá, áĽáá
ááŁá, ááš áĽá á°áááá ááá áĽáááááá, áááááá á¨áááľ ááľáĽ á ááľááŁáľ áľáááá áŤááá ááĽááŤáá˝. áááŽáŤáŠáŠá áĽáá°áá ááááá á ááľááá áĽá á á¤á°-áá˝áááľ áá á¨áľ á¨á°áá á¨áá áá á¨Elasticsearch á¨ááá ááŽááŤá
á github áá á ááá°áá
áĽá á°áá "á˝áá" á¨ááá áá áĽá ááľáá. áá á ááŤá¨áĽ á ááááŞáŤ, á ááá áĽá á áá áá¨á¨áť áá ááááá áŤáľá˝áááłá.
á á ááá ááś
á¨á áááš ááááŞáŤ ááᎠááľáá ááľáá ᣠáá á¨ááĽáŤáŞáŤáá˝ áá-
- á¨á áááá¨áĄ áá á¨á°ááá ááá; nginx á áá, ááááá ááá áá˝áá.
- á¨á፠á áááŹá˝á ááłáŽá˝ á Hazelcast á áŠá áááááá˘
- á¨áľá áśáŹáľ áá áááľáŤáľ, áĽáá áááá
áᲠ. - á á፠8 á¨á°áá á¨á፠á áááŹá˝á áĽá
áá˝á áŤáá ááá˘
áŚá¤áľá . áĽá áśáš áá° á፠10 áá°á°áľ áĽá áá° áááá˝ ááá¨á áá¸áá˘
áááľ áĽá áá¨áŤ
ᨠCB áááľ áĽá áá¨áŤ áá áľ, áĽá á¨ááá ááá áááśá˝ á ááŤáł á áľá°áłá˝ áŁá áŞáŤáľ á ááĽááłá.
á¨ááŤá áá¨áŤ áĽá á¨ááľáłááľ ááłážá˝
á¨áĽáŤááłááą á˛á˘ áááľ áááá á¨áááľ áá¨áŤ ááᢠá á°áłáŤ áááł á ááááĄ-
- áá°áá ááĽá áááľ á°ááˇá áĽá ááá á¨á áááááľ ááľááśá˝ á ááá áŠá
- áááá áľáŤáá˝ á¨ááá˝ áá á¨áážáľ áá°áĽ á áá áá áá˘
- á¨ááłáá áľáŞáľ áá á˛áááá á¨á ááťá¸á áá áľá ᾠᨠ10% á áá ááĽá.
á¨áá¨áŤ áłáłá¤áá á ááἠáĽááááá - ááá á á áŁá áá á¨á°áá áááľ á°áááᢠáá¨áá á¨áááľ á áááአáĽááááá ᣠááĽáŽášá á 5 (á¨áááĽáᾠᣠá¨ááááľ áĽáᾠᣠá¨á°á áááá˝ áĽááľ) áĽááŁááá áĽá áĽááááŤááá˘
á¨áááááľ áľáááąá áááľ á áŚáľáľ á ááááŽá˝ áĽáá¨ááááá-
- á¨ááááľ áá°á
- áááááśá˝ áĽáť
- á¨á°áá áááľ ááááŁ
á ááááľ áá°á áá áľ, áĽá ááś ááŽá˝ áĽááááŤáá, áĽá áľáááąá áłáŤááᥠáááá: áááááśá˝á ááá, ááááśá˝á ááá áŠ, á¨áááĽááśá˝á áááá ááá á. á¨á°áŤ á°á áááá˝á áľáááľ áĽááľááľááá (áŤáá°áá ᥠáááĽááśáźá áááá á ááᣠáá ááľ á°á áťá) áĽá á¨ááŽááŤá ááłááá˝á (áĽá á áá° áá áá á áŤáľá°áááᣠááá፠áĽáá°áŤáá)á˘
áááłáᣠá¨ááááľ áá°áá ááá áá á áááľáááĄ-
- á°á áá ááĽáˇáá˘
- áŤáá°áá ᥠááŽá˝áá áá ááá
- áááááśá˝á áááá ἠ50% ááľá
- áááááśá˝á á¨ááá 50% ááľá
- ááŁá á°á áááĄ-
- á á˛áľ áá áááá á 20% ááľá
- áááááá ááááśášá á áááá° ááááŁá
- áá° ááľáĽ áááŁá
- áááááśá˝áᣠá¨á°á áá ááááŤáá˝á áá ááá
- á¨áá á°á¨áłáłá ááá˛áĽ á°á áááá˝ á¨ááአá ááľáľ áááááśá˝á áááĽáŤá
- á¨ááááľ ááŞ
- 20 áá áá°ááá
- áááś ááĽáˇáᣠáá° áľááŞááą ááááŞáŤ ááááłá
- á ááľ áťáľáŚáľ áá° áľáááą áááŁá (á¨á°á°áá አáááľááá˝ áŽáľ áááĽááľ ááááŞáŤá áŤáłáŤá)
- á á˛áľ á¨ááἠáťáá áááá á 50% ááľá (áአááááľ)
- á ááá¸áá ááŁá áťááá˝ áááĽááľ áááá 50% ááľá
á¨"áááááśá˝ áĽáť" áľááááľ á ááááŤáľ áłá¨á˘ á ááľ áááł á á: á°á áááá˝ áľáááąá áŤááá, áá áĽáľáŤáá á áá°áłá°áá. áĽáŤááłááą á°á áá á á ááą 09áĄ00 áŽáááŠá°áŠá áŤá áŤáŁ á¨á áááአáá áááááľ áááĽáŤá áĽá áá áááᢠáĽááá á°áá˝ á á°áá áá¸á, áĽááášá á á - á¨ááŹáśá˝ ááľáĽ ááá / PONG áĽáť á áá¸á, áá á¨á áááአáá áŤááá áááááľ áŤáľáááŁá (ááá¨áľ á áá˝áá - áĽá á áľáááľ á á˛áľ áááĽááľ). áĽá ááĽá áŤáá¸á áĽáá°áá áŤá á°á áááá˝ á ááá˝ á°ááľ ááľáĽ áá° áľáááą ááááŁáľ á˛ááአáá°áá áááłáá áĽáá°áá áŤáŁáá. á¨ááááľ áá°á áááľáá, ááá áá áľáŠá¨áą á áľááá á áá á¨ááááŞáŤ áá¤áľ áá áá - ááá ááľááśá˝ áĽááłááአ(á ááľ á°á áľáááąá á áá ááá, áá ááľááá áĽá¨áá°á áá - á¨á¨á ááá ááááŁáľ á áľá¸á᪠áá).
á¨á°áá áááľ á°áááá˘á áááᣠáááł á¨ááááŞáŤá á
áá ááááŤáᢠá¨ááááľ áá°áá á á°á¨áá áĽá áľáááą á á°áĽáłá¤áá˝ ááľáĽ áĽáá°áááááľ áĽááá á áá ááᢠáá á°á áááá˝ áá°áá áĽá ááááŁá á áá ááĽá፠ááá°á
ááá¨á˘ áľááááἠáĽáá áá áá áá˘
áĽáá° áááľ ááá፠áĽáá áááá
ááááá á¨áá°ááá áĽá፠ááá˘
á¨áŁáľ ááá፠á¨á°ááᨠá áá áá˛áŤáá á¨ááľáłááľ á˝ááł ááá°áľ á áááľáŽá˝ ááááŠá á°áá°áá áłáá˘
áááá á¨á°áᨠáľáá
áłáŞá ááᣠ176 áŽá¨áŚá˝ áŤááľ á github áá 132 ášáŤáá˝ á ááľá˘ á°áŤá˛á áĽ.á¤.á . ᨠ2015 ááᎠ(áĽ.á¤.á . á 2015 ááľá°ááá ᣠá¨á፠áĽááŁáŹá á ááľááłá) ᣠáľá áá
á°á¨ áľááľáł ááá°áľ áĽá á¨ááľáŠáĽ ááłáŽá˝ ᣠ7 áŤáá°áá á¨ááłáĽ áĽáŤááá˝ á˘
á áá
á°á°áŞ áá¨áŤá áááŤá á¨áá¨áĄáŁ áĽáŁáá á¨áá¨á°ááľá ááááśá˝ áŤáľá°áááĄ
- áŁááĽá-áá á áŤáŁá˘, áá°á á LinkedList áĽá
á áá ááá, á áá¤áąá, á ááá
NPE á áá°áľ áá á¨áááłá áá° ConcurrentLinkedDeque á ááá¨á ááá á á°ááłá°á áĽááŽá˝ ááᢠá¨ááááŞáŤáá á ááŤá ááŤáłá˝á ááá ááhttps://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43 ). - á¨áá
á°á¨ áľááľáł ááá°áľáŁ áááááľ á˛áá¨áĽ á¨áááááľ áá¨á á áá°á¨áá (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44 ). - á áĽá¨áľ áááł (ááĽáśáŹáľ á áááá áá¨á¨áť áá áŤáá°áá ááá áá á áĽá
áą ááľáĽ á¨á áá áĽá
á áá á˛áá) á¨ááá˝ á
áŚá˝ á áá°áŠá (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19 ).
áá github áá áŤááľ á ááą ááᢠáŤá°á¨ááááĄ-
- ááľá°áá
á¨á¤ááŤá áŽáá ášáŤ (@elyrank) - ááłáŽá˝á 1 áĽá 3 áŤáľá°áŤááá - á˝áá á°ááˇá 2
- ᨠ9.2.14 áá° 9.3.12 á¨á°áťáťá áá˛
- á¨á°á ááá SimpleDate ááááľ á ThreadLocal; SimpleDateFormat á áá°áľ áá áá° NPE á¨ááŤá°ááľ á°á áááą á¨á°á á á áá á áá°ááá˘
- áá á¨áá á°á¨ áľááľáł áá°áľ á°áľá°áŤááá (áááááą á˛áá¨áĽ á áľá á°áľ á°áááˇá)
áĽá á ááá áááľáłá!
áľááľáł ááá á¨ááá¨á á á ááľ áá áłááá á áááľ ááᢠááá áá á ááá á¨á, áĽááľ ááŽá˝ ááááľ ááľááá, ááá áá á á áŤáľ ááŞáá˝ áá. áá á˘áŤááľ áá ááľ áłáááľ á á ááá áá á¨á áľ.
áááľ áá áááłá...
á áá Hazelcast á¨ááľáłááľ á˝ááł áĽáŤáá ááᢠáááἠááľáłááťááš áĽáá°ááŤáłáŠáľ á¨á°áá°á áááľ áá¨áŤ á áá ááááŤáľáľ á ááľáłááľ áĽáĽá¨áľ ááá¨áá¨á ááᨠáĽá á¨áĽááľ áá á áá áááľá°á á°ááŤááˇá áĽá á ááááš á ááľ á á ááľ áááłá¸áá ááĽáááᢠJVisualVMá ᨠhazelcast áá á áááá áĽá âáá° áá áŤááá áááâ á á¨á - á áá°á áááľ áᲠááŁáá ᣠáá áá á°á¨ áľááľáłáá á ááá ááááľ áá˝áłáľ á ááťááá˘
á hazelcast 3.4 ááľáĽ áŤááł / ááᲠáŤááł (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();
}
}
ĐŃzov:
service.join(auth1, "ĐĐĐĐŤĐ_ĐĄĐĐĐĐŠĐĐĐĐŻ_Đ_ĐĐĐĄĐŁĐĐĐĐĐĐ_UUID1");
service.join(auth2, "ĐĐĐĐŤĐ_ĐĄĐĐĐĐŠĐĐĐĐŻ_Đ_ĐĐĐĄĐŁĐĐĐĐĐĐ_UUID1");
ááᲠáŤááł ááĽáŤááłááą á¨á°áá áááľ áááᣠá°áá ᨠáĽá á áááááá áľ áá á°áááˇáᢠáŤááł ááááá áá°áá ááá á¨á°áá áááľ ááááŁá áľá áááá, áĽá áĽá´áśáš á¨ááá áá áááŤáá˝ áááá (á áá á á áľááá á¨áá á¨á°á áá áááŤáá˝á ááááľ áá˝áá).
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 á ááá˘
ááłáá፠áááá¨áľ
á á˘áá˛áá áááŤáá˝ ááááᢠáá á˛áľ á áŤá áá á¨á á áĽáá°ááŤáľáááá áĽááľáĽá˘ á áá¨á ááą ááľáĽ áŤáá á á°á á°á¨á°á á°áľáá á áá°áá ᣠá°áá á¨áŚá˝ á áťáá˛áá ááľáĽ ááłá°áá - á á˛á˘1 ááľáĽ á¨áááĽááľ ááłáá፠= 1 áĽá á DB1 ááľáĽ á¨áááĽááľ ááłáá፠= 2 áĽááłá ᣠáá áá ááłáá፠á Elasticsearch ᣠá Hazelcast ááľáĽá ááľá¨á á áá˝áá ᣠáá á áŁá ááĽáá ááá áá¨áá á¨áááľ á¨ááἠááłáá˝ áá° á ááľ ááááľ á¨ááá (áááłá á ááľ á¨ááἠááł ááĽááá á°áááá˘áá˝ á á áááá ááá°á) ááᢠá Hazelcast ááľáĽ áĽá AtomicLongs áááááľ áĽá ááŁáŞáá áĽááŤá ááá¨áľ áá˝ááᣠá¨á፠á á˛áľ ááłáá፠á¨ááááľ á ááťá¸á áá¨ááŤááĽá á Hazelcast ááľáĽ ááá á¨á áá áŤááᢠáá Hazelcast á¨á áá áĽáŠ ááá á áá - FlakeIdGeneratorᢠá ááááá áľ áá áĽáŤááłááą á°áá á á¨á°ááŤáŠ ááłáááŤáá˝á áá°áŁá ᣠáááłá ᣠá¨ááááŞáŤá - ᨠ1 áĽáľá¨ 10 ᣠááá°áá - ᨠ000 áĽáľá¨ 10 ᣠááá°. á áá á°áá áá á¨á°á°á á ááá áĽáľáŞáŤáá áľá¨áľ á á˛áľ áááŤáá˝á á áŤáą ááľá áľ áá˝ááᢠá ááĽááľ áá°áŤáᣠááá áá áá°áá áŞáŤáá áĽáá°áá ááľááá (áĽá ᨠHazelcast á°áá á) á á˛áľ á á°á á°á¨á°á ááááŤá - áľááá ááááᚠᣠááá°. á á°á¨ááŞáᣠááłáááŤáá˝ ááá á˘áá˛áá áĽáá°áá áááá˘áá˝ á áŁá ááá á áá°ááᣠááá áá á áŁá á¨ááአáá¸áᢠáááá ááá á áááá áá° UUIDs ááá¨ááá˘
á áááŤá˝á áá, áĽáá° áľáá°á áááá ááááá, áĽáá°áá áŤá á¨á á¨áś áááĽá¨áŞ á á - áá á Hazelcast á ááľ áá á¨á á¨áś á ááŁáľ á á°ááŁá á áá. áĽáá áá¨áľ áá˝áááĄ
áá áĽáľáŤáá á áá°á¨áľáá áľáá˘
TransactionalMap.á°áŤ
áá á áľááŤá áááᥠ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 áŤáŤáá
á ááááŞáŤáŁ á¨ááááťá˝áá áĽááá˝ áááááŤáľáľ áááá áá°ááᢠáááłáᣠá¨á áááŹá˝á ááá á ááᣠáá¨áá¸áľ áĽá ááá ἠáĽááááááᢠá áľáááĽáĄ
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 áĽá á¨ááĽááľ áŤááł áŁá áŞá˘ IMap ááľ á ááá áŚáłáŁ TransactionalMap áľá á°áľ ááĽááá˘
á ááá 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 to 0) ááľáĽ áááŁáľá áĽááááá áĽá á¨áááľ áá¨áŤá á20 á°áááá˝ áĽááŤááłááᢠáĽáá° pgFouine áĽá pgBadger áŤá áááááŤáá˝ á á°á°á á°áĄ áááἠááľáłááťáá˝ áá á áááľá¨áľ áľááłááŤá áŞáááśá˝á ááááŁáľ áá˝ááᢠá áŞáááśá˝ ááľáĽ á ááááľ áááá áĽá á°á°ááá áĽáŤááá˝á áĽááááááᢠáááá°á áá ááá˝áŁ á¨ááľáá¸á፠áĽá áľ (ááĽáŤáŤáľ) áĽááááŁáá áĽá áĽáá°áá á áááľ áá áá ááá á ááťá áĽáá°áá áĽáááááááᢠáá°ááłáłá áá¤áľ á°á°ááá áĽáŤááá˝ áá° áá¸ááŤá á ááᣠááľáááᢠáá ááá˝á "á ááŁá" áááá¨áľ áĽááááŤáá, á á ááľ áá áá á ááľ á á¨á´á.
ááá
á¨á°áᨠá¨CB áááľ á ááŹáá á 2017 (á ááŤá áá á á áľá-ááááł áľáŞáľ) áľáá°ááá CB áĽáá° á¨ááľáá áá á áááááľ á 2017 á¸á°á á°ááá¨á˘
á¨á ááľ á ááľ á áá á áá°áŤá áľ áá, á CB á¨ááľáá áá á áááááľ ááľáĽ ááá á áááľ á¨áŁáľ á˝ááŽá˝ á ááá áŠá. á ááľáá áá á áááááąá áĽáá¨áłá°ááá
ᨠCB á áááá áľáááą á á ááá áĽá
áá˝ ááá áááŁáᥠRPMᣠDEBᣠMSIᢠá á°á¨ááŞáᣠááááśááľáŁ á ááááŠáᣠHazelcast áĽá Elasticsearchá á á ááľ áá˝á áá á¨ááá áá á áŤáá á á ááľ EXE ááá áĽááááŁááᢠá ááááŞáŤ áá
áá á¨ááŤá áĽáľá "demo" áĽáá áĽáá áŤááá, á áá áá áá
á áŁá áłááá á¨áá°ááŤáľ á ááŤá áĽáá°áá ááá˝ ááá.
ááá: hab.com