Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Ku Mail.ru Gulu tili ndi Tarantool - iyi ndi seva yogwiritsira ntchito ku Lua, yomwe imakhalanso ngati database (kapena mosemphanitsa?). Ndizofulumira komanso zoziziritsa kukhosi, koma kuthekera kwa seva imodzi kulibe malire. Kukula moyima sikulinso vuto, chifukwa chake Tarantool ili ndi zida zowongolera zopingasa - gawo la vshard. [1]. Imakulolani kuti mugawane zambiri pamaseva angapo, koma muyenera kuyimitsa kuti muyikhazikitse ndikulumikiza malingaliro abizinesi.

Nkhani yabwino: tatolera zithunzi zazikulu (mwachitsanzo [2], [3]) ndikupanga chimango china chomwe chingathandize kwambiri kuthetsa vutoli.

Cartridge ya Tarantool ndi njira yatsopano yopangira machitidwe ovuta kugawa. Zimakuthandizani kuti muyang'ane kwambiri polemba malingaliro abizinesi m'malo mothana ndi zovuta za zomangamanga. Pansi pa odulidwa ndikuwuzani momwe chimangochi chimagwirira ntchito komanso momwe mungalembe ntchito zogawidwa pogwiritsa ntchito.

Vuto ndi chiyani kwenikweni?

Tili ndi tarantula, tili ndi vshard - mungafunenso chiyani?

Choyamba, ndi nkhani yabwino. Kukonzekera kwa vshard kumakonzedwa kudzera pa matebulo a Lua. Kuti dongosolo logawidwa la njira zingapo za Tarantool zizigwira ntchito moyenera, kasinthidwe kake kuyenera kukhala kofanana kulikonse. Palibe amene akufuna kuchita izi pamanja. Chifukwa chake, mitundu yonse ya zolembedwa, Ansible, ndi njira zotumizira zimagwiritsidwa ntchito.

Cartridge yokha imayang'anira kasinthidwe ka vshard, imachita izi kutengera zake kasinthidwe kake komwe amagawidwa. Ndi fayilo ya YAML yosavuta, yomwe imasungidwa muzochitika zilizonse za Tarantool. Kuphweka ndikuti chimango chokha chimayang'anira kasinthidwe kake ndikuwonetsetsa kuti ndizofanana kulikonse.

Kachiwiri, ndi nkhani yothandizanso. Kusintha kwa vshard sikukhudzana ndi chitukuko cha malingaliro abizinesi ndipo kumangosokoneza wopanga mapulogalamu ku ntchito yake. Tikamakambirana za kamangidwe ka polojekiti, nthawi zambiri timalankhula za zigawo zaumwini ndi kuyanjana kwawo. Ndikoyamba kwambiri kuganiza zotulutsa gulu ku malo atatu a data.

Tinathetsa mavutowa mobwerezabwereza, ndipo nthawi ina tidatha kupanga njira yomwe imapangitsa kuti ntchitoyi ikhale yosavuta m'moyo wake wonse: chilengedwe, chitukuko, kuyesa, CI / CD, kukonza.

Cartridge imayambitsa lingaliro la gawo panjira iliyonse ya Tarantool. Maudindo ndi lingaliro lomwe limalola wopanga kuti aziyang'ana pa kulemba code. Maudindo onse omwe akupezeka mu pulojekitiyi amatha kuyendetsedwa pamwambo umodzi wa Tarantool, ndipo izi zikhala zokwanira kuyesa.

Zofunikira za Tarantool Cartridge:

  • makina oimbira masango;
  • kukulitsa magwiridwe antchito a pulogalamuyo pogwiritsa ntchito maudindo atsopano;
  • template yofunsira chitukuko ndi kutumiza;
  • kung'ambika kokhazikika;
  • kuphatikiza ndi dongosolo loyesera la Luatest;
  • kasamalidwe kamagulu pogwiritsa ntchito WebUI ndi API;
  • zonyamula ndi zida zotumizira.

Moni Dziko Lapansi!

Sindingathe kudikira kuti ndiwonetse chimango chokha, kotero tidzasiya nkhani ya zomangamanga pambuyo pake ndikuyamba ndi chinthu chophweka. Ngati tikuganiza kuti Tarantool yokha yakhazikitsidwa kale, ndiye zonse zomwe zatsala ndikuchita

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

Malamulo awiriwa adzayika zida zoyendetsera mzere ndikukulolani kuti mupange pulogalamu yanu yoyamba kuchokera pa template:

$ cartridge create --name myapp

Ndipo izi ndi zomwe timapeza:

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/

Ichi ndi git repository yokhala ndi "Moni, World" yokonzeka! ntchito. Tiyeni tiyese kuyendetsa nthawi yomweyo, tidayikapo zodalira (kuphatikiza chimango chokha):

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

Chifukwa chake, tili ndi node imodzi yomwe ikugwira ntchito yamtsogolo. Munthu wamba wofuna kudziwa akhoza kutsegula mawonekedwe a intaneti nthawi yomweyo, kukonza gulu la node imodzi ndi mbewa ndikusangalala ndi zotsatira zake, koma ndiyambirenso kusangalala. Pakalipano, kugwiritsa ntchito sikungathe kuchita chilichonse chothandiza, kotero ndikuwuzani za kutumizidwa pambuyo pake, koma tsopano ndi nthawi yolemba code.

Kupititsa patsogolo Ntchito

Tangoganizani, tikupanga pulojekiti yomwe iyenera kulandira deta, kuisunga ndi kupanga lipoti kamodzi patsiku.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Timayamba kujambula chithunzi ndikuyikapo zigawo zitatu: chipata, kusungirako ndi ndondomeko. Tikugwira ntchito yomanganso. Popeza timagwiritsa ntchito vshard ngati yosungirako, timawonjezera vshard-rauta ndi vshard-kusungirako ku chiwembu. Palibe chipata kapena wokonza mapulani omwe angalowemo mwachindunji; ndizomwe rauta imapangidwira, ndizomwe idapangidwira.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Chithunzichi sichikuyimirabe zomwe tikhala tikumanga mu pulojekitiyi chifukwa zigawo zake zimawoneka ngati zosamveka. Tikufunikabe kuwona momwe izi zidzachitikire ku Tarantool yeniyeni - tiyeni tigawane zigawo zathu mwadongosolo.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Palibe chifukwa chosunga vshard-router ndi zipata pazosiyana. Chifukwa chiyani tifunika kusefukiranso maukonde ngati ili kale udindo wa rauta? Ayenera kuyendetsedwa mkati mwa njira yomweyo. Ndiko kuti, zonse zipata ndi vshard.router.cfg zimayambitsidwa munjira imodzi, ndikuzilola kuti zizilumikizana kwanuko.

Pa siteji ya mapangidwe, kunali koyenera kugwira ntchito ndi zigawo zitatu, koma ine, monga wopanga mapulogalamu, ndikulemba code, sindikufuna kuganiza za kuyambitsa maulendo atatu a Tarnatool. Ndiyenera kuyesa mayeso ndikuwonetsetsa kuti ndalemba gateway molondola. Kapena ndikufuna kuwonetsa zina kwa anzanga. Chifukwa chiyani ndiyenera kudutsa zovuta zotumizira makope atatu? Umu ndi momwe lingaliro la maudindo linabadwira. Udindo ndi gawo lokhazikika la luash lomwe moyo wake umayendetsedwa ndi Cartridge. Mu chitsanzo ichi pali anayi a iwo - pachipata, rauta, yosungirako, scheduler. Pakhoza kukhala zambiri mu polojekiti ina. Maudindo onse amatha kuyendetsedwa munjira imodzi, ndipo izi zikhala zokwanira.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Ndipo zikafika pakutumizidwa ku masitepe kapena kupanga, ndiye kuti tigawira njira iliyonse ya Tarantool yomwe ili ndi magawo ake kutengera luso la hardware:

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Topology Management

Zambiri zokhudzana ndi maudindo omwe akugwira ziyenera kusungidwa kwinakwake. Ndipo "penapake" ndi kasinthidwe kogawidwa, komwe ndatchula kale pamwambapa. Chofunikira kwambiri pa izi ndi cluster topology. Nawa magulu atatu obwerezabwereza a njira 3 za Tarantool:

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Sitikufuna kutaya deta, chifukwa chake timasamalira zambiri zokhudzana ndi kayendetsedwe kake. Cartridge imayang'anira kasinthidwe pogwiritsa ntchito magawo awiri. Tikangofuna kukonzanso kasinthidwe, imafufuza kaye kuti zochitika zonse zilipo ndipo zakonzeka kuvomereza kusinthidwa kwatsopano. Pambuyo pa izi, gawo lachiwiri likugwiritsa ntchito config. Motero, ngakhale kope limodzi litapezeka kuti silikupezeka kwakanthaŵi, palibe choipa chimene chingachitike. Kukonzekera sikudzagwiritsidwa ntchito ndipo mudzawona cholakwika pasadakhale.

Komanso mu gawo la topology, gawo lofunikira monga mtsogoleri wa gulu lililonse lobwereza likuwonetsedwa. Kawirikawiri ili ndilo kope lomwe likujambulidwa. Zotsalazo nthawi zambiri zimakhala zowerengedwa kokha, ngakhale pangakhale zosiyana. Nthawi zina opanga olimba mtima samawopa mikangano ndipo amatha kulemba deta kuzinthu zingapo zofanana, koma pali ntchito zina zomwe, zivute zitani, siziyenera kuchitidwa kawiri. Kwa ichi pali chizindikiro cha mtsogoleri.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Moyo wa maudindo

Kuti gawo losamvetsetseka likhalepo muzomangamanga zotere, chimango chiyenera kuwongolera mwanjira ina. Mwachilengedwe, kuwongolera kumachitika popanda kuyambitsanso njira ya Tarantool. Pali 4 callbacks kuyang'anira maudindo. Cartridge palokha imawatchula kutengera zomwe zalembedwa pamasinthidwe ake, potero kugwiritsa ntchito kasinthidwe ku maudindo ena.

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

Udindo uliwonse uli ndi ntchito yake init. Imatchedwa kamodzi mwina pamene udindo watha kapena pamene Tarantool kuyambiransoko. Ndikoyenera pamenepo, mwachitsanzo, kuyambitsa box.space.create, kapena wokonza akhoza kukhazikitsa ulusi wina wakumbuyo womwe umagwira ntchito pakanthawi kochepa.

Ntchito imodzi init mwina sizingakhale zokwanira. Cartridge imalola maudindo kuti atengerepo mwayi pamasinthidwe omwe amagawidwa omwe amagwiritsa ntchito kusunga topology. Titha kulengeza gawo latsopano mukukonzekera komweko ndikusunga chidutswa cha kasinthidwe ka bizinesi momwemo. M'chitsanzo changa, ichi chikhoza kukhala schema ya data kapena ndandanda ya gawo la ndandanda.

Kuyimba kwa Cluster validate_config и apply_config nthawi zonse zomwe zimagawidwa zikusintha. Kukonzekera kukagwiritsidwa ntchito ndi gawo la magawo awiri, gululo limayang'ana kuti gawo lililonse liri lokonzeka kuvomereza kasinthidwe kwatsopano ndipo, ngati kuli kofunikira, limafotokoza cholakwika kwa wogwiritsa ntchito. Pamene aliyense avomereza kuti kasinthidwe ndi wabwinobwino, ndiye apply_config.

Komanso maudindo ali ndi njira stop, zomwe zimafunika kuyeretsa zotsatira za ntchitoyo. Tikanena kuti scheduler sakufunikanso pa seva iyi, imatha kuyimitsa ulusi womwe idayamba nawo init.

Maudindo amatha kuyanjana wina ndi mnzake. Tidazolowera kulemba mafoni amtundu wa Lua, koma zitha kuchitika kuti njira yomwe yaperekedwa ilibe gawo lomwe timafunikira. Kuti tithandizire kuyimba pamaneti, timagwiritsa ntchito gawo lothandizira la rpc (remote process call), lomwe limamangidwa pamaziko a netbox yokhazikika yomangidwa mu Tarantool. Izi zitha kukhala zothandiza ngati, mwachitsanzo, chipata chanu chikufuna kufunsa wokonza kuti agwire ntchitoyi pakali pano, m'malo modikirira tsiku.

Mfundo ina yofunika ndikuwonetsetsa kulolerana kwa zolakwika. Cartridge amagwiritsa ntchito protocol ya SWIM kuyang'anira thanzi [4]. Mwachidule, njira zimasinthira "zabodza" wina ndi mnzake pa UDP-njira iliyonse imauza oyandikana nawo nkhani zaposachedwa, ndipo amayankha. Ngati mwadzidzidzi yankho silibwera, Tarantool amayamba kukayikira kuti chinachake chalakwika, ndipo patapita kanthawi amabwereza imfa ndikuyamba kuuza aliyense kuzungulira nkhaniyi.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Kutengera protocol iyi, Cartridge imakonza zolephera zokha. Njira iliyonse imayang'anira chilengedwe chake, ndipo ngati mtsogoleri asiya kuyankha mwadzidzidzi, chofananacho chikhoza kutenga udindo wake, ndipo Cartridge amakonza maudindo moyenerera.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Muyenera kusamala pano, chifukwa kusinthasintha pafupipafupi kungayambitse mikangano ya data pakubwereza. Zachidziwikire, simuyenera kuloleza kulephera kwachisawawa. Tiyenera kumvetsetsa bwino zomwe zikuchitika ndikutsimikiza kuti kubwereza sikudzasweka mtsogoleriyo atabwezeretsedwa ndikubwezeredwa korona kwa iye.

Kuchokera pa zonsezi, mutha kumva kuti maudindo akufanana ndi ma microservices. Mwanjira ina, zili choncho, monga ma module mkati mwa njira za Tarantool. Koma palinso kusiyana kwakukulu. Choyamba, maudindo onse a polojekiti ayenera kukhala mu code yofanana. Ndipo njira zonse za Tarantool ziyenera kukhazikitsidwa kuchokera pama code omwewo, kuti pasakhale zodabwitsa ngati zomwe tikuyesera kuyambitsa ndondomeko, koma palibe. Komanso, simuyenera kulola kusiyana kwa ma codec versions, chifukwa khalidwe la dongosolo muzochitika zoterezi ndizovuta kwambiri kudziwiratu ndikuwongolera.

Mosiyana ndi Docker, sitingangotenga gawo "chithunzi", kupita nacho ku makina ena ndikuchiyendetsa pamenepo. Maudindo athu sali okha ngati zotengera za Docker. Komanso, sitingathe kugwira ntchito ziwiri zofanana pa nthawi imodzi. Udindo umakhalapo kapena palibe; mwanjira ina, ndi singleton. Ndipo chachitatu, maudindo ayenera kukhala ofanana mkati mwa gulu lonse lobwerezabwereza, chifukwa mwinamwake zingakhale zopanda pake - deta ndi yofanana, koma kasinthidwe ndi kosiyana.

Zida zotumizira

Ndinalonjeza kusonyeza momwe Cartridge imathandizira kutumiza mapulogalamu. Kuti moyo ukhale wosavuta kwa ena, chimango chimayika phukusi la RPM:

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

Phukusi lokhazikitsidwa lili ndi pafupifupi chilichonse chomwe mungafune: zonse zomwe zimagwiritsidwa ntchito komanso zodalira zomwe zayikidwa. Tarantool idzafikanso pa seva ngati kudalira phukusi la RPM, ndipo ntchito yathu yakonzeka kuyambitsa. Izi zimachitika kudzera mu systemd, koma choyamba muyenera kulemba kasinthidwe kakang'ono. Osachepera, tchulani URI ya ndondomeko iliyonse. Zitatu ndi zokwanira mwachitsanzo.

$ 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

Pali chidwi nuance apa. M'malo mongotchula doko la binary protocol, timatchula adilesi yonse yapagulu yanjirayo kuphatikiza dzina la alendo. Izi ndizofunikira kuti ma masango adziwe momwe angalumikizire wina ndi mnzake. Ndizolakwika kugwiritsa ntchito 0.0.0.0 ngati adilesi ya advertise_uri; iyenera kukhala adilesi yakunja ya IP, osati yomanga socket. Popanda izi, palibe chomwe chingagwire ntchito, chifukwa chake Cartridge sangakulole kuti mutsegule node ndi ad_uri olakwika.

Tsopano kuti kasinthidwe ndi wokonzeka, mukhoza kuyamba njira. Popeza gawo lokhazikika la systemd silimalola njira yopitilira imodzi kuti iyambike, mapulogalamu pa Cartridge amayikidwa ndi omwe amatchedwa. mayunitsi omwe amagwira ntchito motere:

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

Pokonzekera, tidatchula doko la HTTP pomwe Cartridge imagwiritsa ntchito mawonekedwe a intaneti - 8080. Tiyeni tipiteko ndikuwona:

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Tikuwona kuti ngakhale njira zikuyenda, sizinakonzedwe. Katiriji sadziwa yemwe ayenera kubwereza ndi ndani ndipo sangathe kupanga chisankho payekha, choncho akuyembekezera zochita zathu. Koma tilibe zosankha zambiri: moyo wa gulu latsopano umayamba ndi kasinthidwe ka node yoyamba. Kenaka tidzawonjezera ena kumagulu, kuwapatsa maudindo, ndipo panthawiyi ntchitoyo ikhoza kuganiziridwa kuti yatha bwino.

Tiyeni tithire kapu ya chakumwa chomwe mumakonda ndikupumula pambuyo pa sabata lalitali lantchito. Pulogalamuyi ingagwiritsidwe ntchito.

Tarantool Cartridge: kugawana kumbuyo kwa Lua m'mizere itatu

Zotsatira

Zotsatira zake ndi zotani? Yesani, gwiritsani ntchito, siyani ndemanga, pangani matikiti pa Github.

powatsimikizira

[1] Tarantool » 2.2 »Nkhani » Mafotokozedwe a miyala » Module vshard

[2] Momwe tidakhazikitsira maziko abizinesi ya Alfa-Bank yotengera Tarantool

[3] Zomangamanga zolipiritsa za m'badwo watsopano: kusintha ndikusintha kupita ku Tarantool

[4] SWIM - protocol yomanga masango

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/katiriji

Source: www.habr.com

Kuwonjezera ndemanga