ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

KwiQela le-Mail.ru sineTarantool - lo ngumncedisi wesicelo kwi-Lua, ephinda kabini njengesiseko sedatha (okanye ngokuchaseneyo?). Iyakhawuleza kwaye ipholile, kodwa amandla omncedisi omnye awakapheli. Ukulinganisa ngokuthe nkqo akuyonto yonyango, ngoko ke iTarantool inezixhobo zokulinganisa okuthe tye - imodyuli ye-vshard. [1]. Ikuvumela ukuba udibanise idatha kwiiseva ezininzi, kodwa kuya kufuneka ucokise ukuseta kwaye uncamathisele ingqiqo yeshishini.

Iindaba ezimnandi: siqokelele izithonga ezinkulu (umz [2], [3]) kwaye yenze esinye isakhelo esiya kwenza lula kakhulu isisombululo kule ngxaki.

Ikhatriji yeTarantool sisikhokelo esitsha sokuphuhlisa iinkqubo ezintsonkothileyo ezisasazwayo. Ikuvumela ukuba ugxile ekubhaleni ingqiqo yeshishini endaweni yokusombulula iingxaki zeziseko zophuhliso. Ngezantsi kokusikwa ndiya kukuxelela indlela esi sikhokelo sisebenza ngayo kunye nendlela yokubhala iinkonzo ezisasazwayo usebenzisa.

Yintoni kanye kanye ingxaki?

Sine-tarantula, sine-vshard - yintoni enye onokuyifuna?

Okokuqala, yinto elula. Uqwalaselo lwe vshard luqwalaselwe ngeetafile zeLua. Ukuze inkqubo esasazwayo yeenkqubo ezininzi zeTarantool isebenze ngokuchanekileyo, uqwalaselo kufuneka lufane yonke indawo. Akukho mntu ufuna ukwenza oku ngesandla. Ke ngoko, zonke iintlobo zeskripthi, ezisebenzayo, kunye neenkqubo zokuhambisa zisetyenziswa.

ICartridge ngokwayo ilawula uqwalaselo lwe vshard, ikwenza oku ngokusekelwe kuyo ulungelelwaniso lolwakhe olusasaziweyo. Ngokwesiseko yifayile ye-YAML elula, ikopi yayo egcinwe kwimeko nganye yeTarantool. Ukwenziwa lula kukuba isakhelo ngokwaso sijonga uqwalaselo lwaso kwaye siqinisekisa ukuba siyafana kuyo yonke indawo.

Okwesibini, kuphinda kube yinto elula. Uqwalaselo vshard alunanto yakwenza nophuhliso logic ishishini kwaye iphazamisa kuphela umdwelisi wenkqubo emsebenzini wakhe. Xa sixoxa ngoyilo lweprojekthi, sihlala sithetha ngamacandelo ngamanye kunye nokusebenzisana kwawo. Kuselithuba ukuba ucinge ngokukhupha iqela kumaziko edatha ye-3.

Sizisombulule ezi ngxaki ngokuphindaphindiweyo, kwaye ngaxa lithile sikwazile ukuphuhlisa indlela yokwenza lula ukusebenza kunye nesicelo kuwo wonke umjikelo wobomi bayo: ukudala, uphuhliso, uvavanyo, i-CI / CD, ukugcinwa.

I-Cartridge yazisa ingcamango yendima yenkqubo nganye yeTarantool. Iindima ngumbono ovumela umphuhlisi ukuba agxininise kwikhowudi yokubhala. Zonke iindima ezikhoyo kwiprojekthi zinokuqhutywa kumzekelo omnye weTarantool, kwaye oku kuya kukwanela kwiimvavanyo.

Iimpawu eziphambili zeTarantool Cartridge:

  • iokhestra yeqela elizenzekelayo;
  • ukwandisa ukusebenza kwesicelo usebenzisa iindima ezintsha;
  • itemplate yesicelo sophuhliso kunye nokusasazwa;
  • ukwahlula okwakhelwe ngaphakathi;
  • ukudityaniswa nenkqubo yovavanyo lweLuatest;
  • ulawulo lweqela usebenzisa iWebUI kunye ne-API;
  • ukupakisha kunye nezixhobo zokusasaza.

Molo Lizwe!

Andikwazi ukulinda ukubonisa isakhelo ngokwaso, ngoko siya kushiya ibali malunga noyilo lwezakhiwo kamva kwaye siqale ngento elula. Ukuba sicinga ukuba iTarantool ngokwayo sele ifakiwe, ke konke okuseleyo kukwenza

$ tarantoolctl rocks install cartridge-cli
$ export PATH=$PWD/.rocks/bin/:$PATH

Le miyalelo mibini iya kufaka izinto eziluncedo zomgca womyalelo kwaye ikuvumela ukuba wenze isicelo sakho sokuqala kwitemplate:

$ cartridge create --name myapp

Kwaye yile nto siyifumanayo:

myapp/
├── .git/
├── .gitignore
├── app/roles/custom.lua
├── deps.sh
├── init.lua
├── myapp-scm-1.rockspec
├── test
│   ├── helper
│   │   ├── integration.lua
│   │   └── unit.lua
│   ├── helper.lua
│   ├── integration/api_test.lua
│   └── unit/sample_test.lua
└── tmp/

Le yindawo yokugcina yegit ene-"Molo, Hlabathi!" isicelo. Masizame ukuyiqhuba kwangoko, sele siyifakile ngaphambili ukuxhomekeka (kubandakanya nesakhelo ngokwaso):

$ tarantoolctl rocks make
$ ./init.lua --http-port 8080

Ke, sinendawo enye esebenzayo yesicelo esabiweyo sexesha elizayo. Umntu othanda ukwazi unokuvula ngokukhawuleza ujongano lwewebhu, alungise iqoqo lenode enye kunye nemouse kwaye wonwabele umphumo, kodwa kuselithuba ukuba uvuye. Ukuza kuthi ga ngoku, isicelo asikwazi ukwenza nantoni na eluncedo, ngoko ke ndiya kukuxelela malunga nokuthunyelwa kamva, kodwa ngoku lixesha lokubhala ikhowudi.

Uphuhliso lwesicelo

Khawufane ucinge, siyila iprojekthi ekufuneka ifumane idatha, siyigcine kwaye sakhe ingxelo kanye ngosuku.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Siqala ukuzoba umzobo kwaye sibeke amacandelo amathathu kuwo: isango, ukugcinwa kunye nomcwangcisi. Sisebenza kwi-architecture ngakumbi. Ekubeni sisebenzisa vshard njengendawo yokugcina, songeza vshard-router kunye vshard-ukugcinwa kwisikimu. Ayikho isango okanye umcwangcisi uya kufikelela ngokuthe ngqo kwisitoreji;

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Lo mzobo awukayimeli ncam into esiza kuyenza kwiprojekthi kuba izinto zikhangeleka zingekho. Kusafuneka sibone ukuba oku kuya kuqikelelwa njani kwiTarantool yokwenyani- masenze amaqela ethu ngokwenkqubo.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Kukho indawo encinci yokugcina i-vshard-router kunye nesango kwiimeko ezahlukeneyo. Kutheni le nto kufuneka siphinde sisebenzise inethiwekhi kwakhona ukuba oku sele kuluxanduva lomzila? Kufuneka ziqhutywe kwinkqubo efanayo. Oko kukuthi, zombini isango kunye vshard.router.cfg ziqalwa kwinkqubo enye, kwaye zivumele ukuba zisebenze ekuhlaleni.

Kwinqanaba loyilo, kwakulungele ukusebenza kunye namacandelo amathathu, kodwa mna, njengomthuthukisi, ngelixa ndibhala ikhowudi, andifuni ukucinga malunga nokuqaliswa kweemeko ezintathu zeTarnatool. Kufuneka ndiqhube iimvavanyo kwaye ndijonge ukuba ndibhale i-gateway ngokuchanekileyo. Okanye mhlawumbi ndifuna ukubonisa into kwabo ndisebenza nabo. Kutheni le nto kufuneka ndidlule kubunzima bokuhambisa iikopi ezintathu? Le yindlela yazalwa ngayo ingqiqo yeendima. Indima yimodyuli eqhelekileyo ye-luash enomjikelo wobomi olawulwa yiCartridge. Kulo mzekelo kukho ezine kubo - isango, umzila, ukugcinwa, umcwangcisi. Kusenokubakho ngakumbi kwenye iprojekthi. Zonke iindima zinokuqhutywa kwinkqubo enye, kwaye oku kuya kwanela.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Kwaye xa kuziwa ekuhanjisweni kwisiteji okanye kwimveliso, emva koko siya kwabela inkqubo yeTarantool nganye iseti yeendima zayo ngokuxhomekeke kubuchule behardware:

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Ulawulo lwe-Topology

Ulwazi malunga nokuba zeziphi iindima eziqhutywayo kufuneka zigcinwe kwenye indawo. Kwaye le "ndaweni ethile" lulungelelwaniso olusasazwayo, endisele ndilukhankanye ngasentla. Eyona nto ibalulekileyo ngayo yi-cluster topology. Nanga amaqela ama-3 aphindaphinda iinkqubo ezi-5 zeTarantool:

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Asifuni kuphulukana nedatha, ngoko siphatha ulwazi malunga nokuqhuba iinkqubo ngononophelo. Ikhatriji igcina umkhondo woqwalaselo isebenzisa inqanaba ezibini lokuzibophelela. Nje ukuba sifuna ukuhlaziya ubumbeko, kuqala ijonga ukuba zonke iimeko ziyafumaneka kwaye zilungele ukwamkela uqwalaselo olutsha. Emva koku, isigaba sesibini sisebenza kwi-config. Ngaloo ndlela, kwanokuba ikopi enye ibonakala ingafumaneki okwexeshana, akukho nto imbi iya kwenzeka. Ubumbeko aluzukusetyenziswa kwaye uya kubona impazamo kwangaphambili.

Kwakhona kwicandelo le-topology, ipharamitha ebalulekileyo njengenkokeli yeqela ngalinye lokuphindaphinda ibonisiwe. Ngokuqhelekileyo le yikopi erekhodwayo. Ezinye zidla ngokufunda kuphela, nangona kusenokubakho iimeko ezinxaxhileyo. Ngamanye amaxesha abaphuhlisi abanesibindi aboyiki iingxabano kwaye banokubhala idatha kwii-replicas ezininzi ngokufanayo, kodwa kukho imisebenzi ethile, nokuba yintoni na, akufanele yenziwe kabini. Kule nto kukho uphawu lwenkokeli.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Ubomi bendima

Ukuze kubekho indima engabonakaliyo kuyilo loyilo, isakhelo kufuneka silawule ngandlela ithile. Ngokwendalo, ulawulo lwenzeka ngaphandle kokuqalisa inkqubo yeTarantool. Kukho ii-callbacks ezi-4 zokulawula iindima. I-Cartridge ngokwayo iya kubabiza ngokuxhomekeke kwinto ebhaliweyo kwi-configuration yayo esasazwayo, ngaloo ndlela isebenzise ukucwangciswa kwiindima ezithile.

function init()
function validate_config()
function apply_config()
function stop()

Indima nganye inomsebenzi wayo init. Ibizwa kanye nokuba xa indima yenziwe okanye xa iTarantool iqalwa kwakhona. Kufanelekile apho, ngokomzekelo, ukuqala ibhokisi.space.create, okanye umcwangcisi angazisa umtya ongasemva oza kwenza umsebenzi ngamaxesha athile.

Umsebenzi omnye init isenokunganeli. I-Cartridge ivumela iindima ukuba zisebenzise ulungelelwaniso olusasaziweyo olusebenzisa ukugcina i-topology. Sinokubhengeza icandelo elitsha kuqwalaselo olufanayo kwaye sigcine isiqwenga sokucwangciswa kweshishini kulo. Kumzekelo wam, oku kunokuba sischema sedatha okanye useto lweshedyuli yendima yomcwangcisi.

Iminxeba yeqela validate_config и apply_config ngalo lonke ixesha uhlengahlengiso olusasaziweyo lutshintsha. Xa uqwalaselo lusetyenziswa ngokuzibophelela kwezigaba ezibini, iqela lijonga ukuba indima nganye ikulungele na ukwamkela olu lungelelwaniso olutsha kwaye, ukuba kuyimfuneko, lixela impazamo kumsebenzisi. Xa wonke umntu evuma ukuba uqwalaselo luqhelekile, ke i apply_config.

Kwakhona iindima zinendlela stop, efunekayo ukucoca imveliso yendima. Ukuba sithi umcwangcisi akasafuneki kulo mncedisi, unokunqanda ezo ntsinga eqale ngazo init.

Iindima zinokusebenzisana enye kwenye. Sisetyenziselwa ukubhala iifowuni zokusebenza kwiLua, kodwa kunokwenzeka ukuba inkqubo enikiweyo ayinayo indima esiyidingayo. Ukuququzelela iifowuni kwinethiwekhi, sisebenzisa i-rpc (umnxeba wenkqubo ekude) imodyuli encedisayo, eyakhiwe ngesiseko se-netbox eqhelekileyo eyakhelwe kwi-Tarantool. Oku kunokuba luncedo ukuba, umzekelo, isango lakho lifuna ukucela ngokuthe ngqo umcwangcisi ukuba enze umsebenzi ngoku, kunokulinda usuku.

Enye ingongoma ebalulekileyo kukuqinisekisa ukunyamezela iimpazamo. Ikhatriji isebenzisa i-SWIM protocol ukujonga impilo [4]. Ngamafutshane, iinkqubo zitshintshisa "amahemuhemu" kunye nomnye nge-UDP-inkqubo nganye ixelela abamelwane bayo iindaba zamva nje, kwaye bayaphendula. Ukuba ngequbuliso impendulo ayifiki, iTarantool iqala ukukrokrela into engalunganga, kwaye emva kwexesha iphinda ifunde ukufa kwaye iqale ukuxelela wonke umntu ojikeleze ezi ndaba.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Ngokusekwe kule protocol, iCartridge icwangcisa ukusilela okuzenzekelayo. Inkqubo nganye ijonga indawo yayo, kwaye ukuba inkokeli iyeka ukuphendula ngequbuliso, i-replica inokuthatha indima yayo, kwaye iCartridge imisela iindima ezisebenzayo ngokufanelekileyo.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Kufuneka ulumke apha, kuba ukutshintsha rhoqo emva naphambili kunokukhokelela kwiingxabano zedatha ngexesha lokuphindaphinda. Ewe kunjalo, akufuneki wenze i-failover ezenzekelayo ngokungaqhelekanga. Kufuneka siqonde ngokucacileyo okwenzekayo kwaye siqiniseke ukuba ukuphindaphinda akuyi kuphuka emva kokuba inkokeli ibuyiselwe kwaye isithsaba sibuyiselwe kuye.

Kuyo yonke le nto, unokufumana imvakalelo yokuba iindima ziyafana nee-microservices. Ngandlela ithile, zinjalo, kuphela njengeemodyuli ngaphakathi kweenkqubo zeTarantool. Kodwa kukwakho nenani leeyantlukwano ezisisiseko. Okokuqala, zonke iindima zeprojekthi kufuneka ziphile kwisiseko sekhowudi efanayo. Kwaye zonke iinkqubo zeTarantool kufuneka ziqaliswe kwisiseko sekhowudi efanayo, ukuze kungabikho nto imangalisayo njengaleyo xa sizama ukuqalisa umcwangcisi, kodwa ayikho nje. Kwakhona, akufanele uvumele ukungafani kwiinguqulelo zekhowudi, kuba ukuziphatha kwenkqubo kwimeko enjalo kunzima kakhulu ukuqikelela kunye nokulungiswa.

Ngokungafaniyo neDocker, asinakuthatha nje indima "umfanekiso", uwuse komnye umatshini kwaye uwuqhube apho. Iindima zethu azikho zodwa njengezikhongozeli zeDocker. Kwakhona, asinakukwazi ukwenza iindima ezimbini ezifanayo kwimeko enye. Indima nokuba ikhona okanye ayikho; Kwaye okwesithathu, iindima kufuneka zifane ngaphakathi kweqela lonke lokuphindaphinda, kuba ngaphandle koko kuya kuba kungenangqondo - idatha iyafana, kodwa uqwalaselo luhlukile.

Izixhobo zokusasaza

Ndithembise ukubonisa indlela iCartridge enceda ngayo ukuhambisa izicelo. Ukwenza ubomi bube lula kwabanye, iipakethe ze-RPM zesakhelo:

$ cartridge pack rpm myapp -- упакует для нас ./myapp-0.1.0-1.rpm
$ sudo yum install ./myapp-0.1.0-1.rpm

Iphakheji efakiweyo iqulethe phantse yonke into oyifunayo: zombini usetyenziso kunye nokuxhomekeka okufakiweyo. I-Tarantool iya kufika kwakhona kumncedisi njengokuxhomekeka kwephakheji ye-RPM, kwaye inkonzo yethu ilungele ukuqaliswa. Oku kwenziwa nge-systemd, kodwa kuqala kufuneka ubhale uqwalaselo oluncinane. Ubuncinci, khankanya i-URI yenkqubo nganye. Isithathu sanele umzekelo.

$ sudo tee /etc/tarantool/conf.d/demo.yml <<CONFIG
myapp.router: {"advertise_uri": "localhost:3301", "http_port": 8080}
myapp.storage_A: {"advertise_uri": "localhost:3302", "http_enabled": False}
myapp.storage_B: {"advertise_uri": "localhost:3303", "http_enabled": False}
CONFIG

Kukho i-nuance enomdla apha. Endaweni yokukhankanya izibuko leprotocol yokubini, sikhankanya yonke idilesi yoluntu yenkqubo ukuquka igama lenginginya. Oku kuyimfuneko ukuze i-cluster nodes zazi indlela yokudibanisa enye kwenye. Ngumbono ombi ukusebenzisa i-0.0.0.0 njengedilesi ye-ad_uri kufuneka ibe yidilesi ye-IP yangaphandle, kungekhona i-socket bind. Ngaphandle kwayo, akukho nto iya kusebenza, ke iCartridge ayinakukuvumela ukuba uqalise i-node ngead_uri engalunganga.

Ngoku ukuba uqwalaselo lulungile, ungaqala iinkqubo. Ekubeni iyunithi ye-systemd eqhelekileyo ayivumeli inkqubo engaphezu kweyodwa ukuba iqale, izicelo kwiCartridge zifakwe yiloo nto kuthiwa. iiyunithi eziqinisekisiweyo ezisebenza ngolu hlobo:

$ sudo systemctl start myapp@router
$ sudo systemctl start myapp@storage_A
$ sudo systemctl start myapp@storage_B

Kuqwalaselo, sichaze izibuko le-HTTP apho iCartridge isebenzela ujongano lwewebhu - 8080. Masihambe siye kuyo kwaye sijonge:

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Siyabona ukuba nangona iinkqubo ziqhuba, azikalungiswa. I-cartridge ayikazi ukuba ngubani omele aphendule nabani kwaye akakwazi ukwenza isigqibo yedwa, ngoko ilindele izenzo zethu. Kodwa asinalo ukhetho oluninzi: ubomi beqela elitsha buqala ngokucwangciswa kwe-node yokuqala. Emva koko siya kongeza abanye kwiqela, sibanike iindima, kwaye ngeli xesha ukuthunyelwa kunokuqwalaselwa ngempumelelo.

Masigalele iglasi yesiselo sakho osithandayo kwaye uphumle emva kweveki ende yomsebenzi. Isicelo sinokusetyenziswa.

ICartridge yeTarantool: ukwahlula umva weLua kwimigca emithathu

Iziphumo

Zithini iziphumo? Yizame, yisebenzise, ​​shiya impendulo, yenza amatikiti kwiGithub.

iimbekiselo

[1] Tarantool » 2.2 » Isalathiso » Isalathiso samatye » Imodyuli vshard

[2] Siphumeze njani undoqo weshishini lotyalo-mali lwe-Alfa-Bank esekwe kwiTarantool

[3] Isizukulwana esitsha soyilo lwetyala: inguqu kunye notshintsho kwiTarantool

[4] I-SWIM - iprotocol yokwakha yeqela

[5] GitHub - tarantool/cartridge-cli

[6] I-GitHub - i-tarantool / i-cartridge

umthombo: www.habr.com

Yongeza izimvo