Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast

I roto i tenei tuhinga ka korero tatou mo te pehea me te take i whakawhanakehia ai Pūnaha Whakawhitiwhiti – he tikanga whakawhiti korero i waenga i nga tono a te kiritaki me te 1C:Services Enterprise - mai i te whakatakoto mahi ki te whakaaro ma te hoahoanga me nga taipitopito whakatinanatanga.

Ko te Pūnaha Whakawhitiwhiti (e kiia ana i muri nei ko SV) he punaha tuku korero kua tohatohahia, e kore e pai ki te he me te tuku taurangi. I hangaia te SV hei ratonga kawenga nui me te nui o te tauine, e waatea ana hei ratonga ipurangi (na 1C e whakarato ana) me te hua hanga papatipu ka taea te tuku ki runga i o ake whakaurunga tūmau.

Ka whakamahia e SV te rokiroki tohatoha Hazelcast me te miihini rapu Te rangahau elastic. Ka korero ano tatou mo Java me te pehea o taatau whakapae i te PostgreSQL.
Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast

Kaupapa raru

Hei whakamarama he aha i hanga ai e matou te Pūnaha Whakawhitiwhiti, ka korero atu ahau ki a koe mo te ahua o te whakawhanaketanga o nga tono pakihi i roto i te 1C.

Hei timata, he korero iti mo matou mo te hunga kaore ano kia mohio ki ta matou mahi :) Kei te hanga matou i te 1C:Enterprise technology platform. Kei roto i te papaahi he taputapu whanaketanga tono pakihi, me te wa mahi e taea ai e nga tono pakihi te whakahaere i roto i te taiao whakawhiti.

Paradigma whanaketanga kiritaki-tūmau

Ko nga tono pakihi i hangaia i runga i te 1C:E mahi ana te hinonga i nga taumata e toru kiritaki-tūmau hoahoanga "DBMS - tūmau tono - kiritaki". Waehere tono kua tuhia ki roto hanga-i roto i te reo 1C, ka taea te mahi i runga i te tūmau tono, i runga ranei i te kiritaki. Ko nga mahi katoa me nga taonga tono (papanga, tuhinga, me etahi atu), me te panui me te tuhi i te papaarangi, ka mahia anake i runga i te tūmau. Ko te mahi o nga puka me te atanga whakahau ka whakatinanahia ki runga i te tūmau. Ka mahia e te kiritaki te tango, te whakatuwhera me te whakaatu i nga puka, "whakawhitiwhiti" ki te kaiwhakamahi (whakatupato, patai ...), nga tatauranga iti i roto i nga puka e hiahia ana ki te whakautu tere (hei tauira, te whakanui i te utu ki te nui), te mahi me nga konae rohe, mahi me nga taputapu.

I roto i te waehere tono, me whakaatu marama nga pane o nga tikanga me nga mahi ki hea ka mahia te waehere - ma te whakamahi i nga tohutohu &AtClient / &AtServer (&AtClient / &AtServer i te putanga reo Ingarihi). Ka whakatikahia ahau e nga kaiwhakawhanake 1C ma te kii he tika nga tohutohu nui ake, engari mo matou ehara tenei i te mea nui inaianei.

Ka taea e koe te waea waehere tūmau mai i te waehere kiritaki, engari kaore e taea e koe te waea waehere kiritaki mai i te waehere tūmau. He here nui tenei i mahia e matou mo etahi take. Ina koa, na te mea me tuhi te waehere tūmau kia rite tonu te mahi ahakoa te waahi e kiia ana - mai i te kiritaki mai i te tūmau ranei. A, mo te waea waehere tūmau mai i tetahi atu waehere tūmau, kaore he kaihoko pera. A na te mea i te wa e mahia ana te waehere tūmau, ka taea e te kiritaki nana i karanga te kati, te puta i te tono, karekau he tangata hei waea atu.

Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast
Waehere e mau ana i te paatene patene: ka mahi te waea i tetahi tikanga tūmau mai i te kiritaki, karekau te waea i te tikanga kiritaki mai i te tūmau.

Ko te tikanga, ki te hiahia matou ki te tuku korero mai i te tūmau ki te tono a te kiritaki, hei tauira, kua oti te whakaputanga o te purongo "roa-roa" ka taea te tiro i te ripoata, kaore he tikanga pera. Me whakamahi koe i nga tinihanga, hei tauira, pooti i ia wa te tūmau mai i te waehere kiritaki. Engari ko tenei huarahi ka utaina te punaha ki nga waea koretake, a, i te nuinga o te waa kaore i te tino huatau.

A he hiahia ano, hei tauira, ka tae mai he waea SIP- i te wa e waea ana, whakamohio atu ki te tono a te kiritaki mo tenei ka taea e ia te whakamahi i te nama o te kaikaea ki te kimi i roto i te papaaarangi korero me te whakaatu i nga korero a te kaiwhakamahi mo te hoa waea. Ranei, hei tauira, ka tae mai he ota ki te whare putunga, whakamohio atu ki te tono a te kiritaki mo tenei. I te nuinga o te waa, he maha nga keehi ka whai hua te tikanga penei.

Ko te whakaputanga ake

Waihangatia he tikanga tuku karere. He tere, he pono, me te tuku taurangi, me te kaha ki te rapu ngawari mo nga karere. I runga i te tikanga, whakauruhia he karere (karere, waea ataata) e rere ana i roto i nga tono 1C.

Hoahoa te punaha kia tauinei whakapae. Ko te pikinga o te kawenga me hipoki ma te whakanui ake i te maha o nga pona.

Реализация

I whakatau matou kia kaua e whakauru tika i te waahanga tūmau o SV ki te papaaho 1C: Enterprise, engari ki te whakatinana hei hua motuhake, ko te API ka taea te karanga mai i te waehere o nga otinga tono 1C. I mahia tenei mo te maha o nga take, ko te mea nui ko taku hiahia kia taea e au te whakawhiti korero i waenga i nga tono 1C rereke (hei tauira, i waenga i te Whakahaere Hokohoko me te Kaute). Ka taea e nga tono 1C rereke te rere i runga i nga momo putanga rereke o te 1C:Tuapapa hinonga, kei runga i nga tuunga rereke, aha atu. I roto i enei ahuatanga, ko te whakatinanatanga o te SV hei hua motuhake kei "te taha" o nga whakaurunga 1C ko te otinga tino pai.

Na, i whakatau matou ki te hanga SV hei hua motuhake. E taunaki ana matou kia whakamahia e nga kamupene iti te tūmau CB i whakauruhia e matou ki to maatau kapua (wss://1cdialog.com) hei karo i nga utu o runga e pa ana ki te whakaurunga me te whirihoranga o te tūmau. Ka kitea pea e nga kaihoko nui he mea pai ki te whakauru i a raatau ake kaitoro CB ki o raatau whare. I whakamahia e matou he huarahi rite ki a maatau hua SaaS kapua 1c hou - ka hangaia hei hua hanga papatipu mo te whakaurunga ki nga waahi o nga kaihoko, ka tukuna ano ki roto i to maatau kapua https://1cfresh.com/.

Whakamahinga

Hei tohatoha i te kawenga me te hee, ka tukuna e matou ehara i te tono Java kotahi, engari he maha, me te taurite kawenga kei mua i a raatau. Mena ka hiahia koe ki te whakawhiti karere mai i te node ki te node, whakamahia te whakaputa / ohauru ki Hazelcast.

Ko te whakawhitiwhitinga korero i waenga i te kiritaki me te kaimau ma te ipurangi. He tino pai mo nga punaha wa-tūturu.

Keteroki toha

I whiriwhiria e matou i waenga i a Redis, Hazelcast me Ehcache. Ko te tau 2015. I tukuna e Redis he kahui hou (he hou rawa, he whakamataku), kei reira a Sentinel me te maha o nga here. Kaore a Ehcache e mohio ki te whakahiato ki roto i te tautau (i muri mai ka puta mai tenei mahi). I whakatau matou ki te whakamatau me te Hazelcast 3.4.
Ka whakaemihia te Hazelcast ki roto i te kapoi mai i te pouaka. I roto i te aratau node kotahi, ehara i te mea tino whai hua, ka taea anake te whakamahi hei keteroki - kaore e mohio ki te tuku raraunga ki te kōpae, ki te ngaro koe i te node anake, ka ngaro nga raraunga. Ka horahia e matou etahi Hazelcasts, kei waenganui i a maatau te pupuri i nga raraunga whakahirahira. Kaore matou e whakahoki i te keteroki - kaore matou e whakaaro.

Mo tatou, ko Hazelcast:

  • Te rokiroki o nga waahi kaiwhakamahi. He roa te wa ki te haere ki te papa korero mo tetahi huihuinga ia wa, no reira ka tukuna e matou nga waahi katoa ki Hazelcast.
  • Keteroki. Mena kei te rapu koe i tetahi tohu kaiwhakamahi, tirohia te keteroki. I tuhia he karere hou - hoatu ki roto i te keteroki.
  • Nga kaupapa mo te whakawhitiwhiti korero i waenga i nga tauira tono. Ka mahia e te node tetahi huihuinga ka tuu ki te kaupapa Hazelcast. Ko etahi atu pona tono kua ohauru ki tenei kaupapa ka whiwhi me te tukatuka i te huihuinga.
  • Kapoi raka. Hei tauira, ka waihangahia he matapaki ma te whakamahi i tetahi taviri ahurei (whakawhitinga korero kotahi i roto i te papaarangi 1C):

conversationKeyChecker.check("БЕНЗОКОЛОНКА");

      doInClusterLock("БЕНЗОКОЛОНКА", () -> {

          conversationKeyChecker.check("БЕНЗОКОЛОНКА");

          createChannel("БЕНЗОКОЛОНКА");
      });

I tirohia e matou kaore he hongere. Ka mauhia e matou te raka, ka tirohia ano, ka hangaia. Ki te kore koe e tirotiro i te raka i muri i te tango i te raka, tera pea ka tirohia ano e tetahi atu miro i tera wa ka ngana ki te hanga i taua korerorero - engari kei te noho tonu. Kaore e taea e koe te maukati ma te whakamahi i te java Lock kua tukutahi, i nga wa katoa. Na roto i te paataka raraunga - he puhoi, he pouri mo te paataka raraunga; na Hazelcast - koinei te mea e hiahia ana koe.

Te whiriwhiri i te DBMS

He wheako nui, angitu hoki te mahi tahi me PostgreSQL me te mahi tahi me nga kaihanga o tenei DBMS.

Ehara i te mea ngawari me te roopu PostgreSQL - kei reira XL, XC, Citus, engari ko te nuinga ehara enei i nga NoSQL e tau ana mai i te pouaka. Kaore matou i whakaaro ko NoSQL te rokiroki matua; he nui noa i tangohia e matou a Hazelcast, kaore ano matou i mahi i mua.

Mēnā ka hiahia koe ki te āwhata i tētahi pātengi raraunga hononga, ko te tikanga tiritiri. Kei te mohio koe, ma te sharding ka wehewehea e matou te paataka raraunga ki nga waahanga motuhake kia taea ai te whakanoho ki runga i tetahi tūmau motuhake.

Ko te putanga tuatahi o to maatau sharding i mau te kaha ki te tohatoha i ia ripanga o ta maatau tono puta noa i nga tuunga rereke i roto i nga waahanga rereke. He maha nga karere kei runga i te tūmau A - tēnā, me nukuhia tētahi wāhanga o tēnei teepu ki te tūmau B. I tangi noa tenei whakatau mo te arotautanga o mua, no reira ka whakatau matou ki te whakawhāiti i a matou ki te huarahi kairëti maha.

Ka taea e koe te panui mo nga kairëti maha, hei tauira, i runga i te paetukutuku Raraunga Citus.

Kei a SV nga ariā o te tono me te kaiohauru. Ko te tono he whakaurunga motuhake o te tono pakihi, penei i te ERP, i te Kaute ranei, me ona kaiwhakamahi me nga raraunga pakihi. Ko te kaiohauru he whakahaere, he tangata takitahi ranei nana te tono kua rehitatia ki te tūmau SV. Ka taea e te kaiohauru te maha o nga tono kua rehitatia, a ka taea e enei tono te whakawhiti karere ki a raua ano. I noho te kaiohauru hei kairëti i roto i ta maatau punaha. Ko nga karere mai i te maha o nga kaiohauru ka kitea i roto i te papaa raraunga tinana kotahi; ki te kite matou kua timata te kaiohauru ki te whakaputa i te maha o nga waka, ka nekehia e matou ki tetahi papaaarangi tinana motuhake (ara he tuumau papaa raraunga motuhake).

He pātengi raraunga matua tā mātou e penapena ai he ripanga ararere me ngā pārongo mō te wāhi o ngā pātengi raraunga kaiohauru katoa.

Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast

Kia kore ai te papaaarangi matua mai i te noho pounamu, ka pupuri matou i te ripanga ararere (me etahi atu raraunga e hiahiatia ana) i roto i te keteroki.

Mēnā ka tīmata te pōturi o te pātengi raraunga o te kaiohauru, ka tapatapahia e mātou ki roto. I etahi atu kaupapa e whakamahia ana e matou pg_pathman.

I te mea he kino te ngaro o nga karere a nga kaiwhakamahi, ka mau tonu o maatau paparangi me nga tauira. Ko te whakakotahitanga o nga tauira tukutahi me te tukutahi ka taea e koe te inihua i a koe mena ka ngaro te papaa raraunga matua. Ka ngaro te karere mena ka rahua te putunga korero tuatahi me tana tauira tukutahi i te wa kotahi.

Ki te ngaro tetahi tauira tukutahi, ka noho tukutahi te tauira tukutahi.
Mēnā kua ngaro te pātengi raraunga matua, ka noho te tauira tukutahi hei pātengi raraunga matua, ā, ka huri te tauira tukutahi hei tauira tukutahi.

Elasticsearch mo te rapu

I te mea, i roto i era atu mea, he karere ano a SV, me rapu tere, watea me te ngawari, me te whai whakaaro ki te morphology, ma te whakamahi i nga whakataetae kore tika. I whakatau matou kia kaua e hanga ano te wira me te whakamahi i te miihini rapu kore utu Elasticsearch, i hangaia i runga i te whare pukapuka Ko Lucene. Ka tukuna ano e matou a Elasticsearch ki roto i te kohinga (master - data - data) ki te whakakore i nga raruraru i te wa e kore e pakaru nga waahanga tono.

I te github i kitea e matou Mono morphology Russian mo Elasticsearch me te whakamahi. I roto i te taurangi Elasticsearch ka penapenahia e matou nga pakiaka kupu (e whakatauhia ana e te mono) me nga N-karamu. I te mea ka uru te kaiwhakamahi ki te kupu rapu, ka rapua e matou te tuhinga i patohia i waenga i nga karamu N. Ina tiakina ki te taurangi, ka wehea te kupu "kuputuhi" ki nga karamu-N e whai ake nei:

[ērā, tek, tex, kuputuhi, tuhinga, ek, ex, ext, tuhinga, ks, kst, ksty, st, sty, koe],

A ko te putake o te kupu "kuputuhi" ka tiakina ano. Ma tenei huarahi ka taea e koe te rapu i te timatanga, i waenganui, i te mutunga o te kupu.

Whakaahua nui

Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast
Whakahokia te pikitia mai i te timatanga o te tuhinga, engari me nga whakamarama:

  • Ka kitea te kairite i runga i te Ipurangi; kei a matou te nginx, ka taea e tetahi.
  • Ko nga tauira tono Java ka korero tetahi ki tetahi ma te Hazelcast.
  • Hei mahi me te turanga tukutuku ka whakamahia e matou Netty.
  • Ko te tono Java kua tuhia ki te Java 8 me nga paihere OSGi. Kei roto i nga mahere te heke ki Java 10 me te whakawhiti ki nga waahanga.

Te whakawhanaketanga me te whakamatautau

I te tukanga o te whakawhanake me te whakamatautau i te SV, i kitea e matou he maha o nga ahuatanga whakamere o nga hua e whakamahia ana e matou.

Whakamatau uta me te pakaru mahara

Ko te tukunga o ia tukunga SV ka uru ki te whakamatautau uta. Ka angitu ina:

  • He maha nga ra i mahi ai te whakamatautau karekau he rahunga ratonga
  • Ko te wa whakautu mo nga mahi matua kaore i neke ake i te paepae pai
  • Ko te paheketanga o te mahinga ka whakaritea ki te putanga o mua kaore e neke ake i te 10%

Ka whakakiia e matou te paataka whakamatautau me nga raraunga - ki te mahi i tenei, ka whiwhi matou i nga korero mo te kaiohauru tino kaha mai i te kaiwhakarato whakaputa, whakareatia ona nama ki te 5 (te maha o nga karere, nga korerorero, nga kaiwhakamahi) me te whakamatautau pera.

Ka whakahaerehia e matou te whakamatautau kawenga o te punaha taunekeneke i roto i nga whirihoranga e toru:

  1. whakamātautau ahotea
  2. Hononga anake
  3. Rēhita kaiohauru

I te wa o te whakamatautau ahotea, ka whakarewahia e matou etahi rau miro, ka utaina e ratou te punaha me te kore e mutu: te tuhi karere, te hanga korerorero, te whiwhi rarangi karere. Ka whakatairitehia e matou nga mahi a nga kaiwhakamahi noa (tihia he rarangi o aku karere kaore ano kia panuitia, tuhia ki tetahi) me nga otinga raupaparorohiko (tuku he kete o te whirihoranga rereke, tukatuka he matohi).

Hei tauira, koinei te ahua o te waahanga o te whakamatautau ahotea:

  • Ka takiuru te kaiwhakamahi
    • Tonoa o korero korero kaore ano kia panuitia
    • 50% pea ka panui i nga karere
    • 50% pea ki te kuputuhi
    • Kaiwhakamahi Panuku:
      • He 20% te tupono ki te hanga korero hou
      • Ka kowhiria noa tetahi o ana korerorero
      • Ka haere ki roto
      • Tono karere, pūkete kaiwhakamahi
      • Ka waihanga i nga karere e rima ki nga kaiwhakamahi ohorere mai i tenei korerorero
      • Ka waiho nga korero
      • Ka tuaruatia kia 20 nga wa
      • Ka puta ki waho, ka hoki ki te timatanga o te tuhinga

    • Ka uru mai te chatbot ki te punaha (ka whai i nga karere mai i te waehere tono)
      • He 50% te tupono ki te hanga hongere hou mo te whakawhiti raraunga (whakawhitinga korero motuhake)
      • 50% pea ka tuhi karere ki tetahi o nga hongere o naianei

Ko te ahuatanga "Hononga Anake" i puta mo tetahi take. He ahuatanga: kua hono nga kaiwhakamahi i te punaha, engari kaore ano kia uru atu. Ka whakakāhia e ia kaiwhakamahi te rorohiko i te 09:00 i te ata, ka whakatuu hononga ki te tūmau ka noho wahangu. He kino enei taangata, he maha o raatau - ko te PING/PONG anake nga kete kei a raatau, engari ka mau tonu te hononga ki te kaimau (kaore e taea te pupuri - ka pewhea he panui hou). Ko te whakamatautau ka whakaputa i tetahi ahuatanga ka ngana te tini o nga kaiwhakamahi penei ki te takiuru ki te punaha i roto i te hawhe haora. He rite ki te whakamatautau ahotea, engari ko tana arotahi kei runga i tenei whakauru tuatahi - kia kore ai he rahunga (kaore te tangata e whakamahi i te punaha, kua taka ke - he uaua ki te whakaaro mo tetahi mea kino atu).

Ka timata te tuhi rehita kaitango mai i te whakarewatanga tuatahi. I whakahaerehia e matou he whakamatautau ahotea me te tino mohio kaore te punaha i puhoi i te wa o nga reta. Engari i tae mai nga kaiwhakamahi ka tiimata te rehitatanga na te wa poto. I te rehitatanga i whakamahia e matou / dev / tupurangi, e pa ana ki te entropy o te punaha. Karekau i whai taima te tūmau ki te whakaemi i te entropy, ā, i te wa i tonohia he SecureRandom hou, ka whakatio mo te tekau hēkona. He maha nga huarahi ka puta mai i tenei ahuatanga, hei tauira: huri ki te /dev/urandom iti ake te haumaru, whakauruhia he papa motuhake e whakaputa ana i te entropy, whakaputa i nga tau matapōkere i mua ka penapena ki roto i te puna. I katia e matou mo te wa poto te raru o te puna kaukau, engari mai i tera wa kua whakahaerehia e matou he whakamatautau motuhake mo te rehita i nga kaiohauru hou.

Ka whakamahia e matou hei kaihanga kawenga JMeter. Kare e mohio me pehea te mahi me te turanga tukutuku; me whai mono. Ko nga hua rapu tuatahi mo te patai "jmeter websocket" ko: nga tuhinga mai i te BlazeMeter, e taunaki ana mono na Maciej Zaleski.

I reira matou i whakatau ai ki te timata.

Tata tonu i muri tonu i te tiimata o te whakamatautau nui, ka kitea e matou i timata a JMeter ki te tuku mahara.

He korero nui motuhake te mono; me nga whetu 176, he 132 nga marau kei runga i te github. Ko te kaituhi tonu kaore ano kia piri ki a ia mai i te tau 2015 (i tangohia e matou i te tau 2015, katahi ka kore i puta he whakapae), he maha nga take github e pa ana ki nga rerenga mahara, e 7 nga tono kume kaore i kati.
Mena ka whakatau koe ki te mahi whakamatautau uta ma te whakamahi i tenei mono, kia whai whakaaro koe ki nga korero e whai ake nei:

  1. I roto i te taiao miro-maha, i whakamahia he LinkedList auau, a ko te hua NPE i te wa whakahaere. Ka taea te whakatau ma te huri ki te ConcurrentLinkedDeque, ma nga poraka tukutahi ranei. I whiriwhiria e matou te whiringa tuatahi mo matou (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Te turuturu mahara; ina momotuhia, karekau nga korero hononga e mukua (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. I roto i te aratau romaroma (ki te kore e kati te turanga tukutuku i te mutunga o te tauira, engari ka whakamahia i muri mai i roto i te mahere), kaore e mahi nga tauira Whakautu (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Koinei tetahi o nga mea kei runga i te github. He aha ta matou i mahi:

  1. Kua tangohia marau Elyran Kogan (@elyrank) – ka whakatika i nga rapanga 1 me te 3
  2. Kua whakaoti rapanga 2
  3. I whakahouhia te waka rererangi mai i te 9.2.14 ki te 9.3.12
  4. I takaia te SimpleDateFormat ki te ThreadLocal; Ko SimpleDateFormat ehara i te miro-haumaru, i puta ki te NPE i te wa whakahaere
  5. Kua whakatikahia tetahi atu reinga mahara (i he te kati i te hononga ina momotuhia)

Heoi ano ka rere!

I timata te kore o te mahara i te ra kotahi, engari i te rua. Kare rawa he wa i toe, no reira ka whakatau matou kia iti ake nga miro, engari ki nga kaihoko tokowha. Kia kotahi wiki pea tenei.

E rua nga ra kua pahemo...

Inaianei kua pau te mahara a Hazelcast. I whakaatuhia e nga rakau i muri i nga ra e rua o te whakamatautau, ka timata a Hazelcast ki te amuamu mo te kore o te mahara, a, i muri i etahi wa ka pakaru te tautau, ka mate tonu nga node. I honoa e matou a JVisualVM ki te hazelcast ka kite i te "rihipi" - ka karangahia ko te GC, engari kaore i taea te whakakore i te mahara.

Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast

I puta mai i roto i te hazelcast 3.4, i te wa e mukua ana he mahere / multiMap (map.destroy()), kaore i tino wetekina te mahara:

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

Kua whakatikahia te bug i te 3.5, engari he raru i tera wa. I hangaia e matou he mahaMaps hou me nga ingoa hihiri ka mukua kia rite ki o maatau whakaaro. He penei te ahua o te waehere:

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

Waea:

service.join(auth1, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");
service.join(auth2, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");

I hangaia te multiMap mo ia ohaurunga ka mukua ina kore e hiahiatia. I whakatau matou ka timata te Mahere , ko te matua ko te ingoa o te ohaurunga, a ko nga uara ko nga kaitautohu waahi (mai i reira ka taea e koe te tiki tohu kaiwhakamahi, mena e tika ana).

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

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

Kua pai ake nga tūtohi.

Me pehea me te take i tuhia ai e matou he ratonga tauine-nui mo te 1C: Enterprise: Java, PostgreSQL, Hazelcast

He aha atu ta maatau i ako mo te whakamatautau uta?

  1. Me tuhi te JSR223 ki roto i te groovy me te whakauru i te keteroki whakahiato - he tere ake. hono.
  2. Ko nga kauwhata Jmeter-Plugins he maamaa ake te maarama atu i nga mea paerewa. hono.

Mo to maatau wheako ki a Hazelcast

He hua hou a Hazelcast mo matou, i timata matou ki te mahi tahi mai i te putanga 3.4.1, inaianei kei te whakahaerehia e to maatau whakaputanga te putanga 3.9.2 (i te wa e tuhi ana, ko te putanga hou o Hazelcast ko 3.10).

Whakatupuranga ID

I timata matou me nga kaitautuhi tauoti. Whakaarohia me hiahia tetahi atu Roa mo tetahi hinonga hou. Ko te raupapa i roto i te papaaarangi kaore i te pai, ko nga ripanga kei te uru ki te sharding - ka puta he ID karere = 1 i roto i te DB1 me te ID karere = 1 i roto i te DB2, kaore e taea e koe te whakauru i tenei ID ki Elasticsearch, me te Hazelcast. , engari ko te mea kino rawa ki te hiahia koe ki te whakakotahi i nga raraunga mai i nga papaaarangi e rua ki te kotahi (hei tauira, ko te whakatau kia kotahi te paataka korero mo enei kaiohauru). Ka taea e koe te taapiri i etahi AtomicLongs ki te Hazelcast me te pupuri i te porotiti ki reira, katahi ko te mahi mo te whiwhi ID hou he pikingaAndGet me te wa mo te tono ki a Hazelcast. Engari he mea tino pai ake a Hazelcast - FlakeIdGenerator. Ina whakapā atu ki ia kiritaki, ka hoatu he awhe ID, hei tauira, te tuatahi - mai i te 1 ki te 10, te tuarua - mai i te 000 ki te 10, me era atu. Inaianei ka taea e te kiritaki te whakaputa i nga kaitautuhi hou ki a ia ano kia mutu ra ano te awhe i tukuna ki a ia. Ka tere te mahi, engari ka timata ano koe i te tono (me te kiritaki Hazelcast), ka timata te raupapa hou - no reira nga peke, aha atu. I tua atu, kaore nga kaiwhakawhanake i te tino mohio he aha te tauoti o nga ID, engari he koretake. I paunatia e matou nga mea katoa ka huri ki nga UUID.

Ma te ara, mo te hunga e hiahia ana kia rite ki a Twitter, kei reira he whare pukapuka Snowcast - he whakatinanatanga tenei o Snowflake ki runga ake o Hazelcast. Ka taea e koe te tiro i konei:

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

Engari kaore ano matou i tae atu.

TransactionalMap.replace

Ko tetahi atu ohorere: TransactionalMap.replace kaore e mahi. Anei he whakamatautau:

@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

Me tuhi ahau i taku ake whakakapi ma te whakamahi i te 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);
}

Whakamātautauhia ehara i nga hanganga raraunga auau anake, engari ano hoki o raatau putanga tauwhitinga. Ko te mea ka mahi a IMap, engari kua kore a TransactionalMap.

Kōkuhuhia he JAR hōu me te kore wā whakatō

Tuatahi, i whakatau matou ki te tuhi i nga taonga o a matou karaehe ki Hazelcast. Hei tauira, he karaehe Tono ta matou, e hiahia ana matou ki te penapena me te panui. Tiaki:

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

ingoa:

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

Kei te mahi nga mea katoa. Na ka whakatau matou ki te hanga taurangi ki Hazelcast hei rapu ma te:

map.addIndex("subscriberId", false);

A, i te wa e tuhi ana i tetahi hinonga hou, ka tiimata ratou ki te whiwhi ClassNotFoundException. I ngana a Hazelcast ki te taapiri atu ki te taurangi, engari karekau i mohio mo ta matou karaehe me te hiahia kia tukuna he JAR me tenei akomanga. I mahi noa matou, i pai nga mea katoa, engari he raru hou kua puta: me pehea te whakahou i te JAR me te kore e aukati i te tautau? Karekau a Hazelcast e tango i te JAR hou i te wa o te whakahou node-by-node. I tenei wa ka whakatau matou ka ora matou me te kore rapu tohu. I muri i nga mea katoa, ki te whakamahi koe i a Hazelcast hei toa-nui, ka mahi nga mea katoa? Kaore rawa. I konei ano he rereke te whanonga o IMap me TransactionalMap. Ki te kore te IMap e aro, ka tukuna he hapa a TransactionalMap.

IMap. Ka tuhia e matou nga taonga 5000, ka panuihia. Ko nga mea katoa e tumanakohia ana.

@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());
    }
}

Engari kaore e mahi i roto i te tauwhitinga, ka whiwhi matou i te 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();
        }
    });
}

I roto i te 3.8, ka puta te tikanga Whakamahinga Akomanga Kaiwhakamahi. Ka taea e koe te tohu i tetahi node matua me te whakahou i te konae JAR kei runga.

Inaianei kua tino whakarerekehia e maatau te huarahi: ka whakararangihia e maatau ki a JSON ka penapena ki Hazelcast. Kare a Hazelcast e hiahia ki te mohio ki te hanganga o a maatau karaehe, a ka taea e taatau te whakahou me te kore he waahi. Ko te whakaputanga o nga ahanoa rohe e whakahaeretia ana e te tono. Ko nga momo momo momo tono ka taea te whakahaere i te wa kotahi, a ka taea he ahuatanga ka tuhia e te tono hou nga taonga me nga mara hou, engari kaore ano te tawhito i te mohio mo enei mara. A i te wa ano, ka panuihia e te tono hou nga mea i tuhia e te tono tawhito kaore he mara hou. Ka whakahaerehia e matou nga ahuatanga penei i roto i te tono, engari mo te ngawari kaore matou e whakarereke, e whakakore ranei i nga mara, ka whakawhānuihia nga karaehe ma te taapiri i nga mara hou.

Me pehea e whakarite ai i nga mahi teitei

E wha nga haerenga ki Hazelcast - pai, e rua ki te paataka raraunga - kino

Ko te haere ki te keteroki mo nga raraunga he pai ake i te haere ki te paataka, engari kaore koe e hiahia ki te penapena i nga rekoata kaore i whakamahia. Ka waiho e matou te whakatau mo nga mea hei keteroki tae noa ki te waahanga whakamutunga o te whanaketanga. Ina tohua te mahi hou, ka whakahurihia e matou te takiuru o nga patai katoa i roto i te PostgreSQL (log_min_duration_statement to 0) ka whakahaere i te whakamatautau kawenga mo nga meneti 20. Ma te whakamahi i nga raarangi kua kohia, ka taea e nga taputapu penei i te pgFouine me te pgBadger te hanga i nga purongo tātari. I roto i nga purongo, ka rapua e matou nga patai puhoi me te auau. Mo nga patai puhoi, ka hangaia e matou he mahere mahi (whakamarama) me te arotake mena ka taea te whakatere i taua patai. Ko nga tono auau mo nga raraunga whakauru kotahi e uru pai ana ki te keteroki. Ka ngana matou ki te pupuri i nga patai "papatahi", kotahi tepu mo ia patai.

te faaohiparaa i

Ko te SV hei ratonga ipurangi i tukuna i te puna o 2017, a hei hua motuhake, i tukuna a SV i te marama o Whiringa-a-rangi 2017 (i taua wa i roto i te mana putanga beta).

I roto i te neke atu i te kotahi tau o te mahi, kaore he raruraru nui i roto i te mahi o te ratonga ipurangi CB. Ka aroturuki matou i te ratonga ipurangi ma Zabbix, kohikohi me te tohatoha mai Pounamu.

Ko te tohatoha tūmau SV ka tukuna i roto i te ahua o nga kohinga taketake: RPM, DEB, MSI. Hei taapiri mo Windows ka whakaratohia e matou he kaiwhakauru kotahi i te ahua o te EXE kotahi e whakauru ana i te tūmau, Hazelcast me Elasticsearch ki runga i te miihini kotahi. I te tuatahi i kii matou ki tenei waahanga o te whakaurunga ko te putanga "demo", engari kua maarama inaianei koinei te waahanga tuku rongonui.

Source: will.com

Tāpiri i te kōrero