Yuav tsum tsis txhob txhawj xeeb thiab pib ua neej tsis muaj monolith

Yuav tsum tsis txhob txhawj xeeb thiab pib ua neej tsis muaj monolith

Peb txhua tus nyiam zaj dab neeg. Peb nyiam zaum ntawm qhov hluav taws kub thiab tham txog peb qhov kev yeej dhau los, kev sib ntaus sib tua, lossis tsuas yog peb qhov kev paub ua haujlwm.

Hnub no tsuas yog ib hnub xwb. Thiab txawm hais tias koj tsis nyob ntawm qhov hluav taws kub tam sim no, peb muaj ib zaj dab neeg rau koj. Zaj dab neeg ntawm yuav ua li cas peb pib ua haujlwm nrog kev cia ntawm Tarantool.

Ib zaug dhau los, peb lub tuam txhab muaj ob peb "monoliths" thiab ib "qab nthab" rau txhua tus, uas cov monoliths tau maj mam tab sis muaj tseeb ze, txwv kev ya davhlau ntawm peb lub tuam txhab, peb txoj kev loj hlob. Thiab muaj kev nkag siab meej: muaj ib hnub peb yuav tsoo lub qab nthab nyuaj.

Nws yog tam sim no lub tswv yim ntawm kev sib cais txhua yam thiab txhua tus, los ntawm cov cuab yeej siv rau kev lag luam logic. Raws li qhov tshwm sim, peb, piv txwv li, muaj ob lub DCs uas ua haujlwm ywj pheej ntawm qib network. Thiab ces txhua yam txawv kiag li.

Niaj hnub no, muaj ntau yam cuab yeej thiab cov cuab yeej los hloov pauv hauv daim ntawv CI/CD, K8S, thiab lwm yam. Hauv lub sijhawm "monolithic", peb tsis xav tau ntau lo lus txawv teb chaws. Nws yog txaus los kho qhov "cia" hauv database.

Tab sis lub sij hawm txav mus rau pem hauv ntej, thiab tus naj npawb ntawm kev thov mus rau pem hauv ntej nrog nws, qee zaum tua RPS dhau ntawm peb lub peev xwm. Nrog rau kev nkag ntawm CIS lub teb chaws mus rau hauv kev ua lag luam, lub load ntawm lub database processor ntawm thawj monolith tsis poob qis dua 90%, thiab RPS tseem nyob rau theem ntawm 2400. Thiab cov no tsis yog me me selectors, tab sis hefty queries nrog ib tug pawg ntawm cov tshev thiab JOINs uas tuaj yeem khiav yuav luag ib nrab ntawm cov ntaub ntawv tiv thaiv keeb kwm yav dhau ntawm IO loj.

Thaum tag nrho-fledged Black Friday muag khoom pib tshwm rau ntawm qhov chaw - thiab Wildberries yog ib tug ntawm cov thawj tuav lawv nyob rau hauv Russia - qhov teeb meem no los ua tu siab kawg. Tom qab tag nrho, lub load ntawm xws hnub nce peb zaug.
Auj, cov "monolithic lub sij hawm"! Kuv paub tseeb tias koj tau ntsib qee yam zoo sib xws, thiab koj tseem tsis tuaj yeem nkag siab tias qhov no tuaj yeem tshwm sim rau koj li cas.

Koj tuaj yeem ua dab tsi - zam yog muaj nyob rau hauv technology. Txog 5 xyoos dhau los, peb yuav tsum rov xav dua ib qho ntawm cov mods no nyob rau hauv daim ntawv ntawm ib qho chaw uas twb muaj lawm ntawm .NET thiab MS SQL server, uas ua tib zoo khaws tag nrho cov logic ntawm lub xaib nws tus kheej. Kuv khaws cia kom zoo zoo tias pom cov monolith zoo li no tau ua ntev thiab tsis yooj yim txaus siab.
Ib tug me me digression.

Ntawm ntau yam xwm txheej kuv hais tias: "Yog tias koj tsis pom lub monolith, ces koj tsis loj hlob!" Kuv txaus siab rau koj qhov kev xav ntawm qhov teeb meem no, thov sau rau hauv cov lus.

Suab Nkauj

Cia peb rov qab mus rau peb "nplua nuj". Txhawm rau faib cov khoom ntawm "monolithic" kev ua haujlwm, peb tau txiav txim siab faib cov txheej txheem rau hauv microservices raws li kev siv thev naus laus zis. Vim tias, yam tsawg kawg, lawv pheej yig dua los teev. Thiab peb muaj 100% kev nkag siab tias peb yuav tsum tau ntsuas (thiab ntau). Tom qab tag nrho, twb nyob rau lub sij hawm ntawd nws muaj peev xwm nkag mus rau hauv kev lag luam ntawm cov teb chaws nyob sib ze, thiab cov naj npawb ntawm cov npe, nrog rau cov kev txiav txim, pib loj hlob ntau heev.

Tom qab txheeb xyuas thawj tus neeg sib tw rau kev tawm ntawm monolith mus rau microservices, peb pom tau tias 80% ntawm cov ntawv sau rau hauv lawv yog los ntawm cov chaw ua haujlwm tom qab, thiab nyeem los ntawm lub chaw ua haujlwm pem hauv ntej. Ua ntej tshaj plaws, qhov no cuam tshuam txog ob peb lub subsystems tseem ceeb rau peb - ​​cov neeg siv cov ntaub ntawv thiab cov txheej txheem rau kev suav cov nqi kawg ntawm cov khoom raws li cov ntaub ntawv hais txog cov neeg siv khoom ntxiv thiab daim coupon.

Indented. Tam sim no nws txaus ntshai los xav txog, tab sis ntxiv rau cov lus hais saum toj no, cov khoom lag luam catalogs, cov neeg siv khoom lag luam, cov khoom siv tshawb nrhiav, cov txheej txheem lim rau cov khoom catalogs, thiab ntau hom kev pom zoo tau raug tshem tawm ntawm peb lub monolith. Rau kev ua haujlwm ntawm lawv txhua tus, muaj cov chav sib cais ntawm cov txheej txheem nqaim, tab sis ib zaug dhau los lawv txhua tus nyob hauv ib "tsev".

Peb tau npaj tam sim ntawd hloov cov ntaub ntawv hais txog peb cov neeg siv khoom mus rau qhov system sharded. Kev tshem tawm ntawm kev ua haujlwm rau kev suav cov nqi kawg ntawm cov khoom yuav tsum tau ua kom muaj txiaj ntsig zoo rau kev nyeem ntawv, vim tias nws tsim qhov loj tshaj RPS load thiab yog qhov nyuaj tshaj plaws rau kev siv rau cov ntaub ntawv (ntau cov ntaub ntawv koom nrog hauv cov txheej txheem suav).

Raws li qhov tshwm sim, peb tuaj nrog lub tswv yim uas haum zoo nrog Tarantool.

Thaum lub sijhawm ntawd, rau kev ua haujlwm ntawm microservices, cov tswv yim rau kev ua haujlwm nrog ntau lub chaw cov ntaub ntawv ntawm virtual thiab hardware machines raug xaiv. Raws li pom nyob rau hauv cov duab, Tarantool replication xaiv tau siv nyob rau hauv ob qho tib si master-master thiab master- qhev hom.

Yuav tsum tsis txhob txhawj xeeb thiab pib ua neej tsis muaj monolith
Kev tsim vaj tsev. Kev xaiv 1. Cov neeg siv kev pabcuam

Nyob rau lub sijhawm tam sim no, muaj 24 shards, txhua qhov muaj 2 qhov xwm txheej (ib qho rau txhua tus DC), tag nrho hauv hom master-master.

Nyob rau sab saum toj ntawm lub database yog cov ntawv thov uas nkag mus rau database replicas. Cov ntawv thov ua haujlwm nrog Tarantool los ntawm peb lub tsev qiv ntawv kev cai, uas siv Tarantool Mus tsav tsheb interface. Nws pom tag nrho cov replicas thiab tuaj yeem ua haujlwm nrog tus tswv los nyeem thiab sau ntawv. Qhov tseem ceeb, nws siv cov qauv tsim qauv, uas ntxiv cov logic rau kev xaiv cov khoom siv rov ua dua tshiab, ua kom rov ua dua tshiab, lub Circuit Court breaker thiab tus nqi txwv.

Nyob rau hauv cov ntaub ntawv no, nws muaj peev xwm configure replica xaiv txoj cai nyob rau hauv cov ntsiab lus ntawm shards. Piv txwv li, roundrobin.

Yuav tsum tsis txhob txhawj xeeb thiab pib ua neej tsis muaj monolith
Kev tsim vaj tsev. Kev xaiv 2. Kev pabcuam rau kev suav cov nqi kawg ntawm cov khoom

Ob peb lub hlis dhau los, feem ntau ntawm kev thov rau kev suav cov nqi kawg ntawm cov khoom tau mus rau qhov kev pabcuam tshiab, uas, hauv paus ntsiab lus, ua haujlwm tsis muaj cov ntaub ntawv, tab sis qee lub sijhawm dhau los txhua yam tau ua tiav 100% los ntawm kev pabcuam nrog Tarantool hauv qab hood.

Cov kev pabcuam database muaj 4 tus tswv uas lub synchronizer sau cov ntaub ntawv, thiab txhua tus ntawm cov replication masters faib cov ntaub ntawv rau kev nyeem ntawv nkaus xwb. Txhua tus tswv muaj kwv yees li 15 tus qauv zoo li no.

Txawm nyob rau hauv thawj los yog hauv lub tswv yim thib ob, yog tias ib qho DC tsis muaj, daim ntawv thov tuaj yeem tau txais cov ntaub ntawv thib ob.

Nws yog ib nqi sau cia hais tias replication nyob rau hauv Tarantool yog heev saj zawg zog thiab yuav configured ntawm runtime. Hauv lwm lub tshuab, teeb meem tshwm sim. Piv txwv li, hloov max_wal_senders thiab max_replication_slots tsis nyob hauv PostgreSQL yuav tsum tau rov pib dua ntawm tus wizard, uas qee zaum tuaj yeem ua rau kev sib txuas ntawm kev sib txuas ntawm daim ntawv thov thiab DBMS.

Nrhiav thiab koj yuav pom!

Vim li cas peb tsis ua nws "zoo li cov neeg ib txwm muaj", tab sis xaiv txoj kev tsis zoo? Nws nyob ntawm seb qhov twg yog qhov qub. Ntau tus neeg feem ntau ua ib pawg los ntawm Mongo thiab nthuav tawm thoob plaws peb thaj chaw DCs.

Lub sijhawm ntawd, peb twb muaj ob txoj haujlwm Redis. Thawj yog ib qho cache, thiab qhov thib ob yog qhov ruaj khov rau cov ntaub ntawv tsis tseem ceeb heev. Nws nyuaj heev nrog nws, ib feem ntawm peb qhov txhaum. Qee lub sij hawm cov ntim loj heev nyob rau hauv qhov tseem ceeb, thiab qee lub sij hawm lub xaib tau ua tsis zoo. Peb siv qhov system no hauv tus tswv- qhev version. Thiab muaj ntau qhov xwm txheej uas muaj qee yam tshwm sim rau tus tswv thiab rov ua dua tshiab.

Ntawd yog, Redis yog qhov zoo rau cov haujlwm tsis muaj lub xeev, tsis yog lub xeev. Hauv txoj ntsiab cai, nws tso cai daws teeb meem feem ntau, tab sis tsuas yog tias lawv yog cov ntsiab lus tseem ceeb nrog rau ib khub ntawm qhov ntsuas. Tab sis Redis lub sijhawm ntawd tau tu siab heev nrog kev ua siab ntev thiab rov ua dua. Tsis tas li ntawd, muaj kev tsis txaus siab txog kev ua haujlwm.

Peb xav txog MySQL thiab PostgreSQL. Tab sis thawj ib yam tsis tau nrog peb, thiab qhov thib ob yog ib qho khoom lag luam zoo nkauj ntawm nws tus kheej, thiab nws yuav tsis tsim nyog los tsim cov kev pabcuam yooj yim rau nws.
Peb sim RIAK, Cassandra, txawm tias daim duab database. Cov no yog tag nrho cov kev daws teeb meem ncaj ncees uas tsis haum rau lub luag haujlwm ntawm cov cuab yeej thoob ntiaj teb rau kev tsim cov kev pabcuam.

Thaum kawg peb nyob ntawm Tarantool.

Peb tig mus rau nws thaum nws nyob hauv version 1.6. Peb txaus siab rau nws los ntawm symbiosis ntawm qhov tseem ceeb-tus nqi thiab kev ua haujlwm ntawm kev sib raug zoo database. Muaj cov kev ntsuas theem nrab, kev hloov pauv thiab qhov chaw, cov no zoo li cov ntxhuav, tab sis tsis yooj yim, koj tuaj yeem khaws cov lej sib txawv hauv lawv. Tab sis tus killer feature ntawm Tarantool yog qhov thib ob indexes ua ke nrog qhov tseem ceeb-tus nqi thiab kev lag luam.

Lub teb chaws cov neeg hais lus Lavxias teb sab, npaj los pab hauv kev sib tham, kuj tau ua lub luag haujlwm. Peb nquag siv qhov no thiab nyob ncaj qha hauv kev sib tham. Thiab tsis txhob hnov ​​​​qab txog kev tsim nyog tsis tu ncua yam tsis muaj qhov pom tseeb blunders thiab yuam kev. Yog tias koj saib peb cov keeb kwm nrog Tarantool, peb muaj ntau qhov mob thiab ua tsis tiav nrog kev rov ua dua, tab sis peb yeej tsis poob cov ntaub ntawv vim nws qhov txhaum!

Kev siv tau mus rau qhov pib nyuaj

Lub sijhawm ntawd, peb pawg txhim kho tseem ceeb yog .NET, uas tsis muaj qhov txuas rau Tarantool. Peb tam sim ntawd pib ua ib yam dab tsi hauv Go. Nws ua haujlwm zoo nrog Lua thiab. Qhov teeb meem tseem ceeb nyob rau lub sijhawm ntawd yog nrog kev debugging: hauv .NET txhua yam zoo nrog qhov no, tab sis tom qab ntawd nws nyuaj rau plunge mus rau hauv lub ntiaj teb ntawm embedded Lua, thaum koj tsis muaj kev debugging tsuas yog cov cav. Tsis tas li ntawd, rau qee qhov laj thawj replication ib ntus poob sib nrug, yog li kuv yuav tsum tau delve rau hauv cov qauv ntawm lub cav Tarantool. Kev sib tham tau pab nrog qhov no, thiab tsawg dua, cov ntaub ntawv; qee zaum peb saib cov cai. Thaum ntawd, cov ntaub ntawv yog li ntawd.

Yog li, dhau ntawm ob peb lub hlis, kuv tau tswj hwm kuv lub taub hau ncig thiab tau txais txiaj ntsig zoo los ntawm kev ua haujlwm nrog Tarantool. Peb muab tso ua ke siv kev tsim kho hauv git uas pab tsim cov microservices tshiab. Piv txwv li, thaum muaj ib txoj hauj lwm tshwm sim: los tsim lwm lub microservice, tus tsim tawm tau saib ntawm qhov chaws ntawm cov kev siv tshuaj nyob rau hauv repository, thiab nws siv tsis pub dhau ib lub lis piam los tsim ib tug tshiab.

Cov no yog lub sijhawm tshwj xeeb. Conventionally, ces koj tuaj yeem mus rau tus thawj tswj hwm ntawm lub rooj tom ntej thiab nug: "Muab lub tshuab virtual rau kuv." Txog peb caug feeb tom qab ntawd lub tsheb twb nrog koj lawm. Koj txuas koj tus kheej, teeb tsa txhua yam, thiab kev xa mus rau koj.

Niaj hnub no qhov no yuav tsis ua haujlwm ntxiv lawm: koj yuav tsum tau ntxiv kev saib xyuas thiab nkag mus rau qhov kev pabcuam, npog cov haujlwm nrog kev sim, xaj lub tshuab virtual lossis xa mus rau Kuber, thiab lwm yam. Feem ntau, nws yuav zoo dua li no, txawm tias nws yuav siv sij hawm ntev dua thiab muaj teeb meem ntau dua.

Faib thiab kav. Yuav ua li cas nrog Lua?

Muaj qhov teeb meem loj heev: qee pab pawg tsis tuaj yeem tso siab tau nthuav tawm cov kev hloov pauv rau kev pabcuam nrog ntau qhov laj thawj hauv Lua. Qhov no feem ntau nrog cov kev pabcuam tsis ua haujlwm.

Ntawd yog, cov neeg tsim khoom tab tom npaj qee yam kev hloov pauv. Tarantool pib ua qhov kev tsiv teb tsaws chaw, tab sis tus replica tseem nrog tus lej qub; Qee qhov DDL lossis lwm yam tuaj txog ntawd los ntawm kev rov ua dua, thiab cov lej tsuas yog poob vim nws tsis suav nrog. Raws li qhov tshwm sim, cov txheej txheem hloov tshiab rau cov thawj coj tau muab tso rau ntawm A4 daim ntawv: nres replication, hloov kho qhov no, tig rau replication, tua ntawm no, hloov tshiab muaj. Npau suav phem!

Yog li ntawd, tam sim no peb feem ntau sim ua tsis muaj dab tsi hauv Lua. Tsuas yog siv iproto (tus txheej txheem binary rau kev cuam tshuam nrog lub server), thiab qhov ntawd yog nws. Tej zaum qhov no yog qhov tsis muaj kev paub ntawm cov neeg tsim khoom, tab sis los ntawm qhov pom ntawm qhov system no complex.

Peb tsis tas yuav dig muag ua raws li tsab ntawv no. Niaj hnub no peb tsis muaj xim dub thiab dawb: txhua yam nyob hauv Lua, lossis txhua yam nyob hauv Go. Peb twb nkag siab tias peb tuaj yeem ua ke lawv li cas kom peb tsis txhob muaj teeb meem kev tsiv teb tsaws chaw tom qab.

Tam sim no Tarantool nyob qhov twg?
Tarantool yog siv nyob rau hauv cov kev pab cuam rau xam tus nqi kawg ntawm cov khoom noj mus rau hauv tus account luv nqi daim coupon no, kuj hu ua "Promoter". Raws li kuv tau hais ua ntej lawm, tam sim no nws tau so haujlwm: nws tab tom hloov los ntawm cov kev pabcuam tshiab nrog cov nqi suav ua ntej, tab sis rau lub hlis dhau los tag nrho cov kev suav tau ua hauv Promotizer. Yav dhau los, ib nrab ntawm nws cov logic tau sau hauv Lua. Ob xyoos dhau los, qhov kev pabcuam tau hloov mus rau hauv qhov chaw cia khoom, thiab cov logic tau rov sau dua hauv Go, vim tias cov tshuab ntawm kev txo nqi tau hloov me ntsis thiab cov kev pabcuam tsis ua haujlwm.

Ib qho ntawm cov kev pabcuam tseem ceeb tshaj plaws yog tus neeg siv profile. Ntawd yog, tag nrho cov neeg siv Wildberries tau khaws cia hauv Tarantool, thiab muaj txog 50 lab ntawm lawv. Ib qho system sib faib los ntawm tus neeg siv ID, faib thoob plaws ntau lub DCs txuas nrog Go cov kev pabcuam.
Raws li RPS, Promoter yog ib zaug tus thawj coj, ncav cuag 6 txhiab thov. Ib zaug peb muaj 50-60 daim ntawv. Tam sim no tus thawj coj hauv RPS yog cov neeg siv cov ntaub ntawv, txog 12 txhiab. Qhov kev pabcuam no siv kev cai sharding, faib los ntawm ntau yam ntawm cov neeg siv IDs. Cov kev pabcuam pabcuam ntau tshaj 20 lub tshuab, tab sis qhov no ntau dhau lawm; peb npaj yuav txo cov peev txheej, vim tias lub peev xwm ntawm 4-5 lub tshuab yog txaus rau nws.

Kev pab cuam yog peb thawj qhov kev pabcuam ntawm vshard thiab Cartridge. Kev teeb tsa vshard thiab hloov kho Cartridge yuav tsum tau siv zog los ntawm peb, tab sis thaum kawg txhua yam ua tiav.

Cov kev pabcuam rau kev nthuav tawm cov ntawv sib txawv ntawm lub vev xaib thiab hauv daim ntawv thov mobile yog ib qho ntawm thawj zaug tso tawm ncaj qha ntawm Tarantool. Qhov kev pabcuam no tseem ceeb rau qhov tseeb tias nws muaj 6-7 xyoo, nws tseem ua haujlwm thiab tsis tau rov pib dua. Master-master replication tau siv. Tsis muaj dab tsi puas tau tawg.

Muaj ib qho piv txwv ntawm kev siv Tarantool rau kev siv ceev ceev hauv lub tsev khaws khoom kom ceev cov ntaub ntawv ob zaug hauv qee kis. Peb sim siv Redis rau qhov no, tab sis cov ntaub ntawv hauv lub cim xeeb tau siv ntau qhov chaw tshaj li Tarantool.

Cov kev pabcuam ntawm cov npe tos, cov neeg siv khoom siv, cov dab neeg niaj hnub tam sim no thiab cov khoom xa tawm kuj ua haujlwm nrog Tarantool. Qhov kev pabcuam kawg hauv lub cim xeeb yuav siv li 120 GB. Qhov no yog qhov kev pabcuam tshaj plaws ntawm cov saum toj no.

xaus

Ua tsaug rau cov kev ntsuas theem nrab ua ke nrog qhov tseem ceeb-tus nqi thiab kev hloov pauv, Tarantool zoo haum rau microservices-based architectures. Txawm li cas los xij, peb tau ntsib teeb meem thaum dov tawm cov kev hloov pauv rau cov kev pabcuam nrog ntau lub logic hauv Lua - cov kev pabcuam feem ntau nres ua haujlwm. Peb tsis muaj peev xwm kov yeej qhov no, thiab dhau sij hawm peb tuaj rau qhov sib txawv ntawm Lua thiab Go: peb paub qhov twg siv ib hom lus thiab siv lwm qhov.

Dab tsi ntxiv los nyeem ntawm lub ncauj lus

Tau qhov twg los: www.hab.com

Ntxiv ib saib