Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Sehlopheng sa Mail.ru re na le Tarantool - ena ke seva sa kopo ho Lua, eo hape e habeli e le database (kapa ka tsela e fapaneng?). E potlakile ebile e pholile, empa bokhoni ba seva e le 'ngoe bo ntse bo se na moeli. Thepa e otlolohileng le eona ha se panacea, ka hona, Tarantool e na le lisebelisoa tsa ho theola sekala se otlolohileng - module ea vshard. [1]. E u lumella ho arola data ho li-server tse 'maloa, empa u tlameha ho ikamahanya le eona ho e theha le ho hokela mohopolo oa khoebo.

Litaba tse monate: re bokelletse litšoantšo tse kholo (mohlala [2], [3]) mme a theha moralo o mong o tla nolofatsa haholo tharollo bothateng bona.

Cartridge ea Tarantool ke moralo o mocha oa ho theha litsamaiso tse rarahaneng tse ajoang. E u lumella ho tsepamisa maikutlo ho ngoleng lintlha tsa khoebo ho e-na le ho rarolla mathata a motheo. Ka tlase ho sehiloeng ke tla u bolella hore na moralo ona o sebetsa joang le mokhoa oa ho ngola litšebeletso tse abuoang u li sebelisa.

Hantle-ntle bothata ke bofe?

Re na le tarantula, re na le vshard - ke eng hape eo u ka e batlang?

Taba ea pele, ke taba ea boiketlo. Sebopeho sa vshard se hlophisitsoe ka litafole tsa Lua. E le hore tsamaiso e ajoang ea mekhoa e mengata ea Tarantool e sebetse ka nepo, tlhophiso e tlameha ho tšoana hohle. Ha ho motho ea batlang ho etsa sena ka letsoho. Ka hona, ho sebelisoa mefuta eohle ea lingoloa, Ansible, le deployment system.

Cartridge ka boeona e laola tlhophiso ea vshard, e etsa sena ho latela eona tlhophiso ea hau e ajoang. Ha e le hantle ke faele e bonolo ea YAML, eo kopi ea eona e bolokiloeng ketsahalong e 'ngoe le e 'ngoe ea Tarantool. Ho nolofatsa ke hore moralo ka boeona o hlokomela tlhophiso ea ona mme o netefatsa hore o tšoana hohle.

Ea bobeli, ke taba ea boiketlo hape. Sebopeho sa vshard ha se amane le nts'etsopele ea mohopolo oa khoebo mme se sitisa moqapi oa lenaneo mosebetsing oa hae feela. Ha re bua ka meralo ea morero, hangata re bua ka likarolo tsa motho ka mong le tšebelisano ea tsona. Ho sa le qalong haholo ho nahana ka ho tsamaisa sehlopha ho litsi tse 3 tsa data.

Re rarolle mathata ana khafetsa, 'me ka nako e' ngoe re khonne ho hlahisa mokhoa o nolofalitseng ho sebetsa le kopo ho pholletsa le nako eohle ea bophelo ba eona: pōpo, nts'etsopele, tlhahlobo, CI / CD, tlhokomelo.

Cartridge e hlahisa mohopolo oa karolo bakeng sa ts'ebetso e 'ngoe le e' ngoe ea Tarantool. Likarolo ke mohopolo o lumellang moqapi ho tsepamisa maikutlo ho khoutu ea ho ngola. Likarolo tsohle tse teng morerong li ka etsoa ketsahalong e le 'ngoe ea Tarantool,' me sena se tla lekana bakeng sa liteko.

Lintlha tsa bohlokoa tsa Tarantool Cartridge:

  • 'mino oa lihlopha o ikemetseng;
  • ho ntlafatsa ts'ebetso ea ts'ebeliso ho sebelisa likarolo tse ncha;
  • template ea kopo bakeng sa nts'etsopele le ho tsamaisoa;
  • sharding e hahiloeng ka ho iketsa;
  • kopanyo le moralo oa liteko oa Luatest;
  • tsamaiso ea lihlopha tse sebelisang WebUI le API;
  • lisebelisoa tsa ho paka le ho tsamaisa.

Lefatše Lumela!

Ke sitoa ho emela ho bontša moralo ka boeona, kahoo re tla tlohela pale e mabapi le meralo bakeng sa hamorao mme re qale ka ntho e bonolo. Haeba re nka hore Tarantool ka boeona e se e kentsoe, se setseng ke ho se etsa

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

Litaelo tsena tse peli li tla kenya lisebelisoa tsa mohala oa taelo mme li u lumelle ho etsa kopo ea hau ea pele ho tsoa template:

$ cartridge create --name myapp

'Me sena ke seo re se fumanang:

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/

Ena ke polokelo ea git e nang le "Hello, World" e seng e lokisitsoe! kopo. Ha re leke ho e tsamaisa hang-hang, re kentse litšepe pele (ho kenyeletsoa le moralo ka boeona):

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

Kahoo, re na le node e le 'ngoe e sebetsang bakeng sa ts'ebeliso e sharded nakong e tlang. Motho ea hlokang tsebo a ka bula marang-rang hang-hang, a hlophisa sehlopha sa node e le 'ngoe ka toeba mme a natefeloa ke sephetho, empa e sa le hoseng haholo hore a ka thaba. Ho fihlela joale, kopo e ke ke ea etsa letho le molemo, kahoo ke tla u bolella ka ho tsamaisoa hamorao, empa joale ke nako ea ho ngola khoutu.

Ntlafatso ea Kopo

Ak'u nahane feela, re ntse re rala morero o tlamehang ho amohela data, ho e boloka le ho etsa tlaleho hang ka letsatsi.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Re qala ho taka setšoantšo ebe re beha likarolo tse tharo ho eona: heke, polokelo le kemiso. Re ntse re sebetsa ka meralo ho ea pele. Kaha re sebelisa vshard joalo ka polokelo, re eketsa vshard-router le vshard-storage ho leano. Ha ho heke kapa kemiso e tla fihlella ka kotloloho polokelong; ke seo router e leng sona, ke seo e se etselitsoeng.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Setšoantšo sena se ntse se sa emele hantle seo re tla beng re se aha morerong hobane likaroloana li shebahala li sa hlaka. Re ntse re hloka ho bona hore na sena se tla hlahisoa joang ho Tarantool ea 'nete - ha re hlophise likarolo tsa rona ka ts'ebetso.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Ha ho na ntlha ea ho boloka vshard-router le heke maemong a fapaneng. Ke hobane'ng ha re hloka ho phenya marang-rang hape haeba sena e se e le boikarabelo ba router? Li tlameha ho tsamaisoa ka mokhoa o ts'oanang. Ke hore, heke le vshard.router.cfg li qalisoa ka mokhoa o le mong, 'me li lumelle hore li sebelisane sebakeng sa heno.

Sethaleng sa moralo, ho ne ho loketse ho sebetsa ka likarolo tse tharo, empa 'na, joalo ka moqapi, ha ke ntse ke ngola khoutu, ha ke batle ho nahana ka ho qala mehlala e meraro ea Tarnatool. Ke hloka ho etsa liteko le ho hlahloba hore na ke ngotse gateway ka nepo. Kapa mohlomong ke batla ho hlahisa karolo ho basebetsi-'moho le 'na. Ke hobane'ng ha ke lokela ho feta har'a mathata a ho tsamaisa likopi tse tharo? Ena ke tsela eo khopolo ea likarolo e hlahileng ka eona. Karolo ke module ea kamehla ea luash eo potoloho ea bophelo e laoloang ke Cartridge. Mohlala ona ho na le tse 'nè tsa tsona - heke, router, polokelo, scheduler. Ho ka ba le tse ling morerong o mong. Likarolo tsohle li ka tsamaisoa ka mokhoa o le mong, 'me sena se tla lekana.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

'Me ha ho tluoa tabeng ea ho romelloa sethaleng kapa tlhahiso, joale re tla abela ts'ebetso e' ngoe le e 'ngoe ea Tarantool sete ea eona ea likarolo ho latela bokhoni ba hardware:

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Tsamaiso ea thuto-thuto

Lintlha tse mabapi le hore na ke mesebetsi efe e sebetsang li tlameha ho bolokoa kae-kae. 'Me sena "kae-kae" ke tlhophiso e ajoang, eo ke seng ke e boletse ka holimo. Ntho ea bohlokoa ka ho fetisisa ke topology ea lihlopha. Mona ke lihlopha tse 3 tsa ho ikatisa tsa lits'ebetso tse 5 tsa Tarantool:

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Ha re batle ho lahleheloa ke data, kahoo re tšoara tlhahisoleseling ka mokhoa o hlokolosi. Cartridge e boloka tlaleho ea tlhophiso e sebelisa boitlamo ba mekhahlelo e 'meli. Hang ha re batla ho nchafatsa tlhophiso, e qala ka ho hlahloba hore na maemo ohle a teng 'me a ikemiselitse ho amohela tlhophiso e ncha. Ka mor'a sena, karolo ea bobeli e sebetsa config. Kahoo, le haeba kopi e le ’ngoe e ka bonahala e sa fumanehe ka nakoana, ha ho letho le lebe le tla etsahala. Tlhophiso e ke ke ea sebelisoa 'me u tla bona phoso esale pele.

Hape karolong ea topology, parameter ea bohlokoa joalo ka moetapele oa sehlopha se seng le se seng sa ho ikatisa ho bontšitsoe. Hangata sena ke kopi e ntseng e rekotoa. Tse ling hangata li baloa feela, leha ho ka ba le mekhelo. Ka linako tse ling bahlahisi ba sebete ha ba tšabe likhohlano 'me ba ka ngolla lintlha ho likopi tse' maloa ka mokhoa o ts'oanang, empa ho na le ts'ebetso eo, ho sa tsotelehe, e sa lokelang ho etsoa habeli. Bakeng sa sena ho na le pontšo ea moetapele.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Bophelo ba likarolo

Hore karolo e sa bonahaleng e be teng moahong o joalo, moralo o tlameha ho o laola ka tsela e itseng. Ka tlhaho, taolo e etsahala ntle le ho qala ts'ebetso ea Tarantool hape. Ho na le li-callback tse 4 ho laola likarolo. Cartridge ka boeona e tla li bitsa ho latela se ngotsoeng ho tlhophiso ea eona e abuoang, ka hona e sebelisa tlhophiso mesebetsing e itseng.

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

Karolo ka 'ngoe e na le mosebetsi init. E bitsoa hang ha karolo e nolofalitsoe kapa ha Tarantool e qala hape. Ho bonolo moo, ho etsa mohlala, ho qala box.space.create, kapa mohlophisi a ka hlahisa fiber e itseng e tla etsa mosebetsi ka linako tse itseng.

Mosebetsi o le mong init mohlomong ha ea lekana. Cartridge e lumella likarolo ho nka monyetla oa tlhophiso e ajoang eo e e sebelisang ho boloka topology. Re ka phatlalatsa karolo e ncha ka tlhophiso e tšoanang mme ra boloka sekhechana sa tlhophiso ea khoebo ho eona. Mohlala oa ka, sena e ka ba schema ea data kapa litlhophiso tsa kemiso bakeng sa karolo ea kemiso.

Mehala ea sehlopha validate_config и apply_config nako le nako ha tlhophiso e ajoang e fetoha. Ha tlhophiso e sebelisoa ke boitlamo ba mekhahlelo e 'meli, sehlopha se hlahloba hore na karolo e' ngoe le e 'ngoe e ikemiselitse ho amohela tlhophiso ena e ncha, 'me, ha ho hlokahala, e tlalehela mosebelisi phoso. Ha bohle ba lumela hore tlhophiso e tloaelehile, joale ho apply_config.

Hape likarolo li na le mokhoa stop, e hlokahalang ho hloekisa sephetho sa karolo. Haeba re re scheduler ha e sa hlokahala ho seva sena, e ka emisa likhoele tseo e qalileng ho li sebelisa init.

Likarolo li ka sebelisana hammoho. Re tloaetse ho ngola mehala ea ts'ebetso ho Lua, empa ho ka etsahala hore ts'ebetso e fanoeng ha e na karolo eo re e hlokang. Ho tsamaisa mehala ka marang-rang, re sebelisa rpc (remote process call) mojule oa mothusi, o hahiloeng motheong oa lebokose le tloaelehileng le hahiloeng ho Tarantool. Sena se ka ba molemo haeba, mohlala, heke ea hau e batla ho kopa mohlophisi ka kotloloho ho etsa mosebetsi hona joale, ho fapana le ho ema letsatsi.

Ntlha e 'ngoe ea bohlokoa ke ho netefatsa mamello ea liphoso. Cartridge e sebelisa protocol ea SWIM ho beha leihlo bophelo bo botle [4]. Ka bokhutšoanyane, lits'ebetso li fapanyetsana "menyenyetsi" ka UDP-ts'ebetso e 'ngoe le e' ngoe e bolella baahelani ba eona litaba tsa morao-rao, 'me ba arabela. Haeba ka tšohanyetso karabo e sa tle, Tarantool e qala ho belaela hore ho na le ho hong ho phoso, 'me ka mor'a nakoana e pheta lefu' me e qala ho bolella bohle ba potolohileng litaba tsena.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Ho ipapisitsoe le protocol ena, Cartridge e hlophisa ts'ebetso ea ho hloleha ka boits'oaro. Ts'ebetso e 'ngoe le e' ngoe e beha leihlo tikoloho ea eona, 'me haeba moetapele a emisa ho araba ka tšohanyetso, setšoantšo se ka nka karolo ea sona,' me Cartridge e hlophisa likarolo tse sebetsang ka nepo.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

U hloka ho ba hlokolosi mona, hobane ho fetoha khafetsa ho ea pele le morao ho ka baka likhohlano tsa data nakong ea ho pheta-pheta. Ha e le hantle, ha ua lokela ho lumella ho hlōleha ha othomathike ka tšohanyetso. Re tlameha ho utloisisa ka ho hlaka se etsahalang 'me re be le bonnete ba hore ho pheta-pheta ho ke ke ha robeha ka mor'a hore moeta-pele a khutlisetsoe' me moqhaka o khutlisetsoe ho eena.

Ho tsoa ho tsena tsohle, o ka ba le maikutlo a hore likarolo li tšoana le li-microservices. Ka mantsoe a mang, li joalo feela, joalo ka li-module ka har'a lits'ebetso tsa Tarantool. Empa ho boetse ho na le liphapang tse ngata tsa motheo. Taba ea pele, likarolo tsohle tsa projeke li tlameha ho phela motheong o tšoanang oa khoutu. 'Me lits'ebetso tsohle tsa Tarantool li lokela ho qalisoa ho tloha motheong o tšoanang oa khoutu, e le hore ho se ke ha e-ba le lintho tse makatsang tse kang tseo ha re leka ho qalisa kemiso, empa ha e eo. Hape, ha ua lokela ho lumella ho se tšoane ha liphetolelo tsa khoutu, hobane boitšoaro ba tsamaiso boemong bo joalo bo thata haholo ho bolela esale pele le ho bo rarolla.

Ho fapana le Docker, re ke ke ra nka karolo "setšoantšo", ra se isa mochining o mong ebe re se tsamaisa moo. Likarolo tsa rona ha li khethollehe joalo ka lijana tsa Docker. Hape, re ke ke ra etsa likarolo tse peli tse tšoanang ketsahalong e le 'ngoe. Karolo e itseng e teng kapa ha e eo; ka tsela e itseng, ke singleton. 'Me ea boraro, mesebetsi e tlameha ho tšoana ka har'a sehlopha sohle sa ho pheta-pheta, hobane ho seng joalo e ka ba ntho e sa utloahaleng - data e tšoana, empa tlhophiso e fapane.

Lisebelisoa tsa ho tsamaisa

Ke tšepisitse ho bonts'a hore na Cartridge e thusa joang ho tsamaisa likopo. Ho nolofaletsa ba bang bophelo, moralo oa liphutheloana tsa RPM:

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

Sephutheloana se kentsoeng se na le hoo e batlang e le ntho e 'ngoe le e' ngoe eo ue hlokang: ts'ebeliso le litšepiso tse kentsoeng. Tarantool e tla boela e fihle ho seva e le ho itšetleha ka sephutheloana sa RPM, 'me tšebeletso ea rona e se e loketse ho qala. Sena se etsoa ka systemd, empa pele u hloka ho ngola tlhophiso e nyane. Bonyane, hlakisa URI ea ts'ebetso ka 'ngoe. Tse tharo li lekane ho etsa mohlala.

$ 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

Ho na le nuance e khahlisang mona. Sebakeng sa ho hlakisa feela boema-kepe ba binary protocol, re hlakisa aterese eohle ea sechaba ea ts'ebetso ho kenyelletsa le lebitso la moamoheli. Sena sea hlokahala e le hore li-cluster nodes li tsebe ho hokahana. Ke mohopolo o mobe ho sebelisa 0.0.0.0 joalo ka aterese ea advertise_uri; e lokela ho ba aterese ea kantle ea IP, eseng sehokelo sa sokete. Ntle le eona, ha ho letho le tla sebetsa, kahoo Cartridge e ke ke ea u lumella ho hlahisa node e fosahetseng advertise_uri.

Kaha joale tlhophiso e se e loketse, o ka qala lits'ebetso. Kaha yuniti e tloaelehileng ea systemd ha e lumelle ts'ebetso e fetang e le 'ngoe ho qala, likopo ho Cartridge li kentsoe ke seo ho thoeng ke. lihlopha tse hlophisitsoeng tse sebetsang ka tsela e latelang:

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

Tokisong, re hlalositse boema-kepe ba HTTP moo Cartridge e sebeletsang sebopeho sa webo - 8080. Ha re ee ho eona 'me re shebe:

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Rea bona hore leha lits'ebetso li ntse li sebetsa, ha li so hlophisoe. Cartridge ha e e-s'o tsebe hore na ke mang ea lokelang ho pheta-pheta le mang 'me a ke ke a etsa qeto ka boeona, kahoo e emetse liketso tsa rona. Empa ha re na boikhethelo bo bongata: bophelo ba sehlopha se secha bo qala ka ho hlophisoa ha node ea pele. Joale re tla kenyelletsa ba bang sehlopheng, re ba abele mesebetsi, 'me nakong ena ho tsamaisoa ho ka nkoa ho phethetsoe ka katleho.

Ha re tšele khalase ea seno seo u se ratang 'me u phomole ka mor'a beke e telele ea mosebetsi. Sesebelisoa se ka sebelisoa.

Tarantool Cartridge: ho arola mokokotlo oa Lua ka mela e meraro

Liphello

Liphello ke life? E leke, e sebelise, tlohela maikutlo, theha litekete ho Github.

litšupiso

[1] Tarantool » 2.2 » Reference » Reference ea Rocks » Module vshard

[2] Kamoo re kentseng tšebetsong motheo oa khoebo ea matsete ea Alfa-Bank e thehiloeng ho Tarantool

[3] Meetso e mecha ea meaho ea litefiso: phetoho le phetoho ho Tarantool

[4] SWIM - protocol ea kaho ea lihlopha

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

Source: www.habr.com

Eketsa ka tlhaloso