Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Ma Mail.ru Pūʻulu loaʻa iā mākou ʻo Tarantool - he kikowaena noi kēia ma Lua, ʻo ia hoʻi ka pālua ma ke ʻano he waihona (a i ʻole ke ʻano?). He wikiwiki a ʻoluʻolu, akā ʻaʻole palena ʻole ka mana o kahi kikowaena. ʻAʻole hoʻi he panacea ʻo Vertical scaling, no laila he mau mea hana ʻo Tarantool no ka scaling horizontal - ka module vshard [1]. Hāʻawi ia iā ʻoe e hoʻokaʻawale i ka ʻikepili ma waena o nā kikowaena, akā pono ʻoe e hoʻopili me ia e hoʻonohonoho a hoʻopili i ka loiloi ʻoihana.

Nūhou maikaʻi: ua hōʻiliʻili mākou i kekahi mau kiʻi nui (eg [2], [3]) a hana ʻia kahi ʻano hana ʻē aʻe e maʻalahi i ka hoʻonā ʻana i kēia pilikia.

Pahu Tarantool he papa hana hou no ka hoʻomohala ʻana i nā ʻōnaehana puʻunaue paʻakikī. Hāʻawi ia iā ʻoe e noʻonoʻo i ke kākau ʻana i ka loiloi ʻoihana ma mua o ka hoʻoponopono ʻana i nā pilikia ʻoihana. Ma lalo o ka ʻoki e haʻi aku wau iā ʻoe i ka hana ʻana o kēia framework a pehea e kākau ai i nā lawelawe i puʻunaue ʻia me ia.

He aha ka pilikia?

He tarantula kā mākou, loaʻa iā mākou vshard - he aha hou kāu e makemake ai?

ʻO ka mea mua, he mea maʻalahi. Hoʻonohonoho ʻia ka hoʻonohonoho vshard ma o nā papa Lua. No ka hana pono ʻana o kahi ʻōnaehana kaʻina o nā kaʻina Tarantool he nui, pono e like ka hoʻonohonoho ʻana ma nā wahi āpau. ʻAʻohe mea makemake e hana i kēia me ka lima. No laila, hoʻohana ʻia nā ʻano palapala āpau, Ansible, a me nā ʻōnaehana hoʻolaha.

Mālama ʻo Cartridge i ka hoʻonohonoho vshard, hana ia i kēia ma muli o kāna hoʻonohonoho hoʻolaha ponoʻī. He faila YAML maʻalahi ia, kahi kope i mālama ʻia i kēlā me kēia Tarantool. ʻO ka hoʻomaʻamaʻa ʻana, ʻo ka framework ponoʻī e nānā i kāna hoʻonohonoho ʻana a hōʻoia i ka like ma nā wahi āpau.

ʻO ka lua, he mea maʻalahi ia. ʻAʻohe pili o ka hoʻonohonoho vshard i ka hoʻomohala ʻana i ka loiloi ʻoihana a hoʻohuli wale i ka mea papahana mai kāna hana. Ke kūkākūkā mākou i ka hoʻolālā ʻana o kahi papahana, kamaʻilio pinepine mākou e pili ana i nā ʻāpana pākahi a me kā lākou pilina. ʻAʻole hiki ke noʻonoʻo e pili ana i ka ʻōwili ʻana i kahi pūʻulu i 3 mau kikowaena data.

Ua hoʻoponopono pinepine mākou i kēia mau pilikia, a i kekahi manawa ua hiki iā mākou ke hoʻomohala i kahi ala e maʻalahi ai ka hana ʻana me ka noi i loko o kona ola holoʻokoʻa: hana, hoʻomohala, hoʻāʻo, CI/CD, mālama.

Hoʻokomo ʻo Cartridge i ka manaʻo o kahi kuleana no kēlā me kēia kaʻina hana Tarantool. ʻO nā kuleana kahi manaʻo e hiki ai i kahi mea hoʻomohala ke nānā aku i ke kākau ʻana i nā code. Hiki ke hoʻokō ʻia nā kuleana āpau i loaʻa i ka papahana ma hoʻokahi hiʻohiʻona Tarantool, a lawa kēia no nā hoʻokolohua.

ʻO nā hiʻohiʻona nui o Tarantool Cartridge:

  • hoʻolāʻau pūʻulu automated;
  • hoʻonui i ka hana o ka noi me ka hoʻohana ʻana i nā kuleana hou;
  • palapala noi no ka hoʻomohala ʻana a me ka hoʻolaha ʻana;
  • i kūkulu ʻia i loko o ka sharding aunoa;
  • ka hoʻohui ʻana me ka ʻōnaehana hoʻāʻo ʻo Luatest;
  • ka hoʻokele pūʻulu me ka WebUI a me ka API;
  • paʻi a me nā mea hana hoʻolaha.

Aloha, World!

ʻAʻole hiki iaʻu ke kali e hōʻike i ke kāʻei ponoʻī, no laila e haʻalele mākou i ka moʻolelo e pili ana i ka hoʻolālā no hope a hoʻomaka me kahi mea maʻalahi. Inā manaʻo mākou ua hoʻokomo ʻia ʻo Tarantool ponoʻī, a laila ʻo nā mea a pau i koe e hana

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

Na kēia mau kauoha ʻelua e hoʻokomo i nā pono laina kauoha a ʻae iā ʻoe e hana i kāu noi mua mai ka template:

$ cartridge create --name myapp

A eia kā mākou e loaʻa ai:

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/

ʻO kēia kahi waihona git me kahi "Hello, World!" palapala noi. E ho'āʻo kākou e holo koke, me ka hoʻokomo mua ʻana i nā mea hilinaʻi (me ka framework ponoʻī):

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

No laila, hoʻokahi kā mākou node e holo ana no ka noi sharded e hiki mai ana. Hiki i kahi kanaka ʻimi noiʻi ke wehe koke i ka ʻaoʻao pūnaewele, hoʻonohonoho i kahi hui o hoʻokahi node me ka ʻiole a hauʻoli i ka hopena, akā ʻaʻole hiki ke hauʻoli. I kēia manawa, ʻaʻole hiki i ka noi ke hana i kekahi mea pono, no laila e haʻi wau iā ʻoe e pili ana i ka hoʻolaha ʻana ma hope, akā ʻo kēia ka manawa e kākau ai i ke code.

Hoʻomohala noi

E noʻonoʻo wale, ke hoʻolālā nei mākou i kahi papahana e pono e loaʻa ka ʻikepili, mālama a kūkulu i kahi hōʻike hoʻokahi i ka lā.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Hoʻomaka mākou e kahakiʻi i kahi kiʻi a kau i ʻekolu mau mea ma luna: ʻīpuka, mālama a me ka mea hoʻonohonoho. Ke hana hou nei mākou i ka hoʻolālā. Ma muli o ka hoʻohana ʻana iā vshard i kahi mālama, hoʻohui mākou i ka vshard-router a me ka vshard-storage i ka papahana. ʻAʻole hiki i ka ʻīpuka a i ʻole ka mea hoʻonohonoho ke komo pololei i ka waiho ʻana; ʻo ia ke kumu o ke alalai, ʻo ia ka mea i hana ʻia.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

ʻAʻole hōʻike pololei kēia kiʻi i ka mea a mākou e kūkulu ai i ka papahana no ka mea ʻike ʻole ʻia nā ʻāpana. Pono mākou e ʻike pehea e kau ʻia ai kēia ma ka Tarantool maoli - e hui pū i kā mākou mau ʻāpana ma ke kaʻina hana.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

ʻAʻohe wahi liʻiliʻi i ka mālama ʻana i ka vshard-router a me ka ʻīpuka ma nā manawa ʻokoʻa. No ke aha mākou e heʻenalu hou ai i ka pūnaewele inā ʻo ia ke kuleana o ke alalai? Pono lākou e holo i loko o ke kaʻina hana like. ʻO ia hoʻi, ua hoʻomaka ʻia nā ʻīpuka a me vshard.router.cfg i hoʻokahi kaʻina hana, a e hoʻokuʻu iā lākou e launa pū me ka ʻāina.

Ma ke kahua hoʻolālā, ua maʻalahi ka hana ʻana me ʻekolu mau mea, akā ʻo wau, ma ke ʻano he mea hoʻomohala, ʻoiai e kākau ana i ke code, ʻaʻole makemake wau e noʻonoʻo e pili ana i ka hoʻokuʻu ʻana i ʻekolu mau manawa o Tarnatool. Pono wau e holo i nā hoʻokolohua a nānā i kaʻu kākau ʻana i ka ʻīpuka pololei. A i ʻole makemake paha wau e hōʻike i kahi hiʻohiʻona i kaʻu mau hoa hana. No ke aha e hele ai au i ka pilikia o ka lawe ʻana i ʻekolu kope? Pēlā i hānau ʻia ai ka manaʻo o nā kuleana. ʻO kahi hana he modul luash maʻamau nona ke ola ola e mālama ʻia e Cartridge. Ma kēia hiʻohiʻona he ʻehā o lākou - ʻīpuka, router, mālama, scheduler. Nui aʻe paha ma kahi papahana ʻē aʻe. Hiki ke holo i na hana a pau ma ka hana hookahi, a ua lawa keia.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

A i ka hiki ʻana mai i ka hoʻonohonoho ʻana a i ʻole ka hana ʻana, a laila e hāʻawi mākou i kēlā me kēia kaʻina Tarantool i kāna mau hana ponoʻī e pili ana i ka hiki ʻana o ka lako.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Hooponopono topology

Pono e mālama ʻia nā ʻike e pili ana i kahi e holo ai nā kuleana. A ʻo kēia "kahi" ka hoʻonohonoho hoʻolaha, aʻu i ʻōlelo ai ma luna. ʻO ka mea nui e pili ana iā ia ʻo ka topology cluster. Eia nā pūʻulu replication 3 o nā kaʻina hana Tarantool 5:

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

ʻAʻole mākou makemake e nalowale i ka ʻikepili, no laila mālama mākou i ka ʻike e pili ana i nā kaʻina hana me ka mālama pono. Mālama ʻo Cartridge i ka hoʻonohonoho ʻana me ka hoʻohana ʻana i kahi hana ʻelua. Ke makemake mākou e hōʻano hou i ka hoʻonohonoho, ʻike mua ʻo ia i nā manawa āpau a mākaukau e ʻae i ka hoʻonohonoho hou. Ma hope o kēia, pili ka lua o ka hana i ka config. No laila, inā ʻaʻole loaʻa kahi kope hoʻokahi, ʻaʻohe mea ʻino. ʻAʻole e hoʻohana wale ʻia ka hoʻonohonoho a ʻike ʻoe i kahi hewa ma mua.

Ma ka ʻāpana topology, ua hōʻike ʻia kahi ʻāpana koʻikoʻi e like me ke alakaʻi o kēlā me kēia hui replication. ʻO ka maʻamau kēia ke kope e hoʻopaʻa ʻia nei. ʻO nā mea ʻē aʻe he heluhelu-wale wale nō, ʻoiai aia kekahi mau ʻokoʻa. I kekahi manawa, ʻaʻole makaʻu nā mea hoʻomohala wiwo ʻole i nā paio a hiki ke kākau i ka ʻikepili i kekahi mau replicas i ka like, akā aia kekahi mau hana ʻaʻole pono e hana ʻelua. No kēia mea he hōʻailona o kahi alakaʻi.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Ke ola o na kuleana

No ka noho ʻana o kahi hana abstract i loko o ia ʻano hoʻolālā, pono e hoʻokele ka framework iā lākou i kekahi ʻano. Ma keʻano maʻamau, hiki ke hoʻomalu me ka hoʻomaka houʻana i ke kaʻina hana Tarantool. Aia he 4 callbacks e hoʻokele i nā kuleana. Kāhea ʻo Cartridge iā lākou ma muli o ka mea i kākau ʻia ma kāna hoʻonohonoho hoʻolaha ʻia, a laila e hoʻopili ai i ka hoʻonohonoho i nā kuleana kikoʻī.

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

He hana ko kēlā me kēia kuleana init. Kāhea ʻia ia i hoʻokahi manawa i ka wā e hiki ai ke kuleana a i ka wā e hoʻomaka hou ai ʻo Tarantool. Maikaʻi ma laila, no ka laʻana, e hoʻomaka i ka box.space.create, a i ʻole hiki i ka mea hoʻonohonoho ke hoʻomaka i kekahi fiber hope e hana i ka hana i kekahi mau manawa.

Hoʻokahi hana init ʻaʻole lawa paha. Hāʻawi ka pahu pahu i nā kuleana e hoʻohana pono i ka hoʻonohonoho i hoʻohana ʻia e mālama i ka topology. Hiki iā mākou ke haʻi aku i kahi ʻāpana hou i ka hoʻonohonoho like a mālama i kahi ʻāpana o ka hoʻonohonoho ʻoihana i loko. Ma kaʻu laʻana, hiki paha kēia i kahi hoʻonohonoho ʻikepili a i ʻole nā ​​hoʻonohonoho hoʻonohonoho no ka hana hoʻonohonoho.

Kāhea pūʻulu validate_config и apply_config i kēlā me kēia manawa ke hoʻololi ka hoʻonohonoho hoʻolaha. Ke hoʻohana ʻia kahi hoʻonohonoho e kahi hana ʻelua-phase, ʻike ka cluster ua mākaukau kēlā me kēia kuleana e ʻae i kēia hoʻonohonoho hou a, inā pono, hōʻike i kahi hewa i ka mea hoʻohana. Ke ʻae nā mea a pau he mea maʻamau ka hoʻonohonoho, a laila ka apply_config.

Aia kekahi ʻano hana i nā kuleana stop, pono e hoʻomaʻemaʻe i ka hoʻopuka o ka hana. Inā ʻōlelo mākou ʻaʻole pono ka mea hoʻonohonoho ma kēia kikowaena, hiki iā ia ke hoʻōki i kēlā mau fiber i hoʻomaka ai init.

Hiki i nā kuleana ke launa pū kekahi me kekahi. Ua maʻa mākou i ke kākau ʻana i nā kelepona hana ma Lua, akā ʻaʻole i loaʻa i kahi kaʻina hana ke kuleana a mākou e pono ai. No ka hoʻomaʻamaʻa ʻana i nā kelepona ma luna o ka pūnaewele, hoʻohana mākou i ka rpc (kahea kaʻina hana mamao) module kōkua, i kūkulu ʻia ma ke kumu o ka netbox maʻamau i kūkulu ʻia i Tarantool. Hiki ke hoʻohana i kēia inā, no ka laʻana, makemake kou ʻīpuka e noi pololei i ka mea hoʻonohonoho e hana i ka hana i kēia manawa, ma mua o ke kali ʻana i kahi lā.

ʻO kekahi mea nui e hōʻoia i ka hoʻomanawanui hewa. Hoʻohana ka pahu pahu i ka protocol SWIM e nānā i ke olakino [4]. I ka pōkole, hoʻololi nā kaʻina hana i nā "rumors" me kekahi i kekahi ma luna o UDP - haʻi kēlā me kēia kaʻina i kona mau hoalauna i ka nūhou hou loa, a pane lākou. Inā ʻaʻole hiki mai ka pane, hoʻomaka ʻo Tarantool e manaʻo he hewa kekahi, a ma hope o kekahi manawa e haʻi ʻo ia i ka make a hoʻomaka e haʻi i nā mea a pau a puni kēia nūhou.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Ma muli o kēia protocol, hoʻonohonoho ʻo Cartridge i ka hoʻoili ʻole ʻana. Mālama kēlā me kēia kaʻina hana i kona kaiapuni, a inā pau koke ke alakaʻi i ka pane ʻana, hiki i ke kope ke lawe i kāna kuleana, a ua hoʻonohonoho ʻo Cartridge i nā kuleana holo e like me ia.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Pono ʻoe e makaʻala ma ʻaneʻi, no ka mea, ʻo ka hoʻololi pinepine ʻana i hope a i waho hiki ke alakaʻi i nā paio ʻikepili i ka wā o ka hana hou ʻana. ʻOiaʻiʻo, ʻaʻole pono ʻoe e ʻae i ka failover aunoa ma ke ʻano. Pono mākou e hoʻomaopopo pono i ka mea e hana nei a e hōʻoia ʻaʻole e haki ka replication ma hope o ka hoʻihoʻi ʻia ʻana o ke alakaʻi a hoʻihoʻi ʻia ka lei aliʻi iā ia.

Mai kēia mau mea a pau, loaʻa paha iā ʻoe ka manaʻo e like nā kuleana me nā microservices. Ma kahi ʻano, ʻo ia wale nō, e like me nā modula i loko o nā kaʻina hana Tarantool. Akā, aia kekahi mau ʻokoʻa kumu. ʻO ka mea mua, pono e noho nā kuleana papahana a pau i ka waihona code like. A pono e hoʻokuʻu ʻia nā kaʻina hana Tarantool mai ka waihona code like ʻole, no laila ʻaʻohe mea kupanaha e like me ka wā e hoʻāʻo ai mākou e hoʻomaka i ka mea hoʻonohonoho, akā ʻaʻole ia. Eia kekahi, ʻaʻole pono ʻoe e ʻae i nā ʻokoʻa i nā mana code, no ka mea, paʻakikī loa ka ʻano o ka ʻōnaehana i kēlā kūlana i ka wānana a me ka debug.

ʻAʻole like me Docker, ʻaʻole hiki iā mākou ke lawe wale i kahi "kiʻi", lawe iā ia i kahi mīkini ʻē aʻe a holo ma laila. ʻAʻole kaʻawale kā mākou kuleana e like me nā pahu Docker. Eia kekahi, ʻaʻole hiki iā mākou ke holo i ʻelua mau kuleana like i ka manawa hoʻokahi. Aia kekahi kuleana a ʻaʻole paha; ma ke ʻano, he singleton. A ʻo ke kolu, pono e like nā kuleana i loko o ka hui replication holoʻokoʻa, no ka mea inā ʻaʻole he mea lapuwale - ua like ka ʻikepili, akā ʻokoʻa ka hoʻonohonoho.

Nā mea hana hoʻolaha

Ua hoʻohiki wau e hōʻike i ke ʻano o ke kōkua ʻana o Cartridge i nā noi. I mea e maʻalahi ai ke ola no nā poʻe ʻē aʻe, hoʻopili ka framework i nā pūʻolo RPM:

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

Loaʻa i ka pūʻolo i hoʻokomo ʻia nā mea āpau āu e pono ai: ʻo ka noi a me nā mea hilinaʻi i kau ʻia. E hōʻea pū ʻo Tarantool ma ke kikowaena ma ke ʻano he hilinaʻi o ka pūʻulu RPM, a ua mākaukau kā mākou lawelawe e hoʻomaka. Hana ʻia kēia ma o systemd, akā pono ʻoe e kākau i kahi hoʻonohonoho liʻiliʻi. Ma ka liʻiliʻi, e kuhikuhi i ka URI o kēlā me kēia kaʻina hana. ʻEkolu lawa no ka laʻana.

$ 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

Aia kekahi nuance hoihoi maanei. Ma kahi o ka wehewehe ʻana i ke awa protocol binary wale nō, hōʻike mākou i ka helu lehulehu holoʻokoʻa o ke kaʻina hana me ka hostname. Pono kēia i ʻike nā nodes cluster pehea e hoʻopili ai kekahi i kekahi. He manaʻo maikaʻi ʻole ka hoʻohana ʻana i ka 0.0.0.0 ma ke ʻano he advertise_uri address; pono ia he IP address waho, ʻaʻole ia he socket bid. Inā ʻaʻole ia, ʻaʻohe mea e hana, no laila ʻaʻole ʻae ʻo Cartridge iā ʻoe e hoʻomaka i kahi node me ka advertise_uri hewa.

I kēia manawa ua mākaukau ka hoʻonohonoho, hiki iā ʻoe ke hoʻomaka i nā kaʻina hana. No ka mea ʻaʻole ʻae ʻia kahi ʻōnaehana systemd maʻamau ma mua o hoʻokahi kaʻina e hoʻomaka ai, ua hoʻokomo ʻia nā noi ma ka Cartridge e ka mea i kapa ʻia. nā ʻāpana i hana ʻia e like me kēia:

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

I ka hoʻonohonoho ʻana, ua kuhikuhi mākou i ka port HTTP kahi e lawelawe ai ʻo Cartridge i ke kikowaena pūnaewele - 8080. E hele kāua a nānā:

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

ʻIke mākou ʻoiai ke holo nei nā kaʻina hana, ʻaʻole lākou i hoʻonohonoho ʻia. ʻAʻole ʻike ka pahu pahu i ka mea e hana hou me wai a ʻaʻole hiki ke hoʻoholo i kāna iho, no laila ke kali nei i kā mākou hana. Akā ʻaʻole nui kā mākou koho: hoʻomaka ke ola o kahi puʻupuʻu hou me ka hoʻonohonoho ʻana o ka node mua. A laila e hoʻohui mākou i nā mea ʻē aʻe i ka puʻupuʻu, e hāʻawi iā lākou i nā kuleana, a i kēia manawa hiki ke noʻonoʻo ʻia ua hoʻopau maikaʻi ʻia.

E ninini kāua i ke aniani o kāu mea inu punahele a hoʻomaha ma hope o ka pule hana lōʻihi. Hiki ke hoʻohana ʻia ka noi.

Tarantool Cartridge: hoʻokaʻawale i ka lua hope i ʻekolu laina

Nā hopena

He aha nā hopena? E hoʻāʻo, e hoʻohana, waiho i nā manaʻo, hana i nā tiketi ma Github.

kūmole

[1] Tarantool » 2.2 » Kuhikuhi » Nā pōhaku kuhikuhi » Module vshard

[2] Pehea mākou i hoʻokō ai i ke kumu o ka ʻoihana hoʻopukapuka kālā o Alfa-Bank e pili ana iā Tarantool

[3] ʻO ka hoʻolālā pili kālā hou: hoʻololi me ka hoʻololi i Tarantool

[4] SWIM - kaʻina hana hui pū

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka