Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

A ni Ẹgbẹ Mail.ru ni Tarantool - eyi jẹ olupin ohun elo ni Lua, eyiti o tun jẹ aaye data ni apapọ (tabi idakeji?). O yara ati itura, ṣugbọn awọn aye ti olupin kan ko tun jẹ ailopin. Wiwọn inaro kii ṣe panacea boya, nitorinaa Tarantool ni awọn irinṣẹ fun wiwọn petele — module vshard [1]. O gba ọ laaye lati ṣaja data kọja awọn olupin pupọ, ṣugbọn o ni lati tinker pẹlu rẹ lati ṣeto rẹ ati dabaru ni ọgbọn iṣowo.

Awọn iroyin ti o dara: a ti gba awọn cones (fun apẹẹrẹ [2], [3]) ati fi ẹsun ilana miiran ti yoo jẹ ki o rọrun ojutu ti iṣoro yii.

Tarantool katiriji jẹ ilana tuntun fun idagbasoke awọn ọna ṣiṣe pinpin eka. O gba ọ laaye lati dojukọ lori kikọ ọgbọn iṣowo dipo ipinnu awọn iṣoro amayederun. Labẹ gige, Emi yoo sọ fun ọ bi ilana yii ṣe n ṣiṣẹ ati bii o ṣe le kọ awọn iṣẹ pinpin pẹlu rẹ.

Ati kini, ni pato, iṣoro naa?

A ni tarantula, a ni vshard - kini o tun le fẹ?

Ni akọkọ, o jẹ ọrọ ti irọrun. Iṣeto vshard jẹ tunto nipasẹ awọn tabili Lua. Fun eto pinpin ti awọn ilana Tarantool pupọ lati ṣiṣẹ ni deede, iṣeto gbọdọ jẹ kanna ni gbogbo ibi. Ko si ẹnikan ti o fẹ lati ṣe pẹlu ọwọ. Nitorinaa, gbogbo iru awọn iwe afọwọkọ, Ansible, awọn eto imuṣiṣẹ ni a lo.

Katiriji n ṣakoso iṣeto vshard funrararẹ, o ṣe eyi da lori tirẹ ti ara pin iṣeto ni. Ni ipilẹ, o jẹ faili YAML ti o rọrun, ẹda eyiti o wa ni ipamọ ni gbogbo apẹẹrẹ ti Tarantool. Simplification wa ni otitọ pe ilana funrararẹ ṣe abojuto iṣeto rẹ ati rii daju pe o jẹ kanna nibi gbogbo.

Ẹlẹẹkeji, o jẹ lẹẹkansi ọrọ kan ti wewewe. Iṣeto ni vshard ko ni nkankan lati ṣe pẹlu idagbasoke ti oye iṣowo ati pe o ṣe idiwọ oluṣeto ẹrọ nikan lati iṣẹ. Nigba ti a ba jiroro lori faaji ti iṣẹ akanṣe kan, pupọ julọ a n sọrọ nipa awọn paati kọọkan ati ibaraenisepo wọn. O ti wa ni kutukutu lati ronu nipa yiyi iṣupọ kan fun awọn ile-iṣẹ data 3.

A yanju awọn iṣoro wọnyi ni akoko lẹhin akoko, ati ni aaye kan a ṣakoso lati ṣe agbekalẹ ọna ti o fun wa laaye lati ṣe simplify iṣẹ pẹlu ohun elo jakejado gbogbo igbesi aye rẹ: ẹda, idagbasoke, idanwo, CI / CD, itọju.

Katiriji ṣafihan imọran ti ipa kan fun ilana Tarantool kọọkan. Awọn ipa jẹ ero ti o fun laaye olugbese lati dojukọ koodu kikọ. Gbogbo awọn ipa ti o wa ninu iṣẹ akanṣe le ṣee ṣiṣẹ lori apẹẹrẹ kan ti Tarantool, ati pe eyi yoo to fun awọn idanwo.

Awọn ẹya akọkọ ti Tarantool Cartridge:

  • adaṣiṣẹ iṣupọ orchestration;
  • faagun iṣẹ ṣiṣe ohun elo pẹlu awọn ipa tuntun;
  • awoṣe ohun elo fun idagbasoke ati imuṣiṣẹ;
  • Sharding laifọwọyi ti a ṣe sinu;
  • Integration pẹlu ilana idanwo Luatest;
  • iṣakoso iṣupọ nipa lilo WebUI ati API;
  • apoti ati imuṣiṣẹ irinṣẹ.

Mo ki O Ile Aiye!

Emi ko le duro lati ṣafihan ilana funrararẹ, nitorinaa a yoo fi itan naa silẹ nipa faaji fun igbamiiran, ati bẹrẹ irọrun. A ro pe Tarantool funrararẹ ti fi sii tẹlẹ, ohun kan ṣoṣo ti o kù lati ṣe ni

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

Awọn ofin meji wọnyi yoo fi awọn ohun elo laini aṣẹ sori ẹrọ ati gba ọ laaye lati ṣẹda ohun elo akọkọ rẹ lati awoṣe:

$ cartridge create --name myapp

Ati pe eyi ni ohun ti a gba:

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/

Eyi jẹ ibi ipamọ git pẹlu "Hello, World!" ohun elo. Jẹ ki a gbiyanju lẹsẹkẹsẹ lati ṣiṣẹ, lẹhin fifi awọn igbẹkẹle sii (pẹlu ilana funrararẹ):

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

Nitorinaa, a ni ipade kan ti ohun elo sharded ọjọ iwaju nṣiṣẹ. Arakunrin oniwadi kan le ṣii wiwo oju opo wẹẹbu lẹsẹkẹsẹ, tunto iṣupọ kan lati oju ipade kan pẹlu asin ati gbadun abajade, ṣugbọn o ti tete lati yọ. Nitorinaa, ohun elo naa ko mọ bi o ṣe le ṣe ohunkohun ti o wulo, nitorinaa Emi yoo sọrọ nipa imuṣiṣẹ nigbamii, ati bayi o to akoko lati kọ koodu.

Ohun elo Idagbasoke

Fojuinu, a n ṣe apẹrẹ iṣẹ akanṣe kan ti o yẹ ki o gba data, fipamọ ati kọ ijabọ lẹẹkan ni ọjọ kan.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

A bẹrẹ iyaworan aworan atọka ati gbe awọn paati mẹta sori rẹ: ẹnu-ọna, ibi ipamọ ati oluṣeto. A n ṣiṣẹ lori faaji. Niwọn igba ti a lo vshard bi ibi ipamọ, a ṣafikun vshard-router ati vshard-storage si ero. Bẹni ẹnu-ọna tabi oluṣeto yoo wọle si ibi ipamọ taara, olulana kan wa fun eyi, o ṣẹda fun eyi.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Aworan yii ko tun ṣe afihan ni deede ohun ti a yoo ṣẹda ninu iṣẹ akanṣe, nitori awọn paati dabi abọtẹlẹ. A tun nilo lati rii bii eyi ṣe jẹ iṣẹ akanṣe lori Tarantool gidi - jẹ ki a ṣe akojọpọ awọn paati wa nipasẹ awọn ilana.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

O jẹ oye diẹ lati tọju vshard-router ati ẹnu-ọna lori awọn iṣẹlẹ ọtọtọ. Kini idi ti a nilo lati lọ lori nẹtiwọọki lẹẹkansii, ti eyi ba jẹ ojuṣe ti olulana naa tẹlẹ? Wọn gbọdọ wa ni ṣiṣe laarin ilana kanna. Iyẹn ni, ẹnu-ọna mejeeji ati vshard.router.cfg ti wa ni ipilẹṣẹ ni ilana kan, ki o jẹ ki wọn ṣe ajọṣepọ ni agbegbe.

Ni ipele apẹrẹ, o rọrun lati ṣiṣẹ pẹlu awọn paati mẹta, ṣugbọn bi olupilẹṣẹ, lakoko kikọ koodu, Emi ko fẹ lati ronu nipa ṣiṣe awọn iṣẹlẹ mẹta ti Tarnatool. Mo nilo lati ṣiṣe awọn idanwo ati ṣayẹwo pe Mo kọ ẹnu-ọna ti o tọ. Tabi boya Mo fẹ ṣe afihan ẹya kan si awọn ẹlẹgbẹ mi. Kini idi ti MO yẹ ki o ṣe wahala pẹlu gbigbe awọn iṣẹlẹ mẹta lọ? Eyi ni bii imọran ti awọn ipa ṣe bi. Ipa kan jẹ module luash deede, igbesi aye eyiti o jẹ iṣakoso nipasẹ Katiriji. Ni apẹẹrẹ yii, awọn mẹrin wa - ẹnu-ọna, olulana, ibi ipamọ, oluṣeto. O le jẹ diẹ sii ni iṣẹ akanṣe miiran. Gbogbo awọn ipa le ṣee ṣiṣẹ ni ilana kan, ati pe yoo to.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Ati pe nigba ti o ba de si imuṣiṣẹ si iṣeto tabi iṣelọpọ, lẹhinna a yoo fi ilana Tarantool kọọkan jẹ ipin awọn ipa tirẹ ti o da lori awọn agbara ohun elo:

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Topology isakoso

Alaye nipa ibiti awọn ipa ti nṣiṣẹ gbọdọ wa ni ipamọ ni ibikan. Ati pe “ibikan” yii jẹ iṣeto pinpin, eyiti Mo ti sọ tẹlẹ loke. Ohun pataki julọ ninu rẹ ni topology ti iṣupọ. Eyi ni awọn ẹgbẹ ẹda 3 ti awọn ilana 5 Tarantool:

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

A ko fẹ lati padanu data, nitorinaa a ṣe abojuto alaye nipa awọn ilana ṣiṣe. Katiriji tọju abala iṣeto ni pẹlu ifarabalẹ-meji. Ni kete ti a ba fẹ lati ṣe imudojuiwọn iṣeto ni, akọkọ sọwedowo pe gbogbo awọn iṣẹlẹ wa o si ṣetan lati gba iṣeto tuntun naa. Lẹhin iyẹn, ipele keji kan atunto naa. Nitorinaa, paapaa ti ẹda kan ko ba si fun igba diẹ, ko si ohun buburu ti yoo ṣẹlẹ. Iṣeto ni nìkan kii yoo lo ati pe iwọ yoo rii aṣiṣe ni ilosiwaju.

Apa topology tun ni iru paramita pataki kan gẹgẹbi adari ẹgbẹ ẹda kọọkan. Eyi nigbagbogbo jẹ apẹẹrẹ ti a kọ si. Awọn iyokù ni igbagbogbo kika-nikan, botilẹjẹpe awọn imukuro le wa. Nigba miiran awọn olupilẹṣẹ akọni ko bẹru awọn ija ati pe wọn le kọ data si ọpọlọpọ awọn ẹda ni afiwe, ṣugbọn awọn iṣẹ kan wa ti, laibikita ohun gbogbo, ko yẹ ki o ṣe lẹẹmeji. Fun eyi ami kan wa ti olori kan.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Igbesi aye awọn ipa

Ni ibere fun ipa áljẹbrà lati wa ninu iru faaji, ilana naa gbọdọ ṣakoso wọn bakan. Nipa ti, iṣakoso waye laisi tun bẹrẹ ilana Tarantool. Awọn ipe 4 wa fun iṣakoso awọn ipa. Katiriji funrararẹ yoo pe wọn da lori ohun ti o ti kọ sinu iṣeto pinpin, nitorinaa lilo iṣeto ni awọn ipa kan pato.

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

Gbogbo ipa ni iṣẹ kan init. O pe ni ẹẹkan boya nigbati ipa kan ba ṣiṣẹ tabi nigbati Tarantool ti tun bẹrẹ. Nibẹ ni o rọrun, fun apẹẹrẹ, lati ṣe ipilẹṣẹ box.space.create, tabi oluṣeto le bẹrẹ diẹ ninu okun ẹhin ti yoo ṣe iṣẹ ni awọn aaye arin kan.

nikan iṣẹ init le ma to. Katiriji ngbanilaaye awọn ipa lati lo anfani ti iṣeto pinpin ti o nlo lati tọju topology. A le kede abala tuntun kan ni iṣeto kanna ati tọju ajẹku iṣeto iṣowo kan ninu rẹ. Ninu apẹẹrẹ mi, eyi le jẹ ero data, tabi awọn eto iṣeto fun ipa oluṣeto.

Awọn ipe akojọpọ validate_config и apply_config ni gbogbo igba ti awọn pin iṣeto ni ayipada. Nigbati a ba lo atunto kan nipasẹ ṣiṣe ipele meji, iṣupọ naa ṣayẹwo pe ipa kọọkan ti ṣetan lati gba iṣeto ni tuntun yii ati ṣe ijabọ aṣiṣe si olumulo ti o ba jẹ dandan. Nigbati gbogbo eniyan gba pe iṣeto ni deede, lẹhinna awọn apply_config.

Awọn ipa tun ni ọna kan stopEyi ti o nilo lati nu awọn ohun pataki ti ipa naa di mimọ. Ti a ba sọ pe oluṣeto ko nilo lori olupin yii, o le da awọn okun wọnyẹn ti o bẹrẹ pẹlu init.

Awọn ipa le ṣe ajọṣepọ pẹlu ara wọn. A lo lati kọ awọn ipe iṣẹ ni Lua, ṣugbọn o le ṣẹlẹ pe ninu ilana yii ko si ipa ti a nilo. Lati dẹrọ awọn ipe lori nẹtiwọọki, a lo rpc (ipe ilana isakoṣo latọna jijin) module iranlọwọ, eyiti a ṣe lori ipilẹ ti netbox boṣewa ti a ṣe sinu Tarantool. Eyi le wulo ti, fun apẹẹrẹ, ẹnu-ọna rẹ fẹ lati beere taara si oluṣeto lati ṣe iṣẹ naa ni bayi, dipo ki o duro de ọjọ kan.

Ojuami pataki miiran ni lati rii daju ifarada aṣiṣe. Katiriji nlo ilana SWIM lati ṣe atẹle ilera [4]. Ni kukuru, awọn ilana ṣe paṣipaarọ "awọn agbasọ ọrọ" pẹlu ara wọn lori UDP - ilana kọọkan sọ fun awọn aladugbo rẹ awọn iroyin tuntun, wọn si dahun. Ti idahun ko ba wa lojiji, Tarantool bẹrẹ lati fura pe ohun kan ko tọ, ati lẹhin igba diẹ o ka iku ati bẹrẹ si sọ fun gbogbo eniyan ni ayika iroyin yii.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Da lori ilana yii, Cartridge ṣeto mimu mimu ikuna laifọwọyi. Ilana kọọkan ṣe abojuto agbegbe rẹ, ati pe ti oludari ba duro lojiji dahun, lẹhinna ẹda naa le gba ipa rẹ, ati Cartridge tunto awọn ipa ṣiṣe ni ibamu.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

O nilo lati ṣọra nibi, nitori iyipada loorekoore pada ati siwaju le ja si awọn ija data lakoko isọdọtun. Titan-an ikuna aifọwọyi ni aifọwọyi, dajudaju, ko tọ si. O nilo lati ni oye ohun ti n ṣẹlẹ ni kedere, ati rii daju pe ẹda kii yoo fọ lẹhin ti a ti tun olori pada ati ade ti o pada si ọdọ rẹ.

Lati gbogbo awọn ti o wa loke, o le ni imọlara pe awọn ipa dabi awọn iṣẹ microservices. Ni ori kan, wọn jẹ, nikan bi awọn modulu inu awọn ilana Tarantool. Ṣugbọn nọmba kan ti awọn iyatọ ipilẹ tun wa. Ni akọkọ, gbogbo awọn iṣẹ akanṣe gbọdọ gbe ni koodu koodu kanna. Ati pe gbogbo awọn ilana Tarantool gbọdọ ṣiṣẹ lati koodu koodu kanna ki ko si awọn iyanilẹnu bii nigba ti a gbiyanju lati ṣe ipilẹṣẹ iṣeto, ṣugbọn kii ṣe tẹlẹ. Pẹlupẹlu, o yẹ ki o ko gba laaye awọn iyatọ ninu awọn ẹya koodu, nitori ihuwasi ti eto ni iru ipo bẹẹ jẹ gidigidi soro lati ṣe asọtẹlẹ ati yokokoro.

Ko dabi Docker, a ko le kan mu “aworan” ti ipa kan, mu lọ si ẹrọ miiran, ki o ṣiṣẹ sibẹ. Awọn ipa wa ko ya sọtọ bi awọn apoti Docker. Pẹlupẹlu, a ko le ṣiṣẹ awọn ipa kanna meji ni apẹẹrẹ kanna. Ipa kan wa boya nibẹ tabi kii ṣe, ni ọna kan o jẹ ẹyọkan. Ati ni ẹẹta, laarin gbogbo ẹgbẹ ẹda, awọn ipa gbọdọ jẹ kanna, nitori bibẹkọ ti yoo jẹ ẹgan - data naa jẹ kanna, ṣugbọn iṣeto ni o yatọ.

Awọn irinṣẹ imuṣiṣẹ

Mo ṣe ileri lati ṣafihan bi Cartridge ṣe ṣe iranlọwọ lati mu awọn ohun elo ṣiṣẹ. Lati jẹ ki igbesi aye rọrun fun awọn miiran, awọn idii ilana RPM:

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

Apoti ti a fi sii ni ohun gbogbo ti o nilo: mejeeji ohun elo ati awọn igbẹkẹle luash ti a fi sori ẹrọ. Tarantool yoo tun wa si olupin bi igbẹkẹle ti package RPM, ati pe iṣẹ wa ti ṣetan lati ṣe ifilọlẹ. Eyi ni a ṣe nipasẹ systemd, ṣugbọn akọkọ o nilo lati kọ iṣeto ni kekere kan. Ni o kere ju, pato URI ti ilana kọọkan. Mẹta ti to fun apẹẹrẹ.

$ 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

Nuance ti o nifẹ si wa nibi. Dipo ti o kan pato ibudo ilana alakomeji, a pato gbogbo adirẹsi gbogbo eniyan ti ilana naa, pẹlu orukọ olupin. Eyi jẹ pataki ki awọn apa iṣupọ mọ bi a ṣe le sopọ si ara wọn. O jẹ ero buburu lati lo 0.0.0.0 bi advertise_uri, o yẹ ki o jẹ IP ti gbogbo eniyan, kii ṣe iho dipọ. Laisi rẹ, ko si ohun ti yoo ṣiṣẹ, nitorinaa Cartridge kii yoo jẹ ki o ṣe ifilọlẹ ipade kan pẹlu advertise_uri ti ko tọ.

Bayi pe iṣeto ti ṣetan, o le bẹrẹ awọn ilana. Niwọn igba ti ẹrọ iṣiṣẹ deede ko gba laaye ilana diẹ sii ju ọkan lọ lati bẹrẹ, awọn ohun elo lori katiriji ti fi sori ẹrọ nipasẹ ohun ti a pe. Awọn ẹya ara ẹrọ lẹsẹkẹsẹ ti o ṣiṣẹ bi eleyi:

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

Ninu iṣeto naa, a ṣalaye ibudo HTTP lori eyiti Cartridge ṣe iranṣẹ ni wiwo wẹẹbu - 8080. Jẹ ki a lọ si ki a wo:

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

A rii pe awọn ilana naa, botilẹjẹpe wọn nṣiṣẹ, ko ti tunto. Katiriji naa ko ti mọ tani o yẹ ki o tun ṣe pẹlu ẹniti ko le ṣe ipinnu funrararẹ, nitorinaa o n duro de awọn iṣe wa. Ati pe a ko ni yiyan pupọ: igbesi aye iṣupọ tuntun bẹrẹ pẹlu iṣeto ni ipade akọkọ. Lẹhinna a ṣafikun iyokù si iṣupọ, fi awọn ipa si wọn, ati ni aaye yii a le gbero imuṣiṣẹ naa ti pari ni aṣeyọri.

Tú gilasi kan ti ohun mimu ayanfẹ rẹ ki o sinmi lẹhin ọsẹ iṣẹ pipẹ. Ohun elo naa le ṣiṣẹ.

Tarantool Cartridge: Lua backend sharding ni awọn ila mẹta

Awọn esi

Ati kini nipa awọn abajade? Gbiyanju, lo, fi esi silẹ, bẹrẹ awọn tikẹti lori github.

jo

[1] Tarantool »2.2» Itọkasi» Rocks itọkasi »Modul vshard

[2] Bii a ṣe ṣe imuse ipilẹ ti iṣowo idoko-owo Alfa-Bank ti o da lori Tarantool

[3] Awọn faaji ìdíyelé iran tuntun: iyipada pẹlu iyipada si Tarantool

[4] SWIM - Ilana ile iṣupọ

[5] GitHub - tarantool / katiriji-cli

[6] GitHub - tarantool / katiriji

orisun: www.habr.com

Fi ọrọìwòye kun