Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Ao amin'ny Vondrona Mail.ru dia manana Tarantool isika - mpizara fampiharana ao amin'ny Lua izy io, izay mitambatra ho angon-drakitra (sa ny mifamadika amin'izany?). Haingana sy mangatsiatsiaka izany, saingy mbola tsy voafetra ny fahafahan'ny mpizara iray. Ny scaling mitsangana koa dia tsy fanafody, ka ny Tarantool dia manana fitaovana ho an'ny scaling horizontal - ny module vshard [1]. Izany dia ahafahanao manaparitaka angon-drakitra amin'ny mpizara maromaro, saingy tsy maintsy mitsambikina miaraka aminy ianao mba hananganana azy sy hametahana ny lojikan'ny orinasa.

Vaovao tsara: nanangona tifitra lehibe izahay (oh [2], [3]) ary namorona rafitra iray hafa izay hanatsotra tanteraka ny vahaolana amin'ity olana ity.

Tarantool Cartridge dia rafitra vaovao ho an'ny famolavolana rafitra zaraina sarotra. Mamela anao hifantoka amin'ny fanoratana lojikan'ny fandraharahana fa tsy hamaha ny olan'ny fotodrafitrasa. Eo ambanin'ny fanapahana dia holazaiko aminao ny fomba fiasan'ity rafitra ity sy ny fomba fanoratana serivisy zaraina amin'ny fampiasana azy.

Inona marina no olana?

Manana tarantula izahay, manana vshard - inona indray no tadiavinao?

Voalohany, resaka fanamorana izany. Ny configuration vshard dia amboarina amin'ny alalan'ny tabilao Lua. Mba hahafahan'ny rafitra mizara amin'ny dingana maro Tarantool miasa tsara dia tsy maintsy mitovy na aiza na aiza ny fanamafisam-peo. Tsy misy olona te hanao izany amin'ny tanana. Noho izany, ny karazana script rehetra, Ansible, ary rafitra fametrahana dia ampiasaina.

Ny Cartridge mihitsy no mitantana ny fanamafisana vshard, manao izany mifototra amin'ny azy fanazaran-tena manokana. Amin'ny ankapobeny dia rakitra YAML tsotra izy io, ny dika mitovy amin'izany dia voatahiry ao amin'ny ohatra Tarantool tsirairay. Ny fanatsorana dia ny rafitra mihitsy no manara-maso ny firafiny ary miantoka fa mitovy izy na aiza na aiza.

Faharoa, resaka fanamorana indray. Ny fanamafisana vshard dia tsy misy ifandraisany amin'ny fampivoarana ny lojika fandraharahana ary manelingelina ny programer amin'ny asany fotsiny. Rehefa miresaka momba ny maritrano amin'ny tetikasa iray isika, dia matetika miresaka momba ny singa tsirairay sy ny fifandraisany. Mbola aloha loatra ny hieritreretana momba ny fanodinkodinana kluster mankany amin'ny foibe data 3.

Namaha ireo olana ireo hatrany hatrany izahay, ary tamin'ny fotoana iray dia nahavita namolavola fomba fiasa izay nanatsotra ny fiasana tamin'ny fampiharana nandritra ny androm-piainany manontolo: famoronana, fampandrosoana, fitsapana, CI/CD, fikojakojana.

Ny Cartridge dia mampiditra ny foto-kevitry ny anjara andraikitra tsirairay isaky ny dingana Tarantool. Ny andraikitra dia hevitra iray ahafahan'ny mpamorona iray mifantoka amin'ny fanoratana kaody. Ny andraikitra rehetra misy ao amin'ny tetikasa dia azo atao amin'ny ohatra Tarantool iray, ary izany dia ho ampy ho an'ny fitsapana.

Ny endri-javatra lehibe amin'ny Tarantool Cartridge:

  • orkestra cluster mandeha ho azy;
  • fanitarana ny fiasan'ny fampiharana mampiasa andraikitra vaovao;
  • maodely fampiharana ho an'ny fampandrosoana sy ny fametrahana;
  • naorina-in automatique sharding;
  • fampidirana miaraka amin'ny rafitra fitiliana Luatest;
  • fitantanana cluster mampiasa WebUI sy API;
  • fitaovana famenoana sy fanaparitahana.

Hello World!

Tsy andriko ny hampiseho ny rafitra mihitsy, noho izany dia hamela ny tantara momba ny maritrano ho any aoriana isika ary hanomboka amin'ny zavatra tsotra. Raha mihevitra isika fa ny Tarantool dia efa napetraka, dia izay sisa tavela dia ny atao

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

Ireo baiko roa ireo dia hametraka ny fampandehanana baiko ary ahafahanao mamorona ny fampiharana voalohany amin'ny môdely:

$ cartridge create --name myapp

Ary izao no azonay:

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/

Ity dia tahiry git miaraka amin'ny "Hello, World!" fampiharana. Andeha hojerentsika avy hatrany izany, rehefa nametraka ny fiankinan-doha teo aloha (anisan'izany ny rafitra):

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

Noho izany, manana node iray mandeha ho an'ny fampiharana sharded ho avy isika. Ny laika tia karokaroka dia afaka manokatra avy hatrany ny seha-pifaneraserana amin'ny Internet, manamboatra andiana node iray miaraka amin'ny totozy ary mankafy ny vokatra, saingy aloha loatra ny mifaly. Hatreto, tsy afaka manao zavatra mahasoa ny fampiharana, ka holazaiko aminao ny momba ny fametrahana any aoriana, fa izao no fotoana hanoratana kaody.

Fampandrosoana fampiharana

Alaivo sary an-tsaina fotsiny, mamolavola tetikasa iray izay tsy maintsy mahazo angon-drakitra izahay, tehirizo ary manangana tatitra indray mandeha isan'andro.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Manomboka manao kisary isika ary mametraka singa telo eo aminy: vavahady, fitahirizana ary scheduler. Miasa bebe kokoa amin'ny architecture izahay. Koa satria mampiasa vshard ho fitahirizana isika, dia ampiana vshard-router sy vshard-storage amin'ny drafitra. Na ny vavahady na ny mpandrindra dia tsy hiditra mivantana amin'ny fitahirizana; izany no ilain'ny router, izany no namoronana azy.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Ity kisary ity dia mbola tsy maneho mazava tsara ny zavatra hatsanganay amin'ny tetikasa satria ny singa dia toa tsy misy dikany. Mbola mila mijery ny fomba handrafetana izany amin'ny tena Tarantool isika - andao hanambatra ny singantsika amin'ny dingana.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Tsy dia misy dikany firy ny fitazonana vshard-router sy vavahady amin'ny tranga samihafa. Nahoana isika no mila mi-surf amin'ny tambajotra indray raha toa ka efa andraikitry ny router izany? Tsy maintsy atao ao anatin'ny dingana mitovy ihany izy ireo. Izany hoe, ny vavahady sy ny vshard.router.cfg dia natomboka tamin'ny dingana iray, ary avelao izy ireo hifanerasera eo an-toerana.

Amin'ny sehatry ny famolavolana dia mety ny miasa miaraka amin'ny singa telo, fa izaho, amin'ny maha-mpamorona azy, raha manoratra ny kaody, dia tsy te hieritreritra momba ny fandefasana tranga telo amin'ny Tarnatool. Mila manao fitsapana aho ary manamarina fa tsara ny nanoratako vavahady. Na mety te hampiseho endri-javatra amin'ny mpiara-miasa amiko aho. Nahoana aho no tokony handalo amin'ny fanaparitahana kopia telo? Toy izany no nahaterahan'ny hevitra momba ny andraikitra. Ny anjara dia module luash mahazatra izay tantanin'ny Cartridge ny tsingerin'ny fiainany. Amin'ity ohatra ity dia misy efatra amin'izy ireo - vavahady, router, fitahirizana, scheduler. Mety hisy bebe kokoa amin'ny tetikasa hafa. Ny andraikitra rehetra dia azo atao amin'ny dingana iray, ary izany dia ho ampy.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Ary raha ny momba ny fametrahana amin'ny sehatra na famokarana, dia homentsika ny dingana tsirairay Tarantool ny andraikiny manokana miankina amin'ny fahaizan'ny hardware:

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Fitantanana topologie

Tsy maintsy tehirizina any amin'ny toerana iray ny fampahafantarana momba ny toerana misy ny andraikitra. Ary ity "any ho any" ity dia ny fanamafisam-peo zaraina, izay efa nolazaiko teo ambony. Ny zava-dehibe indrindra amin'izany dia ny topologie cluster. Ireto misy vondrona replication 3 amin'ny dingana 5 Tarantool:

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Tsy te-very data izahay, noho izany dia karakarainay amim-pitandremana ny fampahalalana momba ny fandehanana. Ny Cartridge dia manara-maso ny fanamafisana amin'ny alàlan'ny fanolorana dingana roa. Raha vantany vao te-hanavao ny fanamafisam-peo isika, dia manamarina aloha fa misy ny tranga rehetra ary vonona ny hanaiky ny fanitsiana vaovao. Aorian'io, ny dingana faharoa dia mampihatra ny config. Noho izany, na dia tsy hita vetivety aza ny kopia iray dia tsy hisy zavatra ratsy hitranga. Tsy hampiharina tsotra izao ny fanamafisana ary hahita hadisoana mialoha ianao.

Ao amin'ny fizarana topologie ihany koa, misy paramètre manan-danja toy ny mpitarika ny vondrona replication tsirairay. Matetika dia io no kopia noraketina an-tsoratra. Ny ambiny dia matetika vakiana fotsiny, na dia mety hisy aza ny maningana. Indraindray ireo mpamorona be herim-po dia tsy matahotra fifandirana ary afaka manoratra angon-drakitra amin'ny kopia maromaro mifanitsy, saingy misy ny hetsika sasany izay, na inona na inona, dia tsy tokony hatao indroa. Noho izany dia misy famantarana ny mpitarika.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Fiainan'ny andraikitra

Mba hisian'ny anjara birikiny amin'ny rafitra toy izany dia tsy maintsy mitantana azy ireo ny rafitra. Mazava ho azy, mitranga ny fanaraha-maso raha tsy manomboka ny dingana Tarantool. Misy antso 4 hitantana andraikitra. Ny Cartridge mihitsy no hiantso azy ireo miankina amin'ny zavatra voasoratra ao amin'ny fizarazarany, ka hampihatra ny fanitsiana amin'ny andraikitra manokana.

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

Samy manana ny asany ny andraikitra tsirairay init. Antsoina indray mandeha izy io na rehefa alefa ny anjara na rehefa averina indray ny Tarantool. Mety tsara any, ohatra, ny manomboka ny box.space.create, na ny mpandrindra dia afaka manomboka fibre ao ambadika izay hanao asa amin'ny elanelam-potoana sasany.

Asa iray init mety tsy ho ampy. Ny Cartridge dia ahafahan'ny andraikitry ny manararaotra ny fizarazarana ampiasainy hitahiry ny topolojia. Afaka manambara fizarana vaovao amin'ny fikajiana iray ihany isika ary mitahiry sombiny amin'ny firafitry ny fandraharahana ao anatiny. Amin'ny ohatra ataoko, mety ho schema angon-drakitra na fametahana fandaharam-potoana ho an'ny andraikitry ny mpandrindra.

Cluster antso validate_config и apply_config isaky ny miova ny configuration zaraina. Rehefa ampiharin'ny commit dingana roa ny configuration, dia manamarina ny cluster fa vonona ny hanaiky an'io fanitsiana vaovao io ny cluster ary, raha ilaina, dia mitatitra fahadisoana amin'ny mpampiasa. Rehefa eken'ny rehetra fa normal ny configuration, dia ny apply_config.

Misy fomba ihany koa ny asa stop, izay ilaina mba hanadiovana ny voka-dalao. Raha milaza isika fa tsy ilaina intsony ny fandaharam-potoana amin'ity mpizara ity, dia afaka manakana ireo fibre izay nanombohany azy init.

Afaka mifandray amin'ny tsirairay ny andraikitra. Efa zatra manoratra antso an-tariby amin'ny Lua izahay, saingy mety hitranga fa tsy manana ny anjara ilainay ny dingana iray. Mba hanamorana ny antso amin'ny tambajotra, dia mampiasa ny rpc (fiantsoana lavitr'ezaka) môdely fanampiny izahay, izay naorina tamin'ny alàlan'ny netbox mahazatra natsangana tao amin'ny Tarantool. Mety hahasoa izany raha toa ka te hangataka mivantana amin'ny mpandrindra hanao ny asa amin'izao fotoana izao ny vavahadinao, fa tsy hiandry andro iray.

Hevi-dehibe iray hafa dia ny fiantohana ny fahaleovan-tena. Ny Cartridge dia mampiasa ny protocol SWIM hanaraha-maso ny fahasalamana [4]. Raha fintinina, mifanakalo "tsaho" momba ny UDP ny fizotran-javatra—milaza amin'ny mpifanolo-bodirindrina aminy ny vaovao farany, ary mamaly izy ireo. Raha tsy tonga tampoka ny valiny, dia manomboka miahiahy i Tarantool fa misy zavatra tsy mety, ary rehefa afaka kelikely dia mitanisa ny fahafatesana ary manomboka milaza amin'ny olona rehetra manodidina ity vaovao ity.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Miorina amin'ity protocol ity, ny Cartridge dia mandamina ny fanodinana tsy fahombiazana mandeha ho azy. Ny dingana tsirairay dia manara-maso ny tontolo iainany, ary raha mijanona tsy mamaly tampoka ny mpitarika, dia afaka mandray an-tanana ny andraikiny ny dika mitovy, ary ny Cartridge dia manitsy ny anjara asany mifanaraka amin'izany.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Mila mitandrina eto ianao, satria mety hiteraka fifandirana amin'ny angon-drakitra mandritra ny replication ny fivezivezena matetika. Mazava ho azy, tsy tokony hamela ny failover mandeha ho azy amin'ny kisendrasendra ianao. Tokony ho azontsika tsara ny zava-mitranga ary ho azo antoka fa tsy ho tapaka ny kopia rehefa tafaverina amin'ny laoniny ny mpitarika ary haverina aminy ny satroboninahitra.

Avy amin'izany rehetra izany dia mety hahatsapa ianao fa mitovy amin'ny microservices ny andraikitra. Raha lazaina amin'ny teny hafa dia izany ihany izy ireo, toy ny modules ao anatin'ny fizotran'ny Tarantool. Saingy misy ihany koa ny fahasamihafana fototra maromaro. Voalohany, ny andraikitry ny tetikasa rehetra dia tsy maintsy miaina ao anatin'ny fototra fehezan-dalàna mitovy. Ary ny fizotran'ny Tarantool rehetra dia tokony halefa amin'ny fototry ny kaody mitovy, mba tsy hisian'ny tsy ampoizina toa an'ireo rehefa manandrana manomboka ny fandaharam-potoana isika, saingy tsy misy izany. Ary koa, tsy tokony hamela ny fahasamihafana amin'ny dikan-kaody, satria ny fitondran-tenan'ny rafitra amin'ny toe-javatra toy izany dia tena sarotra ny maminavina sy ny debug.

Tsy toa an'i Docker, tsy afaka mandray anjara "sary" fotsiny isika, ento any amin'ny milina hafa ary amboary eo. Tsy mitoka-monina toy ny fitoeran'entana Docker ny andraikitray. Ary koa, tsy afaka mitantana andraikitra roa mitovy amin'ny tranga iray isika. Ny anjara na misy na tsy misy; amin'ny lafiny iray, tokana izy io. Ary fahatelo, ny anjara dia tsy maintsy mitovy ao anatin'ny vondrona replication iray manontolo, satria raha tsy izany dia tsy mitombina - ny angon-drakitra dia mitovy, fa ny configuration dia hafa.

Fitaovana fanapariahana

Nampanantena aho fa hampiseho ny fomba anampian'ny Cartridge amin'ny fametrahana fampiharana. Mba hanamora ny fiainana ho an'ny hafa, ny rafitra dia mametraka fonosana RPM:

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

Ny fonosana napetraka dia misy saika ny zavatra rehetra ilainao: na ny fampiharana na ny fiankinan-doha napetraka. Ho tonga amin'ny mpizara ihany koa i Tarantool ho fiankinan'ny fonosana RPM, ary vonona ny hanomboka ny serivisy. Atao amin'ny alalan'ny systemd izany, fa mila manoratra configuration kely aloha ianao. Farafaharatsiny, mariho ny URI isaky ny dingana. Ampy ohatra ny telo.

$ 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

Misy nuance mahaliana eto. Raha tokony hilaza fotsiny ny seranan-tsambo protocol binary izahay, dia mamaritra ny adiresin'ny daholobe manontolo amin'ny dingana misy ny anaran'ny mpampiantrano. Ilaina izany mba hahafantaran'ireo nodes cluster ny fomba hifandraisana. Hevitra ratsy ny mampiasa 0.0.0.0 ho adiresy advertise_uri, tokony ho adiresy IP ivelany izany fa tsy fatorana socket. Raha tsy misy izany dia tsy hisy na inona na inona mandeha, ka ny Cartridge dia tsy hamela anao hametraka node amin'ny advertise_uri diso.

Ankehitriny rehefa vonona ny fanamafisana dia afaka manomboka ny dingana ianao. Satria ny rafitra systemd mahazatra dia tsy mamela dingana mihoatra ny iray hanomboka, ny fampiharana amin'ny Cartridge dia apetraka amin'ny antsoina hoe. unit instantiated izay miasa toy izao:

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

Ao amin'ny fanamafisana, dia nofaritana ny seranan-tsambo HTTP izay itondran'ny Cartridge ny interface interface - 8080. Andeha hojerentsika izany:

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

Hitantsika fa na dia mandeha aza ireo dingana ireo dia mbola tsy voarindra. Mbola tsy fantatr'ilay cartridge hoe iza no tokony haka tahaka an'iza ary tsy afaka mandray fanapahan-kevitra samirery, ka miandry ny zavatra ataontsika. Saingy tsy manana safidy firy izahay: ny fiainan'ny cluster vaovao dia manomboka amin'ny fanamafisana ny node voalohany. Avy eo dia ampidirintsika ao amin'ny cluster ny hafa, omeo andraikitra izy ireo, ary amin'izao fotoana izao dia azo heverina ho vita soa aman-tsara ny fametrahana.

Andao handatsaka vera amin'ny zava-pisotro tianao indrindra ary miala sasatra aorian'ny herinandro fiasana lava. Ny fampiharana dia azo ampiasaina.

Tarantool Cartridge: mizara roa ambadika Lua amin'ny andalana telo

vokatra

Inona no vokany? Andramo izany, ampiasao izany, avelao ny valiny, mamorona tapakila amin'ny Github.

soratra masina

[1] Tarantool » 2.2 » Reference » Reference rocks » Module vshard

[2] Ahoana ny fampiharana ny fototry ny orinasa fampiasam-bola Alfa-Bank mifototra amin'ny Tarantool

[3] Architecture faktiora taranaka vaovao: fanovana miaraka amin'ny fifindrana mankany Tarantool

[4] SWIM - protocole fananganana cluster

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

Source: www.habr.com

Add a comment