Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Ag Mail.ru Group tá Tarantool againn - is freastalaí iarratais é seo i Lua, a dhúbailt freisin mar bhunachar sonraí (nó vice versa?). Tá sé tapa agus fionnuar, ach níl cumais freastalaí amháin fós gan teorainn. Ní uile-íoc freisin é scálú ingearach, mar sin tá uirlisí ag Tarantool le haghaidh scálaithe cothrománach - an modúl vshard [1]. Ligeann sé duit sonraí a roinnt thar roinnt freastalaithe, ach caithfidh tú tinker leis chun iad a shocrú agus loighic an ghnó a cheangal.

Dea-scéala: tá roinnt seatanna móra bailithe againn (m.sh [2], [3]) agus chruthaigh sé creat eile a dhéanfaidh an réiteach ar an bhfadhb seo a shimpliú go suntasach.

Cartúis Tarantool Is creat nua é chun córais dáilte casta a fhorbairt. Ligeann sé duit díriú ar loighic gnó a scríobh in ionad fadhbanna bonneagair a réiteach. Faoin gearrtha inseoidh mé duit conas a oibríonn an creat seo agus conas seirbhísí dáilte a scríobh ag baint úsáide as.

Cad é go díreach an fhadhb?

Tá tarantula againn, tá vshard againn - cad eile a d'fhéadfadh a bheith uait?

Gcéad dul síos, tá sé ina ábhar áise. Tá an chumraíocht vshard cumraithe trí tháblaí Lua. Chun go n-oibreoidh córas dáilte de phróisis iolracha Tarantool i gceart, ní mór don chumraíocht a bheith mar an gcéanna i ngach áit. Níl aon duine ag iarraidh é seo a dhéanamh de láimh. Dá bhrí sin, úsáidtear gach cineál scripteanna, Insible, agus córais imlonnaithe.

Bainistíonn Cartús féin an chumraíocht vshard, déanann sé é seo bunaithe ar a cumraíocht dháilte féin. Go bunúsach is comhad simplí YAML é, a bhfuil cóip de stóráilte i ngach cás Tarantool. Is é an simpliú go ndéanann an creat féin monatóireacht ar a chumraíocht agus go gcinntíonn sé go bhfuil sé mar an gcéanna i ngach áit.

Ar an dara dul síos, is ábhar áise é arís. Níl baint ar bith ag cumraíocht vshard le forbairt loighic gnó agus ní dhéanann sé ach an ríomhchláraitheoir a dhíspreagadh óna chuid oibre. Nuair a phléimid ailtireacht tionscadail, is minic a labhraímid faoi chomhpháirteanna aonair agus a n-idirghníomhaíocht. Tá sé ró-luath smaoineamh ar chnuasach a rolladh amach go 3 ionad sonraí.

Réitíomar na fadhbanna seo arís agus arís eile, agus ag am éigin d’éirigh linn cur chuige a fhorbairt a shimpliú oibriú leis an bhfeidhmchlár ar feadh a shaolré ar fad: cruthú, forbairt, tástáil, CI/CD, cothabháil.

Tugann Cartús isteach an coincheap de ról do gach próiseas Tarantool. Is coincheap iad róil a ligeann d’fhorbróir díriú ar chód a scríobh. Is féidir gach ról atá ar fáil sa tionscadal a rith ar shampla amháin de chuid Tarantool, agus is leor é seo le haghaidh tástálacha.

Príomhghnéithe Cartús Tarantool:

  • ceolfhoireann cnuasach uathoibrithe;
  • feidhmiúlacht an fheidhmchláir a leathnú trí róil nua a úsáid;
  • teimpléad iarratais le haghaidh forbartha agus imscartha;
  • screadáil uathoibríoch ionsuite;
  • comhtháthú le creat tástála Luatest;
  • bainistíocht braisle ag baint úsáide as WebUI agus API;
  • uirlisí pacáistithe agus imscartha.

Dia duit, Domhanda!

Ní féidir liom fanacht leis an gcreat féin a thaispeáint, mar sin fágfaimid an scéal faoin ailtireacht le haghaidh níos déanaí agus cuirfimid tús le rud éigin simplí. Má ghlacaimid leis go bhfuil Tarantool féin suiteáilte cheana féin, níl le déanamh fós

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

Suiteálfaidh an dá ordú seo na fóntais orduithe agus ligfidh siad duit do chéad iarratas a chruthú ón teimpléad:

$ cartridge create --name myapp

Agus seo a fhaigheann muid:

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 stór git é seo le "Hello, World!" iarratas. Déanaimis iarracht é a rith ar an bpointe boise, tar éis na spleáchais a shuiteáil roimhe seo (lena n-áirítear an creat féin):

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

Mar sin, tá nód amháin againn ag rith don fheidhmchlár bearrtha amach anseo. Is féidir le layman fiosrach an comhéadan gréasáin a oscailt láithreach, braisle de nód amháin a chumrú leis an luch agus taitneamh a bhaint as an toradh, ach tá sé ró-luath chun lúcháir a dhéanamh. Go dtí seo, ní féidir leis an bhfeidhmchlár aon rud úsáideach a dhéanamh, mar sin inseoidh mé duit faoi imscaradh níos déanaí, ach anois tá sé in am cód a scríobh.

Forbairt Feidhmchláir

Just a shamhlú, tá tionscadal á dhearadh againn nach mór sonraí a fháil, é a shábháil agus tuarascáil a thógáil uair amháin sa lá.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Tosaímid ag tarraingt léaráide agus cuirimid trí chomhpháirt air: geata, stóráil agus sceidealóir. Táimid ag obair ar an ailtireacht a thuilleadh. Ós rud é go n-úsáidimid vshard mar stóráil, cuirimid vshard-ródaire agus vshard-storage leis an scéim. Ní bheidh rochtain dhíreach ag an ngeata ná ag an sceidealóir ar an stóras; is chuige sin atá an ródaire, is chuige sin a cruthaíodh é.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Ní léiríonn an léaráid seo go díreach cad a bheidh á thógáil againn sa tionscadal mar go bhfuil cuma teibí ar na comhpháirteanna. Ní mór dúinn a fheiceáil fós conas a dhéanfar é seo a theilgean ar an bhfíor-Tarantool - déanaimis ár gcomhpháirteanna a ghrúpáil de réir próisis.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Is beag an pointe atá ann vshard-ródaire agus geata a choinneáil ar chásanna ar leith. Cén fáth a gcaithfimid scimeáil ar an líonra arís má tá sé seo mar fhreagracht ar an ródaire cheana féin? Ní mór iad a reáchtáil laistigh den phróiseas céanna. Is é sin, tá an dá gheata agus vshard.router.cfg tosaithe in aon phróiseas amháin, agus lig dóibh idirghníomhú go háitiúil.

Ag an gcéim deartha, bhí sé áisiúil oibriú le trí chomhpháirt, ach níl mé, mar fhorbróir, agus an cód á scríobh, ag iarraidh smaoineamh ar thrí chás de Tarnatool a sheoladh. Ní mór dom tástálacha a rith agus seiceáil gur scríobh mé geata i gceart. Nó b'fhéidir gur mhaith liom gné a léiriú do mo chomhghleacaithe. Cén fáth ar chóir dom dul tríd an stró trí chóip a imscaradh? Seo mar a rugadh coincheap na róil. Is modúl lush rialta é ról a bhfuil a shaolré á bhainistiú ag Cartridge. Sa sampla seo tá ceithre cinn acu - geata, ródaire, stóráil, sceidealóir. Seans go mbeidh níos mó i dtionscadal eile. Is féidir gach ról a reáchtáil i bpróiseas amháin, agus beidh sé seo go leor.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Agus nuair a thagann sé chun imscaradh chuig stáitse nó táirgeadh, ansin sannfaimid a shraith róil féin do gach próiseas Tarantool ag brath ar na cumais crua-earraí:

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Bainistíocht topology

Ní mór faisnéis faoi na róil atá ar siúl a stóráil áit éigin. Agus is é an “áit éigin” seo an chumraíocht dháilte, a luaigh mé thuas cheana. Is é an rud is tábhachtaí faoi ná topology an bhraisle. Seo 3 ghrúpa macasamhlaithe de 5 phróiseas Tarantool:

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Nílimid ag iarraidh sonraí a chailleadh, mar sin caithimid go cúramach le faisnéis faoi phróisis reatha. Coinníonn Cartús súil ar an gcumraíocht ag baint úsáide as tiomantas dhá chéim. Nuair is mian linn an chumraíocht a nuashonrú, seiceálann sé ar dtús go bhfuil gach cás ar fáil agus réidh chun glacadh leis an gcumraíocht nua. Tar éis seo, cuireann an dara céim an config i bhfeidhm. Mar sin, fiú mura bhfuil cóip amháin ar fáil go sealadach, ní tharlóidh aon rud dona. Go simplí ní chuirfear an chumraíocht i bhfeidhm agus feicfidh tú earráid roimh ré.

Chomh maith leis sin sa chuid topology, léirítear paraiméadar tábhachtach mar cheannaire gach grúpa macasamhlaithe. De ghnáth is é seo an chóip atá á thaifeadadh. Is minic a bhíonn an chuid eile inléite amháin, cé go bhféadfadh eisceachtaí a bheith ann. Uaireanta ní bhíonn eagla ar fhorbróirí cróga roimh choinbhleachtaí agus is féidir leo sonraí a scríobh chuig roinnt macasamhla ag an am céanna, ach tá roinnt oibríochtaí, is cuma cén, nár chóir a dhéanamh faoi dhó. Chun seo tá comhartha ceannaire.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Saol na róil

Le go mbeidh ról teibí in ailtireacht den sórt sin, ní mór don chreat iad a bhainistiú ar bhealach éigin. Ar ndóigh, tarlaíonn rialú gan an próiseas Tarantool a atosú. Tá 4 ghlaoch ar ais chun róil a bhainistiú. Glaofaidh Cartús féin orthu ag brath ar an méid atá scríofa ina chumraíocht dáilte, rud a chuirfidh an chumraíocht i bhfeidhm ar róil ar leith.

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

Tá feidhm ag gach ról init. Tugtar uair amháin é nuair a bhíonn an ról cumasaithe nó nuair a atosaítear Tarantool. Tá sé áisiúil ansin, mar shampla, box.space.create a thosú, nó is féidir leis an sceidealóir roinnt snáithín cúlra a sheoladh a dhéanfaidh obair ag eatraimh áirithe ama.

Feidhm amháin init b'fhéidir nach leor. Ligeann Cartús do róil leas a bhaint as an gcumraíocht dháilte a úsáideann sé chun an topology a stóráil. Is féidir linn alt nua a dhearbhú sa chumraíocht chéanna agus blúire den chumraíocht ghnó a stóráil ann. I mo shampla, d'fhéadfadh sé seo a bheith ina scéimre sonraí nó socruithe sceidil don ról sceidealóra.

Glaonna braisle validate_config и apply_config gach uair a athraíonn an chumraíocht dáilte. Nuair a chuirtear cumraíocht i bhfeidhm trí thiomantas dhá phas, seiceann an braisle go bhfuil gach ról réidh chun glacadh leis an gcumraíocht nua seo agus, más gá, tuairiscíonn sé earráid don úsáideoir. Nuair a aontaíonn gach duine go bhfuil an chumraíocht gnáth, ansin an apply_config.

Chomh maith leis sin tá róil modh stop, atá ag teastáil chun aschur an róil a ghlanadh. Má deirimid nach bhfuil gá le sceidealóir ar an bhfreastalaí seo a thuilleadh, féadfaidh sé stop a chur leis na snáithíní sin a thosaigh sé init.

Is féidir le róil idirghníomhú lena chéile. Táimid cleachta le glaonna feidhm a scríobh i Lua, ach d'fhéadfadh sé tarlú nach bhfuil an ról atá ag teastáil uainn ag próiseas áirithe. Chun glaonna thar an líonra a éascú, bainimid úsáid as an modúl cúnta rpc (glaoch ar nós imeachta iargúlta), atá bunaithe ar an mbosca glan caighdeánach a tógadh isteach i Tarantool. Féadfaidh sé seo a bheith úsáideach, mar shampla, más mian le do gheata iarraidh go díreach ar an sceidealóir an jab a dhéanamh faoi láthair, seachas fanacht lá.

Pointe tábhachtach eile ná caoinfhulaingt locht a chinntiú. Úsáideann Cartús an prótacal SWIM chun monatóireacht a dhéanamh ar shláinte [4]. I mbeagán focal, malartaíonn próisis “ráflaí” lena chéile thar UDP – insíonn gach próiseas an nuacht is déanaí dá chomharsana, agus freagraíonn siad. Más rud é go tobann nach dtagann an freagra, tosaíonn Tarantool ag amhras go bhfuil rud éigin mícheart, agus tar éis tamaill déanann sé aithris ar bhás agus tosaíonn sé ag insint do gach duine faoin nuacht seo.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Bunaithe ar an bprótacal seo, eagraíonn Cartús próiseáil teip uathoibríoch. Déanann gach próiseas monatóireacht ar a dtimpeallacht, agus má stopann an ceannaire freagra a thabhairt go tobann, is féidir leis an macasamhail a ról a ghlacadh, agus socraíonn Cartús na róil reatha dá réir.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Ní mór duit a bheith cúramach anseo, mar is féidir coinbhleachtaí sonraí a bheith mar thoradh ar aistriú go minic anonn is anall le linn macasamhlú. Ar ndóigh, níor cheart duit teip uathoibríoch a chumasú go randamach. Ní mór dúinn a thuiscint go soiléir cad atá ag tarlú agus a bheith cinnte nach dtiocfaidh deireadh leis an macasamhlú tar éis don cheannaire a chur ar ais agus an choróin a thabhairt ar ais dó.

As seo go léir, b'fhéidir go bhfaighidh tú an mothú go bhfuil róil cosúil le microservices. Ar bhealach, níl iontu ach sin, ach amháin mar mhodúil taobh istigh de phróisis Tarantool. Ach tá roinnt difríochtaí bunúsacha ann freisin. Ar an gcéad dul síos, ní mór go mbeadh an bonn cód céanna ag gach ról tionscadail. Agus ba cheart gach próiseas Tarantool a sheoladh ón mbonn cód céanna, ionas nach mbeidh aon iontas cosúil leis na cinn sin nuair a dhéanaimid iarracht an sceidealóir a thúsú, ach níl sé ann. Chomh maith leis sin, níor cheart duit difríochtaí i leaganacha cód a cheadú, toisc go bhfuil iompar an chórais i gcás den sórt sin an-deacair a thuar agus a dhífhabhtú.

Murab ionann agus Docker, ní féidir linn "íomhá" róil a ghlacadh, é a thógáil go meaisín eile agus é a rith ansin. Níl ár róil chomh scoite amach le coimeádáin Docker. Chomh maith leis sin, ní féidir linn dhá ról chomhionanna a rith ar chás amháin. Tá ról ann nó nach bhfuil; sa chiall, is aontún é. Agus ar an tríú dul síos, ní mór na róil a bheith mar an gcéanna laistigh den ghrúpa macasamhlú iomlán, mar gheall ar shlí eile bheadh ​​​​sé áiféiseach - tá na sonraí mar an gcéanna, ach tá an chumraíocht difriúil.

Uirlisí imscaradh

Gheall mé go dtaispeánfainn conas a chuidíonn Cartús le feidhmchláir a imscaradh. Chun an saol a dhéanamh níos éasca do dhaoine eile, déanann an creat pacáistí RPM:

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

Tá beagnach gach rud atá uait sa phacáiste suiteáilte: an t-iarratas agus na spleáchais suiteáilte araon. Tiocfaidh Tarantool ar an bhfreastalaí freisin mar spleáchas ar an bpacáiste RPM, agus tá ár seirbhís réidh le seoladh. Déantar é seo trí systemd, ach ar dtús ní mór duit cumraíocht beag a scríobh. Ar a laghad, sonraigh URI gach próiseas. Is leor triúr mar shampla.

$ 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

Tá nuance suimiúil anseo. In ionad an port prótacal dénártha a shonrú, sonraímid seoladh poiblí iomlán an phróisis lena n-áirítear an t-óstainm. Tá sé seo riachtanach ionas go mbeidh a fhios ag na nóid bhraisle conas a nascadh lena chéile. Is droch-smaoineamh é 0.0.0.0 a úsáid mar an seoladh advertise_uri; ba cheart gur seoladh IP seachtrach a bheadh ​​ann, ní ceangal soicéad. Gan é, ní oibreoidh aon rud, mar sin ní ligfidh Cartús duit nód a sheoladh leis an advertise_uri mícheart.

Anois go bhfuil an chumraíocht réidh, is féidir leat na próisis a thosú. Ós rud é nach gceadaíonn aonad córasach rialta níos mó ná próiseas amháin a thosú, tá feidhmchláir ar an gCartús suiteáilte ag an rud ar a dtugtar. aonaid mheandarach a oibríonn mar seo:

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

Sa chumraíocht, shonraigh muid an calafort HTTP ar a bhfreastalaíonn Cartús an comhéadan gréasáin - 8080. A ligean ar dul dó agus a chur le breathnú:

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Feicimid, cé go bhfuil na próisis ar siúl, nach bhfuil siad cumraithe fós. Níl a fhios ag an gcartús fós cé ba cheart a mhacasamhlú cé leis agus ní féidir leis cinneadh a dhéanamh as a stuaim féin, agus mar sin tá sé ag fanacht lenár ngníomhartha. Ach níl mórán rogha againn: tosaíonn saol braisle nua le cumraíocht an chéad nód. Ansin cuirfimid na cinn eile leis an mbraisle, sannfaimid róil dóibh, agus ag an bpointe seo is féidir a mheas go bhfuil an t-imscaradh críochnaithe go rathúil.

Déanaimis gloine de do dheoch is fearr leat a dhoirteadh agus scíth a ligean tar éis seachtain fhada oibre. Is féidir an t-iarratas a úsáid.

Cartús Tarantool: Inneall Lua a roinnt i dtrí líne

Torthaí

Cad iad na torthaí? Bain triail as, bain úsáid as, fág aiseolas, cruthaigh ticéid ar Github.

tagairtí

[1] Tarantool » 2.2 » Tagairt » Tagairt carraigeacha » Modúl vshard

[2] Mar a chuireamar croílár ghnó infheistíochta Alfa-Bank i bhfeidhm bunaithe ar Tarantool

[3] Ailtireacht bhilleála ghlúin nua: claochlú leis an aistriú go Tarantool

[4] SWIM - prótacal tógála braisle

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartús

Foinse: will.com

Add a comment