I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

KwaMail.ru Group sineTarantool - lena iseva yohlelo lokusebenza e-Lua, ephinda kabili njengesizindalwazi (noma okuphambene nalokho?). Kuyashesha futhi kupholile, kodwa amandla eseva eyodwa akakanqunyelwe. Ukulinganisa okuqondile nakho akuyona i-panacea, ngakho-ke i-Tarantool inamathuluzi okulinganisa okuvundlile - imojula ye-vshard [1]. Ikuvumela ukuthi uhlukanise idatha kumaseva ambalwa, kodwa kufanele uthintane nayo ukuze uyimise futhi unamathisele ingqondo yebhizinisi.

Izindaba ezinhle: siqoqe izithombe ezinkulu (isb [2], [3]) futhi kwakheka olunye uhlaka oluzokwenza lula kakhulu isixazululo sale nkinga.

I-Cartridge ye-Tarantool wuhlaka olusha lokuthuthukisa amasistimu asabalalisiwe ayinkimbinkimbi. Ikuvumela ukuthi ugxile ekubhaleni i-logic yebhizinisi esikhundleni sokuxazulula izinkinga zengqalasizinda. Ngezansi kokusika ngizokutshela ukuthi lolu hlaka lusebenza kanjani nokuthi ungabhala kanjani izinsizakalo ezisabalalisiwe usebenzisa.

Ikuphi ngempela inkinga?

Sine-tarantula, sine-vshard - yini enye ongayifunayo?

Okokuqala, kuyindaba elula. Ukucushwa kwe-vshard kulungiselelwa ngamathebula e-Lua. Ukuze uhlelo olusabalalisiwe lwezinqubo eziningi ze-Tarantool lusebenze kahle, ukulungiselelwa kufanele kufane yonke indawo. Akekho ofuna ukwenza lokhu mathupha. Ngakho-ke, zonke izinhlobo zemibhalo, Ansible, kanye nezinhlelo zokuthunyelwa ziyasetshenziswa.

I-Cartridge ngokwayo ilawula ukucushwa kwe-vshard, ikwenza lokhu ngokusekelwe kuyo ukucushwa kwakho okusabalalisiwe. Empeleni iyifayela le-YAML elilula, ikhophi yalo egcinwa esihlokweni ngasinye se-Tarantool. Ukwenza kube lula ukuthi uhlaka ngokwalo luqapha ukumiswa kwalo futhi luqinisekise ukuthi luyafana yonke indawo.

Okwesibili, kuphinde kube yindaba elula. Ukucushwa kwe-vshard akuhlangene nokuthuthukiswa komqondo webhizinisi futhi kuphazamisa kuphela umhleli emsebenzini wakhe. Uma sixoxa ngesakhiwo sephrojekthi, sivame ukukhuluma ngezingxenye ngazinye nokusebenzisana kwazo. Kusesekuseni kakhulu ukuthi ungacabanga ngokukhipha iqoqo kuzikhungo zedatha ezi-3.

Sixazulule lezi zinkinga ngokuphindaphindiwe, futhi esikhathini esithile sakwazi ukwakha indlela eyenza kube lula ukusebenza nohlelo kuwo wonke umjikelezo waso wokuphila: ukudalwa, ukuthuthukiswa, ukuhlola, i-CI/CD, ukulungiswa.

I-Cartridge yethula umqondo wendima yenqubo ngayinye ye-Tarantool. Izindima umqondo ovumela umthuthukisi ukuthi agxile ekubhaleni ikhodi. Zonke izindima ezitholakalayo kuphrojekthi zingaqhutshwa ngesibonelo esisodwa se-Tarantool, futhi lokhu kuzokwanela ukuhlolwa.

Izici ezibalulekile zeTarantool Cartridge:

  • i-ochestration yeqoqo elizenzakalelayo;
  • ukwandisa ukusebenza kohlelo lokusebenza usebenzisa izindima ezintsha;
  • isifanekiso sesicelo sokuthuthukiswa nokusatshalaliswa;
  • ukwahlukanisa okuzenzakalelayo okwakhelwe ngaphakathi;
  • ukuhlanganiswa nohlaka lokuhlola lwe-Luatest;
  • ukuphathwa kweqoqo kusetshenziswa i-WebUI ne-API;
  • amathuluzi okupakisha kanye nokusabalalisa.

Sawubona Mhlaba!

Angikwazi ukulinda ukukhombisa uhlaka ngokwalo, ngakho-ke sizoyishiya kamuva indaba mayelana nezakhiwo futhi siqale ngokuthile okulula. Uma sicabanga ukuthi i-Tarantool ngokwayo isivele ifakiwe, konke okusele ukukwenza

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

Le miyalo emibili izofaka izinsiza zomugqa womyalo futhi ikuvumele ukuthi udale uhlelo lwakho lokusebenza lokuqala kusukela kusifanekiso:

$ cartridge create --name myapp

Futhi nakhu esikutholayo:

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/

Lena inqolobane ye-git ene-“Sawubona, Mhlaba!” esenziwe ngomumo! isicelo. Ake sizame ukuyiqhuba khona manjalo, sesifake okuncikile ngaphambilini (kuhlanganise nohlaka ngokwalo):

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

Ngakho-ke, sinenodi eyodwa esebenzayo yohlelo lokusebenza olwabiwe lwesikhathi esizayo. Umuntu ovamile onolwazi angavula ngokushesha isixhumi esibonakalayo sewebhu, alungise iqoqo lenodi eyodwa ngegundane futhi ajabulele umphumela, kodwa kusesekuseni kakhulu ukuthi angajabula. Kuze kube manje, isicelo asikwazi ukwenza noma yini ewusizo, ngakho-ke ngizokutshela mayelana nokuthunyelwa kamuva, kodwa manje sekuyisikhathi sokubhala ikhodi.

Ukuthuthukiswa Kohlelo

Cabanga nje, siklama iphrojekthi okufanele yamukele idatha, iyilondoloze futhi yakhe umbiko kanye ngosuku.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Siqala ukudweba umdwebo bese sibeka izingxenye ezintathu kuwo: isango, isitoreji kanye nesihleli. Sisebenzela ekwakhiweni kwezakhiwo ngokuqhubekayo. Njengoba sisebenzisa i-vshard njengesitoreji, sengeza i-vshard-router ne-vshard-storage ohlelweni. Isango noma isihleli ngeke sifinyelele ngqo kusitoreji; yilokho irutha eyenzelwe yona, yilokho eyadalelwe kona.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Lo mdwebo awukameli kahle lokho esizokwakha kuphrojekthi ngoba izingxenye zibukeka zingabonakali. Kusadingeka sibone ukuthi lokhu kuzovezwa kanjani ku-Tarantool yangempela - ake siqoqe izingxenye zethu ngenqubo.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Kukhona iphuzu elincane ekugcineni i-vshard-router kanye nesango ngezikhathi ezihlukene. Kungani sidinga ukuhlola inethiwekhi futhi uma lokhu kakade kuwumthwalo werutha? Kufanele ziqhutshwe ngenqubo efanayo. Okusho ukuthi, kokubili isango kanye ne-vshard.router.cfg ziqalwa ngenqubo eyodwa, futhi zivumele ukuthi zihlanganyele endaweni.

Esigabeni sokuklama, kwakulula ukusebenza ngezingxenye ezintathu, kodwa mina, njengomthuthukisi, ngenkathi ngibhala ikhodi, angifuni ukucabanga ngokusungula izimo ezintathu zeTarnatool. Ngidinga ukwenza izivivinyo futhi ngihlole ukuthi ngibhale ngendlela efanele yini isango. Noma mhlawumbe ngifuna ukukhombisa isici kozakwethu. Kungani kufanele ngibhekane nobunzima bokukhipha amakhophi amathathu? Wazalwa kanje umqondo wezindima. Iqhaza imojuli ye-luash evamile umjikelezo wayo wokuphila uphethwe yiCartridge. Kulesi sibonelo kukhona ezine zazo - isango, i-router, isitoreji, isihleli. Kungase kube nokunye kwenye iphrojekthi. Zonke izindima zingaqhutshwa ngenqubo eyodwa, futhi lokhu kuzokwanela.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Futhi uma kukhulunywa ngokuthunyelwa esiteji noma ekukhiqizweni, sizobe sesinikeza inqubo ye-Tarantool ngayinye isethi yayo yezindima kuye ngamakhono wehadiwe:

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Ukuphathwa kwe-Topology

Ulwazi mayelana nokuthi yiziphi izindima eziqhutshwayo kufanele zigcinwe endaweni ethile. Futhi lokhu "ndawana-thile" ukucushwa okusabalalisiwe, esengikusho ngenhla. Into ebaluleke kakhulu ngayo i-cluster topology. Nawa amaqembu okuphindaphinda ama-3 wezinqubo ezi-5 ze-Tarantool:

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Asifuni ukulahlekelwa idatha, ngakho siphatha ulwazi mayelana nokuqhuba izinqubo ngokucophelela. I-Cartridge ilandelela ukucushwa isebenzisa isibopho sezigaba ezimbili. Uma sesifuna ukubuyekeza ukucushwa, kuqala ihlola ukuthi zonke izimo ziyatholakala futhi zilungele ukwamukela ukucushwa okusha. Ngemuva kwalokhu, isigaba sesibili sisebenzisa i-config. Ngakho, ngisho noma ikhophi eyodwa ibonakala ingatholakali okwesikhashana, akukho okubi okuzokwenzeka. Ukucushwa ngeke kusetshenziswe futhi uzobona iphutha kusenesikhathi.

Futhi esigabeni se-topology, ipharamitha ebalulekile njengomholi weqembu ngalinye lokuphindaphinda ikhonjisiwe. Ngokuvamile lena ikhophi eqoshwayo. Ezinye ngokuvamile zifundwa kuphela, nakuba kungase kube khona okuhlukile. Ngezinye izikhathi abathuthukisi abanesibindi abesabi izingxabano futhi bangabhala idatha kuma-replicas amaningana ngokuhambisana, kodwa kunemisebenzi ethile, kungakhathaliseki ukuthi yini, akufanele yenziwe kabili. Kulokhu kukhona uphawu lomholi.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Impilo yezindima

Ukuze kube khona indima engabonakali kusakhiwo esinjalo, uhlaka kufanele luyilawule ngandlela thize. Ngokwemvelo, ukulawula kwenzeka ngaphandle kokuqala kabusha inqubo ye-Tarantool. Kukhona ama-callback angu-4 okuphatha izindima. I-Cartridge ngokwayo izobabiza ngokuya ngokuthi yini ebhaliwe ekucushweni kwayo okusatshalalisiwe, ngaleyo ndlela isebenzisa ukucushwa kuzindima ezithile.

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

Indima ngayinye inomsebenzi wayo init. Kubizwa kanye uma indima inikwe amandla noma uma i-Tarantool iqalwa kabusha. Kuhle lapho, ngokwesibonelo, ukuqalisa i-box.space.create, noma isihleli singaqalisa umcu ongasemuva ozokwenza umsebenzi ngezikhathi ezithile.

Umsebenzi owodwa init kungenzeka akwanele. I-Cartridge ivumela izindima ukuthi zisebenzise ukulungiselelwa okusabalalisiwe ekusebenzisayo ukugcina i-topology. Singamemezela isigaba esisha ekucushweni okufanayo futhi sigcine isiqeshana sokucushwa kwebhizinisi kuso. Esibonelweni sami, lokhu kungaba i-schema yedatha noma izilungiselelo zeshejuli yendima yomhleli.

Izingcingo ze-Cluster validate_config и apply_config ngaso sonke isikhathi lapho ukucushwa okusabalalisiwe kushintsha. Uma ukulungiselelwa kusetshenziswa isibopho sezigaba ezimbili, iqoqo lihlola ukuthi indima ngayinye isilungele ukwamukela lokhu kulungiselelwa okusha futhi, uma kudingeka, ibike iphutha kumsebenzisi. Lapho wonke umuntu evuma ukuthi ukucushwa kujwayelekile, bese kuthi apply_config.

Futhi izindima zinendlela stop, okudingekayo ukuze kuhlanzwe umphumela wendima. Uma sithi isihleli asisadingeki kule seva, singamisa lawo mafayili esiqale ngawo init.

Izindima zingasebenzisana. Sijwayele ukubhala izingcingo zomsebenzi ngesi-Lua, kodwa kungenzeka ukuthi inqubo enikeziwe ayinayo indima esiyidingayo. Ukwenza lula amakholi ngenethiwekhi, sisebenzisa i-rpc (inqubo yocingo yesilawuli kude) imojuli yesilekeleli, eyakhelwe phezu kwesisekelo sebhokisi lenethiwekhi elijwayelekile elakhelwe ku-Tarantool. Lokhu kungaba usizo uma, ngokwesibonelo, isango lakho lifuna ukucela ngokuqondile umhleli ukuthi enze umsebenzi njengamanje, kunokulinda usuku.

Elinye iphuzu elibalulekile ukuqinisekisa ukubekezelelwa kwamaphutha. I-Cartridge isebenzisa umthetho olandelwayo we-SWIM ukuqapha impilo [4]. Ngamafuphi, izinqubo zishintshana "amahemuhemu" komunye nomunye nge-UDP-inqubo ngayinye itshela omakhelwane bayo izindaba zakamuva, futhi bayaphendula. Uma kungazelelwe impendulo ingafiki, i-Tarantool iqala ukusola ukuthi kukhona okungalungile, futhi ngemva kwesikhashana isho ukufa futhi iqala ukutshela wonke umuntu oseduze nalezi zindaba.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Ngokusekelwe kule phrothokholi, i-Cartridge ihlela ukucutshungulwa kokwehluleka okuzenzakalelayo. Inqubo ngayinye iqapha indawo yayo, futhi uma umholi eyeka ukuphendula ngokuzumayo, i-replica ingathatha indima yayo, futhi i-Cartridge ilungisa izindima ezisebenzayo ngokufanele.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Udinga ukuqaphela lapha, ngoba ukushintsha njalo emuva naphambili kungaholela ekungqubuzaneni kwedatha ngesikhathi sokuphindaphinda. Yiqiniso, akufanele unike amandla ukuhluleka okuzenzakalelayo ngokungahleliwe. Kumele sikuqonde kahle okwenzekayo futhi sibe nesiqiniseko sokuthi ukuphindaphinda ngeke kunqamuke ngemuva kokubuyiselwa komholi nesicoco sibuyiselwe kuye.

Kukho konke lokhu, ungathola umuzwa wokuthi izindima ziyefana nama-microservices. Ngomqondo othile, zinjalo nje, njengamamojula ngaphakathi kwezinqubo zeTarantool. Kodwa futhi kunenombolo yokuhluka okuyisisekelo. Okokuqala, zonke izindima zephrojekthi kufanele ziphile ngesisekelo sekhodi efanayo. Futhi zonke izinqubo ze-Tarantool kufanele ziqaliswe kusukela kusisekelo sekhodi efanayo, ukuze kungabikho izimanga ezifana nalezo lapho sizama ukuqalisa isihleli, kodwa sivele singekho. Futhi, akufanele uvumele umehluko ezinguqulweni zekhodi, ngoba ukuziphatha kwesistimu esimweni esinjalo kunzima kakhulu ukubikezela nokulungisa iphutha.

Ngokungafani ne-Docker, asikwazi nje ukuthatha indima "isithombe", sisiyise komunye umshini futhi siwuqhube lapho. Izindima zethu azihlukanisiwe njengeziqukathi ze-Docker. Futhi, asikwazi ukwenza izindima ezimbili ezifanayo endaweni eyodwa. Iqhaza likhona noma alikho; ngomqondo othile, i-singleton. Futhi okwesithathu, izindima kufanele zifane phakathi kweqembu lonke lokuphindaphinda, ngoba ngaphandle kwalokho bekuyoba okungenangqondo - idatha iyafana, kodwa ukucushwa kuhlukile.

Amathuluzi okuthumela

Ngithembise ukukhombisa ukuthi iCartridge isiza kanjani ekuthumeleni izicelo. Ukwenza impilo ibe lula kwabanye, uhlaka lufaka amaphakheji we-RPM:

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

Iphakheji efakiwe iqukethe cishe yonke into oyidingayo: kokubili uhlelo lokusebenza nokuncika okufakiwe. I-Tarantool izophinde ifike kuseva njengokuncika kwephakheji ye-RPM, futhi isevisi yethu isilungele ukuqaliswa. Lokhu kwenziwa nge-systemd, kodwa okokuqala udinga ukubhala ukucushwa okuncane. Okungenani, cacisa i-URI yenqubo ngayinye. Okuthathu kwanele ngokwesibonelo.

$ 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

Kukhona i-nuance ethokozisayo lapha. Esikhundleni sokucacisa imbobo yephrothokholi kanambambili, sicacisa lonke ikheli lomphakathi lenqubo okuhlanganisa negama lomethuleli. Lokhu kuyadingeka ukuze ama-cluster node azi ukuthi axhumane kanjani. Kungumbono omubi ukusebenzisa u-0.0.0.0 njengekheli le-add_uri; kufanele kube ikheli le-IP langaphandle, hhayi isibopho sesokhethi. Ngaphandle kwayo, akukho okuzosebenza, ngakho-ke iCartridge ngeke ikuvumele ukuthi uqalise i-node ene-advert_uri engalungile.

Manje njengoba ukucushwa sekulungile, ungaqala izinqubo. Njengoba iyunithi ye-systemd evamile ingavumeli inqubo engaphezu kweyodwa ukuthi iqale, izinhlelo zokusebenza ku-Cartridge zifakwa yilabo okuthiwa. amayunithi aqinisekisiwe asebenza kanje:

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

Ekucushweni, sicacise imbobo ye-HTTP lapho i-Cartridge isebenzela khona isixhumi esibonakalayo sewebhu - 8080. Ake siye kuyo futhi sibheke:

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Siyabona ukuthi nakuba izinqubo zisebenza, azikalungiselelwa. I-cartridge ayikazi ukuthi ubani okufanele aphindaphinde nobani futhi ayikwazi ukwenza isinqumo ngokwayo, ngakho-ke ilinde izenzo zethu. Kodwa asinakho ukukhetha okuningi: impilo yeqoqo elisha iqala ngokucushwa kwe-node yokuqala. Sizobe sengeza abanye kuqoqo, sibanike izindima, futhi kuleli qophelo ukuthunyelwa kungabhekwa njengokuqedwe ngempumelelo.

Ake sithele ingilazi yesiphuzo sakho osithandayo futhi siphumule ngemva kwesonto elide lomsebenzi. Isicelo singasetshenziswa.

I-Tarantool Cartridge: I-Lua backend sharding emigqeni emithathu

Imiphumela

Iyini imiphumela? Izame, isebenzise, ​​shiya impendulo, dala amathikithi ku-Github.

izithenjwa

[1] I-Tarantool » 2.2 » Inkomba » Ireferensi yamadwala » Imojula vshard

[2] Siwusebenzise kanjani umnyombo webhizinisi lokutshala imali le-Alfa-Bank ngokusekelwe ku-Tarantool

[3] Isakhiwo sokukhokha sesizukulwane esisha: uguquko ngokushintshela ku-Tarantool

[4] SWIM - iphrothokholi yokwakha iqoqo

[5] I-GitHub - i-tarantool/cartridge-cli

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

Source: www.habr.com

Engeza amazwana