Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Tha Tarantool againn aig Mail.ru Group - is e frithealaiche tagraidh a tha seo ann an Lua, a tha cuideachd na stòr-dàta còmhla (no a chaochladh?). Tha e luath agus fionnar, ach chan eil na comasan airson aon fhrithealaiche fhathast gun chrìoch. Chan e panacea a th’ ann an sgèileadh dìreach nas motha, agus mar sin tha innealan aig Tarantool airson sgèileadh còmhnard - am modal vshard [1]. Leigidh e leat dàta a shìneadh thairis air grunn luchd-frithealaidh, ach feumaidh tu a dhol còmhla ris gus a stèidheachadh agus loidsig gnìomhachais a sgrìobadh.

Deagh naidheachd: tha sinn air cònaichean a chruinneachadh (mar eisimpleir [2], [3]) agus chuir e a-steach frèam eile a nì fuasgladh air an duilgheadas seo gu mòr nas sìmplidhe.

Cartridge Tarantool Is e frèam ùr a th’ ann airson siostaman sgaoilte iom-fhillte a leasachadh. Leigidh e leat fòcas a chuir air sgrìobhadh loidsig gnìomhachais an àite a bhith a’ fuasgladh dhuilgheadasan bun-structair. Fon ghearradh, innsidh mi dhut mar a tha am frèam seo ag obair agus mar a sgrìobhas tu seirbheisean sgaoilte leis.

Agus dè, dìreach, a tha an duilgheadas?

Tha tarantula againn, tha vshard againn - dè a bharrachd a dh’ fhaodadh tu a bhith ag iarraidh?

An toiseach, tha e na chùis goireasachd. Tha an rèiteachadh vshard air a rèiteachadh tro chlàran Lua. Airson siostam sgaoilte de phròiseasan iomadach Tarantool obrachadh gu ceart, feumaidh an rèiteachadh a bhith mar an ceudna anns a h-uile àite. Chan eil duine airson a dhèanamh le làimh. Mar sin, thathar a 'cleachdadh a h-uile seòrsa de sgriobtaichean, Ansible, siostaman cleachdadh.

Bidh Cartridge a’ riaghladh an rèiteachadh vshard fhèin, bidh e a’ dèanamh seo stèidhichte air a cheann fhèin rèiteachadh sgaoilte fhèin. Gu bunaiteach, is e faidhle YAML sìmplidh a th’ ann, agus tha leth-bhreac dheth air a stòradh anns a h-uile suidheachadh de Tarantool. Tha an sìmpleachadh na laighe anns an fhìrinn gu bheil am frèam fhèin a 'cumail sùil air a rèiteachadh agus a' dèanamh cinnteach gu bheil e mar an ceudna anns gach àite.

San dàrna àite, tha e a-rithist na chùis goireasachd. Chan eil gnothach sam bith aig an rèiteachadh vshard ri leasachadh loidsig gnìomhachais agus chan eil e a’ tarraing ach am prògramadair bhon obair. Nuair a bhios sinn a 'bruidhinn mu ailtireachd pròiseact, mar as trice bidh sinn a' bruidhinn mu phàirtean fa leth agus an eadar-obrachadh. Tha e ro thràth smaoineachadh mu bhith a’ sgaoileadh cruinneachadh airson 3 ionadan dàta.

Dh ’fhuasgail sinn na duilgheadasan sin ùine às deidh ùine, agus aig àm air choreigin chaidh againn air dòigh-obrach a leasachadh a leigeas leinn an obair leis an tagradh a dhèanamh nas sìmplidhe fad a bheatha: cruthachadh, leasachadh, deuchainn, CI / CD, cumail suas.

Tha Cartridge a’ toirt a-steach bun-bheachd àite airson gach pròiseas Tarantool. Is e dreuchdan am bun-bheachd a leigeas leis an leasaiche fòcas a chuir air sgrìobhadh còd. Faodar a h-uile dreuchd a tha ri fhaighinn sa phròiseact a ruith air aon eisimpleir de Tarantool, agus bidh seo gu leòr airson deuchainnean.

Prìomh fheartan Tarantool Cartridge:

  • orchestration cnuasachaidh fèin-ghluasadach;
  • leudachadh gnìomhachd tagraidh le dreuchdan ùra;
  • teamplaid tagraidh airson leasachadh agus cleachdadh;
  • sgoltadh fèin-ghluasadach a-staigh;
  • amalachadh le frèam deuchainn Luatest;
  • riaghladh brabhsair a’ cleachdadh WebUI agus API;
  • innealan pacaidh agus cleachdadh.

Hàlo a Shaoghail!

Chan urrainn dhomh feitheamh gus am frèam fhèin a shealltainn, agus mar sin fàgaidh sinn an sgeulachd mun ailtireachd airson nas fhaide air adhart, agus tòisichidh sinn sìmplidh. A’ gabhail ris gu bheil Tarantool fhèin air a chuir a-steach mu thràth, is e an aon rud a tha air fhàgail ri dhèanamh

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

Stàlaichidh an dà àithne seo na goireasan loidhne-àithne agus leigidh iad leat a’ chiad iarrtas agad a chruthachadh bhon teamplaid:

$ cartridge create --name myapp

Agus seo na gheibh sinn:

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/

Is e seo stòr git le "Hello, World!" tagradh. Feuchaidh sinn sa bhad ri ruith, às deidh dhuinn na eisimeileachd a chuir a-steach (a ’toirt a-steach am frèam fhèin):

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

Mar sin, tha aon nód againn den tagradh sharded san àm ri teachd a’ ruith. Faodaidh neach-laighe fiosrachail an eadar-aghaidh lìn fhosgladh sa bhad, cruinneachadh bho aon nód a rèiteachadh leis an luchag agus an toradh a mhealtainn, ach tha e ro thràth airson gàirdeachas a dhèanamh. Gu ruige seo, chan eil fios aig an tagradh ciamar a nì thu dad feumail, agus mar sin bruidhnidh mi mu chleachdadh nas fhaide air adhart, agus a-nis tha an t-àm ann còd a sgrìobhadh.

Leasachadh Iarrtas

Dìreach smaoinich, tha sinn a’ dealbhadh pròiseact a bu chòir dàta fhaighinn, a shàbhaladh agus aithisg a thogail uair san latha.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Tòisichidh sinn a 'tarraing an diagram agus cuiridh sinn trì pàirtean air: geata, stòradh agus clàr-ama. Tha sinn ag obair air ailtireachd. Leis gu bheil sinn a’ cleachdadh vshard mar stòradh, bidh sinn a’ cur vshard-router agus vshard-storage ris an sgeama. Chan fhaigh an geata no an clàr-ama gu dìreach an stòradh, tha router ann airson seo, chaidh a chruthachadh airson seo.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Chan eil an diagram seo fhathast a’ nochdadh gu ceart na bhios sinn a’ cruthachadh sa phròiseact, leis gu bheil na pàirtean a’ coimhead eas-chruthach. Feumaidh sinn fhathast faicinn mar a tha seo air a ro-mheasadh air an fhìor Tarantool - leig dhuinn na pàirtean againn a chuir còmhla le pròiseasan.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Chan eil e a’ dèanamh mòran ciall vshard-router agus geata a chumail ann an suidheachaidhean fa-leth. Carson a dh'fheumas sinn a dhol thairis air an lìonra a-rithist, ma tha seo mar-thà an urra ris an router? Feumaidh iad a bhith air an ruith taobh a-staigh an aon phròiseas. Is e sin, tha an dà gheata agus vshard.router.cfg air an tòiseachadh ann an aon phròiseas, agus leigidh iad leotha eadar-obrachadh gu h-ionadail.

Aig an ìre dealbhaidh, bha e goireasach obrachadh le trì pàirtean, ach mar leasaiche, fhad ‘s a bha mi a’ sgrìobhadh còd, chan eil mi airson smaoineachadh mu bhith a ’ruith trì eisimpleirean de Tarnatool. Feumaidh mi deuchainnean a ruith agus dèanamh cinnteach gun do sgrìobh mi geata gu ceart. No is dòcha gu bheil mi airson feart a thaisbeanadh dha mo cho-obraichean. Carson a bu chòir dhomh dragh a chur air trì suidheachaidhean a chleachdadh? Seo mar a rugadh bun-bheachd nan dreuchdan. Tha dreuchd na mhodal luash cunbhalach, le cearcall-beatha air a riaghladh le Cartridge. Anns an eisimpleir seo, tha ceithir dhiubh - geata, router, stòradh, clàr-ama. Is dòcha gu bheil barrachd ann am pròiseact eile. Faodar a h-uile dreuchd a ruith ann an aon phròiseas, agus bidh sin gu leòr.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Agus nuair a thig e gu cleachdadh gu àrd-ùrlar no cinneasachadh, sònraichidh sinn an seata dhleastanasan fhèin do gach pròiseas Tarantool a rèir comasan bathar-cruaidh:

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Stiùireadh topology

Feumar fiosrachadh mu far a bheil na dreuchdan a’ ruith a stòradh am badeigin. Agus tha an “àiteigin” seo na rèiteachadh sgaoilte, air an tug mi iomradh mu thràth gu h-àrd. Is e an rud as cudromaiche a th’ ann topology a’ bhraisle. Seo 3 buidhnean mac-samhail de 5 pròiseasan Tarantool:

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Chan eil sinn airson dàta a chall, agus mar sin bidh sinn a 'gabhail cùram de fhiosrachadh mu phròiseasan ruith. Bidh Cartridge a’ cumail sùil air an rèiteachadh le gealltanas dà-ìre. Cho luath ‘s a tha sinn airson an rèiteachadh ùrachadh, bidh e an toiseach a’ dèanamh cinnteach gu bheil a h-uile suidheachadh ri fhaighinn agus deiseil airson gabhail ris an rèiteachadh ùr. Às deidh sin, bidh an dàrna ìre a ’buntainn ris an config. Mar sin, eadhon ged nach eil aon leth-bhreac ri fhaighinn airson ùine, cha tachair dad dona. Cha bhith an rèiteachadh dìreach an sàs agus chì thu mearachd ro-làimh.

Anns an roinn topology cuideachd tha paramadair cho cudromach ri stiùiriche gach buidheann ath-riochdachadh. Mar as trice is e seo an eisimpleir air a bheilear a’ sgrìobhadh. Tha an còrr mar as trice air an leughadh a-mhàin, ged a dh’ fhaodadh eisgeachdan a bhith ann. Uaireannan chan eil eagal air luchd-leasachaidh gaisgeil mu chòmhstri agus faodaidh iad dàta a sgrìobhadh gu grunn mhac-samhail aig an aon àm, ach tha cuid de dh ’obraichean ann nach bu chòir, a dh’ aindeoin a h-uile càil, a dhèanamh dà uair. Airson seo tha comharra air ceannard.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Beatha dreuchdan

Gus am bi àite eas-chruthach ann an leithid de dh’ ailtireachd, feumaidh am frèam an riaghladh ann an dòigh air choireigin. Gu nàdarra, bidh riaghladh a ’tachairt gun a bhith ag ath-thòiseachadh pròiseas Tarantool. Tha 4 fios air ais airson dreuchdan a riaghladh. Canaidh Cartridge fhèin riutha a rèir na tha e air a sgrìobhadh anns an rèiteachadh sgaoilte, mar sin a’ cur an rèiteachaidh an sàs ann an dreuchdan sònraichte.

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

Tha gnìomh aig gach dreuchd init. Tha e air a ghairm aon uair an dara cuid nuair a tha dreuchd air a chomasachadh no nuair a thèid Tarantool ath-thòiseachadh. An sin tha e goireasach, mar eisimpleir, box.space.create a thòiseachadh, no faodaidh an clàr-ama beagan freumhag cùl-fhiosrachaidh a thòiseachadh a nì obair aig amannan sònraichte.

gnìomh singilte init 's dòcha nach eil gu leòr. Tha Cartridge a’ leigeil le dreuchdan brath a ghabhail air an rèiteachadh sgaoilte a bhios e a’ cleachdadh gus an topology a stòradh. Is urrainn dhuinn earrann ùr ainmeachadh san aon rèiteachadh agus criomag rèiteachaidh gnìomhachais a stòradh ann. Anns an eisimpleir agam, faodaidh seo a bhith na sgeama dàta, no roghainnean clàr-ama airson dreuchd a’ chlàr-ama.

Cluster a ' fòn validate_config и apply_config a h-uile uair a bhios an rèiteachadh sgaoilte ag atharrachadh. Nuair a thèid rèiteachadh a chuir an sàs le gealltanas dà-ìre, bidh an cruinneachadh a’ dèanamh cinnteach gu bheil gach dreuchd deiseil airson gabhail ris an rèiteachadh ùr seo agus ag aithris mearachd don neach-cleachdaidh ma tha sin riatanach. Nuair a dh'aontaich a h-uile duine gu bheil an rèiteachadh àbhaisteach, an uairsin an apply_config.

Tha dòigh aig dreuchdan cuideachd stopAn rud a tha a dhìth gus na feartan riatanach den dreuchd a ghlanadh. Ma chanas sinn nach eil feum air a’ chlàr-ama air an fhrithealaiche seo tuilleadh, faodaidh e stad a chuir air na freumhagan sin a thòisich e init.

Faodaidh dreuchdan eadar-obrachadh le chèile. Tha sinn cleachdte ri bhith a’ sgrìobhadh fiosan gnìomh ann an Lua, ach dh’ fhaodadh e tachairt nach eil àite sam bith a dh’ fheumas sinn sa phròiseas seo. Gus fiosan thairis air an lìonra a dhèanamh comasach, bidh sinn a’ cleachdadh modal cuideachaidh rpc (gairm modh-obrach iomallach), a tha stèidhichte air a’ bhogsa lìn àbhaisteach a chaidh a thogail a-steach do Tarantool. Faodaidh seo a bhith feumail ma tha, mar eisimpleir, do gheata ag iarraidh iarraidh gu dìreach air a’ chlàr-ama an obair a dhèanamh an-dràsta, seach a bhith a’ feitheamh latha.

Is e puing cudromach eile dèanamh cinnteach à fulangas sgàinidhean. Bidh Cartridge a’ cleachdadh protocol SWIM gus sùil a chumail air slàinte [4]. Ann an ùine ghoirid, bidh pròiseasan ag iomlaid “fathannan” ri chèile thairis air UDP - bidh gach pròiseas ag innse dha na nàbaidhean na naidheachdan as ùire, agus bidh iad a’ freagairt. Mura h-obann thàinig am freagairt, tha Tarantool a 'tòiseachadh a' creidsinn gu bheil rudeigin ceàrr, agus an dèidh greis bidh e ag aithris bàs agus a 'tòiseachadh ag innse don a h-uile duine mun naidheachd seo.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Stèidhichte air a 'phròtacal seo, bidh Cartridge a' cur air dòigh làimhseachadh teip fèin-ghluasadach. Bidh gach pròiseas a 'cumail sùil air an àrainneachd aige, agus ma stadas an stiùiriche gu h-obann a' freagairt, faodaidh an mac-samhail a dhreuchd a ghabhail thairis, agus bidh Cartridge a 'rèiteachadh nan dreuchdan ruith a rèir sin.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Feumaidh tu a bhith faiceallach an seo, oir faodaidh atharrachadh tric air ais is air adhart leantainn gu còmhstri dàta rè ath-riochdachadh. Chan fhiach tionndadh air fàilligeadh fèin-ghluasadach air thuaiream, gu dearbh. Feumaidh tu a bhith a 'tuigsinn gu soilleir dè a tha a' tachairt, agus dèan cinnteach nach tèid ath-riochdachadh a bhriseadh às deidh an stiùiriche ath-nuadhachadh agus an crùn a thilleadh thuige.

Bhon a h-uile rud gu h-àrd, is dòcha gum faigh thu faireachdainn gu bheil dreuchdan mar microservices. Ann an seagh, tha iad, a-mhàin mar mhodalan taobh a-staigh pròiseasan Tarantool. Ach tha grunn eadar-dhealachaidhean bunaiteach ann cuideachd. An toiseach, feumaidh a h-uile dreuchd pròiseict a bhith beò san aon bhun-chòd. Agus feumaidh a h-uile pròiseas Tarantool ruith bhon aon chòd-chòd gus nach bi iongnadh sam bith ann mar nuair a dh'fheuchas sinn ris a 'chlàr-ama a thòiseachadh, ach dìreach chan eil e ann. Cuideachd, cha bu chòir dhut eadar-dhealachaidhean a cheadachadh ann an dreachan còd, oir tha giùlan an t-siostaim ann an suidheachadh mar sin gu math duilich ro-innse agus dì-bhugachadh.

Eu-coltach ri Docker, chan urrainn dhuinn dìreach “ìomhaigh” de dhreuchd a ghabhail, a thoirt gu inneal eile, agus a ruith an sin. Chan eil na dreuchdan againn cho iomallach ri soithichean Docker. Cuideachd, chan urrainn dhuinn dà dhreuchd co-ionann a ruith air an aon eisimpleir. Tha dreuchd an dàrna cuid ann no nach eil, ann an seagh is e singilte a th’ ann. Agus san treas àite, taobh a-staigh na buidhne ath-riochdachadh gu lèir, feumaidh na dreuchdan a bhith mar an ceudna, oir air dhòigh eile bhiodh e gòrach - tha an dàta mar an ceudna, ach tha an rèiteachadh eadar-dhealaichte.

Innealan cur an sàs

Gheall mi sealltainn mar a bhios Cartridge a’ cuideachadh le bhith a’ cleachdadh thagraidhean. Gus beatha a dhèanamh nas fhasa do dhaoine eile, bidh am frèam a’ pacadh pacaidean RPM:

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

Anns a ’phacaid stàlaichte tha cha mhòr a h-uile dad a dh’ fheumas tu: an dà chuid an tagradh agus na h-eisimeileachdan lush stàlaichte. Bidh Tarantool cuideachd a 'tighinn chun an fhrithealaiche mar eisimeileachd air a' phacaid RPM, agus tha an t-seirbheis againn deiseil airson a chuir air bhog. Tha seo air a dhèanamh tro systemd, ach an toiseach feumaidh tu beagan rèiteachadh a sgrìobhadh. Aig a 'char as lugha, sònraich URI gach pròiseas. Tha trì gu leòr airson eisimpleir.

$ 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

Tha nuance inntinneach an seo. An àite a bhith a 'sònrachadh dìreach am port protocol dà-chànanach, bidh sinn a' sònrachadh seòladh poblach iomlan a 'phròiseis, a' gabhail a-steach an t-ainm aoigheachd. Tha seo riatanach gus am bi fios aig na nodan brabhsair mar a nì iad ceangal ri chèile. Is e droch bheachd a th’ ann 0.0.0.0 a chleachdadh mar an advertise_uri, bu chòir gur e an IP poblach a th’ ann, chan e an socaid ceangail. Às aonais, cha obraich dad, agus mar sin cha leig Cartridge leat nód a chuir air bhog le sanas_uri ceàrr.

A-nis gu bheil an rèiteachadh deiseil, faodaidh tu na pròiseasan a thòiseachadh. Leis nach eil an aonad systemd àbhaisteach a’ leigeil le barrachd air aon phròiseas tòiseachadh, tha tagraidhean air a’ Chartridge air an stàladh leis an fhear ris an canar. aonadan sa bhad a tha ag obair mar seo:

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

Anns an rèiteachadh, shònraich sinn am port HTTP air a bheil Cartridge a 'frithealadh an eadar-aghaidh lìn - 8080. Rachamaid thuige agus faic:

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Tha sinn a 'faicinn nach eil na pròiseasan, ged a tha iad a' ruith, fhathast air an rèiteachadh. Chan eil fios aig a’ chairt fhathast cò a bu chòir ath-riochdachadh leis cò agus nach urrainn dha co-dhùnadh a dhèanamh leis fhèin, agus mar sin tha e a’ feitheamh ri ar gnìomhan. Agus chan eil mòran roghainn againn: tha beatha buidheann ùr a’ tòiseachadh le rèiteachadh a’ chiad nód. An uairsin bidh sinn a 'cur an còrr ris a' bhuidheann, a 'sònrachadh dreuchdan dhaibh, agus aig an ìre seo faodar beachdachadh air an cleachdadh gu soirbheachail.

Thoir glainne den deoch as fheàrr leat agus gabh fois às deidh seachdain obrach fhada. Faodar an tagradh obrachadh.

Tarantool Cartridge: Lua backend sharding ann an trì loidhnichean

Builean

Agus dè mu dheidhinn na toraidhean? Feuch, cleachd, fàg fios air ais, tòisich tiogaidean air github.

iomraidhean

[1] Tarantool » 2.2 » Iomradh » Iomradh nan creagan » Modal vshard

[2] Mar a chuir sinn an gnìomh cridhe gnìomhachas tasgaidh Alfa-Bank stèidhichte air Tarantool

[3] Ailtireachd bileachaidh ginealach ùr: cruth-atharrachadh leis a’ ghluasad gu Tarantool

[4] SWIM - protocol togail brabhsair

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool / cartridge

Source: www.habr.com

Cuir beachd ann