S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut
Salvestuskoridor St-Pete'ist

Tere kÔigile! Mina olen Mons Anderson, platvormi arhitekt Mail.ru Cloud Solutions, rÀÀgin, kuidas me ehitasime oma S3-lao, kuidas see töötab, millised lahendused osutusid Ônnestunuks ja mida oleks pidanud muutma, kui me oleksime sellise projekti nullist uuesti alustanud.

Artikkel on koostatud Mail.ru Cloud Solutions & Tarantooli ettekande pĂ”hjal. Artiklis kĂ€sitleme: @Databases Meetup kuidas oli Mail.ru salvestusstruktuur ĂŒles ehitatud, mille peal me S3-lao ehitasime;

  • mida me lisasime, et luua Mail.ru pilvesalvestus;
  • kuidas töötab objektide salvestamise mudel ja millised sammud tehti tootmisseminekuks;
  • töösĂŒsteemi tĂ€iustamist: failide taastamine ja skaleerimine;
  • kuidas me rakendasime shardimist ja shardi ĂŒmberjaotamist;
  • ning SSL-sertifikaatidega seotud tööd.
  • Kui te ei soovi lugeda, siis saate

Kuidas oli Mail.ru salvestusstruktuur ĂŒles ehitatud, mille peal me S3-lao ehitasime vaadata.

Meie S3 arendus algas Mail.ru pilvesalvestusel, seega tasub alguses rÀÀkida, kuidas see on ĂŒles ehitatud ja mida see suudab.

Meie S3 arendus algas Mail.ru Pilve salvestusplatsil, seetÔttu tasub esmalt rÀÀkida, kuidas see töötab ja mida see suudab.

Mail.ru pilveteenus koosneb serveritest, mis on varustatud ketastega. TĂ€napĂ€eva modernse salvestusserveri keskmine suurus on 36 ketast, igaĂŒhe mahuga 12–14 terabaiti. Varasemalt olid kettad vĂ€iksemad, kuid viimase kolme aasta jooksul on kettamaht suurenenud ja tĂ€na on need peaaegu pool petabaiti tooreid andmeid.

Erinevate serverite ketastest moodustatakse nn «paare» (pair). Paar on ainus failide salvestamise ĂŒksus. Sisuliselt on see disk, mis on monteeritud kindlasse sektsiooni kindlal teel, kus saavad asuda failid, mida tuvastatakse hash'i abil.

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

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Paared (pair) — objektide salvestamise ĂŒksused

KĂ”ik paarid salvestatakse PairDB-s — see on rakendus Tarantooli baasil. KĂ”ik andmebaasid meie salvestuses, alates kĂ”ige varasematest, on Tarantool ja me ei kasuta teisi andmebaase.

PairDB salvestab kĂ”ik paarid, nende seisukohad, vaba ruum, tĂ”rked ja viimased vead. Samuti suudab see ise paaridele ligipÀÀsu luua, vĂ€rskendada nende olekut, kontrollida, kas need töötavad vĂ”i mitte. Ehk siis PairDB on ĂŒldine hetkeseis kĂ”igist meie sĂŒsteemi ketastest.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Pair DB: paaride oleku andmebaas

Paarides hoitakse faile, ja et teada saada, millises paaris asub mingi fail, on vajalik veel ĂŒks andmebaas — FileDB. See hoiab mapitamise ehk vaste mÀÀratlemise: fail selline talletatakse paaris selline, samuti vĂ€ikese koguse vajalikke atribuute.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengutFile DB: koht, kus fail asub

Veel ĂŒks oluline lĂŒli on teenus Nylon, andmebaasidega töötamise ruuter. See on ainus sissepÀÀsupunkt, mis vĂ”imaldab töötada nii PairDB kui ka FileDB-ga ĂŒhise liidese kaudu. See on stateless-teenus, see tasakaalustab pĂ€ringuid, mĂ”istab, millisele shardile FileDB suunata, ja teab, millised paarid on aktiivsed ja millised mitte.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Nylon: andmebaasidega töötamise ruuter

Lisaks tuleb sisu ka mingil moel salvestusse panna. Selleks on teenus — Streamer. See pakub kahte HTTP meetodit: PUT meetod, et sisu salvestusse laadida, ja GET meetod, et sealt seda tagasi saada. HTTP on ĂŒsna populaarne ja mugav protokoll andmete edastamiseks.

Kui me pöördume Streamer’i poole, siis see kĂŒsib Nylon’i kaudu PairDB'lt, millisele paarile saab faili laadida, seejĂ€rel edastab andmed WebDAV abil sellele paarile.

Sisuliselt on iga storage server — see on nginx pluss kettad, mis on monteeritud mÀÀratud radadele. Me saame Streamer'ist laadida salvestusse faili, kustutada selle, nimetada ĂŒmber vĂ”i kontrollida selle terviklikkust. See on mugav liides madala taseme suhtlemiseks salvestusega.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Streamer: sisenemispunkt salvestusse

Mida me lisasime, et S3 salvestust teha

Nii oleme uurinud salvestusseadmise ĂŒldist alust, kui olime kĂ€ivitamas S3 salvestust. PUT meetodi abil saime sinna paigutada suvalist sisu ja saada selle andme identifikaatoriks rĂ€si. Selle identifikaatoriga oli hiljem vĂ”imalik tagasi tulla ja originaalfail kĂ€tte saada. Kuid see ei piisa S3 rakendamiseks. S3 protokollis, lisaks objektide salvestamisele, on:

  • metainfo salvestamine — objekti tĂ€iendavad omadused;
  • juurdepÀÀsu korraldamine objektidele HTTP kaudu;
  • objektide grupeerimine kogudesse — Ă€mbrid;
  • HTTP-S3 lĂ”pp-punkt. S3 korraldab andmed kindlatesse struktuuridesse — Ă€mbrid, millest igaĂŒks pakub sissepÀÀsufunktsiooni failide salvestamiseks.

Selle loogika rakendamiseks oli vajalik eraldi teenus. Hakkasime kohe kavandama arhitektuuri teenuse edasise kasvu jaoks, et tagada lineaarne skaleeritavus.

Esimesed komponendid

Demon, mis rakendab S3 API-d. See on Amazoni standardne S3 API, mis toetab XML-i kasutamist metainfo jaoks ja vÔimaldab sisu otse edastada. Me ei pidanud midagi leiutama, kÔik on kirja pandud ja dokumenteeritud.

Lisaks teenusele oleme paigaldanud Nginxi. Kasutasime seda SSL-i terminatsiooniks, koormuse tasakaalustamiseks ning teatud loogika jaoks Luas (meetmed, logimine ja jÀlgimine).

Metandmete S3 talletamiseks valisime samuti Tarantooli. Esimeses versioonis lÀks S3 deemon nende metandmete jaoks sellesse andmebaasi, sisu talletati aga suures ladustamises Streameri kaudu.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut
Nginx + S3 API + metandmed

Objektide hoidmise mudel

Vaadakem, kuidas S3 töötab. Kasutaja vĂ”ib luua Ă€mbri — objekti kogumi. Ämbrit adresseeritakse hosti nimega ja see on teenuse alamdomeen. Ämbri raames vĂ”ib kasutaja luua objekte. Objekti identifikaatoriks on URL. Objekti sisu on blob, binaarsete andmete massiiv, mida me ladustame. Samuti on objektil atribuute: nimi — see sama URL, ACL (juurdepÀÀsuhaldusloend), muud tĂ€iendavad vĂ”i vabatahtlikud atribuudid — kĂ”ik see talletatakse metandmetes.

Korrigeeritud andmeskeem vĂ”ib vĂ€lja nĂ€ha jĂ€rgmine: on projekte, millele kuuluvad bucket'id, millele kuuluvad objektid ning objektid vĂ”ivad olla komplekssetest. Kuna ĂŒheks viisiks objekti ĂŒles laadimiseks on osade kaupa, on laadimise jaoks kaks abita tabelit: uploads ja chunks. Samuti on projektidel ligipÀÀsude andmed ja arveldamine.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut
Andmeskeem

Kuna me tegime b2b-teenust tasulise ligipÀÀsuga, siis oli selle skeemi jaoks vajalik arveldamine.
Arveldamise teenust rakendasime samuti Tarantoolis.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

S3-hoidla tÀiustamine: sammud tootmisse

Meil on juba töötav mudel, mida saab kasutada: objektid ja metaandmed on salvestatud, kuid tootmisse minekuks puudus veel mÔned Esemed.

Esiteks sĂŒsteem mÀÀrangute piiramiseks. Kui kĂ€ivitada teenus ilma selleta, siis tipnĂ”udluse korral vĂ”iksime mĂ”ne sĂŒsteemi osa ettearvamatult ĂŒle koormata. MÀÀrangute piiramine peaks toimima nii: iga S3-pĂ€ring jĂ”uab konkreetsele hostile, see host on bucket'i identifikaator ja bucket kuulub mĂ”nele kliendile. Me peame mÀÀrama funktsiooni bucket'ist, mis vĂ”imaldaks arvutada mÀÀrangute piiri.

Lisaks peab reitingu piiride sĂŒsteem olema piisavalt jĂ”udlusvĂ”imeline, et taluda S3-le suunduvat koormust.

Siin kasutasime jĂ€lle Tarantooli. Reitingu piirid on 21 instantsist koosnev klaster, instantsid on jagatud gruppidesse, laiali kolmele fĂŒĂŒsilisele sĂ”lmele ning ĂŒhendatud suureks topoloogiliseks klasstriks. Konfiguratsioonimuudatused levivad automaatselt: mÀÀratakse reitingu piirid, vaikeseaded ja konfiguratsioon. Iga Ă€mber teenindatakse rangelt ĂŒhe instantsi poolt. Kui konkreetse Ă€mber esitab pĂ€ringu, arvutatakse vĂ€lja, milline instants vastutab selle Ă€mber eest. Selles sĂ”lmes jĂ€lgitakse praegust pĂ€ringu mÀÀratlemise mÀÀra algoritmi jĂ€rgi, mis sarnaneb Token Bucket'iga. Edasi ĂŒtleb reitingu piirsĂŒsteem, lĂ€htudes praegustest koormustest ja saidile seatud omadustest, kas pĂ€ringut saab teostada vĂ”i mitte. Limiteerimise kontrollimist teostatakse S3 pĂ€ringu tĂ€itmise varases staadiumis, kaitstes kĂ”iki muid sĂŒsteemi elemente liialdava koormuse eest.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Koormuse all on pĂ€ris keeruline ilma vahemĂ€luta hakkama saada. S3 puhul eeldatakse korduvat juurdepÀÀsu samadele objektidele, mistĂ”ttu on see kuum salvestus. Tavalises olukorras teenindab ĂŒksikule failile pÀÀsemine tĂ€ieliku ahelaga: Streamer, FileDB, PairDB, Storage. Kuid kui failile pÀÀseb korduvalt, optimeerime juurdepÀÀsu sellele sisule kohalikku vahemĂ€lu kasutades.

VahemĂ€lu on mitmekihiline ja realiseeritud nginx'i, kohalike, SSD- ja RAM-kettade abil. Me ei kasutanud Tarantool'i, kuna objektide edastamine failisĂŒsteemist on mugavam, nii saame teha vahemĂ€lu tiering'i. Lisaks on meil suured objektid, mille maksimaalne suurus on 32 gigabaiti, aga Tarantool'is saab vahemĂ€llu salvestada ainult vĂ€ikseid objekte.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

See oli esimene sĂŒsteem, millega me alustasime, ja sellel oli mĂ”ningane kalkuleeritud mahutavus, mis oli piisav uuringute ja toote mĂ”istmise jaoks, et teada saada, et see töötab.

Taktikalise sĂŒsteemi tĂ€iustused: failover ja skaleerimine

SĂŒsteem oli juba tegevuses, kuid alguses jĂ€tsime mĂ”ningaid asju tĂ€helepanuta - oleks pidanud lisama failover'i ja skaleerimise.

Meie S3-deemon edastas metaandmeid Tarantooli protokolli kaudu. Originaalbaasi asemel paigaldasime Tarantooli, mis toimis metaandmete pĂ€ringute proksina. Rakenduse, mis rakendab API, seisukohalt ei muutunud midagi — see jĂ€tkas andmebaasile Tarantooli protokolli kaudu pöördumist, kuid proksi suutis tagada aktiivse veakaitse. See tĂ€hendab, et suutsime kontrollida sĂ”lme saadavust, teha vahepausi vahetuste ja rikete ajal jne. Samas ei muutnud me rakendust ise.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Lisateave selle kohta, kuidas me shardimise rakendasime

JĂ€rgmine kĂŒsimus, millega tuli tegeleda, oli shardimine. SĂŒsteem kasvas, objektide arv kasvas ning tuli tagada vĂ”imalused edasiseks kasvuks.

Naasume andmete skeemi juurde: seal on projektid, on mahutid, krediid ja arveldamine. Need on objektid, mis tĂ”enĂ€oliselt ei ĂŒleta lĂ€hitulevikus ĂŒhe instantsi piire ei mahu ega pĂ€ringute osas. Seega pole mĂ”tet neid shardida ja oleme need viinud eraldi instantsi, mis jÀÀb shardimata. See vĂ”imaldab projektide ja mahutite haldamist ĂŒhtlasemalt, kuna on olemas ĂŒhtne shardimata punkt.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Samuti on skeemis objekte, mis kasvavad lineaarselt – alguses oli neid sadu tuhandeid, nĂŒĂŒd mÔÔdetakse nende arvu mitme miljardi kaupa. Sellised objektid koos nende osadega tuli viia sharditud klastrisse.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Skeemi oleme jaganud, kuid objektid peavad töötama mahutitega: objekt kuulub alati konkreetsele mahutile, pluss mahutil on ACL. SeetÔttu hoiame iga objektide shardiga kaasas igas mahutis varukoopia. Lisaks, objekti modifitseerimise ja pÀringute tÀitmise ajal tuleb arvestada mahtu arveldamiseks, seega on igas shardis arveldamise loendurid.

Oleme lisanud veel mÔned tabelid ja komponendid:

  • kast, et vanade projektide kustutamiseks vĂ”i kĂŒlmutamiseks, mida kĂ”rvaldatakse;
  • jĂ€rjekord taustatöid jaoks, st peamine salvestus vĂ”ib teha taustatöid, mida tuleb klastris teha;
  • elutsĂŒkli toetamine — mehhanism, mis vĂ”imaldab töötada objektidega ja hallata nende eluiga.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Kuna osa andmeid viidi shardidele, oli vajalik shardimise vaheproksi. Selle rolli tÀitmiseks oleks saanud uuesti kasutada marsruuterit, kuid eraldi shardimise vaheproksi, mis vastutab ainult andmete shardimise eest, vÔimaldab marsruuterist andmete kogumiseks minna, mÔtlema shirtingule.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

RÀÀkige eraldi, miks me ei vÔtnud valmis lahendust, vaid soovisime luua kohandatud shardimise funktsiooni.

Vaata, kuidas see on ĂŒles ehitatud. Meil on 256 saadaval shardit. Iga Ă€mbri jaoks mÀÀrame vahemiku abil mingit jĂ€rjepidevat funktsiooni. See on lihtne — sama nagu mÀÀrate jĂ€rjepideva funktsiooniga ĂŒhte shardisse kuulumise, mÀÀrate algse shard'i ja mÀÀrate vahemiku:

f(Ă€mber, shardid) = alamkogum

Seega, kui vĂ”tta bukett, vĂ”ib öelda, et see ja tema andmed asuvad alati konkreetse alamhulga peal kĂ”igist shardidest. See aitab vĂ€hendada ĂŒhe buketi mĂ”ju teistele ning lihtsustab map-reduce pĂ€ringute töötlemist, kui nĂ€iteks on vajalik buketi objektide loetlemine. Selleks tuleb kĂŒsida kĂ”ikide shardide kohta, kuhu need objektid on salvestatud. Kui objektid asuksid kĂ”igis shardides, mĂ”jutaks iga loetlemine kogu sĂŒsteemi, kuid siin mĂ”jutab see ainult konkreetset alamhulka.

Edasi — iga objekt kuulub konkreetsesse buketti, seega kui me pöördume objekti poole, siis me pöördume objekti poole tema nime alusel konkreetses buketis. See tĂ€hendab, et me saame mÀÀratleda objekti funktsiooni mitte kĂ”igi saadaval olevate shardide hulgast, vaid ainult oma buketi alamhulgast:

f(object, subset) = shard

Me vĂ”tame konkreetse objekti ja funktsiooni argumentidena edastame sinna mitte kĂ”ik shardid, vaid ainult tema buketi alamhulga — ja saame konkreetse shard.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Nii, sharding on rakendatud ja meil on sharding-proksi. JĂ€rgmine samm on routerist ja metadatabaasist sharding-proksisse suunamine. NĂ€iteks varjatud koopiate loomise jaoks — kui loome Ă€mber, peab peamine salvestus looma selle Ă€mber esindaja kĂ”ikides shardides, kus see peab olema.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Kuidas me shardingut ĂŒmber korraldasime

Suurim probleem shardingul on ĂŒmberkorraldamine. Meie jaoks oli oluline teostada see ilma seisakuteta, kuna sĂŒsteem oli juba tootmises. NĂ€itan, kuidas me probleemi lahendasime sarnase ĂŒlesande nĂ€itel, kus andmete elav migreerimine toimus ĂŒhelt projektilt teisele.

Allpool on meie klastrite skeem, mis kujunes pÀrast shardingut. Meil on nginx, S3 API, router, peamine andmebaas projektide jaoks, sharding-proksi ja otse sharded.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Ülal mainisin, et teatud etapis projekti jooksul oli tooteĂŒlesanne: 'KĂ€ivitada veel ĂŒks salvestus, Icebox, — nagu Hotbox, ainult kĂŒlmade andmete jaoks.' Sisuliselt sama salvestus, kuid erineva URL-i ja ilma vahemĂ€gedeta.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Icebox'i kasutati vĂ€hem kui Hotbox'i, seetĂ”ttu suutis see ĂŒsna kaua hakkama saada ilma igasuguse jagamiseta. LĂ”puks otsustasime sellest loobuda ja ĂŒhendada Hotbox ja Icebox ĂŒheks teenuseks, lihtsalt jagades salvestusklassi.

Konteinerid salvestustes ei kattunud, neid oli lihtne sulandada ja liigutada, kuid kliendid kasutasid mĂ”lemaid salvestusi, seega oli vaja lahendada katkestuste puudumise probleem. Oli vĂ”imatu lihtsalt vĂ€lja lĂŒlitada ja kopeerida. Tegime migratsiooni mitmes etapis.

Esmalt sĂŒnkroniseerisime esmased salvestused. Meil oli Tarantool ja me saime objekti loomisel teha nii:

  • andmebaasi tuleb pĂ€ring konteineri loomiseks, nĂ€iteks Hotbox'is;
  • Tarantool kontrollib teises andmebaasis (selles juhul — Icebox'is), et sellist konteinerit ei ole;
  • kui konteiner on olemas, ĂŒtleb andmebaas, et seda ei saa luua, ja see sĂŒnkroniseeritakse kui olemasolev.
    S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut
    Konteinerite sĂŒnkroniseerimine

Selles salvestuses, mis pidi vastu vĂ”tma kĂ”ik andmed, mÀÀrati projektide ja konteinerite jaoks mĂ€rk, mis nĂ€itab, kus see objekt asub. See vĂ”is olla lokaalselt, st Hotboxis, Iceboxis — siis ei olnud uues salvestuses selle kohta mingeid andmeid, vĂ”i vĂ”is olla migreerimise olekus.

Kui projektil vÔi konteineril oli mÀrk Migrating, siis migreerimise ajal tehti pÀring esmalt uude salvestusse, kus andmed pidid olema, ja kui seal ei olnud, siis suunati pÀringud alternatiivsele salvestusele.

SeejĂ€rel suunati meedet. Kuna API vĂ”is teenindada nii Iceboxi kui ka Hotboxi pĂ€ringuid, suutsime meedet edasi suunata ilma seiskamiseta, lihtsalt kandes hostid ĂŒle ja lisades vastavad kirjed Nginxi.

PĂ€rast liikluse suunamist sai Nginxi ja Icebox API eemaldada.
SeejĂ€rel eemaldasime Icebox Nginxi ja S3 API — ning kĂ”ik hakkas toimima:

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

SeejĂ€rel kĂ€ivitasime taustprotsessi, mis töötab andmebaasis — lĂ€bib elementide kaupa kĂ”ik projektid ja nende konteinerid, mÀÀrab neile mĂ€rgi Migrating, kannab andmed ĂŒle ja pĂ€rast ĂŒlekande lĂ”petamist mÀÀrab mĂ€rgi Local.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Andmete ĂŒleviimise jĂ€rel ei ole meil enam vaja vana salvestusruumi ning eemaldame vana sĂŒsteemi jÀÀnused ja eemaldame koodist migratsiooni staatuse toe.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Sama pĂ”himĂ”tete kohaselt viidi lĂ€bi ka ĂŒmberdisainimine vanast salvestusruumist killustatud:

  • MĂ€rgistasime kĂ”ik Ă€mbrid kui Nicht-zerlegt. KĂ”ik pĂ€ringud suunati algsesse, mitte-killustatud salvestusruumi.
  • Uued Ă€mbrit loodi kohe staatusega Killustatud.
  • VĂ”tsime Ă€mbreid jĂ€rjestikku, mÀÀrasime selle staatuseks Migratsioon ja kandsime andmed ĂŒle.

PÀringuid teenindati pÔhimÔtte kohaselt:

  • Loeme uuest, siis vanast.
  • Loome ainult uuest.
  • Uuendame kahes faasis: kui uues ei ole, kanname vanast uude ja siis uuendame.

SSL-sertifikaatidega töötamine

Eesliinil kasutame Nginx'i. Meie puhul ei ole see tavaline Nginx, vaid OpenResty, Nginx, mis toetab LuaJIT'i.

Veel ĂŒks sĂŒsteemi osa — SSL-sertifikaatidega töötamine. S3 salvestusruumis vĂ”ite mÀÀrata oma domeeni konkreetsele Ă€mbri juurde juurdepÀÀsuks, lihtsalt kasutades CNAME. Kuid tĂ€napĂ€eval ei saa ilma HTTPS'ita hakkama: oma domeen eeldab oma SSL-sertifikaati.

Nagu juba mainisin, vastutab meie SSL-i tasakaalustamise ja lÔpetamise eest Nginx. Meie puhul ei ole see lihtsalt tavaline Nginx, vaid OpenResty, Nginx, mis toetab LuaJIT-i.

See vĂ”imaldas meil ĂŒsna lihtsalt Ă”petada oma Nginx'i andma vabalt valitud sertifikaate. Samuti oli vajalik sertifikaate anda dĂŒnaamiliselt (ilma et neid oleks vaja konfigureerimisfaili kirjutada). Me kasutasime laiendust ssl_certificate_by_lua, mis vĂ”imaldab lugeda sertifikaate mistahes allikast otse TLS-i kĂ€epideme ajal. Sertifikaatide hoidmiseks kasutasime ka Tarantooli: see vĂ”imaldab sertifikaate hallata vĂ€ljastpoolt ja tagab ÀÀrmiselt kiire tarnimise.

Samuti rakendati eraldi daemon, mille ĂŒlesanne on regulaarselt vĂ€rskendada sertifikaate, mis on vĂ€lja antud Let’s Encrypti abil.

S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut

Mida ma sÀilitaksin ja mida teeksin teisiti, kui arendaksin hoidlat nullist.

Mida oleks tulnud alates algusest peale kasutada.

Shardimine kohe.. Probleemide hulk, mis pĂ”hjustas sharding, oli piisavalt suur. Seda on lihtne teostada, kuid kui alustada projektidega, mis vajavad skaleerimist, on parem kohe valida sharditud klaster, isegi kui see koosneb minimaalsetest sĂ”lmedest. Shardimise rakendamine alguses on peaaegu tasuta vĂ”rreldes sharding'u integreerimisega töötavasse sĂŒsteemi.

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

Automaatne failover. Paigaldasin kÔik tööriistad, mis on vajalikud automaatse failover'i jaoks, kuna esimesed ebaÔnnestumised pÀrast kÀivitamist olid seotud selle puudumisega. PÀrast S3 kogemust kÀivitati kÔik jÀrgmised tooted selle arvesse vÔtmisega.

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

Erinev arveldus. Kuidas me integreerisime arvelduse meie sĂŒsteemi, toetas see alguses hĂ€sti, kuid hiljem muutus see takistuseks, oleks parem, kui see oleks tĂ€iesti eraldi teenus.

Mis oli edukas lahendus

Andmemudel. Ajalugu nĂ€itas, et teenuse arendamise kĂ€igus ĂŒhtisime ĂŒsna tĂ€pselt Amazon'i andmemudeliga, seega suudame rakendada seal olevaid funktsioone.

Shardimise skeem. Toetaksin selliseid vahemiku pÔhiseid shardimisi konteinerite kaupa, kuna see vÔimaldab hÀsti jaotada pÀringud erinevate konteinerite vahel suurel klastril.

Tarantooli kasutamine. Tarantool aitas oluliselt teenuse arendamisel ja selle kohandumisel, saime andmetega hÔlpsasti töötada, transformeerida ja shardida salvestust, samas ei olnud tarvis minna rakenduse kihile.

See ettekannet kĂ”las esmakordselt @Databases Meetup by Mail.ru Cloud Solutions& Tarrantool. Vaata video teisi ettekandeid ja tellige ĂŒrituste teateid Telegramis Kubernetesest Mail.ru Grupis.

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

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster