Tarantool Cartridge: sharding Lua backend hauv peb kab

Tarantool Cartridge: sharding Lua backend hauv peb kab

Ntawm Mail.ru Group peb muaj Tarantool - qhov no yog daim ntawv thov neeg rau zaub mov hauv Lua, uas tseem muab ob npaug rau hauv cov ntaub ntawv (lossis lwm qhov?). Nws ceev thiab txias, tab sis lub peev xwm ntawm ib tus neeg rau zaub mov tseem tsis muaj qhov txwv. Vertical scaling kuj tsis yog panacea, yog li Tarantool muaj cov cuab yeej rau kev ntsuas kab rov tav - lub vshard module [1]. Nws tso cai rau koj kom shard cov ntaub ntawv hla ntau lub servers, tab sis koj yuav tsum tau tinker nrog nws los teeb tsa thiab xa cov kev lag luam logic.

Xov xwm zoo: peb tau sau qee qhov kev txhaj tshuaj loj (xws li [2], [3]) thiab tsim lwm lub moj khaum uas yuav ua kom yooj yim rau txoj kev daws teeb meem no.

Tarantool Cartridge yog lub moj khaum tshiab rau kev tsim cov txheej txheem sib faib. Nws tso cai rau koj tsom mus rau kev sau cov kev lag luam logic es tsis txhob daws cov teeb meem hauv vaj tse. Hauv qab no qhov kev txiav kuv yuav qhia koj seb lub moj khaum no ua haujlwm li cas thiab yuav sau cov kev pabcuam faib li cas siv nws.

Qhov teeb meem yog dab tsi?

Peb muaj tarantula, peb muaj vshard - dab tsi ntxiv koj xav tau?

Ua ntej, nws yog ib qho teeb meem ntawm kev yooj yim. Lub vshard configuration yog configured los ntawm Lua rooj. Rau ib qho kev faib tawm ntawm ntau cov txheej txheem Tarantool ua haujlwm kom raug, kev teeb tsa yuav tsum zoo ib yam txhua qhov chaw. Tsis muaj leej twg xav ua qhov no manually. Yog li ntawd, txhua yam kev sau ntawv, Ansible, thiab kev xa tawm tau siv.

Cartridge nws tus kheej tswj lub vshard configuration, nws ua qhov no raws li nws tus kheej faib configuration. Nws yog ib qho tseem ceeb ntawm YAML cov ntaub ntawv yooj yim, ib daim qauv uas tau muab khaws cia hauv txhua qhov piv txwv Tarantool. Qhov yooj yim yog tias lub moj khaum nws tus kheej saib xyuas nws cov teeb tsa thiab xyuas kom meej tias nws zoo ib yam nyob txhua qhov chaw.

Qhov thib ob, nws yog ib qho teeb meem ntawm kev yooj yim dua. Lub vshard configuration tsis muaj dab tsi cuam tshuam nrog kev txhim kho kev lag luam logic thiab tsuas yog cuam tshuam tus programmer los ntawm nws txoj haujlwm. Thaum peb tham txog kev tsim qauv ntawm ib qhov project, peb feem ntau tham txog tus kheej cov khoom thiab lawv cov kev sib cuam tshuam. Nws tseem ntxov dhau los xav txog kev nthuav tawm ib pawg mus rau 3 cov chaw khaws ntaub ntawv.

Peb tau daws cov teeb meem no ntau zaus, thiab qee lub sijhawm peb tau tswj hwm los txhim kho txoj hauv kev yooj yim ua haujlwm nrog daim ntawv thov thoob plaws hauv nws lub neej: kev tsim, kev loj hlob, kev sim, CI / CD, kev saib xyuas.

Cartridge qhia lub tswv yim ntawm lub luag haujlwm rau txhua tus txheej txheem Tarantool. Lub luag haujlwm yog lub tswv yim uas tso cai rau tus tsim tawm tsom mus rau kev sau cov lej. Txhua lub luag haujlwm muaj nyob hauv qhov project tuaj yeem khiav ntawm ib qho piv txwv Tarantool, thiab qhov no yuav txaus rau kev xeem.

Cov yam ntxwv tseem ceeb ntawm Tarantool Cartridge:

  • automated pawg orchestration;
  • nthuav kev ua haujlwm ntawm daim ntawv thov siv lub luag haujlwm tshiab;
  • daim ntawv thov template rau kev txhim kho thiab xa mus;
  • built-in tsis siv neeg sharding;
  • kev koom ua ke nrog Luatest kev xeem lub moj khaum;
  • tswj pawg siv WebUI thiab API;
  • ntim thiab xa tawm cov cuab yeej.

Nyob zoo, Ntiaj Teb!

Kuv tsis tuaj yeem tos kom qhia lub moj khaum nws tus kheej, yog li peb yuav tawm hauv zaj dab neeg txog kev tsim qauv rau tom qab thiab pib nrog qee yam yooj yim. Yog tias peb xav tias Tarantool nws tus kheej twb tau teeb tsa, ces txhua yam uas tseem tshuav yog ua

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

Ob cov lus txib no yuav nruab cov kab lus hais kom ua thiab tso cai rau koj los tsim koj thawj daim ntawv thov los ntawm tus qauv:

$ cartridge create --name myapp

Thiab qhov no yog qhov peb tau txais:

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/

Qhov no yog git repository nrog npaj txhij-ua "nyob zoo, ntiaj teb!" daim ntawv thov. Cia peb sim khiav nws tam sim ntawd, muaj yav tas los teeb tsa cov kev vam meej (nrog rau lub moj khaum nws tus kheej):

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

Yog li, peb muaj ib qho ntawm kev khiav haujlwm rau yav tom ntej sharded daim ntawv thov. Ib tug inquisitive layman tuaj yeem qhib lub vev xaib tam sim ntawd, teeb tsa ib pawg ntawm ib qho ntawm tus nas thiab txaus siab rau qhov tshwm sim, tab sis nws ntxov dhau los zoo siab. Txog tam sim no daim ntawv thov tsis tuaj yeem ua dab tsi muaj txiaj ntsig, yog li kuv yuav qhia koj txog kev xa tawm tom qab, tab sis tam sim no nws yog lub sijhawm los sau cov lej.

Kev txhim kho kev thov

Cia li xav txog, peb tab tom tsim ib qhov project uas yuav tsum tau txais cov ntaub ntawv, txuag nws thiab tsim ib daim ntawv qhia ib hnub ib zaug.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Peb pib kos ib daim duab thiab tso peb yam khoom rau nws: rooj vag, cia thiab teem caij. Peb tab tom ua haujlwm ntawm architecture ntxiv. Txij li thaum peb siv vshard li cia, peb ntxiv vshard-router thiab vshard-cia rau lub tswv yim. Tsis yog lub rooj vag lossis tus teem sijhawm yuav ncaj qha nkag mus rau qhov chaw cia;

Tarantool Cartridge: sharding Lua backend hauv peb kab

Daim duab no tseem tsis qhia meej txog qhov peb yuav tsim nyob rau hauv qhov project vim hais tias cov khoom zoo li abstract. Peb tseem yuav tau saib seb qhov no yuav ua li cas rau hauv Tarantool tiag tiag - cia peb pab pawg los ntawm cov txheej txheem.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Tsis muaj qhov taw tes me me hauv kev khaws vshard-router thiab rooj vag ntawm qhov sib txawv. Vim li cas peb yuav tsum tau nthwv dej ntawm lub network ib zaug yog tias qhov no twb yog lub luag haujlwm ntawm router? Lawv yuav tsum tau khiav hauv tib txoj kev. Ntawd yog, ob lub rooj vag thiab vshard.router.cfg tau pib ua haujlwm hauv ib txheej txheem, thiab cia lawv cuam tshuam hauv zos.

Nyob rau theem tsim, nws yooj yim rau kev ua haujlwm nrog peb yam, tab sis kuv, raws li tus tsim tawm, thaum sau tus lej, tsis xav xav txog kev pib peb zaug ntawm Tarnatool. Kuv yuav tsum tau khiav cov kev xeem thiab xyuas tias kuv sau lub rooj vag kom raug. Los yog tej zaum kuv xav ua qauv qhia rau kuv cov npoj yaig. Vim li cas kuv thiaj yuav tsum mus dhau qhov teeb meem ntawm kev xa peb daim ntawv luam? Qhov no yog li cas lub tswvyim ntawm lub luag haujlwm tau yug los. Lub luag hauj lwm yog ib tug niaj hnub lush module uas nws lub neej voj voog yog tswj los ntawm Cartridge. Hauv qhov piv txwv no muaj plaub ntawm lawv - rooj vag, router, cia, teem sijhawm. Tej zaum yuav muaj ntau dua hauv lwm qhov project. Txhua lub luag haujlwm tuaj yeem khiav hauv ib txheej txheem, thiab qhov no yuav txaus.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Thiab thaum nws los txog rau kev xa mus rau staging lossis ntau lawm, peb yuav muab txhua tus txheej txheem Tarantool nws tus kheej lub luag haujlwm nyob ntawm qhov muaj peev xwm kho vajtse:

Tarantool Cartridge: sharding Lua backend hauv peb kab

Kev tswj hwm topology

Cov ntaub ntawv hais txog qhov twg lub luag haujlwm yuav tsum tau muab khaws cia rau qhov chaw. Thiab qhov no "qhov chaw" yog qhov kev faib tawm, uas kuv twb tau hais saum toj no. Qhov tseem ceeb tshaj plaws ntawm nws yog pawg topology. Nov yog 3 pawg replication ntawm 5 cov txheej txheem Tarantool:

Tarantool Cartridge: sharding Lua backend hauv peb kab

Peb tsis xav poob cov ntaub ntawv, yog li peb kho cov ntaub ntawv hais txog kev khiav haujlwm nrog kev saib xyuas. Cartridge khaws cov kev teeb tsa uas siv ob-theem kev cog lus. Thaum peb xav hloov kho qhov teeb tsa, nws ua ntej kuaj xyuas tias txhua qhov xwm txheej muaj thiab npaj los lees txais qhov kev teeb tsa tshiab. Tom qab no, theem thib ob siv lub config. Yog li, txawm tias ib daim ntawv luam tawm mus ib ntus, tsis muaj dab tsi phem yuav tshwm sim. Lub configuration yuav tsuas tsis raug siv thiab koj yuav pom ib qho yuam kev ua ntej.

Tsis tas li nyob rau hauv ntu topology, xws li ib qho tseem ceeb parameter raws li tus thawj coj ntawm txhua pawg replication yog qhia. Feem ntau qhov no yog daim ntawv uas raug kaw. Cov seem feem ntau yog nyeem nkaus xwb, txawm tias yuav muaj kev zam. Qee lub sij hawm cov neeg tsim khoom siab tawv tsis ntshai ntawm kev tsis sib haum xeeb thiab tuaj yeem sau cov ntaub ntawv rau ntau qhov kev sib txuas ua ke, tab sis muaj qee qhov haujlwm uas, tsis muaj teeb meem dab tsi, yuav tsum tsis txhob ua ob zaug. Rau qhov no muaj ib tug kos npe rau ntawm ib tug thawj coj.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Lub neej ntawm lub luag haujlwm

Rau lub luag haujlwm paub daws teeb meem kom muaj nyob rau hauv xws li architecture, lub moj khaum yuav tsum tswj lawv li cas. Lawm, kev tswj tau tshwm sim yam tsis tau rov pib txheej txheem Tarantool. Muaj 4 callbacks los tswj lub luag haujlwm. Cartridge nws tus kheej yuav hu rau lawv nyob ntawm seb tau sau dab tsi hauv nws qhov kev faib tawm, yog li siv cov kev teeb tsa rau cov luag haujlwm tshwj xeeb.

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

Txhua lub luag haujlwm muaj lub luag haujlwm init. Nws raug hu ib zaug thaum lub luag haujlwm qhib lossis thaum Tarantool rov pib dua. Nws yog qhov yooj yim nyob ntawd, piv txwv li, txhawm rau pib box.space.create, lossis lub sijhawm teem sijhawm tuaj yeem tso qee qhov keeb kwm yav dhau los uas yuav ua haujlwm ntawm qee lub sijhawm.

Ib txoj haujlwm init tej zaum yuav tsis txaus. Cartridge tso cai rau lub luag haujlwm los ua kom zoo dua ntawm qhov kev faib tawm uas nws siv los khaws cov topology. Peb tuaj yeem tshaj tawm ib ntu tshiab hauv tib qhov kev teeb tsa thiab khaws ib feem ntawm kev lag luam teeb tsa hauv nws. Hauv kuv qhov piv txwv, qhov no tuaj yeem yog cov ntaub ntawv schema lossis lub sijhawm teem sijhawm rau lub luag haujlwm teem sijhawm.

Pawg hu validate_config и apply_config txhua lub sij hawm tus faib configuration hloov. Thaum ib qho kev teeb tsa raug siv los ntawm ob-theem kev cog lus, pawg kuaj xyuas tias txhua lub luag haujlwm tau npaj los lees txais qhov kev teeb tsa tshiab no thiab, yog tias tsim nyog, qhia txog qhov yuam kev rau tus neeg siv. Thaum txhua tus pom zoo tias qhov kev teeb tsa yog qhov qub, ces qhov apply_config.

Cov luag hauj lwm tseem muaj txoj hauv kev stop, uas yog xav tau los ntxuav lub luag haujlwm ntawm cov zis. Yog tias peb hais tias tus teem sijhawm tsis xav tau ntawm lub server no lawm, nws tuaj yeem nres cov fibers uas nws pib nrog init.

Lub luag haujlwm tuaj yeem cuam tshuam nrog ib leeg. Peb tau siv los sau cov haujlwm hu hauv Lua, tab sis nws yuav tshwm sim tias cov txheej txheem muab tsis muaj lub luag haujlwm peb xav tau. Txhawm rau pab txhawb kev hu xov tooj hauv lub network, peb siv rpc (cov txheej txheem hu xov tooj nyob deb) auxiliary module, uas yog tsim los ntawm tus qauv netbox ua rau hauv Tarantool. Qhov no tuaj yeem pab tau yog tias, piv txwv li, koj lub rooj vag xav nug ncaj qha rau tus teem sijhawm ua txoj haujlwm tam sim no, tsis yog tos ib hnub.

Lwm qhov tseem ceeb yog ua kom muaj kev zam txim txhaum. Cartridge siv SWIM raws tu qauv los saib xyuas kev noj qab haus huv [4]. Hauv luv luv, cov txheej txheem pauv "lus xaiv" nrog ib leeg dhau UDP-txhua tus txheej txheem qhia nws cov neeg nyob ze cov xov xwm tshiab kawg, thiab lawv teb. Yog tias mam li nco dheev cov lus teb tsis tuaj, Tarantool pib xav tias ib yam dab tsi tsis ncaj ncees lawm, thiab tom qab ib pliag nws rov hais txog kev tuag thiab pib qhia txhua tus neeg nyob ib puag ncig cov xov xwm no.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Raws li txoj cai no, Cartridge teeb tsa kev ua haujlwm tsis siv neeg. Txhua tus txheej txheem saib xyuas nws ib puag ncig, thiab yog tias tus thawj coj dheev nres tsis teb, tus replica tuaj yeem tuav nws lub luag haujlwm, thiab Cartridge teeb tsa lub luag haujlwm raws li.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Koj yuav tsum tau ceev faj ntawm no, vim tias nquag hloov mus rau sab nraud tuaj yeem ua rau cov ntaub ntawv tsis sib haum xeeb thaum rov ua dua. Tau kawg, koj yuav tsum tsis txhob ua kom tsis siv neeg tsis ua haujlwm ntawm random. Peb yuav tsum to taub meej txog qhov tshwm sim thiab nco ntsoov tias kev rov ua dua yuav tsis tawg tom qab tus thawj coj rov qab los thiab lub kaus mom rov qab los rau nws.

Los ntawm tag nrho cov no, koj tuaj yeem xav tias lub luag haujlwm zoo ib yam li microservices. Hauv kev nkag siab, lawv tsuas yog qhov ntawd, tsuas yog raws li cov qauv hauv cov txheej txheem Tarantool. Tab sis kuj tseem muaj ntau qhov sib txawv tseem ceeb. Ua ntej, txhua txoj haujlwm ua haujlwm yuav tsum nyob hauv tib lub hauv paus code. Thiab tag nrho cov txheej txheem Tarantool yuav tsum tau pib los ntawm tib lub hauv paus, kom tsis muaj qhov xav tsis thoob li cov thaum peb sim pib lub sijhawm teem sijhawm, tab sis nws tsuas tsis muaj nyob. Tsis tas li ntawd, koj yuav tsum tsis txhob tso cai rau qhov sib txawv ntawm cov code versions, vim hais tias tus cwj pwm ntawm lub system nyob rau hauv xws li ib tug teeb meem yog heev nyuaj rau kwv yees thiab debug.

Tsis zoo li Docker, peb tsis tuaj yeem ua lub luag haujlwm "duab", coj nws mus rau lwm lub tshuab thiab khiav nws nyob ntawd. Peb lub luag haujlwm tsis raug cais raws li Docker ntim. Tsis tas li ntawd, peb tsis tuaj yeem khiav ob lub luag haujlwm zoo ib yam ntawm ib qho piv txwv. Ib lub luag haujlwm yog muaj los yog tsis muaj; hauv kev nkag siab, nws yog ib leeg. Thiab qhov thib peb, lub luag haujlwm yuav tsum yog tib yam nyob rau hauv tag nrho cov replication pawg, vim hais tias txwv tsis pub nws yuav absurd - cov ntaub ntawv yog tib yam, tab sis cov configuration yog txawv.

Cov cuab yeej siv

Kuv tau cog lus tias yuav qhia tias Cartridge pab xa cov ntawv thov li cas. Txhawm rau ua kom lub neej yooj yim dua rau lwm tus, lub moj khaum pob RPM pob:

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

Lub pob teeb tsa muaj yuav luag txhua yam uas koj xav tau: ob qho tib si daim ntawv thov thiab cov kev vam khom. Tarantool tseem yuav tuaj txog ntawm tus neeg rau zaub mov raws li qhov kev vam khom ntawm pob RPM, thiab peb cov kev pabcuam tau npaj rau kev tshaj tawm. Qhov no yog ua los ntawm systemd, tab sis ua ntej koj yuav tsum tau sau me ntsis configuration. Yam tsawg kawg nkaus, qhia URI ntawm txhua tus txheej txheem. Peb yog txaus rau piv txwv.

$ 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

Muaj ib qho nthuav nuance ntawm no. Hloov chaw tsuas yog qhov chaw nres nkoj binary raws tu qauv, peb qhia tag nrho cov chaw nyob pej xeem ntawm tus txheej txheem suav nrog lub npe hostname. Qhov no yog qhov tsim nyog kom cov pawg nodes paub txuas mus rau ib leeg. Nws yog ib lub tswv yim phem uas siv 0.0.0.0 raws li advertise_uri chaw nyob; nws yuav tsum yog qhov chaw nyob sab nraud IP, tsis yog lub qhov (socket) khi. Yog tsis muaj nws, tsis muaj dab tsi yuav ua hauj lwm, yog li Cartridge tsuas yuav tsis cia koj tso lub node nrog advertise_uri tsis ncaj ncees lawm.

Tam sim no hais tias lub configuration yog npaj txhij, koj tuaj yeem pib cov txheej txheem. Txij li cov chav tsev tsis tu ncua tsis pub ntau tshaj ib txoj kev pib, cov ntawv thov ntawm Cartridge raug teeb tsa los ntawm qhov hu ua. instantiated units uas ua haujlwm zoo li no:

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

Hauv kev teeb tsa, peb tau teev qhov chaw nres nkoj HTTP uas Cartridge ua haujlwm rau lub vev xaib interface - 8080. Cia peb mus rau nws thiab saib:

Tarantool Cartridge: sharding Lua backend hauv peb kab

Peb pom tias txawm hais tias cov txheej txheem tab tom khiav, lawv tseem tsis tau teeb tsa. Daim cartridge tseem tsis tau paub tias leej twg yuav tsum rov ua dua nrog leej twg thiab tsis tuaj yeem txiav txim siab ntawm nws tus kheej, yog li nws tseem tos peb qhov kev ua. Tab sis peb tsis muaj ntau txoj kev xaiv: lub neej ntawm ib pawg tshiab pib nrog kev teeb tsa ntawm thawj lub pob. Tom qab ntawd peb yuav ntxiv lwm tus rau hauv pawg, muab lawv lub luag haujlwm, thiab ntawm qhov no, kev xa tawm tuaj yeem suav tias ua tiav tiav.

Cia peb ncuav ib khob ntawm koj nyiam haus thiab so tom qab lub lim tiam ua haujlwm ntev. Daim ntawv thov tuaj yeem siv tau.

Tarantool Cartridge: sharding Lua backend hauv peb kab

Cov txiaj ntsim tau los

Cov txiaj ntsig yog dab tsi? Sim nws, siv nws, tawm tswv yim, tsim daim pib ntawm Github.

ua tim khawv

[1] Tarantool » 2.2 » Reference » Pob zeb siv » Module vshard

[2] Yuav ua li cas peb tau siv lub hauv paus ntawm Alfa-Bank kev nqis peev ua lag luam raws li Tarantool

[3] Tshiab tiam sau nqi architecture: kev hloov pauv nrog kev hloov mus rau Tarantool

[4] SWIM - pawg kev tsim kho raws tu qauv

[5] GitHub - tarantool/cartridge-cli

[6] GitHub - tarantool/cartridge

Tau qhov twg los: www.hab.com

Ntxiv ib saib