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
Vaovao tsara: nanangona tifitra lehibe izahay (oh
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.
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.
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.
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.
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:
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:
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.
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
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.
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:
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.
vokatra
Inona no vokany? Andramo izany, ampiasao izany, avelao ny valiny, mamorona tapakila amin'ny Github.
soratra masina
[1]
Source: www.habr.com