S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut
Salvestuskoridor Peterburist

Tere kÔigile! Mina olen Mons Anderson, platvormi arhitekt Mail.ru Pilve Lahendused, rÀÀgin, kuidas me oma S3-salvestust ehitasime, kuidas see töötab, millised lahendused olid edukad ja mida oleks tasunud muuta, kui me oleksime sama projekti nullist alustanud.

Artikkel on koostatud pÔhjal doklist, @Andmebaasid Meetup Mail.ru Cloud Solutions & Tarantool. Artiklis rÀÀgime:

  • kuidas Mail.ru salvestus oli ĂŒles ehitatud, mille peal me S3-salvestust ehitasime;
  • mida me lisasime, et luua Mail.ru Cloud Storage;
  • kuidas objekti salvestusmudel töötab ja milliseid samme oleme teinud toodete turule toomiseks;
  • toodete parendustest: failover ja skaleerimine;
  • kuidas me shardimist ja reshardimist rakendasime;
  • ja samuti SSL-sertifikaatidega töötamiseks.

Kui te ei soovi lugeda, siis vÔite vaadata.

Kuidas Mail.ru salvestus oli ĂŒles ehitatud, mille peal me S3-salvestust ehitasime

Meie S3 arendus algas Mail.ru Cloudi salvestusel, seega on esmalt oluline rÀÀkida, kuidas see töötab ja millised on selle vÔimalused.

Mail.ru pilvesalvestus koosneb serveritest, mis on varustatud ketastega. Keskmiselt on kaasaegne salvestusserver 36 ketast, mille maht on 12–14 terabaiti. Varem olid kettad vĂ€iksemad, kuid kolme aasta jooksul on ketaste mahud kasvanud ning tĂ€na on see peaaegu pool petabaiti tooreid andmeid.

Erinevate serverite kettad kombineeritakse nn "paarideks" (pair). Paar on ĂŒksik failide salvestamise ĂŒksus. Sisuliselt on see ketas, mis on kindlasse jaotusse kindlal teel mountitud, kus failid vĂ”ivad olla salvestatud, tuvastatud hash'ide abil.

Paar on ajalooline nimetus, mis on sĂ€ilinud tĂ€napĂ€evani, kuigi nĂŒĂŒd ei pea paaris olema tingimata ainult kaks ketast. Ketaste arv vĂ”ib olla kolm ning vĂ”ivad olla ka erinevad hĂŒbriidsalvestused, nĂ€iteks 3/2.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Paarid (pair) on objektide salvestamise ĂŒksused

KĂ”iki paare hoitakse PairDB-s – see on rakendus, mis on koostatud Tarantooli pĂ”hjal. KĂ”ik andmebaasid meie salves, alustades esimestest, on Tarantooli alusel, teisi andmebaaside ei kasutata.

PairDB hoiab kĂ”iki paare, nende seisundeid, vaba ruumi, tĂ”rketĂ”kestamise vĂ”imalusi, viimaseid vigu. Samuti suudab see ise paare aktiveerida, nende seisundeid ajakohastada, kontrollida, kas need töötavad vĂ”i mitte. Seega on PairDB nagu ĂŒhine ĂŒlevaade meie sĂŒsteemi kĂ”igi ketaste seisundist.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Pair DB: andmebaas paaride seisunditest

SeerumĂ€est hoitakse faile ning et teada, millisel serveril mis fail asub, on vaja veel ĂŒht andmebaasi — FileDB. See salvestab kaardi, mis mÀÀrab vastavuse: see fail asub seal ja seal, ning lisaks mĂ”ned vajalikud atribuudid.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengutFile DB: koht, kus fail asub

Veel ĂŒks oluline lĂŒli on teenus Nylon, andmebaaside kasutamise ruuter. See on ĂŒhtne sisenemispunkt, mis vĂ”imaldab töötada lĂ€bi ĂŒhe liidese nii PairDB kui ka FileDBga. See on stateless teenus, see teostab pĂ€ringute laadimist, mĂ”istab, millisele shardile FileDB-le pöörduda ning teab, millised serverid on aktiivsed ja millised mitte.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Nylon: andmebaaside kasutamise ruuter

Samuti peab sisu hoiustama kuidagi. Selleks on olemas teenus — Streamer. See pakub kahte HTTP meetodit: PUT meetod, et sisu hoiusesse laadida ja GET meetod, et sealt sisu saada. HTTP on ĂŒsna populaarne ja mugav protokoll andmete edastamiseks.

Kui me pöördume Streamer’i, siis see pöördub Nylon’i kaudu PairDB poole, selgitab vĂ€lja, millisele serverile saab faili laadida ja edastab seejĂ€rel andmed WebDAVi kaudu sellele serverile.

Sisuliselt on iga storage server — see on nginx pluss kettad, mis on ĂŒhendatud kindlate teede kaudu. Me vĂ”ime Streamer’ist faili hoiusesse laadida, kustutada, ĂŒmber nimetada vĂ”i selle tĂŒkisust kontrollida. See tĂ€hendab, et see on mugav liides madala taseme ĐČĐ·Đ°ĐžĐŒĐŸĐŽĐ”ĐčстĐČоя jaoks hoiusega.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Streamer: pÀÀsupunkt hoiusesse

Mida me lisasime, et teha S3-hoidla

Nii oleme vaadanud, milline on hoiustamise ĂŒldine struktuur hetkel, kui me olime valmis S3-hoidla kĂ€ivitama. TĂ€nu PUT meetodile saime sinna paigutada suvalist sisu ja meil oli selle andmehalduse identifikaator, mis on hash. Selle identifikaatoriga oli hiljem vĂ”imalik tulla ja algne fail tagasi saada. Kuid see ei piisa S3 rakendamiseks. S3 protokollis, peale objektide hoidmisest, on:

  • metainfo salvestamine — objektide lisavÀÀrtused;
  • objektide ligipÀÀsu korraldamine HTTP kaudu;
  • objektide rĂŒhmitamine kollektiividesse — bucketeid;
  • HTTP-S3 Endpoint. S3 korraldab andmed kindlates struktuurides — bucketeid, millest igaĂŒhel on faili hoidmiseks pÀÀsupunkt.

Selle loogika rakendamiseks oli vajalik eraldi teenus. Soovisime ka kohe ette nÀha arhitektuuri teenuse edasiseks kasvuks, tagades lineaarsuse skaleeritavuses.

Esimese komponendid

Demon, mis rakendab S3 API. See on Amazoni standardne S3 API, mis toetab XML-i kasutamist metaandmete jaoks ja vÔimaldab sisu otse edastada. Me ei pidanud midagi vÀlja mÔtlema, kÔik on kirjeldatud ja dokumenteeritud.

Samuti paigaldasime teenuse ette Nginxi. Kasutasime seda SSL-i lÔpetamiseks, koormuse tasakaalustamiseks ja mÔne loogika jaoks Lua's (mÔÔdikud, logimine ja jÀlgimine).

S3 metaandmete salvestamiseks valisime ka Tarantooli. Esimeses versioonis lÀks S3 demon nende metaandmete jÀrele sellesse andmebaasi, sisu ise salvestati suuremasse salvestusse Streameri kaudu.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut
Nginx + S3 API + metaandmed

Objektide salvestusmudel

Vaadakem, kuidas S3 töötab. Kasutaja vĂ”ib luua Ă€mber — objektide kogumi. Ämber adresseeritakse hosti nime kaudu ja on teenuse alamdomeen. Ämbri raames saab kasutaja luua objekte. Objekti identifikaatoriks on URL. Objekti sisu on blob, binaarandmete massiiv, mida me salvestaime salvestuses. Objektil on ka atribuute: nimi — see sama URL, ACL (juurdepÀÀsu kontrollimise nimekiri), muud lisandid vĂ”i vabatahtlikud atribuudid — kĂ”ik see salvestatakse metaandmetesse.

Nende andmete normeeritud skeem vĂ”ib vĂ€lja nĂ€ha nii: on projektid, millele kuuluvad Ă€mbrit, millele kuuluvad objektid ja objektid vĂ”ivad olla koostisosad. Kuna ĂŒks viis objektide ĂŒleslaadimiseks on osade kaupa, on ĂŒleslaadimiseks kaks abita tabelit: uploads ja chunks. Samuti on projektidel juurdepÀÀsuandmed ja arveldamine.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut
Andmeskeem

Kuna tegime b2b teenuse tasulise juurdepÀÀsuga, oli selles skeemis vajalik arveldamine.
Arvelduse teenuse realiseerime samuti Tarantoolis.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

S3 salvestuse tÀiustamine: sammud tootmisese suunas

Me oleme juba loonud toimiva mudeli, mida saab kasutada: objektid ja metaandmed oli salvestatud, kuid tootmisse minekuks jÀi puudu mÔned aspektid.

Esiteks on reitingute sĂŒsteem. Kui kĂ€ivitada teenus ilma selleta, vĂ”ime tipnakkumise ajal ettearvamatult ĂŒle koormata mĂ”ne sĂŒsteemi ala. Reitingu limiit peab toimima jĂ€rgmiselt: iga S3-pĂ€ring tuleb konkreetsele hostile, see host on Ă€mber, ja Ă€mber kuulub mingile kliendile. Peame mÀÀrama teatud funktsiooni Ă€mberest, mis vĂ”imaldaks arvutada reitingu limiidi.

Lisaks peab reitingute sĂŒsteem olema piisavalt jĂ”uline, et taluda S3-le tulevat koormust.

Siin kasutasime jĂ€lle Tarantooli. Reitingud on 21 instantsist koosnev klaster, instantsid on jagatud gruppidesse, laiali kolme fĂŒĂŒsilise sĂ”lme vahel ja ĂŒhendatud suureks topoloogiliseks klastriks. Sellele levitatakse automaatselt konfigureerimis muudatused: mÀÀratakse reitingu limiidid, vaikeseaded ja konfiguratsioon. Iga Ă€mber teenindatakse rangelt ĂŒhe instantsiga. Kui konkreetsele Ă€mbrile saadetakse pĂ€ring, arvutatakse vĂ€lja instants, mis vastutab selle Ă€mber eest. Selle sĂ”lme raames toimub pĂ€ringute praeguse reitingu arvestamine algoritmi abil, mis sarnaneb Token Bucket'ile. Edasi teatab reitingute sĂŒsteem, tuginedes praegusele koormuse nĂ€itajale ja konkreetse Ă€mber jaoks seatud omadustele, kas pĂ€ringut saab tĂ€ita vĂ”i mitte. Limiteerimise kontroll toimub S3-pĂ€ringu tĂ€itmise kĂ”ige varasemas etapis, kaitstes kĂ”iki sĂŒsteemi teisi elemente liigse koormuse eest.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Samuti on koormuse all ĂŒsna keeruline hakkama saada ilma vahemĂ€luta. S3 eeldab, et sama objektiga pöördutakse mitu korda, see tĂ€hendab, et tegemist on kuuma salvestusruumiga. Tavalises olukorras teenindatakse ĂŒksik faili pĂ€ring kogu ahela kaudu: Streamer, FileDB, PairDB, Storage. Kuid failile mitu korda pöördudes optimeerime juurdepÀÀsu sellele sisule kohaliku vahemĂ€lu abil.

VahemĂ€lu on mitmekihiline ja rakendatud nginx'i, kohalike SSD ja RAM-kettade abil. Siin me Tarantool'i ei kasutanud, sest objekte on mugavam edastada failisĂŒsteemist, nii saame teha vahemĂ€lu kihtimist. Lisaks on meil suured objektid maksimaalse suurusega 32 gigabaiti, samas kui Tarantool'is saab vahemĂ€luda ainult vĂ€ikesi objekte.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

See esimene sĂŒsteem, millega me alustasime, omas teatud arvutatud mahutavust, mis oli piisav, et toote uurimiseks ja mĂ”istmiseks ning selle toimimise kinnitamiseks.

SĂ”jalise sĂŒsteemi tĂ€iustused: failide ĂŒleandmine ja skaaleerimine

SĂŒsteem oli juba kasutuses, kuid alguses jĂ€tsime me midagi olulist tĂ€helepanuta — oleks pidanud lisama failide ĂŒleandmise ja skaaleerimise.

Meie S3-deemon kogus metaandmeid protokolli Tarantool kaudu. Originaalse andmebaasi asemele paigaldasime Tarantooli, mis toimis metaandmete pĂ€ringute proxy-suunajana. Rakenduse poolest, mis realiseerib API-d, ei muutunud midagi — see jĂ€tkas andmebaasi pöördumist Tarantooli protokolli kaudu, kuid suunaja suutis tagada aktiivse failide ĂŒleandmise. See tĂ€hendab, et saime kontrollida sĂ”lme kĂ€ttesaadavust, taluda pause ĂŒleminekute ja tĂ”rgete ajal jne. Samas me rakendust ei modifitseerinud.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Rohkem teavet selle kohta, kuidas me shardingut rakendasime

JĂ€rgmine kĂŒsimus, millega tuli tegeleda — sharding. SĂŒsteem kasvas, objektide arv suurenes ja pidime tagama vĂ”imalused edasiseks kasvuks.

Naaseme andmeskeemi juurde: on projektid, on koppad, Ă”igused ja arveldamine. Need on objektid, mis tĂ”enĂ€oliselt ei ĂŒleta lĂ€hitulevikus ĂŒhe instantsi mahutavust ega pĂ€ringute arvu. Seega ei ole mĂ”tet neid shardeerida, ning me tĂ”stsime need eraldi instantsile, mis jÀÀb mitte-sharditud. See vĂ”imaldab projektide ja koppade haldamist konsistendsemalt, kuna on olemas ĂŒks mitte-sharditud punkt.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Samuti on skeemis objekte, mis kasvavad lineaarselt — alguses oli neid sadu tuhandeid, nĂŒĂŒd mÔÔdetakse arvu mitmete miljarditega. Sellised objektid koos oma osadega tuli viia sharded klastrisse.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Me jagasime skeemi, kuid objektid peavad töötama koppadega: objekt kuulub alati konkreetsele koppale, lisaks töötab kopa peal ACL. SeetÔttu hoiame iga objekti jaoks, mis on sharditud, iga kopa varukoopia. Lisaks tuleb objektide modifitseerimise ja pÀringute tÀitmise ajal arvestada mahtu arveldamiseks, seetÔttu on igas shardis arvestid arveldamise jaoks.

Lisaks lisasime veel paar tabelit ja komponenti:

  • prĂŒgikasti, et hĂ€vitada vanu projekte, mis kustutatakse vĂ”i kĂŒlmutatakse;
  • taustaprotsesside jĂ€rjekord, see tĂ€hendab, et peamine salvestus vĂ”ib tĂ€ita taustaprotsesse, mida on vaja klastris teha;
  • elutsĂŒkli toetamine — mehhanism, mis vĂ”imaldab töötada objektidega ja hallata nende elutsĂŒklit.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Kuna osa andmeid transportisime sharde, vajasime shardimisproksi. Oleks olnud vĂ”imalik kasutada ruuterit selle ĂŒlesande tĂ€itmiseks, kuid eraldi shardimisproksi, mis vastutab ainult andmete shardimise eest, vĂ”imaldab ruuteril andmeid tervikuna otsida, mitte mĂ”elda shardimisele.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Selgitan eraldi, miks me ei valinud valmis lahendust, vaid soovisime luua kohandatud shardimise funktsiooni.

Vaadakem, kuidas see on ĂŒles ehitatud. Meil on 256 saadaval olevat shard'i. Iga baketi jaoks eraldame vahemiku mingi jĂ€rjepideva funktsiooni abil. See on lihtne — nagu jĂ€rjepideva funktsiooni abil mÀÀrate kuuluvuse ĂŒhe shard'i alla, mÀÀrate ka algse shard'i ja eraldate vahemiku:

f(bucket, shards) = subset

Seega, kui vĂ”tta baket, siis vĂ”ib öelda, et see ja selle andmed paiknevad alati konkreetses alamkogus kĂ”igist shard'idest. See vĂ€hendab ĂŒhe baketi mĂ”ju teistele ja lihtsustab map-reduce pĂ€ringute tööd, kui on vaja nĂ€iteks koostada baketi objektide loend. Selleks tuleb kĂŒsitleda kĂ”iki sharde, kus need objektid asuvad. Kui objektid asuksid kĂ”igis shard'ides, mĂ”jutaks iga loetelu sĂŒsteemi tervikuna, aga siin mĂ”jutab see ainult konkreetset alamkogust.

Lisaks kuulub iga objekt konkreetsele baketile, seetÔttu, kui me pöördume objekti poole, pöördume objekti poole nime kaudu konkreetse baketi sees. See tÀhendab, et saame mÀÀrata objekti funktsiooni mitte kÔigist saadaval olevatest shard'idest, vaid ainult tema baketi alamkogust:

f(object, subset) = shard

VĂ”tame konkreetsed objektid, funktsiooni argumentidena edastame mitte kĂ”ik shard'id, vaid ainult tema baketi alamkoguse — ja saame konkreetse shard'i.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Nii et shardimine on rakendatud, on olemas shardimisproksi. Edasi jÀÀb ruuterist ja metainfobaasist minna shardimisproksisse. NĂ€iteks varjuka lubade loomiseks — kui me loome baketi, peab peamine salvestus looma selle baketi esindaja kĂ”igis shard'ides, kus see peab olema.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Kuidas me rakendasime uuesti shardimist

Suurim probleem shardimis on ĂŒmbershardimine. Meile oli oluline selle teostamine ilma seisakuteta, kuna sĂŒsteem oli juba tootmises. NĂ€itan, kuidas me lahendasime probleemi sarnase ĂŒlesande nĂ€itel, kus andmete elu migreerimine toimus ĂŒhelt projektilt teisele.

Allpool on meie klastriskeem, mis kujunes pÀrast shardimise rakendamist. Meil on nginx, S3 API, marsruuter, peamine andmebaas projektidega, shardiva proksi ja ise shardid.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Eelnevalt jĂ€tsin mainimata, et projekti teatud etapis oli tooteĂŒlesanne: "KĂ€ivitada veel ĂŒks salvestus, Icebox, mis toimiks nagu Hotbox, aga kĂŒlmade andmete jaoks." Tegelikult on see sama salvestus, kuid erinevate URL-ide ja ilma vahemĂ€ludeta.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Iceboxi kasutati vĂ€hem kui Hotboxi, seetĂ”ttu toimumas ei toimunud mingit shardingut ĂŒsna pikalt. LĂ”puks otsustasime sellest loobuda ja ĂŒhendada Hotbox ja Icebox ĂŒheks teenuseks, jagades lihtsalt salvestusklassid.

Salvestustes ei kattunud baketid, neid sai hĂ”lpsasti ĂŒhte liita ja ĂŒmber liigutada, kuid kliendid kasutasid nii ĂŒhte kui teist salvestust, seega oli vaja lahendada probleem, et mitte tekkida seisakut. Ei olnud vĂ”imalik lihtsalt vĂ€lja lĂŒlitada ja kopeerida. Raeime migreerimise mitme etapi jooksul.

Esiteks sĂŒnkroniseerisime peamised salvestused. Meil oli Tarantool ja saime objekti loomisel teha jĂ€rgmist:

  • andmebaas saab baketi loomise pĂ€ringu, nĂ€iteks Hotboxis;
  • Tarantool kontrollib teises andmebaasis (antud juhul Iceboxis), et sellist baketi ei ole;
  • kui baket on olemas, teatab andmebaas, et seda ei saa luua, ja see sĂŒnkroniseeriti olemasolevana.
    S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut
    Bakettide sĂŒnkroniseerimine

Sel salvestusel, mis pidid vastu vĂ”tma kĂ”ik andmed, lisati projektide ja bakettide jaoks tunnus, mis nĂ€itas, kus see objekt paikneb. See vĂ”is asuda lokaalselt, st Hotboxis, Iceboxis — siis ei olnud uues salvestuses selle kohta mingeid andmeid, vĂ”i siis vĂ”is see olla migreerimise olekus.

Kui projektil vÔi baketil oli mÀÀratud Migrating, siis migreerimise ajal tehti pÀring algselt uude salvestusse, kuhu andmed pidid minema, ja kui seal ei olnud, siis suunati pÀringud alternatiivsele salvestusele.

SeejĂ€rel suunasime liikluse. Kuna API suutis teenindada nii Iceboxi kui ka Hotboxi pĂ€ringuid, suudame liikluse suunata ilma seisaku, lihtsalt hostide ĂŒmberkolimise ja sobivate kirjeid lisamisega Nginxisse.

PĂ€rast liikluse suunamist saime eemaldada Nginxi ja Iceboxi API.
SeejĂ€rel eemaldasime Iceboxi Nginxi ja S3 API — ja kĂ”ik toimis:

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Edasi kĂ€ivitasime taustaprotsessi migreerimiseks, mis töötab andmebaasis — lĂ€bib kĂ”ik projektid ja nende baketid elemendi kaupa, mÀÀrab neile staatuse Migrating, kannab andmed ĂŒle ja lĂ”petamisel mÀÀrab staatuse Local.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

PĂ€rast andmete ĂŒlekandmist ei vajanud me enam vana salvestusruumi ning eemaldasime allesjÀÀnud osad vanast sĂŒsteemist ning eemaldame koodist ka migreerimise staatuse toe.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Sarnaste pÔhimÔtete alusel viidi lÀbi ka reharding vana salvestusruumi ja sharded-i vahel:

  • MĂ€rgistasime kĂ”ik baketid kui Non-sharded. KĂ”ik pĂ€ringud suundusid algsesse, mitte sharded salvestusruumi.
  • Uued baketid loodi kohe staatusega Sharded.
  • . Üksikuid baketeid vĂ”eti, seadistati nende staatuseks Migrating ja andmed kanti ĂŒle.

PÀringud teenindati jÀrgmiselt:

  • Lugesime uuest, seejĂ€rel vanast.
  • Loome ainult uuest.
  • Uuendame kahefoolselt: kui uuest ei ole, kanname vanast uude, seejĂ€rel uuendame.

Töö SSL-sertifikaatidega

Eesliideses kasutame Nginxi. Meie puhul ei ole see tavapÀrane Nginx, vaid OpenResty, Nginx LuaJIT toega.

Veel ĂŒks sĂŒsteemi osa — töö SSL-sertifikaatidega. S3 salvestusruumis saate mÀÀrata oma domeeni konkreetse baketi juurdepÀÀsuks, lihtsalt kasutades CNAME. Kuid tĂ€napĂ€eval ei saa ilma HTTPS-ita: oma domeen tĂ€hendab oma SSL-sertifikaati.

Nagu ma juba ĂŒtlesin, vastutab Nginx meie jaoks tasakaalustamise ja SSL-i terminaatori eest. Meie puhul ei ole see tavaline Nginx, vaid OpenResty, Nginx LuaJIT toega.

See vĂ”imaldas meil ĂŒsna lihtsalt Ă”petada meie Nginx-i jagama juhuslikke sertifikaate. Samuti oli meil vajalik sertifikaate anda dĂŒnaamiliselt (ilma vajaduseta neid konfigureerimisfailidesse kirjutada). Kasutasime laiendust ssl_certificate_by_lua, mis vĂ”imaldab sertifikaati lugeda juhuslikust allikast otse TLS-kĂ€epigistuse ajal. Sertifikaatide hoidmiseks kasutasime ka Tarantool-i: see vĂ”imaldab hallata sertifikaate vĂ€ljastpoolt ja tagab ÀÀrmiselt kiire edastamise.

Samuti on rakendatud eraldi deemon, mille ĂŒlesanne on regulaarselt uuendada sertifikaate, mis on vĂ€ljastatud Let’s Encrypt-i kaudu.

S3 arhitektuur: 3 aastat Mail.ru pilve salvestuse arengut

Mida ma sÀilitaksin ja mida teeksin teisiti, kui arendada salvestust uuesti?

Mida oleks pidanud algusest peale kasutama

Shardimine kohe. Üsna palju probleeme pĂ”hjustas shardi ĂŒmberpaigutamine. Seda on lihtne teha, kuid kui alustada projekte, mis vajavad skaleerimist, on parem kohe vĂ”tta sharditud klaster, isegi kui node'e on minimaalselt. Shardimise rakendamine alguses on peaaegu tasuta vĂ”rreldes shardimise rakendamisega töötavas sĂŒsteemis.

Tarantooliga töötamine lĂ€bi koormuse tasakaalustajate. Hetkel ĂŒhendame kĂ”ik uued andmebaasid kohe koormuse tasakaalustajate kaudu. See vĂ”imaldab laiendada funktsionaalsust ja saavutada suuremat tĂ”rkekindlust.

Automaalne tÔrke taastumine. Oleksin paigaldanud kÔik vajalikud tööriistad automaatse tÔrke taastumise jaoks, kuna esimesed ebaÔnnestumised kÀivitamise ajal olid seotud selle puudumisega. PÀrast kogemust S3-ga kÀivitati kÔik jÀrgnevad tooted arvesse vÔttes.

S3 funktsioon „Versioonimine”. Alguses tundus, et see pole vĂ€ga nĂ”utud funktsionaalsus. Selle vĂ”imaluse integreerimine töötava sĂŒsteemi arhitektuuri on ÀÀrmiselt keeruline.

Eraldiseisev arveldamine. See, kuidas integraator arveldamise meie sĂŒsteemi, jĂ€i alguses hĂ€sti tööle, kuid hiljem hakkas see segama, oleks parem, kui see oleks tĂ€iesti eraldi teenusena.

Mis oli Ôige otsus

Andmemudel. Ajalugu nĂ€itab, et teenuse arengu jooksul ĂŒtleme ĂŒsna tĂ€pselt Amazon'i andmemudeli, seetĂ”ttu suudame ellu viia samu funktsioone, mis seal eksisteerivad.

Shardimise skeem. Toetaksin samalaadseid vahemikud shardeid kottide jÀrgi, kuna see vÔimaldab hÀsti jaotada pÀringud erinevatest kottidest suurele klastrile.

Tarantooli kasutamine. Tarantool aitas oluliselt teenuse arendamisel ja muutmisel, suudame lihtsalt andmetega töötada, andmeid transformeerida ja salvestust shardida, samas ei pidanud me rakenduse tasemele tÔusma.

See ettekande kuulutati esmakordselt @Andmebaasid Meetup by Mail.ru Cloud Solutions&Tarantool. Vaata video teisi ettekandeid ja jĂ€lgi ĂŒrituste teadaandeid Telegramis Kubernetesest Mail.ru Groupis.

Samuti saate vaadata minu vana ettekannet S3-st vÔi lugeda minu kolleegi artiklit plokksalvestuse kohta.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster