Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast

Maqaalkan waxaan ka hadli doonaa sida iyo sababta aan u horumarinay Nidaamka is dhexgalka - hannaan ku wareejinaya macluumaadka u dhexeeya codsiyada macmiilka iyo 1C: Servers-yada ganacsiga - laga bilaabo dejinta hawl ilaa ka fikirida tafaasiisha qaab-dhismeedka iyo hirgelinta.

Nidaamka Is-dhexgalka (oo hadda loo yaqaan SV) waa nidaam farimo la qaybiyey, khalad u dulqaadan oo leh dammaanad gaarsiinta. SV waxaa loo qaabeeyey adeeg culeyskiisu sarreeyo oo leh miisaan sare, oo loo heli karo labadaba adeeg online ah (oo ay bixiso 1C) iyo sida badeeco badan oo la soo saaray oo la geyn karo xarumaha server-kaaga.

SV waxay isticmaashaa kaydinta la qaybiyey hazelcast iyo mashiinka raadinta Elasticsearch. Waxaan sidoo kale ka hadli doonaa Java iyo sida aan u cabbirno PostgreSQL.
Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast

Abuurista dhibaatada

Si loo caddeeyo sababta aan u abuurnay Nidaamka Is-dhexgalka, waxaan kuu sheegi doonaa wax yar oo ku saabsan sida horumarinta codsiyada ganacsiga ee 1C u shaqeeyo.

Si aan u bilaabo, in yar oo nagu saabsan kuwa aan weli garanayn waxa aan samayno :) Waxaan samaynaynaa 1C: madal tignoolajiyada ganacsiga. Madalku waxa ku jira qalab horumarineed oo arji ganacsi ah, iyo sidoo kale runtime kaas oo u oggolaanaya codsiyada ganacsigu inay ku shaqeeyaan jawi iskutallaab ah.

Qaabka horumarinta macmiilka-serverka

Codsiyada ganacsiga ee lagu abuuray 1C: Shirkad waxay ku shaqeeyaan saddex heer macmiilka-server dhismaha "DBMS - server codsiga - macmiilka". Koodhka codsiga oo ku qoran ku dhex dhisan luqadda 1C, waxaa lagu fulin karaa server-ka codsiga ama macmiilka. Dhammaan shaqada walxaha codsiga (tusaha, dukumentiyada, iwm.), iyo sidoo kale akhrinta iyo qorista xogta, waxaa lagu sameeyaa kaliya serverka. Shaqeynta foomamka iyo interface interface ayaa sidoo kale lagu hirgeliyaa server-ka. Macmiilku waxa uu sameeyaa qaabilaadda, furista iyo soo bandhigida foomamka, "la xidhiidhinta" isticmaalaha (digniinta, su'aalaha...), xisaabinta yaryar ee foomamka u baahan jawaab degdeg ah (tusaale, ku dhufashada qiimaha tiro ahaan), la shaqeynta faylasha maxaliga ah, ku shaqaynta qalabka.

Codsiga koodka, madaxyada habraacyada iyo shaqadu waa inay si cad u muujiyaan halka koodka lagu fulin doono - iyadoo la isticmaalayo &AtClient / &AtServer dardaaranka (&AtClient / &AtServer ee nooca Ingiriisiga ah). Horumarinta 1C hadda ayaa i sixi doona iyagoo leh awaamiirtu waa run in ka badan, laakiin anaga tani hadda muhiim maaha.

Waxaad ka wici kartaa nambarka serverka koodhka macmiilka, laakiin kama wici kartid nambarka macmiilka lambarka serverka. Tani waa xaddidaad aasaasi ah oo aan u samaynay dhowr sababood. Gaar ahaan, sababtoo ah koodka server-ka waa in loo qoraa qaab si uu u fuliyo si isku mid ah meel kasta oo loogu yeero - laga bilaabo macmiilka ama serverka. Iyo kiiska wicitaanka koodka server-ka ee koodka server-ka kale, ma jiro macmiil sidaas oo kale ah. Iyo sababta oo ah inta lagu guda jiro fulinta koodka server-ka, macmiilka soo wacay wuu xidhi karaa, wuu ka bixi karaa arjiga, server-kuna ma lahaan doono qof uu waco.

Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast
Koodhka gacanta ku haya badhanka dhagsii: ka yeedhida nidaamka adeegaha ee macmiilka wuu shaqayn doonaa, ka yeedhida nidaamka macmiilka ee serferka ma shaqayn doono

Tani waxay ka dhigan tahay in haddii aan rabno inaan u dirno fariin ka timid server-ka codsiga macmiilka, tusaale ahaan, in jiilka warbixinta "dheer-dheer" uu dhammaaday oo warbixinta la arki karo, ma hayno habkan. Waa inaad isticmaashaa xeelado, tusaale ahaan, xiliyada qaarkood serferka ka dhiibo lambarka macmiilka. Laakiin habkani wuxuu ku dhejiyaa nidaamka wicitaanada aan loo baahnayn, guud ahaanna uma eka mid aad u qurux badan.

Waxa kale oo jirta baahi, tusaale ahaan, marka taleefoon la soo waco SIP- marka aad wacayso, ogeysii codsiga macmiilka arrintan ku saabsan si ay u isticmaasho lambarka soo wacaha si ay ugu dhex hesho xogta dhigeeda oo ay u muujiso isticmaalaha macluumaadka ku saabsan dhiggiisa wacitaanka. Ama, tusaale ahaan, marka uu dalabku yimaado bakhaarka, ogeysii codsiga macmiilka ee tan. Guud ahaan, waxaa jira kiisas badan oo habkan oo kale uu faa'iido u leeyahay.

Wax soo saarka laftiisa

Samee habka fariinta. Degdeg ah, la isku halayn karo, oo leh dammaanad gaarsiinta, oo leh karti si dabacsanaan leh loogu raadiyo fariimaha. Iyada oo ku saleysan habka, dhaqangeli farriinta (farimaha, wicitaannada fiidiyowga) ee ku dhex socda codsiyada 1C.

U qaabee nidaamka si uu u noqdo mid siman oo la miisaami karo. Culayska sii kordhaya waa in lagu daboolaa kordhinta tirada qanjidhada.

Реализация

Waxaan go'aansanay inaanan qaybta server-ka ee SV si toos ah ugu biirin 1C: madal ganacsi, laakiin si loo hirgeliyo badeecad gaar ah, API-ga kaas oo loogu yeeri karo koodka xalalka codsiga 1C. Tan waxaa loo sameeyay dhowr sababood, midda ugu weyn ee taas ka mid ah waxay ahayd inaan doonayay inaan suurtageliyo in la is dhaafsado fariimaha u dhexeeya codsiyada 1C ee kala duwan (tusaale, inta u dhaxaysa Maareynta Ganacsiga iyo Xisaabinta). Codsiyada 1C ee kala duwan waxay ku socon karaan noocyo kala duwan oo ah 1C:Madal ganacsi, waxay ku yaalaan servero kala duwan, iwm. Xaaladahan oo kale, hirgelinta SV sida badeecad gaar ah oo ku taal "dhinaca" rakibaadda 1C waa xalka ugu fiican.

Markaa, waxaan go'aansanay inaan SV ka dhigno alaab gaar ah. Waxaan ku talineynaa in shirkadaha yaryar ay isticmaalaan server-ka CB ee aan ku rakibnay daruurteena (ws://1cdialog.com) si ay uga fogaadaan kharashaadka dheeraadka ah ee la xidhiidha rakibidda iyo habaynta serferka. Macaamiisha waaweyni waxay u arki karaan inay ku talinayaan inay ku rakibaan server-kooda CB xaruntooda. Waxaan u isticmaalnay hab la mid ah badeecadeena SaaS ee daruuraha 1ccusub - waxaa loo soo saaray sidii wax soo saar ballaaran oo loogu talagalay in lagu rakibo goobaha macaamiisha, waxaana sidoo kale la geeyaa daruurteena https://1cfresh.com/.

Codsiga

Si loo qaybiyo culeyska iyo dulqaadka qaladka, ma geyn doono hal codsi Java, laakiin dhowr, oo leh miisaan-dheellitirka hortooda. Haddii aad u baahan tahay inaad fariin ka wareejiso noodhka una gudubto noodhka, isticmaal daabac/ku-qorista Hazelcast.

Xidhiidhka u dhexeeya macmiilka iyo serferku waa websocket. Waxay si fiican ugu habboon tahay nidaamyada waqtiga-dhabta ah.

Kaydka la qaybiyay

Waxaan kala dooranay Redis, Hazelcast iyo Ehcache. Waa 2015. Redis hadda waxay soo saartay koox cusub (aad u cusub, cabsi leh), waxaa jira Sentinel oo leh xannibaado badan. Ehcache ma garanayo sida la isugu keeno koox (shaqadan mar dambe ayay soo muuqatay). Waxaan go'aansanay inaan ku tijaabino Hazelcast 3.4.
Hazelcast waxa lagu ururiyay koox ka baxsan sanduuqa. In hab hal noode ah, ma aha mid aad u faa'iido leh oo kaliya waxaa loo isticmaali karaa sida khasnado - ma yaqaan sida loo daadiyo xogta disk, haddii aad lumiso noode kaliya, aad lumiso xogta. Waxaan geynaa dhowr Hazelcasts, kuwaas oo aan ku kaydineyno xogta muhiimka ah. Ma celinno kaydka - waxba kama qabo.

Annaga, Hazelcast waa:

  • Kaydinta fadhiyada isticmaalaha Waxay qaadanaysaa wakhti dheer in la aado kaydka kaydka fadhi wakhti kasta, markaa waxaanu ku dhejinaynaa dhammaan fadhiyada Hazelcast.
  • Cache Haddii aad raadinayso profile user, hubi khasnado. Qor fariin cusub - geli khasnadda.
  • Mawduucyada xiriirka ka dhexeeya tusaalooyinka codsiga. Noodku wuxuu abuuraa dhacdo wuxuuna dhigayaa mawduuca Hazelcast. Codsiyada kale ee loo yaqaan 'nodes' ee mawduucan la xiriira ayaa helay oo habeeya dhacdada.
  • Qufulka kooxda Tusaale ahaan, waxaanu abuurnaa dood anagoo adeegsanayna fure gaar ah (kaliya dood ku dhex jirta xogta 1C):

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

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

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

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

Waxaan hubinay in uusan jirin kanaal. Waxaan qaadnay qufulka, mar kale hubinay, oo aan abuurnay. Haddii aadan hubin qufulka ka dib qaadashada qufulka, markaa waxaa jirta fursad ah in dun kale ay sidoo kale hubisay wakhtigaas oo ay hadda isku dayi doonto inay abuurto dood la mid ah - laakiin mar hore way jirtay. Ma qufuli kartid adigoo isticmaalaya Java Lock la mid ah ama caadiga ah. Iyada oo loo marayo xogta - waa mid gaabis ah, waana u naxariiste database; iyada oo loo marayo Hazelcast - taasi waa waxa aad u baahan tahay.

Doorashada DBMS

Waxaan leenahay waayo-aragnimo ballaaran oo guul leh la shaqeynta PostgreSQL iyo la shaqeynta horumariyeyaasha DBMS.

Kuma fududa kutlada PostgreSQL - way jirtaa XL, XC, Citus, laakiin guud ahaan kuwani maaha NoSQL-yada ka soo baxa sanduuqa. Uma aynaan tixgelin NoSQL inay tahay kaydinta ugu weyn; way ku filan tahay inaan qaadanay Hazelcast, oo aynaan horay ula shaqayn.

Haddii aad u baahan tahay inaad cabirto xogta xogta la xiriirta, taasi waxay ka dhigan tahay jeexjeexid. Sidaad ogtahay, innagoo sharding la kaashanayna, waxaanu u qaybinaynaa kaydka kaydka qaybo kala duwan si mid walba loogu dhejiyo server gaar ah.

Nooca ugu horreeya ee sharding-keennu wuxuu u malaynayaa awoodda lagu qaybiyo mid kasta oo ka mid ah jaantusyada codsigayaga oo dhan server-yada kala duwan oo kala duwan. Waxaa jira farriimo badan oo ku jira server-ka A - fadlan, aan u wareejino qayb ka mid ah miiskan server-ka B. Go'aankani wuxuu si fudud uga qayliyay hagaajinta degdega ah, markaa waxaan go'aansanay inaan nafteena ku xaddidno habka kireystayaasha badan.

Waxaad ka akhrisan kartaa wax ku saabsan kireystayaasha badan, tusaale ahaan, mareegaha Citus Data.

SV wuxuu leeyahay fikradaha codsiga iyo macaamiisha. Codsigu waa rakibaad gaar ah oo ah codsi ganacsi, sida ERP ama Xisaabinta, oo wata isticmaaleyaasheeda iyo xogta ganacsiga. Macmiilku waa urur ama shakhsi magaciisa uu codsigu kaga diiwaan gashan yahay serverka SV. Macaamiilku waxa uu yeelan karaa codsiyo dhawr ah oo la diwaangeliyay, codsiyadani waxa ay is dhaafsan karaan fariimaha midba midka kale. Rukunsaduhu wuxuu noqday kirayste nidaamkayaga. Farriimaha ka imanaya macaamiil badan ayaa ku yaal hal xog ururin; Haddii aan aragno in macaamiishu ay bilaabeen inay abuuraan taraafikada badan, waxaan u wareejineynaa xog-ururin gaar ah (ama xitaa server database gaar ah).

Waxaan haynaa xog-ururin weyn halkaas oo miiska dajinta lagu kaydiyo macluumaadka ku saabsan goobta dhammaan macluumaadka macaamiisha.

Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast

Si aan xogta muhiimka ah uga ilaalino inay noqoto dhuunta, waxaanu ku haynaa miiska dajinta (iyo xogta kale ee inta badan loo baahan yahay) kayd.

Haddii xogta macaamiishu bilaabato inay hoos u dhigto, waxaanu u gooyn doonaa qaybo gudaha ah. Mashaariicda kale ee aan isticmaalno pg_pathman.

Maaddaama luminta farriimaha isticmaalaha ay xun tahay, waxaan ku ilaalinaa keydka macluumaadkayaga nuqullo. Isku-darka nuqullada isku-dhafka ah iyo kuwa isku-dhafka ah waxay kuu oggolaanayaan inaad caymiso naftaada haddii aad lumiso xogta muhiimka ah. Luminta fariintu waxay dhici doontaa kaliya haddii xogta aasaasiga ah iyo nuqulkeeda isku midka ah ay isku mar fashilmaan.

Haddii koobiga isku midka ah uu lumo, nuqulka asynchronous wuxuu noqonayaa mid isku mid ah.
Haddii kaydka ugu weyni uu lumo, nuqulka isku midka ah wuxuu noqonayaa kaydka ugu muhiimsan, nuqulka asynchronous wuxuu noqdaa nuqul isku mid ah.

Elasticsearch raadinta

Maadaama ay ka mid yihiin, SV sidoo kale waa fariin, waxay u baahan tahay si degdeg ah, ku habboon oo raadin dabacsan, iyada oo la tixgelinayo morphology, iyada oo la adeegsanayo kabriid aan sax ahayn. Waxaan go'aansanay in aynaan dib u curin giraangiraha oo aan isticmaalno mashiinka raadinta bilaashka ah ee Elasticsearch, ee lagu sameeyay maktabadda Lucene. Waxaan sidoo kale geynaa Elasticsearch koox (master - data - data) si loo baabi'iyo dhibaatooyinka haddii ay dhacdo fashilka qanjidhada codsiga.

On github waxaan ka helnay Qalabka morphology ee Ruushka Elasticsearch oo isticmaal Tusmada Elasticsearch waxaynu ku kaydinay xididada ereyada (kaaso plugin-ku go'aamiyo) iyo N-grams. Marka isticmaaluhu uu galo qoraal si uu u raadiyo, waxaanu ka dhex raadinaa qoraalka ku qoran N-grams. Marka lagu kaydiyo tusmada, ereyga "qoraalo" waxa loo qaybin doonaa N-gram-yada soo socda:

[kuwa, tek, tex, text, texts, ek, ex, ext, qoraalada, ks, kst, ksty, st, sty, adiga],

Iyo xididka ereyga "qoraalka" sidoo kale waa la ilaalin doonaa. Habkani wuxuu kuu ogolaanayaa inaad raadiso bilawga, dhexda, iyo dhamaadka ereyga.

Guud ahaan sawirka

Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast
Ku soo celi sawirka bilawga maqaalka, laakiin leh sharraxaad:

  • Isku-dheellitirka oo kashifay internetka; Waxaan leenahay nginx, waxay noqon kartaa mid kasta.
  • Tusaalooyinka codsiga Java waxay ku wada xiriiraan midba midka kale Hazelcast.
  • Si aan ugu shaqayno godadka shabakada waxaan isticmaalnaa Netty.
  • Codsiga Java wuxuu ku qoran yahay Java 8 wuxuuna ka kooban yahay xidhmo OSGi. Qorshayaasha waxaa ka mid ah u guurista Java 10 iyo u gudubka cutubyada.

Horumarinta iyo tijaabinta

Intii lagu guda jiray horumarinta iyo tijaabinta SV, waxaan la kulannay dhowr waxyaalood oo xiiso leh oo ka mid ah alaabooyinka aan isticmaalno.

Baaritaanka culeyska iyo xusuusta daadato

Siideynta SV kasta waxay ku lug leedahay tijaabinta culeyska. Waa guul marka:

  • Imtixaanku wuxuu shaqeeyay dhowr maalmood mana jirin wax cillado ah oo adeeg ah
  • Waqtiga jawaabta hawlgallada muhiimka ah kama dhaafin heer raaxo leh
  • Waxqabadku xumaaday marka loo eego noocii hore wax ka badan 10%

Waxaan ku buuxineynaa xogta imtixaanka xogta - si tan loo sameeyo, waxaan ka helnaa macluumaadka ku saabsan macaamiisha ugu firfircoon ee server-ka wax soo saarka, ku dhufo nambarada 5 (tirada fariimaha, doodaha, isticmaalayaasha) oo tijaabi habkaas.

Waxaan ku qaadeynaa tijaabinta culeyska nidaamka is dhexgalka seddex qaab:

  1. baaritaanka cadaadiska
  2. Xiriirinta kaliya
  3. Diiwaangelinta macaamiisha

Inta lagu jiro imtixaanka walaaca, waxaan bilaabeynaa dhowr boqol oo xadhig, waxayna ku shubaan nidaamka iyaga oo aan joojin: qorista fariimaha, abuurista doodaha, helitaanka liiska fariimaha. Waxaan u ekaysiiyaa ficilada isticmaalayaasha caadiga ah (hel liiska fariimahayga aan la akhriyin, qof u qor) iyo xalalka softiweerka (gudbi xirmo qaabeyn ka duwan, socodsiinta digniinta).

Tusaale ahaan, tani waa waxa ay u eg tahay qaybta tijaabada walaaca:

  • Isticmaalaha ayaa galaya
    • Wuxuu codsanayaa doodahaaga aan la akhriyin
    • 50% waxay u badan tahay inay akhriyaan fariimaha
    • 50% ayay u badan tahay in qoraal loo diro
    • Isticmaalaha xiga:
      • Wuxuu haystaa 20% fursad uu ku abuuro dood cusub
      • Si aan kala sooc lahayn u doorta mid ka mid ah doodaheeda
      • Gudaha gala
      • Codsada fariimaha, profiles user
      • Wuxuu ka abuuraa shan fariimo oo loola jeedo isticmaalayaasha aan tooska ahayn dooddan
      • Ka baxa doodaha
      • Ku celi 20 jeer
      • Ka baxa, dib ugu noqda bilawga qoraalka

    • Chatbot-ku wuxuu soo galaa nidaamka (wuxuu ku dayanayaa fariimaha koodka codsiga)
      • Wuxuu haystaa 50% fursad uu ku abuuro kanaal cusub oo xog is dhaafsi ah ( dood gaar ah)
      • 50% waxay u badan tahay inay u qoraan fariin mid ka mid ah kanaalada jira

"Xiriirka Kaliya" ayaa u muuqday sabab. Waxaa jira xaalad: isticmaalayaashu waxay ku xidheen nidaamka, laakiin weli kama qaybgelin. Isticmaale kastaa wuxuu daaraa kumbiyuutarka 09:00 subaxnimo, wuxuu sameeyaa isku xirka server-ka oo wuu aamusan yahay. Raggani waa khatar, waxaa jira qaar badan oo iyaga ka mid ah - baakadaha kaliya ee ay haystaan ​​waa PING/PONG, laakiin waxay ku hayaan xiriirka server-ka (ma sii wadi karaan - ka waran haddii ay jirto fariin cusub). Tijaabadu waxay soo saartaa xaalad halkaas oo tiro badan oo isticmaalayaasha noocaas ah ay isku dayaan inay galaan nidaamka nus saac gudahood. Waxay la mid tahay tijaabada walaaca, laakiin diiradda ayaa si sax ah ugu jirta gelintan ugu horreysa - si aysan u dhicin wax guuldarro ah (qofku ma isticmaalo nidaamka, oo mar hore wuu dhacayaa - way adag tahay in la fekero wax ka sii xun).

Qoraalka diiwaangelinta macaamiishu waxay ka bilaabataa bilawga koowaad. Waxaan sameynay tijaabo cadaadis waxaanan hubinay in nidaamku uusan hoos u dhicin inta lagu jiro waraaqaha. Laakin isticmaalayaasha ayaa yimid oo diiwangelintii waxay bilaabatay inay fashilanto waqti go' awgeed. Markii aan isdiiwaangelinayna waan isticmaalnay / dev / nasiib, kaas oo la xidhiidha entropy ee nidaamka. Adeeguhu ma helin wakhti uu ku ururiyo entropy ku filan oo markii SecureRandom cusub la codsado, wuu barafoobay tobanaan ilbiriqsi. Waxaa jira siyaabo badan oo looga baxo xaaladdan, tusaale ahaan: u beddel kuwa aan ammaan ahayn /dev/urandom, ku rakib guddi gaar ah oo soo saara entropy, horay u soo saar tirooyin aan kala sooc lahayn oo ku kaydi barkad. Waxaan si ku meel gaar ah u xirnay dhibaatada barkada, laakiin tan iyo markaas waxaan wadnay imtixaan gooni ah oo loogu talagalay diiwaangelinta macaamiisha cusub.

Waxaan u isticmaalnaa dab-dhaliye JMeter. Ma garanayo sida loogu shaqeeyo websocket; waxay u baahan tahay plugin. Natiijooyinka ugu horreeya ee raadinta "jmeter websocket" waa: articles ka BlazeMeter, kuwaas oo ku talinaya plugin by Maciej Zaleski.

Halkaas ayaan go'aansanay in aan ka bilowno.

Ku dhawaad ​​isla markiiba ka dib markii aan bilownay baaritaanka halista ah, waxaan ogaanay in JMeter uu bilaabay inuu soo daayo xusuusta.

Plugin waa sheeko weyn oo gooni ah; oo leh 176 xiddigood, waxay ku leedahay 132 fargeeto github. Qoraaga laftiisa ma uusan go'aamin tan iyo 2015 (waxaan ku qaadnay 2015, ka dibna ma aysan kicin shaki), dhowr arrimood oo github ah oo ku saabsan daadinta xusuusta, 7 codsiyo jiidasho aan la xirin.
Haddii aad go'aansato inaad samayso tijaabinta culayska adoo isticmaalaya plugingan, fadlan fiiro gaar ah u yeelo doodaha soo socda:

  1. Deegaan isku xidhan oo badan, LinkedList joogto ah ayaa la isticmaalay, natiijaduna waxay noqotay NPE runtime. Tan waxaa lagu xallin karaa iyada oo loo beddelo ConcurrentLinkedDeque ama blocks la isku daray. Waxaan dooranay doorashada koowaad ee nafteenahttps://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Diidashada xusuusta; marka la goynayo, macluumaadka xidhiidhka lama tirtiro (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. Habka socodka (marka websocket-ka aan la xirin dhamaadka muunada, laakiin loo isticmaalo goor dambe qorshaha), Qaababka jawaab-celinta ma shaqeeyaan (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Tani waa mid ka mid ah kuwa github. Waxaan sameynay:

  1. qaaday fargeeto Elyran Kogan (@elyrank) - waxay hagaajisaa dhibaatooyinka 1 iyo 3
  2. Dhibaatada la xaliyay 2
  3. Jetty la cusbooneysiiyay laga bilaabo 9.2.14 ilaa 9.3.12
  4. Qaabka loo yaqaan 'SampleDateFormat' ee ThreadLocal; SimpleDateFormat ma aha dun-ammaan, taasoo keentay NPE wakhtiga runtime
  5. Dejinta xusuusta kale (xidhiidhku si khaldan ayuu u xidhnaa markii la jaray)

Haddana way qulqulaysaa!

Xusuustu waxay billaabatay inay dhammaan maalin gudaheed, balse waxay billaabatay inay dhammaanayso laba. Gebi ahaanba ma jirin wakhti ka haray, sidaa darteed waxaan go'aansanay inaan bilowno xadhig yar, laakiin afar wakiil. Tani waxay ahayd inay ku filnaato ugu yaraan hal toddobaad.

Laba maalmood ayaa ka soo wareegtay...

Hadda Hazelcast waxaa ka sii dhamaanaya xusuusta. Logu wuxuu muujiyay in dhowr maalmood oo tijaabo ah ka dib, Hazelcast uu bilaabay inuu ka cawdo xasuus la'aan, iyo in muddo ah ka dib kooxdu way kala go'day, qanjidhada ayaa sii waday inay u dhintaan mid mid. Waxaan ku xidhnay JVisualVM hazelcast oo aan aragnay "sawirka kor u kacaya" - si joogto ah ayaa loogu yeeraa GC, laakiin way nadiifin kartaa xusuusta.

Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast

Waxaa soo baxday in hazelcast 3.4, marka la tirtirayo khariidad / khariidad badan (map.destroy()), xusuusta aan si buuxda loo xorayn:

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

Cayayaanka hadda waxa lagu hagaajiyay 3.5, laakiin waxa ay ahayd dhibaato waagaas. Waxaan abuurnay khariidado badan oo cusub oo wata magacyo firfircoon oo aan tirtirnay si waafaqsan caqligayaga. Koodhku wuxuu u ekaa sidan:

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");

khariidado badan ayaa loo sameeyay isdiiwaangelin kasta waana la tirtiray markii aan loo baahnayn. Waxaan go'aansanay inaan bilaabi doono Map , furaha ayaa noqon doona magaca is-diiwaangelinta, qiyamkuna waxay noqon doonaan aqoonsiga fadhiga (kaas oo aad ka heli karto aqoonsiga isticmaalaha, haddii loo baahdo).

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

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

Jaantusyadu way horumareen.

Sidee iyo sababta aan ugu qornay adeeg miisaan culus leh oo loogu talagalay 1C: Enterprise: Java, PostgreSQL, Hazelcast

Maxaa kale oo aan ka baranay tijaabada rarka?

  1. JSR223 waxay u baahan tahay in lagu qoro si qotodheer oo lagu daro kayd ururin - aad ayay u dhakhso badan tahay. link.
  2. Garaafyada Jmeter-Plugins way fududahay in la fahmo marka loo eego kuwa caadiga ah. link.

Ku saabsan waayo-aragnimadayada Hazelcast

Hazelcast waxay noo ahayd badeecad cusub, waxaanu ka bilownay la shaqayntiisa nooca 3.4.1, hadda server-kayaga wax soo saarku wuxuu wadaa nooca 3.9.2 (waqtiga qorista, nooca ugu dambeeya ee Hazelcast waa 3.10).

Jiilka aqoonsiga

Waxaan ku bilownay aqoonsiyaal isugeyn. Aynu qiyaasno inaan u baahanahay Long dheer oo kale oo loogu talagalay hay'ad cusub. Taxanaha kaydka ma aha mid ku haboon, miisasyadu waxay ku lug leeyihiin shaandheynta - waxay soo baxday in ay jirto fariin ID = 1 gudaha DB1 iyo fariin ID = 1 gudaha DB2, ma gelin kartid aqoonsigan Elasticsearch, ama Hazelcast , laakiin waxa ugu xun waa haddii aad rabto in aad isku geyso xogta laba kayd oo mid ka mid ah (tusaale ahaan, go'aaminta in hal database uu ku filan yahay macaamiishan). Waxaad ku dari kartaa dhowr AtomicLongs Hazelcast oo ku hay miiska halkaas, ka dib waxqabadka helitaanka aqoonsi cusub waa la kordhinayaaAndGet oo lagu daray wakhtiga codsiga Hazelcast. Laakiin Hazelcast waxay leedahay wax aad u wanaagsan - FlakeIdGenerator. Markaad la xiriirto macmiil kasta, waxaa la siinayaa tiro aqoonsi ah, tusaale ahaan, ka koowaad - min 1 ilaa 10, ka labaad - min 000 ilaa 10, iyo wixii la mid ah. Hadda macmiilku wuxuu soo saari karaa aqoonsiyo cusub kaligiis ilaa xadka la siiyay uu dhammaanayo. Si dhakhso ah ayey u shaqeysaa, laakiin marka aad dib u bilowdo codsiga (iyo macmiilka Hazelcast), taxane cusub ayaa bilaabmaya - markaa way boodaan, iwm. Intaa waxaa dheer, horumariyayaashu runtii ma fahmaan sababta aqoonsiyadu u yihiin iskudar, laakiin waa kuwo aan iswaafaqayn. Wax walba waannu miisaannay oo u beddelnay UUID.

Jid ahaan, kuwa doonaya inay noqdaan sida Twitter, waxaa jira maktabad Snowcast - tani waa hirgelinta Snowflake ee sare ee Hazelcast. Waxaad ka arki kartaa halkan:

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

Laakiin mar dambe ma aanaan helin agagaarka.

Khariidadda Transactional.bedel

Yaab kale: TransactionMap.bedelku ma shaqeeyo. Waa kan imtixaan:

@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

Waxay ahayd inaan qoro beddelkayga aniga oo isticmaalaya 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);
}

Tijaabi ma aha oo kaliya qaababka xogta caadiga ah, laakiin sidoo kale noocyada macaamilkooda. Way dhacdaa in IMap uu shaqeeyo, laakiin TransactionalMap hadda ma jiro.

Geli JAR cusub iyada oo aan la joogin

Marka hore, waxaan go'aansanay inaan ku duubno walxaha fasaladayada Hazelcast. Tusaale ahaan, waxaan haynaa fasalka codsiga, waxaan rabnaa inaan kaydinno oo aan akhrino. Keydso:

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

Tusaale:

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

Wax walba way shaqaynayaan. Ka dib waxaan go'aansanay in aan ka dhisno index Hazelcast si aan u baadho:

map.addIndex("subscriberId", false);

Oo markii ay qorayeen koox cusub, waxay bilaabeen inay helaan ClassNotFoundException. Hazelcast waxay isku dayday inay ku darto tusaha, laakiin waxba kama garanayn fasalkayaga oo waxay doonaysay JAR fasalkan leh in la keeno. Waxaan sameynay taas, wax walbaa waa shaqeeyeen, laakiin dhibaato cusub ayaa soo baxday: sida loo cusbooneysiiyo JAR iyada oo aan si buuxda loo joojin kooxda? Hazelcast ma soo qaado JAR cusub inta lagu jiro cusboonaysiinta node-by-node. Halkaa marka ay marayso waxaan go'aansanay in aan noolaan karno iyada oo aan la raadin index. Ka dib oo dhan, haddii aad u isticmaasho Hazelcast sida dukaanka qiimaha muhiimka ah, markaa wax walbaa way shaqeyn doonaan? Runtii maaha. Halkan mar kale hab-dhaqanka IMap iyo TransactionalMap waa ka duwan yahay. Meesha IMap aysan dan ka lahayn, TransactionalMap waxay tuurtaa qalad.

Imap Waxaan qornaa 5000 oo walx, akhri. Wax walba waa la filayaa.

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

Laakiin kuma shaqeyso wax kala iibsiga, waxaan helnaa 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, habka geynta Heerka Isticmaalaha ayaa soo muuqday. Waxaad samayn kartaa hal noode sare oo aad ku cusboonaysiin kartaa faylka JAR dushiisa.

Hadda waxaan si buuxda u bedelnay habkayaga: waxaanu ku taxnay lafteena JSON oo ku kaydinay Hazelcast. Hazelcast uma baahna inay ogaato qaab dhismeedka fasaladeena, waananu cusbooneysiin karnaa iyada oo aan wakhti la'aan ahayn. Kala soocida walxaha domainka waxaa maamula arjiga. Noocyada kala duwan ee arjiga ayaa socon kara isku mar, xaaladna waa suurtogal marka codsiga cusub uu qoro walxo cusub, laakiin kii hore weli ma ogaanin meelahaas. Isla mar ahaantaana, arjiga cusub wuxuu akhriyaa walxaha uu qoray codsigii hore ee aan lahayn meelo cusub. Waxaan wax ka qabanaa xaaladahan oo kale gudaha codsiga, laakiin si fudud uma beddelno ama ma tirtirno beeraha, waxaan kaliya balaadhinaa fasallada annagoo ku darayna goobo cusub.

Sida aan u hubinno waxqabadka sare

Afar safar oo Hazelcast ah - wanaagsan, laba si database - xun

U aadida kaydka xogta had iyo jeer way ka fiican tahay inaad aado kaydka xogta, laakiin ma rabto inaad kaydiso diiwaannada aan la isticmaalin midkoodna. Waxaan ka tagnaa go'aanka ku saabsan waxa la kaydinayo ilaa heerka ugu dambeeya ee horumarinta. Marka shaqada cusub la sumadeeyo, waxaan daarnaa gelista dhammaan weydiimaha ku jira PostgreSQL (log_min_duration_statement to 0) waxaanan wadnaa tijaabinta culeyska 20 daqiiqo. Isticmaalka diiwaannada la ururiyay, yutiilitida sida pgFouine iyo pgBadger waxay dhisi karaan warbixinnada falanqaynta. Warbixinada, waxaan ugu horayn raadinaa su'aalo gaabis ah oo soo noqnoqda. Weydiimaha qunyar socodka ah, waxaan dhisnaa qorshe fulineed (SHArax) waxaanan qiimeynaa in weydiintaas la dedejin karo iyo in kale. Codsiyada soo noqnoqda ee isla xogta gelinta ayaa si fiican ugu habboon kaydka. Waxaan isku daynaa inaan su'aalaha ku hayno "mid siman", hal miis su'aal kasta.

Howlgal

SV oo ah adeeg online ah ayaa la hawl galiyay gugii 2017, iyo alaab gooni ah, SV waxa la sii daayay Noofambar 2017 (waqtigaas heerka nooca beta).

In ka badan hal sano oo hawlgalka ah, ma jiraan wax dhibaato ah oo halis ah oo ku saabsan hawlgalka adeegga internetka ee CB. Waxaanu kula soconaa adeega khadka tooska ah Zabbix, ururin oo ka hawlgala Bamboo.

Qaybinta server-ka SV waxaa lagu bixiyaa qaab xirmo wadani ah: RPM, DEB, MSI. Ku darso Windows-ka waxaan bixinaa hal rakibe qaab hal EXE ah oo ku rakibaya server-ka, Hazelcast iyo Elasticsearch hal mishiin. Waxaan markii hore u tixraacnay nooca rakibida nooca "demo", laakiin hadda waxaa caddaatay in tani ay tahay xulashada ugu caansan ee la diri karo.

Source: www.habr.com

Add a comment