Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast

Kulesi sihloko sizokhuluma ngokuthi sithuthuke kanjani futhi kungani Uhlelo Lokusebenzelana – indlela edlulisa ulwazi phakathi kwezicelo zeklayenti kanye ne-1C:Iziphakeli zebhizinisi - ukusuka ekusetheni umsebenzi kuye ekucabangeni ngokusebenzisa imininingwane yezakhiwo kanye nokusetshenziswa.

I-Interaction System (ngemuva kwalokhu ebizwa ngokuthi i-SV) iwuhlelo lokuthumela imiyalezo olusabalalisiwe, olubekezelela amaphutha nokulethwa okuqinisekisiwe. I-SV iklanywe njengesevisi enomthwalo omkhulu enokulinganisa okuphezulu, etholakala kokubili njengesevisi ye-inthanethi (ehlinzekwa yi-1C) futhi njengomkhiqizo okhiqizwe ngobuningi ongasatshalaliswa ezinsizeni zakho zeseva.

I-SV isebenzisa isitoreji esabalalisiwe i-hazelcast kanye nenjini yokusesha Islastiki. Sizophinde sikhulume nge-Java nokuthi siyikala kanjani i-PostgreSQL ngokuvundlile.
Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast

Ukwakheka kwenkinga

Ukuze kucace ukuthi kungani sidale i-Interaction System, ngizokutshela kancane mayelana nokuthi ukuthuthukiswa kwezicelo zebhizinisi ku-1C kusebenza kanjani.

Okokuqala, okuncane ngathi kulabo abangakakwazi esikwenzayo :) Senza inkundla yobuchwepheshe be-1C:Enterprise. Inkundla ihlanganisa ithuluzi lokuthuthukisa izinhlelo zokusebenza zebhizinisi, kanye nesikhathi sokusebenza esivumela izinhlelo zokusebenza zebhizinisi ukuthi zisebenze endaweni ye-cross-platform.

Ipharadigm yokuthuthukisa iseva yeklayenti

Izinhlelo zebhizinisi ezidalwe ku-1C:Ibhizinisi lisebenza ngamaleveli amathathu iklayenti-iseva izakhiwo "i-DBMS - iseva yohlelo lokusebenza - iklayenti". Ikhodi yohlelo lokusebenza ebhalwe ngo Ulimi olwakhelwe ngaphakathi lwe-1C, ingenziwa kuseva yohlelo lokusebenza noma kuklayenti. Wonke umsebenzi ngezinto zesicelo (imibhalo, imibhalo, njll.), kanye nokufunda nokubhala i-database, kwenziwa kuphela kuseva. Ukusebenza kwamafomu nesixhumi esibonakalayo somyalo nakho kusetshenziswa kuseva. Iklayenti lenza amafomu okwamukela, ukuvula nokubonisa, “ukuxhumana” nomsebenzisi (izixwayiso, imibuzo...), izibalo ezincane ngamafomu adinga impendulo esheshayo (isibonelo, ukuphindaphinda intengo ngobuningi), ukusebenza ngamafayela endawo, ukusebenza ngemishini.

Kukhodi yohlelo lokusebenza, izihloko zezinqubo nemisebenzi kufanele zibonise ngokucacile lapho ikhodi izosetshenziswa khona - kusetshenziswa iziqondiso ze-&AtClient / &AtServer (&AtClient / &AtServer kunguqulo yesiNgisi yolimi). Onjiniyela be-1C manje bazongilungisa ngokuthi iziqondiso empeleni ngaphezu, kodwa kithina lokhu akubalulekile manje.

Ungashayela ikhodi yeseva kwikhodi yeklayenti, kodwa awukwazi ukushayela ikhodi yeklayenti kwikhodi yeseva. Lona umkhawulo oyisisekelo esiwenze ngenxa yezizathu ezimbalwa. Ikakhulukazi, ngoba ikhodi yeseva kufanele ibhalwe ngendlela yokuthi isebenze ngendlela efanayo kungakhathaliseki ukuthi ibizwa kuphi - isuka kuklayenti noma kuseva. Futhi esimweni sokushaya ikhodi yeseva kusuka kwenye ikhodi yeseva, alikho iklayenti elinjalo. Futhi ngenxa yokuthi ngesikhathi sokusetshenziswa kwekhodi yeseva, iklayenti eliyibizile lingavala, liphume kuhlelo lokusebenza, futhi iseva ngeke isaba nomuntu ozoyishayela.

Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast
Ikhodi ephethe ukuchofoza inkinobho: ukushayela inqubo yeseva kusuka kuklayenti kuzosebenza, ukushayela inqubo yeklayenti kusuka kuseva ngeke

Lokhu kusho ukuthi uma sifuna ukuthumela umlayezo othile kusuka kuseva ukuya kuhlelo lokusebenza lweklayenti, isibonelo, ukuthi ukukhiqizwa kombiko "okudala usebenza" sekuphelile futhi umbiko ungabukwa, asinayo indlela enjalo. Kufanele usebenzise amaqhinga, isibonelo, ngezikhathi ezithile phenya iseva kusuka kukhodi yeklayenti. Kodwa le ndlela ilayisha uhlelo ngezingcingo ezingadingekile, futhi ngokuvamile ayibukeki inhle kakhulu.

Futhi kunesidingo, isibonelo, lapho ucingo lufika I-SIP- lapho ushaya ucingo, yazisa uhlelo lokusebenza lweklayenti mayelana nalokhu ukuze likwazi ukusebenzisa inombolo yoshaya ucingo ukuze liyithole kusizindalwazi somunye futhi libonise ulwazi lomsebenzisi mayelana naloyo oshaya ucingo. Noma, isibonelo, lapho i-oda lifika endaweni yokugcina izinto, yazisa isicelo sekhasimende lekhasimende ngalokhu. Ngokuvamile, kunezimo eziningi lapho indlela enjalo ingaba usizo.

Ukukhiqizwa ngokwako

Dala indlela yokuthumela imiyalezo. Kuyashesha, kuthembekile, nokulethwa okuqinisekisiwe, okunekhono lokusesha imiyalezo kalula. Ngokusekelwe kumshini, sebenzisa umlayezo (imilayezo, amakholi wevidiyo) asebenza ngaphakathi kwezinhlelo zokusebenza ze-1C.

Dizayina isistimu ukuthi ikhule ngokuvundlile. Umthwalo okhulayo kufanele umbozwe ngokukhuphula inani lamanodi.

Ukuqaliswa

Sinqume ukungahlanganisi ingxenye yeseva ye-SV ngokuqondile ku-1C:Inkundla yebhizinisi, kodwa ukuze siyisebenzise njengomkhiqizo ohlukile, i-API yayo engabizwa kusukela kukhodi yezixazululo zohlelo lokusebenza lwe-1C. Lokhu kwenziwa ngenxa yezizathu eziningi, okuyinhloko okwakuwukuthi ngangifuna ukwenza kube nokwenzeka ukushintshanisa imilayezo phakathi kwezinhlelo zokusebenza ezihlukene ze-1C (isibonelo, phakathi kwe-Trade Management kanye ne-Accounting). Izinhlelo zokusebenza ezihlukene ze-1C zingasebenza kuzinguqulo ezihlukene ze-1C:Inkundla yebhizinisi, ibekwe kumaseva ahlukene, njll. Ezimweni ezinjalo, ukuqaliswa kwe-SV njengomkhiqizo ohlukile obekwe "eceleni" kokufakwa kwe-1C kuyisixazululo esilungile.

Ngakho-ke, sinqume ukwenza i-SV njengomkhiqizo ohlukile. Sincoma ukuthi izinkampani ezincane zisebenzise iseva ye-CB esiyifake efwini lethu (wss://1cdialog.com) ukuze zigweme izindleko eziphezulu ezihlobene nokufakwa kwendawo kanye nokucushwa kweseva. Amaklayenti amakhulu angase akuthole kukuhle ukuthi afake iseva yawo ye-CB ezindaweni zawo. Sisebenzise indlela efanayo kumkhiqizo wethu wefu we-SaaS 1cKusha - ikhiqizwa njengomkhiqizo okhiqizwe ngobuningi ukuze ufakwe kumasayithi amaklayenti, futhi isetshenziswa emafini ethu https://1cfresh.com/.

Uhlelo lokusebenza

Ukusabalalisa umthwalo nokubekezelela amaphutha, ngeke sithumele uhlelo lokusebenza lwe-Java olulodwa, kodwa ezimbalwa, ezine-balancer yomthwalo phambi kwazo. Uma udinga ukudlulisa umlayezo usuka ku-node uye endaweni, sebenzisa ukushicilela/ukubhalisa ku-Hazelcast.

Ukuxhumana phakathi kweklayenti neseva kwenziwa nge-websocket. Ifaneleka kahle kumasistimu esikhathi sangempela.

Inqolobane esabalalisiwe

Sikhethe phakathi kweRedis, Hazelcast ne-Ehcache. Unyaka ka-2015. U-Redis usanda kukhipha iqoqo elisha (elisha kakhulu, eliyesabekayo), kukhona i-Sentinel enemikhawulo eminingi. U-Ehcache akazi ukuthi angahlangana kanjani abe yiqoqo (lokhu kusebenza kuvele kamuva). Sinqume ukuyizama nge-Hazelcast 3.4.
I-Hazelcast iqoqwe ibe yiqoqo ngaphandle kwebhokisi. Kumodi ye-node eyodwa, ayiwusizo kakhulu futhi ingasetshenziswa kuphela njengenqolobane - ayikwazi ukulahla idatha kudiski, uma ulahlekelwa i-node kuphela, ulahlekelwa idatha. Sisebenzisa ama-Hazelcast ambalwa, phakathi kwawo senza isipele idatha ebalulekile. Asiyisekeli i-cache - asinandaba nayo.

Kithina, i-Hazelcast ithi:

  • Ukugcinwa kwezikhathi zomsebenzisi. Kuthatha isikhathi eside ukuya kusizindalwazi ngeseshini njalo, ngakho-ke sibeka wonke amaseshini ku-Hazelcast.
  • Inqolobane. Uma ufuna iphrofayili yomsebenzisi, hlola inqolobane. Ubhale umlayezo omusha - uwubeke kunqolobane.
  • Izihloko zokuxhumana phakathi kwezimo zohlelo lokusebenza. I-node ikhiqiza umcimbi futhi iwubeke esihlokweni se-Hazelcast. Amanye ama-application node abhalisele lesi sihloko athola futhi acubungule umcimbi.
  • Izingidi zeqoqo. Isibonelo, sidala ingxoxo sisebenzisa ukhiye oyingqayizivele (ingxoxo ye-singleton ngaphakathi kwesizindalwazi se-1C):

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

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

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

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

Sihlole ukuthi asikho isiteshi. Sithathe ingidi, saphinde sayihlola, futhi sayidala. Uma ungabheki ukukhiya ngemva kokuthatha ilokhi, khona-ke kukhona ithuba lokuthi enye intambo nayo yahlola ngaleso sikhathi futhi manje izozama ukudala ingxoxo efanayo - kodwa isivele ikhona. Awukwazi ukukhiya usebenzisa i-java Lock evumelanisiwe noma evamile. Nge-database - ihamba kancane, futhi kuyisihawu ngesizindalwazi; nge-Hazelcast - yilokho okudingayo.

Ukukhetha i-DBMS

Sinolwazi olubanzi noluyimpumelelo lokusebenza ne-PostgreSQL futhi sisebenzisana nabathuthukisi bale DBMS.

Akulula ngeqoqo le-PostgreSQL - likhona XL, XC, Citus, kodwa ngokuvamile lawa akuwona ama-NoSQL aphuma ebhokisini. Asizange sicabangele i-NoSQL njengesitoreji esikhulu; kwanele ukuthi sithathe i-Hazelcast, esasingakaze sisebenze nayo ngaphambili.

Uma udinga ukukala isizindalwazi esihlobene, lokho kusho ukuhlukanisa. Njengoba wazi, nge-sharding sihlukanisa i-database ibe izingxenye ezihlukene ukuze ngayinye yazo ibekwe kuseva ehlukile.

Inguqulo yokuqala yokwahlukanisa kwethu ithathe ikhono lokusabalalisa ithebula ngalinye lohlelo lwethu lokusebenza kumaseva ahlukene ngezilinganiso ezihlukene. Kunemilayezo eminingi kuseva A - ngicela sisuse ingxenye yaleli thebula siye kusiphakeli B. Lesi sinqumo sivele samemeza mayelana nokwenza kahle ngaphambi kwesikhathi, ngakho-ke sinqume ukuzibekela umkhawulo endleleni yokuqasha abantu abaningi.

Ungafunda mayelana nabaqashi abaningi, isibonelo, kuwebhusayithi Idatha ye-Citus.

I-SV inemiqondo yesicelo kanye nesikhokhelo. Uhlelo lokusebenza ukufakwa okukhethekile kohlelo lokusebenza lwebhizinisi, olufana ne-ERP noma i-Accounting, enabasebenzisi bayo nedatha yebhizinisi. Obhalisile yinhlangano noma umuntu obhalise isicelo sakhe kuseva ye-SV. Obhalisile angaba nezinhlelo zokusebenza ezimbalwa ezibhalisiwe, futhi lezi zinhlelo zokusebenza zingashintshana imiyalezo. Obhalisile ube isiqashi ohlelweni lwethu. Imilayezo evela kwababhalisile abaningana ingatholakala kusizindalwazi esisodwa esibonakalayo; uma sibona ukuthi obhalisile useqalile ukukhiqiza ithrafikhi eningi, siyihambisa kusizindalwazi esihlukile somzimba (noma iseva yedatha ehlukile).

Sinesizindalwazi esikhulu lapho kugcinwa khona ithebula lomzila elinolwazi mayelana nendawo yazo zonke izingosi zolwazi zababhalisile.

Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast

Ukuze sigweme isizindalwazi esiyinhloko ukuthi sibe ibhodlela, sigcina ithebula lomzila (nenye idatha edingeka njalo) kunqolobane.

Uma isizindalwazi sobhalisile siqala ukuncipha, sizosisika sibe izingxenye ezingaphakathi. Kwamanye amaphrojekthi sisebenzisa pg_pathman.

Njengoba ukulahlekelwa yimilayezo yomsebenzisi kubi, sigcina imininingwane yethu enezifaniso. Inhlanganisela ye-synchronous ne-asynchronous replicas ikuvumela ukuthi uzivikele wena uma kwenzeka ukulahleka kwesizindalwazi esikhulu. Ukulahleka komlayezo kuzokwenzeka kuphela uma isizindalwazi esiyisisekelo kanye nesifaniso saso esivumelanayo kwehluleka kanyekanye.

Uma i-synchronous replica ilahleka, i-asynchronous replica iba yi-synchronous.
Uma isizindalwazi esiyinhloko silahlekile, i-synchronous replica iba isizindalwazi esiyinhloko, futhi i-asynchronous replica iba i-synchronous replica.

I-Elasticsearch yokusesha

Njengoba, phakathi kwezinye izinto, i-SV futhi iyisithunywa, idinga ukusesha okusheshayo, okulula nokuguquguqukayo, kucatshangelwa i-morphology, kusetshenziswa ukufana okungacacile. Sinqume ukungalisunguli kabusha isondo futhi sisebenzise injini yokusesha yamahhala i-Elasticsearch, edalwe ngokusekelwe kulabhulali ULucene. Siphinde sikhiphe i-Elasticsearch kuqoqo (master - data - data) ukuze siqede izinkinga uma kwenzeka ukwehluleka kwamanode ohlelo lokusebenza.

Ku-github sitholile I-plugin ye-Russian morphology ye-Elasticsearch futhi uyisebenzise. Kunkomba ye-Elasticsearch sigcina izimpande zamagama (okunqunywa i-plugin) kanye nama-N-grams. Njengoba umsebenzisi engena embhalweni ukuze aseshe, sibheka umbhalo othayiphiwe phakathi kwama-N-gram. Uma lilondolozwe kunkomba, igama elithi “imibhalo” lizohlukaniswa libe ama-N-gram alandelayo:

[leyo, tek, tex, text, texts, ek, ex, ext, imibhalo, ks, kst, ksty, st, sty, wena],

Futhi umsuka wegama elithi “umbhalo” nawo uyolondolozwa. Le ndlela ikuvumela ukuthi ufune ekuqaleni, phakathi nendawo, futhi ekugcineni kwegama.

Sonke isithombe

Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast
Phinda isithombe kusukela ekuqaleni kwesihloko, kodwa ngezincazelo:

  • I-Balancer idalulwe ku-inthanethi; sinazo nginx, kungaba noma yikuphi.
  • Izimo zohlelo lokusebenza lwe-Java ziyaxhumana nge-Hazelcast.
  • Ukusebenza ngesokhethi yewebhu sisebenzisa I-Netty.
  • Uhlelo lwe-Java lubhalwe ku-Java 8 futhi luqukethe izinyanda I-OSGi. Izinhlelo zihlanganisa ukuthuthela ku-Java 10 kanye nokushintshela kumamojula.

Ukuthuthukiswa nokuhlola

Enqubweni yokuthuthukisa nokuhlola i-SV, sihlangabezane nenani lezici ezithakazelisayo zemikhiqizo esiyisebenzisayo.

Ukuhlolwa komthwalo kanye nokuvuza kwenkumbulo

Ukukhishwa kokukhishwa ngakunye kwe-SV kubandakanya ukuhlolwa komthwalo. Iphumelela uma:

  • Ukuhlolwa kusebenze izinsuku ezimbalwa futhi kwakungekho ukwehluleka kwesevisi
  • Isikhathi sokuphendula semisebenzi ebalulekile asidlulanga umkhawulo okhululekile
  • Ukonakala kokusebenza uma kuqhathaniswa nenguqulo yangaphambili akukho ngaphezu kuka-10%

Sigcwalisa i-database yokuhlola ngedatha - ukwenza lokhu, sithola ulwazi mayelana nobhalisile osebenza kakhulu kusuka kuseva yokukhiqiza, siphindaphinda izinombolo zayo ngo-5 (inani lemilayezo, izingxoxo, abasebenzisi) futhi siyihlole ngaleyo ndlela.

Senza ukuhlolwa komthwalo wesistimu yokusebenzisana ngokucushwa okuthathu:

  1. ukuhlolwa kokucindezeleka
  2. Izixhumanisi kuphela
  3. Ukubhaliswa kwababhalisile

Ngesikhathi sokuhlolwa kokucindezeleka, sethula izintambo ezingamakhulu amaningana, futhi zilayisha uhlelo ngaphandle kokumisa: ukubhala imilayezo, ukudala izingxoxo, ukuthola uhlu lwemilayezo. Silingisa izenzo zabasebenzisi abajwayelekile (thola uhlu lwemilayezo yami engafundiwe, bhalela othile) kanye nezixazululo zesofthiwe (dlulisa iphakheji yokucushwa okuhlukile, sebenzisa isexwayiso).

Isibonelo, nansi indlela ingxenye yokuhlolwa kokucindezeleka ebukeka ngayo:

  • Umsebenzisi ungena
    • Icela izingxoxo zakho ezingafundiwe
    • 50% amathuba okufunda imilayezo
    • 50% kungenzeka ukuthi uthumele umbhalo
    • Umsebenzisi olandelayo:
      • Unethuba elingu-20% lokudala ingxoxo entsha
      • Ikhetha ngokungahleliwe noma yiziphi izingxoxo zayo
      • Angene ngaphakathi
      • Icela imiyalezo, amaphrofayili womsebenzisi
      • Idala imilayezo emihlanu eqondiswe kubasebenzisi abangahleliwe kusukela kule ngxoxo
      • Ishiya ingxoxo
      • Iphinda izikhathi ezingu-20
      • Iphuma, ibuyela emuva ekuqaleni kweskripthi

    • I-chatbot ingena ohlelweni (ilingisa imilayezo evela kwikhodi yohlelo lokusebenza)
      • Unethuba elingu-50% lokudala isiteshi esisha sokushintshisana ngedatha (ingxoxo ekhethekile)
      • Amathuba angu-50% okubhala umlayezo kunoma yiziphi iziteshi ezikhona

Isimo esithi "Ukuxhumana Kuphela" sivele ngesizathu. Kunesimo: abasebenzisi baxhume uhlelo, kodwa abakakangeni. Umsebenzisi ngamunye uvula ikhompuyutha ngo-09:00 ekuseni, asungule uxhumano kuseva futhi athule. Laba bafana bayingozi, baningi babo - okuwukuphela kwamaphakheji abanawo yi-PING/PONG, kodwa bagcina ukuxhumana neseva (abakwazi ukukugcina - kuthiwani uma kunomlayezo omusha). Ukuhlolwa kukhiqiza kabusha isimo lapho inani elikhulu labasebenzisi abanjalo lizama ukungena ohlelweni ngesigamu sehora. Kufana nokuhlolwa kokucindezeleka, kodwa ukugxila kwayo ngokuqondile kulokhu okufakwayo kokuqala - ukuze kungabikho ukwehluleka (umuntu akasebenzisi uhlelo, futhi kakade uyawa - kunzima ukucabanga ngento embi kakhulu).

Umbhalo wokubhalisa kwababhalisile uqala kusukela ekuqalisweni kokuqala. Senze ukuhlolwa kokucindezeleka futhi sasiqiniseka ukuthi uhlelo aluzange lwehlise ijubane ngesikhathi sokuxhumana. Kodwa abasebenzisi beza futhi ukubhaliswa kwaqala ukwehluleka ngenxa yokuvala isikhathi. Lapho sibhalisa sasisebenzisa / dev / okungahleliwe, ehlobene ne-entropy yesistimu. Iseva ibingenaso isikhathi sokuqongelela i-entropy eyanele futhi lapho i-SecureRandom entsha iceliwe, yaqina amashumi amasekhondi. Kunezindlela eziningi zokuphuma kulesi simo, isibonelo: shintshela ku-/dev/urandom evikeleke kancane, faka ibhodi elikhethekile elikhiqiza i-entropy, ukhiqize izinombolo ezingahleliwe kusengaphambili futhi uzigcine echibini. Siyivale okwesikhashana inkinga nge-pool, kodwa kusukela lapho besilokhu senza ukuhlolwa okuhlukile kokubhalisa ababhalisile abasha.

Sisebenzisa njengejeneretha yokulayisha I-JMeter. Ayazi ukuthi isebenza kanjani nge-websocket; idinga i-plugin. Eyokuqala emiphumeleni yosesho yombuzo othi "jmeter websocket" ithi: izihloko ezivela BlazeMeter, ezincomayo I-plugin kaMaciej Zaleski.

Yilapho esanquma ukuqala khona.

Cishe ngokushesha ngemva kokuqala ukuhlolwa okunzima, sathola ukuthi i-JMeter yaqala ukuvuza inkumbulo.

I-plugin iyindaba enkulu ehlukile; enezinkanyezi ezingu-176, inamafoloko angu-132 ku-github. Umbhali ngokwakhe akazange azibophezele kuyo kusukela ngo-2015 (sayithatha ngo-2015, ngakho ayizange iphakamise izinsolo), izinkinga eziningana ze-github mayelana nokuvuza kwememori, izicelo ezingu-7 zokudonsa ezingavaliwe.
Uma unquma ukwenza ukuhlolwa komthwalo usebenzisa le plugin, sicela unake izingxoxo ezilandelayo:

  1. Endaweni enezintambo eziningi, kusetshenziswe i-LinkedList evamile, futhi umphumela waba I-NPE ngesikhathi sokusebenza. Lokhu kungaxazululwa ngokushintshela ku-ConcurrentLinkedDeque noma ngamabhulokhi avumelanisiwe. Sizikhethele inketho yokuqala (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43).
  2. Ukuvuza kwememori; lapho unqanyulwa, imininingwane yokuxhuma ayisuswa (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44).
  3. Kumodi yokusakaza (lapho isokhethi lewebhu lingavaliwe ekupheleni kwesampula, kodwa lisetshenziswa kamuva ohlelweni), amaphethini okuphendula awasebenzi (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19).

Lokhu kungenye yalezo eziku-github. Esikwenzile:

  1. Uthathile imfoloko Elyran Kogan (@elyrank) - ilungisa izinkinga 1 no-3
  2. Inkinga exazululiwe 2
  3. I-jetty ebuyekeziwe isuka ku-9.2.14 yaya ku-9.3.12
  4. Igoqwe I-SimpleDateFormat ku-ThreadLocal; I-SimpleDateFormat ayiphephile, okuholele ku-NPE ngesikhathi sokusebenza
  5. Kulungiswe okunye ukuvuza kwememori (uxhumano luvalwe ngokungalungile lapho lunqanyulwa)

Nokho iyageleza!

Inkumbulo yaqala ukuphela hhayi ngosuku, kodwa kabili. Sasingekho nhlobo isikhathi esisele, ngakho-ke sanquma ukwethula imicu embalwa, kodwa kuma-ejenti amane. Lokhu bekufanele ngabe kwanele isonto lonke.

Sekudlule izinsuku ezimbili...

Manje i-Hazelcast iphelelwa yinkumbulo. Izingodo zabonisa ukuthi ngemva kwezinsuku ezimbalwa zokuhlolwa, u-Hazelcast waqala ukukhononda ngokuntula inkumbulo, futhi ngemva kwesikhathi esithile iqoqo lahlukana, futhi ama-node aqhubeka efa ngamunye ngamunye. Sixhume i-JVisualVM ku-hazelcast futhi sabona “isaha elikhuphukayo” - lalivame ukubiza i-GC, kodwa asikwazanga ukusula inkumbulo.

Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast

Kuvele ukuthi ku-hazelcast 3.4, lapho kususwa imephu / i-multiMap (map.destroy()), inkumbulo ayikhululwa ngokuphelele:

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

Isiphazamisi manje isilungisiwe ngo-3.5, kodwa bekuyinkinga ngaleso sikhathi. Sidale ama-multiMaps amasha anamagama ashukumisayo futhi sawasusa ngokuvumelana nokucabanga kwethu. Ikhodi ibukeke kanje:

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

Shayela:

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

I-multiMap yadalelwa ukubhalisa ngakunye futhi yasuswa lapho ingadingeki. Sinqume ukuthi siqale imephu , ukhiye kuzoba igama lokubhaliselwe, futhi amanani azoba izihlonzi zeseshini (ongathola kuzo izihlonzi zomsebenzisi, uma kunesidingo).

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

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

Amashadi athuthukile.

Kanjani futhi kungani sabhala insizakalo ephezulu yomthwalo we-1C: Ibhizinisi: Java, PostgreSQL, Hazelcast

Yini enye esiyifundile mayelana nokuhlolwa komthwalo?

  1. I-JSR223 idinga ukubhalwa nge-groovy futhi ifake inqolobane yokuhlanganisa - ishesha kakhulu. Izikhombo.
  2. Amagrafu we-Jmeter-Plugins kulula ukuwaqonda kunalawo ajwayelekile. Izikhombo.

Mayelana nolwazi lwethu nge-Hazelcast

I-Hazelcast yayingumkhiqizo wethu omusha, saqala ukusebenza nayo kusukela kunguqulo 3.4.1, manje iseva yethu yokukhiqiza isebenzisa inguqulo 3.9.2 (ngesikhathi sokubhala, inguqulo yakamuva ye-Hazelcast ingu-3.10).

Ukwenziwa kwe-ID

Siqale ngezihlonzi eziphelele. Ake sicabange ukuthi sidinga enye i-Long yebhizinisi elisha. Ukulandelana kusizindalwazi akufanelekile, amathebula abandakanyeka ekwahlukaniseni - kuvela ukuthi kukhona i-ID=1 yomlayezo ku-DB1 kanye ne-ID yomlayezo=1 ku-DB2, awukwazi ukubeka le ID ku-Elasticsearch, noma ku-Hazelcast , kodwa into embi kakhulu uma ufuna ukuhlanganisa idatha kusuka kuzinqolobane ezimbili zibe eyodwa (isibonelo, ukunquma ukuthi isizindalwazi esisodwa sanele kulaba ababhalisile). Ungangeza ama-AtomicLong ambalwa ku-Hazelcast futhi ugcine ikhawunta lapho, khona-ke ukusebenza kokuthola i-ID entsha kuyenyukaAndGet kanye nesikhathi sesicelo ku-Hazelcast. Kepha iHazelcast inokuthile okungcono kakhulu - iFlakeIdGenerator. Lapho bexhumana neklayenti ngalinye, banikezwa ububanzi be-ID, isibonelo, eyokuqala - kusukela ku-1 kuya ku-10, eyesibili - kusukela ku-000 kuya ku-10, njalonjalo. Manje iklayenti lingakhipha izihlonzi ezintsha ngokwalo kuze kube yilapho ububanzi elinikezwe lona liyaphela. Isebenza ngokushesha, kepha uma uqala kabusha uhlelo (kanye neklayenti le-Hazelcast), ukulandelana okusha kuyaqala - yingakho ukweqa, njll. Ngaphezu kwalokho, onjiniyela abaqondi ngempela ukuthi kungani ama-ID enamba ephelele, kodwa awafani. Sikale yonke into futhi sashintshela kuma-UUID.

Ngendlela, kulabo abafuna ukufana ne-Twitter, kukhona umtapo wezincwadi we-Snowcast - lokhu ukuqaliswa kwe-Snowflake phezulu kwe-Hazelcast. Ungayibuka lapha:

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

Kodwa asikafiki kukho.

I-TransactionalMap.replace

Esinye isimanga: TransactionalMap.replace ayisebenzi. Nasi ukuhlolwa:

@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

Bekufanele ngibhale okwami ​​esikhundleni ngisebenzisa i-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);
}

Ungahloli nje kuphela izakhiwo zedatha ezivamile, kodwa nezinguqulo zazo zohwebo. Kuyenzeka ukuthi i-IMap isebenze, kodwa i-TransactionalMap ayisekho.

Faka i-JAR entsha ngaphandle kwesikhathi sokuphumula

Okokuqala, sanquma ukuqopha izinto zamakilasi ethu e-Hazelcast. Isibonelo, sinekilasi lesicelo, sifuna ukuligcina futhi silifunde. Londoloza:

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

Читаеm:

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

Konke kuyasebenza. Sabe sesinquma ukwakha inkomba e-Hazelcast ukuze siseshe ngayo:

map.addIndex("subscriberId", false);

Futhi lapho bebhala ibhizinisi elisha, baqale ukuthola i-ClassNotFoundException. I-Hazelcast yazama ukungeza kunkomba, kodwa yayingazi lutho ngekilasi lethu futhi yayifuna ukuthi i-JAR enaleli klasi ihlinzekwe kulo. Senze lokho nje, konke kwasebenza, kodwa kwavela inkinga entsha: indlela yokuvuselela i-JAR ngaphandle kokumisa ngokuphelele iqoqo? I-Hazelcast ayithathi i-JAR entsha ngesikhathi sokubuyekezwa kwe-node-by-node. Kuleli qophelo sanquma ukuthi singaphila ngaphandle kokusesha inkomba. Ngemuva kwakho konke, uma usebenzisa i-Hazelcast njengesitolo se-key-value, khona-ke konke kuzosebenza? Akunjalo Empeleni. Nalapha futhi ukuziphatha kwe-IMap neTransactionalMap kuhlukile. Lapho i-IMap ingenandaba khona, i-TransactionalMap yenza iphutha.

IMap. Sibhala izinto ezingu-5000, sizifunde. Konke kulindeleke.

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

Kepha ayisebenzi ekuhwebeni, sithola i-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();
        }
    });
}

Ngo-3.8, kwavela indlela Yokuthunyelwa Kwekilasi Lomsebenzisi. Ungaqoka i-master node eyodwa futhi ubuyekeze ifayela le-JAR elikulo.

Manje sesiyiguqule ngokuphelele indlela yethu yokwenza: sizenzele ngokwethu ku-JSON futhi siyigcine ku-Hazelcast. I-Hazelcast ayidingi ukwazi ukwakheka kwamakilasi ethu, futhi singabuyekeza ngaphandle kwesikhathi sokuphumula. Ukuguqulwa kwezinto zesizinda kulawulwa uhlelo lokusebenza. Izinguqulo ezihlukene zohlelo lokusebenza zingasebenza ngesikhathi esifanayo, futhi isimo singenzeka lapho uhlelo olusha lubhala izinto ngezinkambu ezintsha, kodwa endala ayikazi okwamanje ngalezi zindawo. Futhi ngesikhathi esifanayo, uhlelo olusha lufunda izinto ezibhalwe uhlelo lokusebenza oludala ezingenazo izinkambu ezintsha. Siphatha izimo ezinjalo ngaphakathi kohlelo lokusebenza, kodwa ukuze kube lula asizishintshi noma sizisusi izinkambu, sandisa amakilasi kuphela ngokungeza izinkambu ezintsha.

Siqinisekisa kanjani ukusebenza okuphezulu

Uhambo olune oluya e-Hazelcast - luhle, olubili kusizindalwazi - lubi

Ukuya kunqolobane yedatha kuhlale kungcono kunokuya kusizindalwazi, kodwa nawe awufuni ukugcina amarekhodi angasetshenzisiwe. Sishiya isinqumo mayelana nokuthi yini okufanele igcinwe kuze kufike esigabeni sokugcina sokuthuthuka. Uma umsebenzi omusha ufakwe ikhodi, sivula ukuloga kwayo yonke imibuzo ku-PostgreSQL (log_min_duration_statement kuya ku-0) bese siqhuba ukuhlola komthwalo imizuzu engu-20. Ngokusebenzisa amalogi aqoqiwe, izinsiza ezifana ne-pgFouine ne-pgBadger zingakha imibiko yokuhlaziya. Embikweni, ngokuyinhloko sibheka imibuzo ehamba kancane nevamile. Ngemibuzo ehamba kancane, sakha uhlelo lokuqalisa (CHAZA) futhi sihlole ukuthi lowo mbuzo ungasheshiswa yini. Izicelo ezivamile zedatha efanayo yokufaka zingena kahle kunqolobane. Sizama ukugcina imibuzo “iphansi”, ithebula elilodwa embuzweni ngamunye.

Ukuxhaphaza

I-SV njengesevisi eku-inthanethi yaqala ukusebenza entwasahlobo ka-2017, futhi njengomkhiqizo ohlukile, i-SV yakhululwa ngoNovemba 2017 (ngaleso sikhathi esimweni senguqulo ye-beta).

Esikhathini esingaphezu konyaka sokusebenza, akubanga nezinkinga ezinkulu ekusebenzeni kwensizakalo ye-inthanethi ye-CB. Siqapha isevisi eku-inthanethi nge Zabbix, qoqa bese uphakela kusuka bamboo.

Ukusatshalaliswa kweseva ye-SV kunikezwa ngohlobo lwamaphakheji omdabu: RPM, DEB, MSI. Futhi ku-Windows sinikeza isifaki esisodwa ngendlela ye-EXE eyodwa efaka iseva, i-Hazelcast ne-Elasticsearch emshinini owodwa. Siqale sabiza le nguqulo yokufaka njengenguqulo “yedemo”, kodwa manje sekucacile ukuthi lena inketho edume kakhulu yokuthunyelwa.

Source: www.habr.com

Engeza amazwana