Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Na Mail.ru Group anyị nwere Tarantool - nke a bụ ihe nkesa ngwa dị na Lua, nke nwekwara okpukpu abụọ dị ka nchekwa data (ma ọ bụ ọzọ?). Ọ dị ngwa ma dị jụụ, mana ike nke otu sava ka na-akparaghị ókè. Ntugharị kwụ ọtọ abụghịkwa panacea, yabụ Tarantool nwere ngwaọrụ maka ịkpụcha nha nha - vshard modul. [1]. Ọ na-enye gị ohere ịkekọrịta data n'ofe ọtụtụ sava, mana ị ga-etinyerịrị ya iji tọọ ya wee tinye mgbagha azụmahịa.

Ozi ọma: anyị achịkọtala ụfọdụ nnukwu gbaa (dịka ọmụmaatụ [2], [3]) ma mepụta usoro ọzọ nke ga-eme ka ọ dị mfe ngwọta nke nsogbu a.

Tarantool Cartridge bụ usoro ọhụrụ maka ịmepụta usoro kesara mgbagwoju anya. Ọ na-enye gị ohere ilekwasị anya na ide echiche azụmahịa kama idozi nsogbu akụrụngwa. N'okpuru ịkpụ m ga-agwa gị ka usoro a si arụ ọrụ na otu esi ede ọrụ kesara site na iji ya.

Gịnị kpọmkwem bụ nsogbu ahụ?

Anyị nwere tarantula, anyị nwere vshard - kedu ihe ọzọ ị ga-achọ?

Mbụ, ọ bụ ihe dị mma. A na-ahazi nhazi vshard site na tebụl Lua. Maka usoro nkesa nke ọtụtụ usoro Tarantool ka ọ rụọ ọrụ nke ọma, nhazi ahụ ga-abụrịrị otu ebe niile. Ọ dịghị onye chọrọ iji aka mee nke a. Ya mere, a na-eji ụdị edemede ọ bụla, nke nwere ike ime, na usoro ntinye.

Cartridge n'onwe ya na-ejikwa nhazi vshard, ọ na-eme nke a dabere na ya nhazi ekesa nke onwe ya. Ọ bụ n'ezie faịlụ YAML dị mfe, a na-echekwa otu ya n'ụdị Tarantool ọ bụla. Ihe dị mfe bụ na usoro ahụ n'onwe ya na-enyocha nhazi ya ma hụ na ọ bụ otu ihe ahụ n'ebe niile.

Nke abuo, ọ bụ ọzọ ihe dị mma. Nhazi vshard enweghị ihe jikọrọ ya na mmepe nke echiche azụmahịa ma na-adọpụ uche onye mmemme na ọrụ ya. Mgbe anyị na-ekwu maka ụkpụrụ ụlọ nke ọrụ, anyị na-ekwukarị maka ihe ndị dị n'otu n'otu na mmekọrịta ha. Ọ dị oke n'oge iche echiche maka ibugharị ụyọkọ gaa na ebe data 3.

Anyị doziri nsogbu ndị a ugboro ugboro, na mgbe ụfọdụ anyị jisiri ike ịzụlite ụzọ na mfe ịrụ ọrụ na ngwa n'ime ya dum okirikiri ndụ: okike, mmepe, ule, CI / CD, mmezi.

Cartridge na-ewebata echiche nke ọrụ maka usoro Tarantool ọ bụla. Ọrụ bụ echiche nke na-enye onye nrụpụta ohere itinye uche na koodu ederede. Enwere ike ịme ọrụ niile dị na ọrụ a n'otu ihe atụ Tarantool, nke a ga-ezuru maka ule.

Akụkụ bụ isi nke Tarantool Cartridge:

  • otu ụyọkọ na-akpaghị aka;
  • ịgbasa ọrụ nke ngwa ahụ site na iji ọrụ ọhụrụ;
  • template ngwa maka mmepe na ntinye;
  • arụnyere na akpaka sharding;
  • ntinye na usoro nyocha nke Luatest;
  • njikwa ụyọkọ site na iji WebUI na API;
  • nkwakọ ngwaahịa na ntinye ihe.

Ndewo Ụwa!

Enweghị m ike ichere igosi nhazi ahụ n'onwe ya, ya mere, anyị ga-ahapụ akụkọ banyere ihe owuwu ụlọ maka mgbe e mesịrị ma malite ihe dị mfe. Ọ bụrụ na anyị chere na Tarantool n'onwe ya etinyelarị, mgbe ahụ ihe niile fọdụrụ bụ ime

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

Iwu abụọ a ga-etinye akụrụngwa ahịrị iwu wee nye gị ohere ịmepụta ngwa mbụ gị site na ndebiri:

$ cartridge create --name myapp

Na nke a bụ ihe anyị nwetara:

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/

Nke a bụ ebe nchekwa git nwere “Ndewo, Ụwa!” emeberela ya. ngwa. Ka anyị gbalịa ịgba ọsọ ya ozugbo, ebe etinyelarị ihe ndabere (gụnyere usoro n'onwe ya):

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

Yabụ, anyị nwere otu ọnụ na-agba ọsọ maka ngwa sharded n'ọdịnihu. Onye nkịtị na-ajụ ajụjụ nwere ike mepee interface weebụ ozugbo, hazie ụyọkọ nke ọnụ ọnụ na òké wee nwee ọ enjoyụ na nsonaazụ ya, mana ọ dị ntakịrị ka ị ṅụrịa ọṅụ. Ka ọ dị ugbu a, ngwa ahụ enweghị ike ịme ihe ọ bụla bara uru, ya mere, m ga-agwa gị banyere mbugharị mgbe e mesịrị, ma ugbu a ọ bụ oge ide koodu.

Mmepe ngwa

Naanị were ya, anyị na-emepụta ọrụ ga-enwerịrị data, chekwaa ya wee wuo akụkọ otu ugboro n'ụbọchị.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Anyị na-amalite ịbịaru eserese ma tinye ihe atọ na ya: ọnụ ụzọ ámá, nchekwa na nhazi oge. Anyị na-arụ ọrụ na architecture n'ihu. Ebe anyị na-eji vshard dịka nchekwa, anyị na-agbakwunye vshard-router na vshard-storage na atụmatụ ahụ. Ma ọnụ ụzọ ámá ma ọ bụ onye nhazi oge ga-enweta ebe nchekwa ahụ kpọmkwem;

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Eserese a ka na-anọchi anya ihe anyị ga-ewu n'ọrụ a n'ihi na ihe mejupụtara ya na-ele anya nkịtị. Anyị ka kwesịrị ịhụ ka a ga-esi tụba nke a na ezigbo Tarantool - ka anyị chịkọta ihe anyị site na usoro.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Enwere obere uru idobe vshard-router na ọnụ ụzọ n'ụdị dị iche iche. Kedu ihe kpatara anyị ji achọ netwọkụ ọzọ ma ọ bụrụ na nke a bụbu ọrụ nke rawụta? Ha ga-agba ọsọ n'ime otu usoro. Ya bụ, ma gateway na vshard.router.cfg ka ebidobere n'otu usoro, ma hapụ ha ka ha na-emekọrịta ihe na mpaghara.

N'oge nhazi nhazi, ọ dị mma iji ihe atọ rụọ ọrụ, ma m, dị ka onye mmepụta, mgbe m na-ede koodu ahụ, achọghị iche echiche banyere ịmalite usoro atọ nke Tarnatool. Achọrọ m ịgba ọsọ ule wee lelee na m dere ọnụ ụzọ ámá nke ọma. Ma ọ bụ ikekwe m chọrọ igosi ndị ọrụ ibe m otu njirimara. Kedu ihe kpatara m ga-eji gafeta nhịahụ nke ibugharị mbipụta atọ? Nke a bụ otú e si mụọ echiche nke ọrụ. Ọrụ bụ modul luash oge niile nke Cartridge na-elekọta usoro ndụ ya. Na ihe atụ a, e nwere anọ n'ime ha - ọnụ ụzọ ámá, rawụta, nchekwa, scheduler. Enwere ike inwe ihe ndị ọzọ na ọrụ ọzọ. Enwere ike ịrụ ọrụ niile n'otu usoro, nke a ga-ezuru.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Ma a bịa n'ịkwanye na nhazi ma ọ bụ mmepụta, mgbe ahụ anyị ga-ekenye usoro Tarantool ọ bụla ọrụ nke ya dabere na ike ngwaike:

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Nlekọta Topology

A ga-echekwarịrị ozi gbasara ebe ọrụ na-arụ ebe. Na nke a "ebe" bụ nhazi nke kesara, nke m kwuburu n'elu. Ihe kacha mkpa na ya bụ ụyọkọ topology. Nke a bụ otu mmegharị 3 nke usoro Tarantool 5:

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Anyị achọghị ida data, yabụ anyị na-eji nlezianya na-emeso ozi gbasara usoro ịgba ọsọ. Cartridge na-echekwa nhazi ahụ site na iji ntinye nke abụọ. Ozugbo anyị chọrọ imelite nhazi ahụ, ọ na-ebu ụzọ lelee na ikpe niile dị na njikere ịnakwere nhazi ọhụrụ ahụ. Mgbe nke a gasịrị, usoro nke abụọ na-emetụta config. N'ihi ya, ọ bụrụgodị na otu oyiri pụta na-adịru nwa oge, ọ dịghị ihe ọjọọ ga-eme. A gaghị etinye nhazi ahụ naanị ma ị ga-ahụ njehie n'ọdịnihu.

Nakwa na ngalaba topology, a na-egosipụta oke dị mkpa dị ka onye isi otu mmegharị nke ọ bụla. Ọ na-abụkarị nke a bụ nnomi a na-edekọ. A na-agụkarị ndị ọzọ naanị-naanị, n'agbanyeghị na enwere ike ịnwe ihe ndị ọzọ. Mgbe ụfọdụ, ndị mmepe nwere obi ike anaghị atụ egwu esemokwu ma nwee ike ide data na ọtụtụ nsụgharị n'otu n'otu, mana enwere ụfọdụ arụmọrụ na, n'agbanyeghị ihe ọ bụla, ekwesịghị ime ugboro abụọ. Maka nke a enwere ihe ịrịba ama nke onye ndu.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Ndụ nke ọrụ

Ka ọrụ nkịtị dị n'ime ụlọ dị otú ahụ, usoro ahụ ga-ejikwa ya n'ụzọ ụfọdụ. Dị ka o kwesịrị ịdị, njikwa na-eme na-enweghị ịmalitegharị usoro Tarantool. Enwere mkpọghachi oku anọ iji jikwaa ọrụ. Cartridge n'onwe ya ga-akpọ ha dabere na ihe edere na nhazi ya nkesa, si otú a na-etinye nhazi ahụ na ọrụ ụfọdụ.

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

Ọrụ ọ bụla nwere ọrụ init. A na-akpọ ya otu ugboro ma ọ bụrụ na agbanyere ọrụ ahụ ma ọ bụ mgbe Tarantool maliteghachiri. Ọ dị mma ebe ahụ, dịka ọmụmaatụ, ịmalite box.space.create, ma ọ bụ onye nhazi oge nwere ike ịmalite ụfọdụ eriri azụ nke ga-arụ ọrụ n'oge ụfọdụ.

Otu ọrụ init nwere ike ọ gaghị ezu. Cartridge na-enye ohere ọrụ iji nweta ohere nke nhazi nkesa nke ọ na-eji echekwa topology. Anyị nwere ike ikwuwapụta ngalaba ọhụrụ n'otu nhazi ahụ ma chekwaa akụkụ nke nhazi azụmahịa na ya. N'ihe atụ m, nke a nwere ike ịbụ atụmatụ data ma ọ bụ ntọala nhazi maka ọrụ nhazi.

Oku ụyọkọ validate_config и apply_config oge ọ bụla nhazi nkesa na-agbanwe agbanwe. Mgbe etinyere nhazi site na ntinye nke ụzọ abụọ, ụyọkọ ahụ na-enyocha na ọrụ ọ bụla dị njikere ịnakwere nhazi ọhụrụ a ma, ọ bụrụ na ọ dị mkpa, na-akọ onye ọrụ njehie. Mgbe onye ọ bụla kwetara na nhazi ahụ bụ ihe nkịtị, mgbe ahụ apply_config.

Ọrụ nwekwara usoro stop, nke dị mkpa iji kpochapụ mmepụta ọrụ ahụ. Ọ bụrụ na anyị na-ekwu na a dịghịzi achọ onye nhazi na ihe nkesa a, ọ nwere ike ịkwụsị eriri ndị ahụ o jiri malite init.

Ọrụ nwere ike imekọ ihe ọnụ. A na-eji anyị ede oku ọrụ na Lua, mana ọ nwere ike ime na usoro enyere enweghị ọrụ anyị chọrọ. Iji mee ka oku na-aga na netwọkụ ahụ dị mfe, anyị na-eji modul inyeaka rpc (oku usoro ime anya), nke e wuru na ndabere nke netbox ọkọlọtọ wuru n'ime Tarantool. Nke a nwere ike ịba uru ma ọ bụrụ na, dịka ọmụmaatụ, ọnụ ụzọ gị chọrọ ịrịọ onye nhazi oge ka ọ rụọ ọrụ ahụ ugbu a, kama ichere otu ụbọchị.

Isi ihe ọzọ dị mkpa bụ ịhụ na nnabata mmejọ. Cartridge na-eji protocol SWIM nyochaa ahụike [4]. Na nkenke, usoro na-agbanwe "asịrị" na ibe ha n'elu UDP-usoro ọ bụla na-agwa ndị agbata obi ya akụkọ kachasị ọhụrụ, ha na-azakwa. Ọ bụrụ na azịza ya abịaghị na mberede, Tarantool na-amalite iche na ihe adịghị mma, mgbe obere oge gasịrị, ọ na-agụghachi ọnwụ wee malite ịgwa onye ọ bụla gburugburu akụkọ a.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Dabere na protocol a, Cartridge na-ahazi nhazi ọdịda akpaaka. Usoro ọ bụla na-enyocha gburugburu ebe obibi ya, ma ọ bụrụ na onye ndu akwụsị ịzaghachi na mberede, oyiri ahụ nwere ike weghara ọrụ ya, Cartridge na-ahazi ọrụ ndị na-agba ọsọ ya.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Ịkwesịrị ịkpachara anya ebe a, n'ihi na ịchigharị azụ na azụ ugboro ugboro nwere ike ibute esemokwu data n'oge mmegharị. N'ezie, ị gaghị eme ka ọdịda akpaaka na-enweghị usoro. Anyị ga-aghọta nke ọma ihe na-eme na ijide n'aka na mmegharị agaghị agbaji mgbe e weghachiri onye ndú na okpueze nyeghachi ya.

Site na ihe ndị a niile, ị nwere ike nweta mmetụta na ọrụ dị ka microservices. N'echiche, ha bụ nke ahụ, naanị dị ka modul n'ime usoro Tarantool. Ma e nwekwara ọtụtụ isi ọdịiche. Nke mbụ, ọrụ ngo niile ga-ebirịrị n'otu koodu ntọala. Ekwesịrị ịmalite usoro Tarantool niile site na otu ntọala koodu ahụ, nke mere na ọ nweghị ihe ịtụnanya dị ka ndị ahụ mgbe anyị na-agbalị ịmalite usoro nhazi, mana ọ dịghị adị. Ọzọkwa, ị gaghị ekwe ka ọdịiche dị na nsụgharị koodu, n'ihi na omume nke usoro na ọnọdụ dị otú ahụ siri ike ịkọ na debug.

N'adịghị ka Docker, anyị enweghị ike iwere naanị "onyinyo", buru ya na igwe ọzọ wee mee ya ebe ahụ. Ọrụ anyị anọpụghị iche dị ka akpa Docker. Ọzọkwa, anyị enweghị ike ịrụ ọrụ abụọ yiri nke ahụ n'otu oge. Ọrụ dị adị ma ọ bụ na ọ dịghị, ọ bụ otu. Na nke atọ, ọrụ ndị ahụ ga-abụ otu n'ime otu mmegharị ahụ dum, n'ihi na ma ọ bụghị ya, ọ ga-abụ ihe efu - data ahụ bụ otu, ma nhazi ahụ dị iche.

Ngwá ọrụ ntinye

Ekwere m nkwa igosi otú Cartridge si enyere aka tinye ngwa. Iji mee ka ndụ dịrị ndị ọzọ mfe, ngwungwu RPM ndị a gụnyere:

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

Ngwungwu arụnyere nwere ihe fọrọ nke nta ka ọ bụrụ ihe niile ịchọrọ: ma ngwa ahụ na ihe ndabere arụnyere. Tarantool ga-abatakwa na ihe nkesa dị ka ndabere nke ngwugwu RPM, ọrụ anyị dị njikere ịmalite. A na-eme nke a site na systemd, mana nke mbụ ị ga-ede obere nhazi. Opekempe, kọwaa URI nke usoro ọ bụla. Atọ ezuola dịka ọmụmaatụ.

$ 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

Enwere nuance na-adọrọ mmasị ebe a. Kama ịkọwa naanị ọnụọgụ abụọ protocol ọdụ ụgbọ mmiri, anyị na-akọwapụta adreesị ọha nke usoro a gụnyere aha nnabata. Nke a dị mkpa ka ọnụ ọgụgụ ụyọkọ mara ka esi ejikọta ibe ha. Ọ bụ ihe ọjọọ iji 0.0.0.0 dị ka advertise_uri adreesị; Enweghị ya, ọ nweghị ihe ga-arụ ọrụ, yabụ Cartridge agaghị ekwe ka ị were mgbasa ozi na-ezighi ezi were wepụta ọnụ.

Ugbu a na nhazi ahụ dị njikere, ị nwere ike ịmalite usoro ahụ. Ebe ọ bụ na otu sistemu sistemu oge niile anaghị ekwe ka ihe kariri otu usoro malite, a na-etinye ngwa na Cartridge site na ihe a na-akpọ. Ngwa ngwa ngwa na-arụ ọrụ dị ka ndị a:

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

Na nhazi ahụ, anyị akọwapụtara ọdụ ụgbọ mmiri HTTP nke Cartridge na-eje ozi na interface weebụ - 8080. Ka anyị gaa na ya wee lelee:

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Anyị na-ahụ na ọ bụ ezie na usoro na-agba ọsọ, ha na-adịghị ahazi. Katrij ahụ amabeghị onye kwesịrị ịmegharị onye na enweghị ike ịme mkpebi n'onwe ya, yabụ na-echere omume anyị. Ma anyị enweghị ọtụtụ nhọrọ: ndụ nke ụyọkọ ọhụrụ na-amalite site na nhazi nke ọnụ ụzọ mbụ. Mgbe ahụ, anyị ga-agbakwunye ndị ọzọ na ụyọkọ ahụ, kenye ha ọrụ, ma n'oge a, a ga-eche na a ga-arụ ọrụ nke ọma.

Ka anyị wụsa otu iko mmanya ọkacha mmasị gị wee zuru ike ma ogologo izu rụchara ọrụ. Enwere ike iji ngwa ahụ.

Tarantool Cartridge: na-atụgharị azụ azụ Lua n'ahịrị atọ

Nsonaazụ

Kedu ihe si na ya pụta? Nwaa ya, jiri ya, hapụ nzaghachi, mepụta tiketi na Github.

zoro

[1] Tarantool » 2.2 » Ntụaka » Ntụaka Rocks » Modul vshard

[2] Otu anyị siri mejuputa isi nke azụmaahịa itinye ego nke Alfa-Bank dabere na Tarantool

[3] Ihe owuwu ịgba ụgwọ ọgbọ ọhụrụ: mgbanwe na mgbanwe na Tarantool

[4] SWIM – ụkpụrụ iwu ụlọ ụyọkọ

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

isi: www.habr.com

Tinye a comment