Kweli nqaku siza kuthetha ngendlela kwaye kutheni siphuhlise
INkqubo yeNtsebenziswano (emva koku ekubhekiselwa kuyo njenge-SV) yinkqubo yokuthunyelwa kwemiyalezo esasaziweyo, enokunyamezela iimpazamo nonikezelo oluqinisekisiweyo. I-SV yenzelwe njengenkonzo yomthwalo ophezulu kunye ne-scalability ephezulu, ekhoyo zombini njengenkonzo ye-intanethi (ebonelelwe ngu-1C) kwaye njengemveliso eveliswa ngobuninzi enokuthi ifakwe kwiindawo zakho zeseva.
I-SV isebenzisa indawo yokugcina esasaziweyo
Џџ ѕЃ ° °
Ukwenza kucace ukuba kutheni sidale iNkqubo yokuSebenza, ndiya kukuxelela kancinci malunga nendlela uphuhliso lwezicelo zoshishino kwi-1C isebenza ngayo.
Ukuqala nje, kancinci ngathi kwabo bangekayazi into esiyenzayo :) Senza i-1C:Iqonga lobugcisa beShishini. Iqonga libandakanya isixhobo sophuhliso lwesicelo seshishini, kunye nexesha lokuqhuba elivumela ukuba izicelo zoshishino ziqhube kwindawo ephambanayo.
Iparadigm yophuhliso lomthengi womncedisi
Izicelo zoshishino ezenziwe kwi-1C: Ishishini lisebenza kwinqanaba lesithathu
Kwikhowudi yesicelo, iiheader zeenkqubo kunye nemisebenzi kufuneka zibonise ngokucacileyo apho ikhowudi iya kusetyenziswa khona - usebenzisa &AtClient / &AtServer imiyalelo (&AtClient / &AtServer kuguqulelo lwesiNgesi lolwimi). Abaphuhlisi be-1C ngoku baya kundilungisa ngokuthi izikhokelo ziyinyani
Ungafowunela ikhowudi yeseva kwikhowudi yomxhasi, kodwa awukwazi ukufowunela ikhowudi yomxhasi kwikhowudi yeseva. Lo ngumda osisiseko esiwenze ngenxa yezizathu ezininzi. Ngokukodwa, kuba ikhowudi yomncedisi kufuneka ibhalwe ngendlela yokuba iphumeze ngendlela efanayo nokuba ibizwa phi - ukusuka kumxhasi okanye kumncedisi. Kwaye kwimeko yokufowunela ikhowudi yomncedisi ukusuka kwenye ikhowudi yeseva, akukho mxhasi onjalo. Kwaye ngenxa yokuba ngexesha lokwenziwa kwekhowudi yomncedisi, umxhasi oyibizileyo unokuvala, aphume kwisicelo, kwaye umncedisi akasayi kuba naye nabani na wokufowuna.
Ikhowudi ephethe unqakrazo lweqhosha: ukubiza inkqubo yomncedisi ukusuka kumxhasi kuya kusebenza, ukubiza inkqubo yomxhasi kumncedisi ayiyi
Oku kuthetha ukuba ukuba sifuna ukuthumela umyalezo othile ovela kumncedisi kwisicelo somthengi, umzekelo, ukuba isizukulwana sengxelo "yexesha elide" siphelile kwaye ingxelo inokujongwa, asinayo indlela enjalo. Kufuneka usebenzise amaqhinga, umzekelo, rhoqo uvotele umncedisi kwikhowudi yomxhasi. Kodwa le ndlela ilayisha inkqubo ngeefowuni ezingeyomfuneko, kwaye ngokubanzi ayibukeki intle kakhulu.
Kwaye kukho nemfuneko, umzekelo, xa umnxeba ufika
Imveliso ngokwayo
Yenza indlela yokuthumela imiyalezo. Ukukhawuleza, okuthembekileyo, kunye nokuhanjiswa okuqinisekisiweyo, kunye nokukwazi ukukhangela imiyalezo ngokulula. Ngokusekwe kwindlela, phumeza umthunywa (imiyalezo, iifowuni zevidiyo) ezisebenza ngaphakathi kwezicelo ze-1C.
Yila isixokelelwano ukuba sibekwe ngokuthe tye. Umthwalo onyukayo kufuneka ugutyungelwe ngokunyusa inani leendawo zokuhlala.
Ukuphunyezwa
Sagqiba ekubeni singabandakanyi inxalenye yomncedisi we-SV ngokuthe ngqo kwi-1C: Iqonga leShishini, kodwa ukuyiphumeza njengemveliso eyahlukileyo, i-API engabizwa ngayo kwikhowudi yezisombululo zesicelo se-1C. Oku kwenziwa ngenxa yezizathu ezininzi, eyona nto iphambili kukuba ndifuna ukwenza ukuba kwenzeke ukutshintshiselana ngemiyalezo phakathi kwezicelo ezahlukeneyo ze-1C (umzekelo, phakathi koLawulo lwezoRhwebo kunye ne-Accounting). Izicelo ezahlukeneyo ze-1C zinokusebenza kwiinguqulelo ezahlukeneyo ze-1C: Iqonga leShishini, libekwe kumaseva ahlukeneyo, njl. Kwiimeko ezinjalo, ukuphunyezwa kwe-SV njengemveliso eyahlukileyo ebekwe "ecaleni" lofakelo lwe-1C isisombululo esona sisombululo.
Ke, sagqiba ekubeni senze i-SV njengemveliso eyahlukileyo. Sicebisa ukuba iinkampani ezincinci zisebenzise iseva ye-CB esiyifakileyo kwilifu lethu (wss://1cdialog.com) ukunqanda iindleko eziphezulu ezinxulumene nofakelo lwasekhaya kunye noqwalaselo lomncedisi. Abathengi abakhulu banokukufumanisa kucetyiswa ukuba bafakele iseva yabo ye-CB kwiindawo zabo. Sisebenzise indlela efanayo kwimveliso yethu yelifu ye-SaaS
Isicelo
Ukusabalalisa umthwalo kunye nokunyamezela impazamo, asiyi kuhambisa isicelo esinye seJava, kodwa ezininzi, kunye ne-balancer yomthwalo phambi kwabo. Ukuba ufuna ukudlulisa umyalezo kwi-node ukuya kwindawo, sebenzisa ukupapasha / ukubhalisa kwiHazelcast.
Unxibelelwano phakathi komxhasi kunye nomncedisi kusetyenziswa i-websocket. Ifanelekile kwiinkqubo zexesha langempela.
I-cache esasaziweyo
Sakhetha phakathi kweRedis, iHazelcast kunye ne-Ehcache. Ngu-2015. URedis usandula ukukhupha iqela elitsha (entsha kakhulu, eyoyikisayo), kukho iSentinel enezithintelo ezininzi. I-Ehcache ayiyazi indlela yokudibanisa kwiqela (oku kusebenza kwavela kamva). Sigqibe kwelokuba sizame ngeHazelcast 3.4.
I-Hazelcast idityaniswe kwiqela ngaphandle kwebhokisi. Kwimowudi ye-node enye, ayiloncedo kakhulu kwaye ingasetyenziselwa kuphela njenge-cache - ayiyazi indlela yokulahla idatha kwidiski, ukuba ulahlekelwa yi-node kuphela, ulahlekelwa yidatha. Sithumela iiHazelcasts ezininzi, phakathi kwazo sigcina idatha ebalulekileyo. Asiyixhasi i-cache - asiyikhathazi loo nto.
Kuthi, iHazelcast yile:
- Ukugcinwa kweeseshoni zabasebenzisi. Kuthatha ixesha elide ukuya kwi-database yeseshoni rhoqo, ngoko sibeka zonke iiseshoni kwi-Hazelcast.
- Cache. Ukuba ujonge iprofayile yomsebenzisi, jonga i-cache. Ubhale umyalezo omtsha- uwubeke kwindawo yokugcina.
- Izihloko zonxibelelwano phakathi kweemeko zesicelo. I-node ivelisa isiganeko kwaye isibeke kwisihloko se-Hazelcast. Ezinye iindawo zesicelo ezibhaliselwe kwesi sihloko zifumana kwaye ziqhube umsitho.
- Izitshixo zeqela. Umzekelo, sidala ingxoxo sisebenzisa isitshixo esisodwa (ingxoxo ye-singleton ngaphakathi kwedatha ye-1C):
conversationKeyChecker.check("БЕНЗОКОЛОНКА");
doInClusterLock("БЕНЗОКОЛОНКА", () -> {
conversationKeyChecker.check("БЕНЗОКОЛОНКА");
createChannel("БЕНЗОКОЛОНКА");
});
Sijongile ukuba akukho tshaneli. Sathatha iqhaga, sayijonga kwakhona, kwaye sayidala. Ukuba awujongi isitshixo emva kokuthatha isitshixo, kukho ithuba lokuba omnye umsonto ujongiwe ngelo xesha kwaye ngoku uza kuzama ukwenza ingxoxo efanayo - kodwa sele ikhona. Awukwazi ukutshixa usebenzisa i-Java Tshixo ehambelanayo okanye eqhelekileyo. Ngedathabheyisi-iyacotha, kwaye lusizi lwesiseko sedatha; ngeHazelcast-yiloo nto oyifunayo.
Ukukhetha i-DBMS
Sinamava abanzi kwaye ayimpumelelo esebenza kunye nePostgreSQL kunye nokusebenzisana nabaphuhlisi bale DBMS.
Akulula ngeqela lePostgreSQL-likhona
Ukuba ufuna ukulinganisa i-database yobudlelwane, oko kuthetha
Inguqulelo yokuqala yokwahlulwa kwethu ithathe amandla okusasaza itafile nganye yesicelo sethu kuzo zonke iiseva ezahlukeneyo ngokwemilinganiselo eyahlukeneyo. Kukho imiyalezo emininzi kumncedisi A - nceda, masisuse inxalenye yale theyibhile siye kwi-server B. Esi sigqibo sivele sakhala malunga nokulungiswa kwangaphambi kwexesha, ngoko ke siye sagqiba ekubeni sinciphise indlela yokuqesha abantu abaninzi.
Unokufunda malunga nabaqashi abaninzi, umzekelo, kwiwebhusayithi
I-SV ineengcamango zesicelo kunye nomrhumi. Isicelo kufakelo oluthile lwesicelo seshishini, njenge-ERP okanye i-Akhawuntingi, kunye nabasebenzisi bayo kunye neenkcukacha zeshishini. Umrhumi ngumbutho okanye umntu isicelo esibhaliswe egameni lakhe kwiseva ye-SV. Umrhumi unokuba nezicelo ezininzi ezibhalisiweyo, kwaye ezi zicelo zinokutshintshiselana ngemiyalezo enye kwenye. Umbhalisi waba ngumqeshi kwinkqubo yethu. Imiyalezo evela kubabhalisi abaninzi inokufumaneka kwisiseko sedatha esinye somzimba; ukuba sibona ukuba umrhumi uqalise ukuvelisa i-traffic eninzi, siyihambisa kwisiseko sedatha esahlukileyo (okanye nakwiseva yedatha eyahlukileyo).
Sinesiseko sedatha esisiseko apho itheyibhile yomzila igcinwa kunye nolwazi malunga nendawo yazo zonke iinkcukacha zababhalisi.
Ukuthintela i-database ephambili ekubeni yi-bottleneck, sigcina itafile yomzila (kunye nezinye iinkcukacha ezifunekayo rhoqo) kwi-cache.
Ukuba i-database yombhalisi iqala ukucotha, siya kuyinqunqa ibe yizahlulo ngaphakathi. Kwezinye iiprojekthi esizisebenzisayo
Kuba ukuphulukana nemiyalezo yabasebenzisi kubi, sigcina uvimba weenkcukacha zethu ngeekopi. Udibaniso lwe-synchronous kunye ne-asynchronous replicas ikuvumela ukuba uzikhusele kwimeko yokulahlekelwa kwesiseko sedatha. Ilahleko yomyalezo iyakwenzeka kuphela ukuba isiseko sedatha esisiseko kunye ne-synchronous replica yayo ayiphumelelanga ngaxeshanye.
Ukuba i-synchronous replica ilahlekile, i-asynchronous replica iba yi-synchronous.
Ukuba i-database engundoqo ilahlekile, i-synchronous replica iba yi-database eyintloko, kwaye i-asynchronous replica iba yi-synchronous replica.
Elasticsearch yokukhangela
Ekubeni, phakathi kwezinye izinto, i-SV iphinde ibe ngumthunywa, ifuna ukukhangela okukhawulezayo, okufanelekileyo kunye nokuguquguqukayo, kuthathela ingqalelo i-morphology, usebenzisa imilinganiselo engacacanga. Sigqibe kwelokuba singaphindi sivelise ivili kwaye sisebenzise injini yokukhangela yasimahla i-Elasticsearch, eyenziwe ngokusekwe kwithala leencwadi
Kwi-github sifumene
Yaye ingcambu yegama elithi “umbhalo” nayo iya kugcinwa. Le ndlela ikuvumela ukuba ukhangele ekuqaleni, phakathi, kwaye ekupheleni kwegama.
Umfanekiso omkhulu
Phinda umfanekiso ukususela ekuqaleni kwenqaku, kodwa ngeengcaciso:
- I-Balancer evezwe kwi-Intanethi; sine nginx, ingaba nayiphi na.
- Iimeko zesicelo seJava zinxibelelana omnye nomnye ngeHazelcast.
- Ukusebenza ngesokethi yewebhu esiyisebenzisayo
Unetty . - Usetyenziso lweJava lubhalwe kwiJava 8 kwaye luqulathe iinyanda
OSGi . Izicwangciso zibandakanya ukufudukela kwiJava 10 kunye nokutshintshela kwiimodyuli.
Uphuhliso novavanyo
Kwinkqubo yokuphuhlisa nokuvavanya i-SV, siye sadibana nenani leempawu ezinomdla kwiimveliso esizisebenzisayo.
Uvavanyo lomthwalo kunye nokuvuza kwememori
Ukukhutshwa kokukhutshwa kwe-SV nganye kubandakanya ukuvavanywa komthwalo. Iba yimpumelelo xa:
- Uvavanyo lusebenze iintsuku ezininzi kwaye akukho kusilela kwenkonzo
- Ixesha lokuphendula kwimisebenzi ephambili alidlulanga kumda okhululekileyo
- Ukuwohloka komsebenzi xa kuthelekiswa nenguqulelo yangaphambili akukho ngaphezu kwe-10%
Sigcwalisa i-database yovavanyo ngedatha - ukwenza oku, sifumana ulwazi malunga nombhalisi osebenzayo kakhulu kwi-server yokuvelisa, siphindaphinda amanani ayo nge-5 (inani lemiyalezo, iingxoxo, abasebenzisi) kwaye uvavanye ngaloo ndlela.
Senza uvavanyo lomthwalo wenkqubo yokunxibelelana ngolungelelwaniso oluthathu:
- uvavanyo loxinzelelo
- Uqhagamshelo kuphela
- Ubhaliso lwababhalisile
Ngexesha lovavanyo loxinzelelo, siqalisa amakhulu aliqela imisonto, kwaye balayisha inkqubo ngaphandle kokuyeka: ukubhala imiyalezo, ukudala iingxoxo, ukufumana uluhlu lwemiyalezo. Silinganisa izenzo zabasebenzisi abaqhelekileyo (fumana uluhlu lwemiyalezo yam engafundwanga, bhalela umntu) kunye nezisombululo zesoftware (ukuhambisa ipakethe yoqwalaselo olwahlukileyo, qhuba isilumkiso).
Umzekelo, nantsi into ebonakala ngathi yovavanyo loxinzelelo:
- Umsebenzisi ungena
- Cela iingxoxo zakho ezingafundwanga
- I-50% ilindeleke ukuba ifunde imiyalezo
- I-50% ilindeleke ukuba ithumele itekisi
- Umsebenzisi olandelayo:
- Unethuba le-20% lokudala ingxoxo entsha
- Ngokuzenzekelayo ukhetha nayiphi na iingxoxo zayo
- Ingena ngaphakathi
- Icela imiyalezo, iiprofayili zabasebenzisi
- Yenza imiyalezo emihlanu ebhekiswe kubasebenzisi abangaqhelekanga kule ngxoxo
- Ushiya ingxoxo
- Uphinda amaxesha angama-20
- Iloga ngaphandle, ibuyela ekuqaleni kweskripthi
- I-chatbot ingena kwinkqubo (ilinganisa imiyalezo esuka kwikhowudi yesicelo)
- Unethuba le-50% lokudala itshaneli entsha yokutshintshiselana kwedatha (ingxoxo ekhethekileyo)
- I-50% ilindeleke ukuba ibhale umyalezo kuwo nawaphi na amajelo akhoyo
Imeko "yoQhagamshelwano Kuphela" ivele ngesizathu. Kukho imeko: abasebenzisi baqhagamshele inkqubo, kodwa abakabandakanyekanga. Umsebenzisi ngamnye uvula ikhomputha ngo-09:00 kusasa, useka uqhagamshelwano kumncedisi kwaye uhlala ethule. Aba bafana bayingozi, baninzi kubo - iipakethi kuphela abanazo i-PING / PONG, kodwa bagcina uxhulumaniso kumncedisi (abakwazi ukuwugcina - kuthekani ukuba kukho umyalezo omtsha). Uvavanyo luvelisa kwakhona imeko apho inani elikhulu labasebenzisi abanjalo lizama ukungena kwinkqubo kwisiqingatha seyure. Kuyafana novavanyo loxinzelelo, kodwa ugxininiso lwalo luchanekile kweli galelo lokuqala - ukuze kungabikho ukungaphumeleli (umntu akasebenzisi inkqubo, kwaye sele ewa - kunzima ukucinga ngento embi kakhulu).
Isikripthi sobhaliso sobhaliso siqala ukusuka kuphehlelelo lokuqala. Senze uvavanyo loxinzelelo kwaye siqinisekile ukuba inkqubo ayicothanga ngexesha lembalelwano. Kodwa abasebenzisi beza kwaye ubhaliso lwaqala ukusilela ngenxa yexesha. Xa sibhalisa sasisebenzisa
Sisebenzisa njengejenereyitha yomthwalo
Kulapho sagqiba ekubeni siqale khona.
Phantse kwangoko emva kokuqalisa uvavanyo olunzulu, safumanisa ukuba i-JMeter yaqala ukuvuza inkumbulo.
Iplagi libali elikhulu elahlukileyo; eneenkwenkwezi eziyi-176, ineefolokhwe ze-132 kwi-github. Umbhali ngokwakhe akazange azibophelele kuyo ukususela ngo-2015 (sayithatha kwi-2015, ngoko ayizange iphakamise ukukrokra), imiba emininzi ye-github malunga nokuvuza kweememori, izicelo ze-7 ezingavalwanga.
Ukuba uthatha isigqibo sokwenza uvavanyo lomthwalo usebenzisa le plugin, nceda uqaphele ezi ngxoxo zilandelayo:
- Kwindawo enemisonto emininzi, kwasetyenziswa i-LinkedList eqhelekileyo, kwaye umphumo waba
NPE ngexesha lokusebenza. Oku kungasonjululwa ngokutshintshela kwi-ConcurrentLinkedDeque okanye ngeebhloko ezilungelelanisiweyo. Sizikhethele ukhetho lokuqala (https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/43 ). - Ukuvuza kwememori; xa uqhawula, ulwazi loqhagamshelwano alucinywa (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/44 ). - Kwimo yokusakaza (xa i-websocket ingavalwanga ekupheleni kwesampuli, kodwa isetyenziswe kamva kwisicwangciso), iipatheni zokuphendula azisebenzi (
https://github.com/maciejzaleski/JMeter-WebSocketSampler/issues/19 ).
Le yenye yezo zikwi-github. Into esiyenzileyo:
- Uthathile
ifolokhwe Elyran Kogan (@elyrank) - ilungisa iingxaki ze-1 kunye ne-3 - Isonjululwe ingxaki yesi-2
- Ijethi ehlaziyiweyo ukusuka ku-9.2.14 ukuya ku-9.3.12
- Isongelwe iSimpleDateFormat kwiThreadLocal; I-SimpleDateFormat ayikhuselekanga ngomsonto, nto leyo ekhokelele kwi-NPE ngexesha lokusebenza
- Kulungiswe enye inkumbulo evuzayo (unxibelelwano luvalwe gwenxa xa luqhawulwe)
Ukanti iyaqukuqela!
Inkumbulo yaqala ukuphela hayi ngosuku, kodwa ezimbini. Kwakungekho xesha liseleyo, ngoko ke sagqiba kwelokuba siqalise imicu embalwa, kodwa kwiiarhente ezine. Oku bekufanele ukuba kwanele iveki ubuncinane.
Zigqithile iintsuku ezimbini...
Ngoku iHazelcast iphelelwa yinkumbulo. Izigodo zibonise ukuba emva kweentsuku ezimbalwa zovavanyo, uHazelcast waqala ukukhalaza malunga nokungabikho kwememori, kwaye emva kwexesha elithile iqela lahlukana, kwaye iinqununu zaqhubeka zifa nganye nganye. Siqhagamshele i-JVisualVM kwi-hazelcast kwaye sabona "isarha ephumayo" - ibihlala ibizwa ngokuba yiGC, kodwa ayikwazanga ukucima imemori.
Kwavela ukuba kwi-hazelcast 3.4, xa ucima imephu / imephu emininzi (map.destroy ()), imemori ayikhululwa ngokupheleleyo:
I-bug ngoku ilungiswe ku-3.5, kodwa yayiyingxaki emva koko. Senze iimephu ezininzi ezintsha ezinamagama aguqukayo kwaye sazicima ngokwengqiqo yethu. Ikhowudi yayijonge ngolu hlobo:
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();
}
}
Fowuna:
service.join(auth1, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");
service.join(auth2, "НОВЫЕ_СООБЩЕНИЯ_В_ОБСУЖДЕНИИ_UUID1");
I-multiMap yenzelwe umrhumo ngamnye kwaye yacinywa xa ibingafuneki. Sigqibe ekubeni sizakuqala iMaphu , isitshixo siya kuba ligama lomrhumo, kwaye amaxabiso aya kuba ngabachongi beseshoni (apho unokufumana kuzo izichazi zabasebenzisi, ukuba kuyimfuneko).
public void join(Authentication auth, String sub) {
addValueToMap(sub, auth.getSessionId());
}
public void leave(Authentication auth, String sub) {
removeValueFromMap(sub, auth.getSessionId());
}
Iitshathi ziphucukile.
Yintoni enye esiyifundileyo malunga nokuvavanywa komthwalo?
- I-JSR223 kufuneka ibhalwe kwi-groovy kwaye ibandakanye i-cache yokuqokelela-ikhawuleza kakhulu.
Imbekiselo . - Iigrafu ze-Jmeter-Plugins kulula ukuyiqonda kunezo eziqhelekileyo.
Imbekiselo .
Malunga namava ethu neHazelcast
I-Hazelcast yayiyimveliso entsha kuthi, saqala ukusebenza nayo kwi-version 3.4.1, ngoku iseva yethu yokuvelisa i-version 3.9.2 (ngexesha lokubhala, inguqulo yakamuva ye-Hazelcast yi-3.10).
Ukuveliswa kwesazisi
Siqale ngezichongi ezipheleleyo. Masicinge ukuba sifuna elinye ixesha elide lequmrhu elitsha. Ukulandelelana kwidathabheyisi ayifanelekanga, iitafile zibandakanyeka kwi-sharding - kuvela ukuba kukho i-ID yomyalezo = 1 kwi-DB1 kunye ne-ID yomyalezo = 1 kwi-DB2, awukwazi ukubeka le ID kwi-Elasticsearch, okanye kwi-Hazelcast , kodwa eyona nto imbi kakhulu ukuba ufuna ukudibanisa idatha esuka kwiinkcukacha ezimbini zibe enye (umzekelo, ukugqiba ukuba enye isiseko sedatha yanele kwaba babhalisi). Unokongeza ii-AtomicLong ezininzi kwi-Hazelcast kwaye ugcine ikhawuntara apho, emva koko ukusebenza kokufumana isazisi esitsha kukunyukaAndGet kunye nexesha lesicelo kwi-Hazelcast. Kodwa iHazelcast inento ilunge ngakumbi-iFlakeIdGenerator. Xa uqhagamshelana nomxhasi ngamnye, banikwa uluhlu lwe-ID, umzekelo, owokuqala - ukusuka kwi-1 ukuya kwi-10, okwesibini - ukusuka kwi-000 ukuya kwi-10, njalo njalo. Ngoku umxhasi unokukhupha izichongi ezintsha ngokwakhe de uluhlu olukhutshelweyo luphele. Isebenza ngokukhawuleza, kodwa xa uqala kwakhona isicelo (kunye nomxhasi weHazelcast) ulandelelwano olutsha luqala - kungoko ukutsiba, njl. Ukongeza, abaphuhlisi abaqondi kakuhle ukuba kutheni ii-ID ziphelele, kodwa azingqinelani. Silinganise yonke into kwaye satshintshela kwii-UUIDs.
Ngendlela, kwabo bafuna ukufana ne-Twitter, kukho ithala leencwadi le-Snowcast - oku kukuphunyezwa kwe-Snowflake phezulu kwe-Hazelcast. Ungayibukela apha:
Kodwa asikafiki kuyo kwakhona.
TransactionalMap.replace
Enye into eyothusayo: TransactionalMap.replace ayisebenzi. Nalu uvavanyo:
@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
Kwafuneka ndibhale indawo yam ndisebenzisa 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);
}
Uvavanya kuphela izakhiwo zedatha eziqhelekileyo, kodwa kunye neenguqulelo zabo zentengiselwano. Kuyenzeka ukuba i-IMap isebenze, kodwa iTransactionalMap ayisekho.
Faka i-JAR entsha ngaphandle kwexesha lokuphumla
Okokuqala, sagqiba ekubeni sirekhode izinto zeeklasi zethu eHazelcast. Umzekelo, sineklasi yeSicelo, sifuna ukuyigcina kwaye siyifunde. Gcina:
IMap<UUID, Application> map = hazelcastInstance.getMap("application");
map.set(id, application);
Sifunda:
IMap<UUID, Application> map = hazelcastInstance.getMap("application");
return map.get(id);
Yonke into iyasebenza. Emva koko siye sagqiba ekubeni sakhe isalathiso eHazelcast ukukhangela ngo:
map.addIndex("subscriberId", false);
Kwaye xa ubhala iziko elitsha, baqala ukufumana iClassNotFoundException. I-Hazelcast izamile ukongeza kwisalathiso, kodwa yayingazi nto malunga neklasi yethu kwaye yayifuna ukuba i-JAR enale klasi inikwe kuyo. Senze oko, yonke into yasebenza, kodwa kwavela ingxaki entsha: indlela yokuhlaziya i-JAR ngaphandle kokumisa ngokupheleleyo iqela? I-Hazelcast ayiyithathi i-JAR entsha ngexesha lohlaziyo lwe-node-by-node. Ngeli xesha sagqiba ekubeni siphile ngaphandle kokukhangela isalathisi. Emva kwayo yonke loo nto, ukuba usebenzisa iHazelcast njengevenkile yexabiso eliphambili, yonke into iya kusebenza? Hayi ncma. Apha kwakhona ukuziphatha kwe-IMap kunye neTransactionalMap yahlukile. Apho i-IMap ingakhathaliyo, iTransactionalMap iphosa impazamo.
IMap. Sibhala izinto ezingama-5000, sizifunde. Yonke into ilindelekile.
@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());
}
}
Kodwa ayisebenzi kwintengiselwano, sifumana iClassNotFoundException:
@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();
}
});
}
Kwi-3.8, i-User Class Deployment mechanism yavela. Unokukhetha i-master node enye kwaye uhlaziye ifayile ye-JAR kuyo.
Ngoku siyitshintshe ngokupheleleyo indlela yethu: sizenzele ngokwethu kwi-JSON kwaye siyigcine eHazelcast. I-Hazelcast ayifuni ukwazi ubume beeklasi zethu, kwaye sinokuhlaziya ngaphandle kwexesha lokuphumla. Uguqulelo lwezinto zesizinda kulawulwa sisicelo. Iinguqulelo ezahlukeneyo zesicelo zinokusebenza ngexesha elinye, kwaye imeko inokwenzeka xa isicelo esitsha sibhala izinto ezinemihlaba emitsha, kodwa endala ayikazi malunga nale mihlaba. Kwaye kwangaxeshanye, isicelo esitsha sifunda izinto ezibhalwe sisicelo esidala esingenawo amasimi amatsha. Sijongana neemeko ezinjalo ngaphakathi kwesicelo, kodwa ukwenza lula asitshintshi okanye sicima amasimi, sandisa kuphela iiklasi ngokongeza iindawo ezintsha.
Siqinisekisa njani ukusebenza okuphezulu
Iihambo ezine ukuya eHazelcast - zilungile, ezimbini kwisiseko sedatha - zimbi
Ukuya kwi-cache yedatha ihlala ingcono kunokuya kwi-database, kodwa awufuni ukugcina iirekhodi ezingasetyenziswanga nokuba. Sishiya isigqibo malunga nokuba yeyiphi i-cache kude kube kwinqanaba lokugqibela lophuhliso. Xa umsebenzi omtsha ufakwe ikhowudi, sivula ukungena kuyo yonke imibuzo kwi-PostgreSQL (log_min_duration_statement ukuya ku-0) kwaye siqhube uvavanyo lomthwalo wemizuzu ye-20. Ukusebenzisa iilogi eziqokelelweyo, izinto eziluncedo ezifana ne-pgFouine kunye ne-pgBadger inokwakha iingxelo zokuhlalutya. Kwiingxelo, sijonge ikakhulu imibuzo ecothayo kwaye rhoqo. Kwimibuzo ecothayo, sakha isicwangciso sophumezo (CHAZA) kwaye sivavanye ukuba loo mbuzo unokukhawuleziswa. Izicelo zarhoqo zedatha yegalelo elifanayo zingena kakuhle kwi-cache. Sizama ukugcina imibuzo "flat", itheyibhile enye ngombuzo ngamnye.
Ukusebenza
I-SV njengenkonzo ye-intanethi yafakwa ekusebenzeni entwasahlobo ka-2017, kwaye njengemveliso eyahlukileyo, i-SV yakhululwa ngoNovemba 2017 (ngelo xesha kwi-beta version status).
Ngaphezulu konyaka wokusebenza, akuzange kubekho iingxaki ezinzulu ekusebenzeni kwenkonzo ye-intanethi ye-CB. Sibeka iliso kwinkonzo ye-intanethi nge
Unikezelo lweseva ye-SV lunikezelwa ngohlobo lweepakethe zalapha: RPM, DEB, MSI. Ukongeza kwiWindows sibonelela ngesifakeli esinye ngohlobo lwe-EXE enye efaka iseva, iHazelcast kunye ne-Elasticsearch kumatshini omnye. Siqale sabhekisa kolu guqulelo lofakelo njengenguqulelo “yedemo”, kodwa ngoku kuye kwacaca ukuba le yeyona ndlela idumileyo yokusasaza.
umthombo: www.habr.com