{"id":91090,"date":"2020-08-08T13:42:11","date_gmt":"2020-08-08T11:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage"},"modified":"2020-08-08T13:42:11","modified_gmt":"2020-08-08T11:42:11","slug":"arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","title":{"rendered":"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/a53775776b3fc969cc15c9d13a64039d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em><noindex><a rel=\"nofollow\" href=\"https:\/\/www.deviantart.com\/st-pete\/art\/Storage-Corridor-408874509\">Salvestuskoridor<\/a><\/noindex> St-Pete'ist<\/em><\/p>\n<p><\/p>\n<p>Tere k\u00f5igile! Mina olen Mons Anderson, platvormi arhitekt <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>, r\u00e4\u00e4gin, kuidas me ehitasime oma S3-lao, kuidas see t\u00f6\u00f6tab, millised lahendused osutusid \u00f5nnestunuks ja mida oleks pidanud muutma, kui me oleksime sellise projekti nullist uuesti alustanud.<\/p>\n<p><\/p>\n<p>Artikkel on koostatud Mail.ru Cloud Solutions &amp; Tarantooli ettekande p\u00f5hjal. Artiklis k\u00e4sitleme: <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Databases Meetup<\/a><\/noindex> kuidas oli Mail.ru salvestusstruktuur \u00fcles ehitatud, mille peal me S3-lao ehitasime;<\/p>\n<p><\/p>\n<ul>\n<li>mida me lisasime, et luua Mail.ru pilvesalvestus;<\/li>\n<li>kuidas t\u00f6\u00f6tab objektide salvestamise mudel ja millised sammud tehti tootmisseminekuks;<\/li>\n<li>t\u00f6\u00f6s\u00fcsteemi t\u00e4iustamist: failide taastamine ja skaleerimine;<\/li>\n<li>kuidas me rakendasime shardimist ja shardi \u00fcmberjaotamist;<\/li>\n<li>ning SSL-sertifikaatidega seotud t\u00f6\u00f6d.<\/li>\n<li>Kui te ei soovi lugeda, siis saate<\/li>\n<\/ul>\n<p><\/p>\n<p>Kuidas oli Mail.ru salvestusstruktuur \u00fcles ehitatud, mille peal me S3-lao ehitasime <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/NEgm1nsv-qg\">vaadata<\/a><\/noindex>.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"kak-bylo-ustroeno-hranilische-mailru-poverh-kotorogo-my-stroili-s3-hranilische\">Meie S3 arendus algas Mail.ru pilvesalvestusel, seega tasub alguses r\u00e4\u00e4kida, kuidas see on \u00fcles ehitatud ja mida see suudab.<\/h2>\n<p><\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e S3 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u0432\u0435\u0440\u0445 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u041e\u0431\u043b\u0430\u043a\u0430 Mail.ru, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u043e \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u043e \u0438 \u0447\u0442\u043e \u0443\u043c\u0435\u0435\u0442.<\/p>\n<p><\/p>\n<p>Mail.ru pilveteenus koosneb serveritest, mis on varustatud ketastega. T\u00e4nap\u00e4eva modernse salvestusserveri keskmine suurus on 36 ketast, iga\u00fche mahuga 12\u201314 terabaiti. Varasemalt olid kettad v\u00e4iksemad, kuid viimase kolme aasta jooksul on kettamaht suurenenud ja t\u00e4na on need peaaegu pool petabaiti tooreid andmeid. <\/p>\n<p><\/p>\n<p>Erinevate serverite ketastest moodustatakse nn \u00abpaare\u00bb (pair). Paar on ainus failide salvestamise \u00fcksus. Sisuliselt on see disk, mis on monteeritud kindlasse sektsiooni kindlal teel, kus saavad asuda failid, mida tuvastatakse hash'i abil. <\/p>\n<p><\/p>\n<p>Paar on ajalooline nimetus, mis on t\u00e4nap\u00e4evani s\u00e4ilinud, kuigi n\u00fc\u00fcd ei pea paaris olema ainult kaks ketast. Ketasid v\u00f5ib olla kolm, samuti v\u00f5ivad olla erinevad h\u00fcbriidsalvestused, n\u00e4iteks 3\/2. <\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/544ab79846539262e2d4dff6ab95ffff.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Paared (pair) \u2014 objektide salvestamise \u00fcksused<\/em><\/p>\n<p><\/p>\n<p>K\u00f5ik paarid salvestatakse PairDB-s \u2014 see on rakendus Tarantooli baasil. K\u00f5ik andmebaasid meie salvestuses, alates k\u00f5ige varasematest, on Tarantool ja me ei kasuta teisi andmebaase.<\/p>\n<p><\/p>\n<p>PairDB salvestab k\u00f5ik paarid, nende seisukohad, vaba ruum, t\u00f5rked ja viimased vead. Samuti suudab see ise paaridele ligip\u00e4\u00e4su luua, v\u00e4rskendada nende olekut, kontrollida, kas need t\u00f6\u00f6tavad v\u00f5i mitte. Ehk siis PairDB on \u00fcldine hetkeseis k\u00f5igist meie s\u00fcsteemi ketastest.<\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/d50781b8b51ed5fe126bc84e19c934d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Pair DB: paaride oleku andmebaas<\/em><\/p>\n<p><\/p>\n<p>Paarides hoitakse faile, ja et teada saada, millises paaris asub mingi fail, on vajalik veel \u00fcks andmebaas \u2014 FileDB. See hoiab mapitamise ehk vaste m\u00e4\u00e4ratlemise: fail selline talletatakse paaris selline, samuti v\u00e4ikese koguse vajalikke atribuute.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/b1a64737cf7f916bff446c10c1f01d4c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><em>File DB: koht, kus fail asub<\/em><\/p>\n<p>Veel \u00fcks oluline l\u00fcli on teenus Nylon, andmebaasidega t\u00f6\u00f6tamise ruuter. See on ainus sissep\u00e4\u00e4supunkt, mis v\u00f5imaldab t\u00f6\u00f6tada nii PairDB kui ka FileDB-ga \u00fchise liidese kaudu. See on stateless-teenus, see tasakaalustab p\u00e4ringuid, m\u00f5istab, millisele shardile FileDB suunata, ja teab, millised paarid on aktiivsed ja millised mitte.<\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/3e2225f229c8cfa462d620d2b5fb581e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Nylon: andmebaasidega t\u00f6\u00f6tamise ruuter<\/em><\/p>\n<p><\/p>\n<p>Lisaks tuleb sisu ka mingil moel salvestusse panna. Selleks on teenus \u2014 Streamer. See pakub kahte HTTP meetodit: PUT meetod, et sisu salvestusse laadida, ja GET meetod, et sealt seda tagasi saada. HTTP on \u00fcsna populaarne ja mugav protokoll andmete edastamiseks. <\/p>\n<p><\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a Streamer&#8217;y, \u043e\u043d \u0447\u0435\u0440\u0435\u0437 Nylon \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a PairDB, \u0432\u044b\u044f\u0441\u043d\u044f\u0435\u0442, \u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u043f\u0430\u0440\u0443 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043b\u0438\u0442\u044c \u0444\u0430\u0439\u043b, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e WebDAV \u043d\u0430 \u044d\u0442\u0443 \u043f\u0430\u0440\u0443. <\/p>\n<p><\/p>\n<p>Sisuliselt on iga storage server \u2014 see on nginx pluss kettad, mis on monteeritud m\u00e4\u00e4ratud radadele. Me saame Streamer'ist laadida salvestusse faili, kustutada selle, nimetada \u00fcmber v\u00f5i kontrollida selle terviklikkust. See on mugav liides madala taseme suhtlemiseks salvestusega. <\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/3722a89ed44cace36e9cb1f8bee4bd1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Streamer: sisenemispunkt salvestusse<\/em><\/p>\n<p><\/p>\n<h2 id=\"chto-my-dobavili-chtoby-sdelat-s3-hranilische\">Mida me lisasime, et S3 salvestust teha<\/h2>\n<p><\/p>\n<p>Nii oleme uurinud salvestusseadmise \u00fcldist alust, kui olime k\u00e4ivitamas S3 salvestust. PUT meetodi abil saime sinna paigutada suvalist sisu ja saada selle andme identifikaatoriks r\u00e4si. Selle identifikaatoriga oli hiljem v\u00f5imalik tagasi tulla ja originaalfail k\u00e4tte saada. Kuid see ei piisa S3 rakendamiseks. S3 protokollis, lisaks objektide salvestamisele, on:<\/p>\n<p><\/p>\n<ul>\n<li>metainfo salvestamine \u2014 objekti t\u00e4iendavad omadused;<\/li>\n<li>juurdep\u00e4\u00e4su korraldamine objektidele HTTP kaudu;<\/li>\n<li>objektide grupeerimine kogudesse \u2014 \u00e4mbrid;<\/li>\n<li>HTTP-S3 l\u00f5pp-punkt. S3 korraldab andmed kindlatesse struktuuridesse \u2014 \u00e4mbrid, millest iga\u00fcks pakub sissep\u00e4\u00e4sufunktsiooni failide salvestamiseks.<\/li>\n<\/ul>\n<p><\/p>\n<p>Selle loogika rakendamiseks oli vajalik eraldi teenus. Hakkasime kohe kavandama arhitektuuri teenuse edasise kasvu jaoks, et tagada lineaarne skaleeritavus.<\/p>\n<p><\/p>\n<h2 id=\"pervye-komponenty\">Esimesed komponendid<\/h2>\n<p><\/p>\n<p>Demon, mis rakendab S3 API-d. See on Amazoni standardne S3 API, mis toetab XML-i kasutamist metainfo jaoks ja v\u00f5imaldab sisu otse edastada. Me ei pidanud midagi leiutama, k\u00f5ik on kirja pandud ja dokumenteeritud.<\/p>\n<p><\/p>\n<p>Lisaks teenusele oleme paigaldanud Nginxi. Kasutasime seda SSL-i terminatsiooniks, koormuse tasakaalustamiseks ning teatud loogika jaoks Luas (meetmed, logimine ja j\u00e4lgimine).<\/p>\n<p><\/p>\n<p>Metandmete S3 talletamiseks valisime samuti Tarantooli. Esimeses versioonis l\u00e4ks S3 deemon nende metandmete jaoks sellesse andmebaasi, sisu talletati aga suures ladustamises Streameri kaudu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/03dddec282b5bb41eb63748ccfb6c9a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Nginx + S3 API + metandmed<\/em><\/p>\n<p><\/p>\n<h2 id=\"obektnaya-model-hraneniya\">Objektide hoidmise mudel<\/h2>\n<p><\/p>\n<p>Vaadakem, kuidas S3 t\u00f6\u00f6tab. Kasutaja v\u00f5ib luua \u00e4mbri \u2014 objekti kogumi. \u00c4mbrit adresseeritakse hosti nimega ja see on teenuse alamdomeen. \u00c4mbri raames v\u00f5ib kasutaja luua objekte. Objekti identifikaatoriks on URL. Objekti sisu on blob, binaarsete andmete massiiv, mida me ladustame. Samuti on objektil atribuute: nimi \u2014 see sama URL, ACL (juurdep\u00e4\u00e4suhaldusloend), muud t\u00e4iendavad v\u00f5i vabatahtlikud atribuudid \u2014 k\u00f5ik see talletatakse metandmetes. <\/p>\n<p><\/p>\n<p>Korrigeeritud andmeskeem v\u00f5ib v\u00e4lja n\u00e4ha j\u00e4rgmine: on projekte, millele kuuluvad bucket'id, millele kuuluvad objektid ning objektid v\u00f5ivad olla komplekssetest. Kuna \u00fcheks viisiks objekti \u00fcles laadimiseks on osade kaupa, on laadimise jaoks kaks abita tabelit: uploads ja chunks. Samuti on projektidel ligip\u00e4\u00e4sude andmed ja arveldamine. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/e2bede45ba4044f658b47a9840fd5224.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Andmeskeem<\/em><\/p>\n<p><\/p>\n<p>Kuna me tegime b2b-teenust tasulise ligip\u00e4\u00e4suga, siis oli selle skeemi jaoks vajalik arveldamine.<br \/>\nArveldamise teenust rakendasime samuti Tarantoolis. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/d5b1a63e2273e933c95deecdb054bfe6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"dorabotki-s3-hranilischa-shagi-k-prodakshenu\">S3-hoidla t\u00e4iustamine: sammud tootmisse<\/h2>\n<p><\/p>\n<p>Meil on juba t\u00f6\u00f6tav mudel, mida saab kasutada: objektid ja metaandmed on salvestatud, kuid tootmisse minekuks puudus veel m\u00f5ned Esemed.<\/p>\n<p><\/p>\n<p>Esiteks s\u00fcsteem m\u00e4\u00e4rangute piiramiseks. Kui k\u00e4ivitada teenus ilma selleta, siis tipn\u00f5udluse korral v\u00f5iksime m\u00f5ne s\u00fcsteemi osa ettearvamatult \u00fcle koormata. M\u00e4\u00e4rangute piiramine peaks toimima nii: iga S3-p\u00e4ring j\u00f5uab konkreetsele hostile, see host on bucket'i identifikaator ja bucket kuulub m\u00f5nele kliendile. Me peame m\u00e4\u00e4rama funktsiooni bucket'ist, mis v\u00f5imaldaks arvutada m\u00e4\u00e4rangute piiri. <\/p>\n<p><\/p>\n<p>Lisaks peab reitingu piiride s\u00fcsteem olema piisavalt j\u00f5udlusv\u00f5imeline, et taluda S3-le suunduvat koormust.<\/p>\n<p><\/p>\n<p>Siin kasutasime j\u00e4lle Tarantooli. Reitingu piirid on 21 instantsist koosnev klaster, instantsid on jagatud gruppidesse, laiali kolmele f\u00fc\u00fcsilisele s\u00f5lmele ning \u00fchendatud suureks topoloogiliseks klasstriks. Konfiguratsioonimuudatused levivad automaatselt: m\u00e4\u00e4ratakse reitingu piirid, vaikeseaded ja konfiguratsioon. Iga \u00e4mber teenindatakse rangelt \u00fche instantsi poolt. Kui konkreetse \u00e4mber esitab p\u00e4ringu, arvutatakse v\u00e4lja, milline instants vastutab selle \u00e4mber eest. Selles s\u00f5lmes j\u00e4lgitakse praegust p\u00e4ringu m\u00e4\u00e4ratlemise m\u00e4\u00e4ra algoritmi j\u00e4rgi, mis sarnaneb Token Bucket'iga. Edasi \u00fctleb reitingu piirs\u00fcsteem, l\u00e4htudes praegustest koormustest ja saidile seatud omadustest, kas p\u00e4ringut saab teostada v\u00f5i mitte. Limiteerimise kontrollimist teostatakse S3 p\u00e4ringu t\u00e4itmise varases staadiumis, kaitstes k\u00f5iki muid s\u00fcsteemi elemente liialdava koormuse eest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/1b91e5d1fe067c859ba9b36d58827579.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Koormuse all on p\u00e4ris keeruline ilma vahem\u00e4luta hakkama saada. S3 puhul eeldatakse korduvat juurdep\u00e4\u00e4su samadele objektidele, mist\u00f5ttu on see kuum salvestus. Tavalises olukorras teenindab \u00fcksikule failile p\u00e4\u00e4semine t\u00e4ieliku ahelaga: Streamer, FileDB, PairDB, Storage. Kuid kui failile p\u00e4\u00e4seb korduvalt, optimeerime juurdep\u00e4\u00e4su sellele sisule kohalikku vahem\u00e4lu kasutades.<\/p>\n<p><\/p>\n<p>Vahem\u00e4lu on mitmekihiline ja realiseeritud nginx'i, kohalike, SSD- ja RAM-kettade abil. Me ei kasutanud Tarantool'i, kuna objektide edastamine failis\u00fcsteemist on mugavam, nii saame teha vahem\u00e4lu tiering'i. Lisaks on meil suured objektid, mille maksimaalne suurus on 32 gigabaiti, aga Tarantool'is saab vahem\u00e4llu salvestada ainult v\u00e4ikseid objekte.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/faa02bd52a1d70642589d775f22c5e75.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See oli esimene s\u00fcsteem, millega me alustasime, ja sellel oli m\u00f5ningane kalkuleeritud mahutavus, mis oli piisav uuringute ja toote m\u00f5istmise jaoks, et teada saada, et see t\u00f6\u00f6tab. <\/p>\n<p><\/p>\n<h2 id=\"dorabotki-boevoy-sistemy-feylover-i-masshtabirovanie\">Taktikalise s\u00fcsteemi t\u00e4iustused: failover ja skaleerimine<\/h2>\n<p><\/p>\n<p>S\u00fcsteem oli juba tegevuses, kuid alguses j\u00e4tsime m\u00f5ningaid asju t\u00e4helepanuta - oleks pidanud lisama failover'i ja skaleerimise. <\/p>\n<p><\/p>\n<p>Meie S3-deemon edastas metaandmeid Tarantooli protokolli kaudu. Originaalbaasi asemel paigaldasime Tarantooli, mis toimis metaandmete p\u00e4ringute proksina. Rakenduse, mis rakendab API, seisukohalt ei muutunud midagi \u2014 see j\u00e4tkas andmebaasile Tarantooli protokolli kaudu p\u00f6\u00f6rdumist, kuid proksi suutis tagada aktiivse veakaitse. See t\u00e4hendab, et suutsime kontrollida s\u00f5lme saadavust, teha vahepausi vahetuste ja rikete ajal jne. Samas ei muutnud me rakendust ise. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/978ff8a458f8d48b98672121cf6eca5d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"podrobnee-o-tom-kak-my-realizovali-shardirovanie\">Lisateave selle kohta, kuidas me shardimise rakendasime<\/h2>\n<p><\/p>\n<p>J\u00e4rgmine k\u00fcsimus, millega tuli tegeleda, oli shardimine. S\u00fcsteem kasvas, objektide arv kasvas ning tuli tagada v\u00f5imalused edasiseks kasvuks.<\/p>\n<p><\/p>\n<p>Naasume andmete skeemi juurde: seal on projektid, on mahutid, krediid ja arveldamine. Need on objektid, mis t\u00f5en\u00e4oliselt ei \u00fcleta l\u00e4hitulevikus \u00fche instantsi piire ei mahu ega p\u00e4ringute osas. Seega pole m\u00f5tet neid shardida ja oleme need viinud eraldi instantsi, mis j\u00e4\u00e4b shardimata. See v\u00f5imaldab projektide ja mahutite haldamist \u00fchtlasemalt, kuna on olemas \u00fchtne shardimata punkt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/c5a1c1a875e756e3dceb5f885fbda2c8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samuti on skeemis objekte, mis kasvavad lineaarselt \u2013 alguses oli neid sadu tuhandeid, n\u00fc\u00fcd m\u00f5\u00f5detakse nende arvu mitme miljardi kaupa. Sellised objektid koos nende osadega tuli viia sharditud klastrisse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/00bb418cc61ad2e3e8797caf5d1ab202.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Skeemi oleme jaganud, kuid objektid peavad t\u00f6\u00f6tama mahutitega: objekt kuulub alati konkreetsele mahutile, pluss mahutil on ACL. Seet\u00f5ttu hoiame iga objektide shardiga kaasas igas mahutis varukoopia. Lisaks, objekti modifitseerimise ja p\u00e4ringute t\u00e4itmise ajal tuleb arvestada mahtu arveldamiseks, seega on igas shardis arveldamise loendurid.<\/p>\n<p><\/p>\n<p>Oleme lisanud veel m\u00f5ned tabelid ja komponendid:<\/p>\n<p><\/p>\n<ul>\n<li>kast, et vanade projektide kustutamiseks v\u00f5i k\u00fclmutamiseks, mida k\u00f5rvaldatakse;<\/li>\n<li>j\u00e4rjekord taustat\u00f6id jaoks, st peamine salvestus v\u00f5ib teha taustat\u00f6id, mida tuleb klastris teha;<\/li>\n<li>eluts\u00fckli toetamine \u2014 mehhanism, mis v\u00f5imaldab t\u00f6\u00f6tada objektidega ja hallata nende eluiga.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/933e98dc559eb8e6bac14003215a6836.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuna osa andmeid viidi shardidele, oli vajalik shardimise vaheproksi. Selle rolli t\u00e4itmiseks oleks saanud uuesti kasutada marsruuterit, kuid eraldi shardimise vaheproksi, mis vastutab ainult andmete shardimise eest, v\u00f5imaldab marsruuterist andmete kogumiseks minna, m\u00f5tlema shirtingule.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/4b181ed4629180e15558f25b1e4d5718.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>R\u00e4\u00e4kige eraldi, miks me ei v\u00f5tnud valmis lahendust, vaid soovisime luua kohandatud shardimise funktsiooni. <\/p>\n<p><\/p>\n<p>Vaata, kuidas see on \u00fcles ehitatud. Meil on 256 saadaval shardit. Iga \u00e4mbri jaoks m\u00e4\u00e4rame vahemiku abil mingit j\u00e4rjepidevat funktsiooni. See on lihtne \u2014 sama nagu m\u00e4\u00e4rate j\u00e4rjepideva funktsiooniga \u00fchte shardisse kuulumise, m\u00e4\u00e4rate algse shard'i ja m\u00e4\u00e4rate vahemiku:<\/p>\n<p><\/p>\n<p><code>f(\u00e4mber, shardid) = alamkogum<\/code><\/p>\n<p><\/p>\n<p>Seega, kui v\u00f5tta bukett, v\u00f5ib \u00f6elda, et see ja tema andmed asuvad alati konkreetse alamhulga peal k\u00f5igist shardidest. See aitab v\u00e4hendada \u00fche buketi m\u00f5ju teistele ning lihtsustab map-reduce p\u00e4ringute t\u00f6\u00f6tlemist, kui n\u00e4iteks on vajalik buketi objektide loetlemine. Selleks tuleb k\u00fcsida k\u00f5ikide shardide kohta, kuhu need objektid on salvestatud. Kui objektid asuksid k\u00f5igis shardides, m\u00f5jutaks iga loetlemine kogu s\u00fcsteemi, kuid siin m\u00f5jutab see ainult konkreetset alamhulka.<\/p>\n<p><\/p>\n<p>Edasi \u2014 iga objekt kuulub konkreetsesse buketti, seega kui me p\u00f6\u00f6rdume objekti poole, siis me p\u00f6\u00f6rdume objekti poole tema nime alusel konkreetses buketis. See t\u00e4hendab, et me saame m\u00e4\u00e4ratleda objekti funktsiooni mitte k\u00f5igi saadaval olevate shardide hulgast, vaid ainult oma buketi alamhulgast:<\/p>\n<p><\/p>\n<p><code>f(object, subset) = shard<\/code><\/p>\n<p><\/p>\n<p>Me v\u00f5tame konkreetse objekti ja funktsiooni argumentidena edastame sinna mitte k\u00f5ik shardid, vaid ainult tema buketi alamhulga \u2014 ja saame konkreetse shard. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/10480ad2430c228c511ff3cdc5071596.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nii, sharding on rakendatud ja meil on sharding-proksi. J\u00e4rgmine samm on routerist ja metadatabaasist sharding-proksisse suunamine. N\u00e4iteks varjatud koopiate loomise jaoks \u2014 kui loome \u00e4mber, peab peamine salvestus looma selle \u00e4mber esindaja k\u00f5ikides shardides, kus see peab olema.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/bb34d1f747903a3c2f08f582e4424787.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"kak-my-realizovali-resharding\">Kuidas me shardingut \u00fcmber korraldasime<\/h2>\n<p><\/p>\n<p>Suurim probleem shardingul on \u00fcmberkorraldamine. Meie jaoks oli oluline teostada see ilma seisakuteta, kuna s\u00fcsteem oli juba tootmises. N\u00e4itan, kuidas me probleemi lahendasime sarnase \u00fclesande n\u00e4itel, kus andmete elav migreerimine toimus \u00fchelt projektilt teisele.<\/p>\n<p><\/p>\n<p>Allpool on meie klastrite skeem, mis kujunes p\u00e4rast shardingut. Meil on nginx, S3 API, router, peamine andmebaas projektide jaoks, sharding-proksi ja otse sharded.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/0e6bd16c7fc47437b3b7d96b6d9809a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u00dclal mainisin, et teatud etapis projekti jooksul oli toote\u00fclesanne: 'K\u00e4ivitada veel \u00fcks salvestus, Icebox, \u2014 nagu Hotbox, ainult k\u00fclmade andmete jaoks.' Sisuliselt sama salvestus, kuid erineva URL-i ja ilma vahem\u00e4gedeta.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/9ce9085e1d03e9a99b6b8ccc0717c653.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Icebox'i kasutati v\u00e4hem kui Hotbox'i, seet\u00f5ttu suutis see \u00fcsna kaua hakkama saada ilma igasuguse jagamiseta. L\u00f5puks otsustasime sellest loobuda ja \u00fchendada Hotbox ja Icebox \u00fcheks teenuseks, lihtsalt jagades salvestusklassi. <\/p>\n<p><\/p>\n<p>Konteinerid salvestustes ei kattunud, neid oli lihtne sulandada ja liigutada, kuid kliendid kasutasid m\u00f5lemaid salvestusi, seega oli vaja lahendada katkestuste puudumise probleem. Oli v\u00f5imatu lihtsalt v\u00e4lja l\u00fclitada ja kopeerida. Tegime migratsiooni mitmes etapis.<\/p>\n<p><\/p>\n<p>Esmalt s\u00fcnkroniseerisime esmased salvestused. Meil oli Tarantool ja me saime objekti loomisel teha nii: <\/p>\n<p><\/p>\n<ul>\n<li>andmebaasi tuleb p\u00e4ring konteineri loomiseks, n\u00e4iteks Hotbox'is;<\/li>\n<li>Tarantool kontrollib teises andmebaasis (selles juhul \u2014 Icebox'is), et sellist konteinerit ei ole;<\/li>\n<li>kui konteiner on olemas, \u00fctleb andmebaas, et seda ei saa luua, ja see s\u00fcnkroniseeritakse kui olemasolev.<br \/>\n<img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/6694c9804f09942416c1717b455b9fd3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Konteinerite s\u00fcnkroniseerimine<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p>Selles salvestuses, mis pidi vastu v\u00f5tma k\u00f5ik andmed, m\u00e4\u00e4rati projektide ja konteinerite jaoks m\u00e4rk, mis n\u00e4itab, kus see objekt asub. See v\u00f5is olla lokaalselt, st Hotboxis, Iceboxis \u2014 siis ei olnud uues salvestuses selle kohta mingeid andmeid, v\u00f5i v\u00f5is olla migreerimise olekus.<\/p>\n<p><\/p>\n<p>Kui projektil v\u00f5i konteineril oli m\u00e4rk Migrating, siis migreerimise ajal tehti p\u00e4ring esmalt uude salvestusse, kus andmed pidid olema, ja kui seal ei olnud, siis suunati p\u00e4ringud alternatiivsele salvestusele.<\/p>\n<p><\/p>\n<p>Seej\u00e4rel suunati meedet. Kuna API v\u00f5is teenindada nii Iceboxi kui ka Hotboxi p\u00e4ringuid, suutsime meedet edasi suunata ilma seiskamiseta, lihtsalt kandes hostid \u00fcle ja lisades vastavad kirjed Nginxi. <\/p>\n<p><\/p>\n<p>P\u00e4rast liikluse suunamist sai Nginxi ja Icebox API eemaldada.<br \/>\nSeej\u00e4rel eemaldasime Icebox Nginxi ja S3 API \u2014 ning k\u00f5ik hakkas toimima:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/62d9f960fc1f11b875a8f8a5aa8e8152.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seej\u00e4rel k\u00e4ivitasime taustprotsessi, mis t\u00f6\u00f6tab andmebaasis \u2014 l\u00e4bib elementide kaupa k\u00f5ik projektid ja nende konteinerid, m\u00e4\u00e4rab neile m\u00e4rgi Migrating, kannab andmed \u00fcle ja p\u00e4rast \u00fclekande l\u00f5petamist m\u00e4\u00e4rab m\u00e4rgi Local.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/1a3129136f7ccacfdcff260f10cb0605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Andmete \u00fcleviimise j\u00e4rel ei ole meil enam vaja vana salvestusruumi ning eemaldame vana s\u00fcsteemi j\u00e4\u00e4nused ja eemaldame koodist migratsiooni staatuse toe.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/13b6f11add40c21a3b9afc05dd0dfea9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sama p\u00f5him\u00f5tete kohaselt viidi l\u00e4bi ka \u00fcmberdisainimine vanast salvestusruumist killustatud:<\/p>\n<p><\/p>\n<ul>\n<li>M\u00e4rgistasime k\u00f5ik \u00e4mbrid kui <code>Nicht-zerlegt<\/code>. K\u00f5ik p\u00e4ringud suunati algsesse, mitte-killustatud salvestusruumi.<\/li>\n<li>Uued \u00e4mbrit loodi kohe staatusega <code>Killustatud<\/code>.<\/li>\n<li>V\u00f5tsime \u00e4mbreid j\u00e4rjestikku, m\u00e4\u00e4rasime selle staatuseks <code>Migratsioon<\/code> ja kandsime andmed \u00fcle.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00e4ringuid teenindati p\u00f5him\u00f5tte kohaselt:<\/p>\n<p><\/p>\n<ul>\n<li>Loeme uuest, siis vanast.<\/li>\n<li>Loome ainult uuest.<\/li>\n<li>Uuendame kahes faasis: kui uues ei ole, kanname vanast uude ja siis uuendame.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"rabota-s-ssl-sertifikatami\">SSL-sertifikaatidega t\u00f6\u00f6tamine<\/h2>\n<p><\/p>\n<blockquote><p>Eesliinil kasutame Nginx'i. Meie puhul ei ole see tavaline Nginx, vaid OpenResty, Nginx, mis toetab LuaJIT'i.<\/p><\/blockquote>\n<p>Veel \u00fcks s\u00fcsteemi osa \u2014 SSL-sertifikaatidega t\u00f6\u00f6tamine. S3 salvestusruumis v\u00f5ite m\u00e4\u00e4rata oma domeeni konkreetsele \u00e4mbri juurde juurdep\u00e4\u00e4suks, lihtsalt kasutades <code>CNAME<\/code>. Kuid t\u00e4nap\u00e4eval ei saa ilma HTTPS'ita hakkama: oma domeen eeldab oma SSL-sertifikaati. <\/p>\n<p><\/p>\n<p>Nagu juba mainisin, vastutab meie SSL-i tasakaalustamise ja l\u00f5petamise eest Nginx. Meie puhul ei ole see lihtsalt tavaline Nginx, vaid OpenResty, Nginx, mis toetab LuaJIT-i.<\/p>\n<p><\/p>\n<p>See v\u00f5imaldas meil \u00fcsna lihtsalt \u00f5petada oma Nginx'i andma vabalt valitud sertifikaate. Samuti oli vajalik sertifikaate anda d\u00fcnaamiliselt (ilma et neid oleks vaja konfigureerimisfaili kirjutada). Me kasutasime laiendust <code>ssl_certificate_by_lua<\/code>, mis v\u00f5imaldab lugeda sertifikaate mistahes allikast otse TLS-i k\u00e4epideme ajal. Sertifikaatide hoidmiseks kasutasime ka Tarantooli: see v\u00f5imaldab sertifikaate hallata v\u00e4ljastpoolt ja tagab \u00e4\u00e4rmiselt kiire tarnimise.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0434\u0435\u043c\u043e\u043d, \u0432 \u0437\u0430\u0434\u0430\u0447\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0432\u044b\u043f\u0438\u0441\u0430\u043d\u044b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Let&#8217;s Encrypt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 arhitektuur: 3 aastat Mail.ru Cloud Storage-i arengut\" src=\"\/wp-content\/uploads\/2020\/08\/8d61c1cb3084d9eb4eb8faa745e212db.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"chto-by-ya-sohranil-a-chto-sdelal-po-drugomu-esli-razrabatyvat-hranilische-zanovo\">Mida ma s\u00e4ilitaksin ja mida teeksin teisiti, kui arendaksin hoidlat nullist.<\/h2>\n<p><\/p>\n<h3 id=\"chto-nuzhno-bylo-ispolzovat-s-samogo-nachala\">Mida oleks tulnud alates algusest peale kasutada.<\/h3>\n<p><\/p>\n<p><strong>Shardimine kohe.<\/strong>. Probleemide hulk, mis p\u00f5hjustas 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\u00f5lmedest. Shardimise rakendamine alguses on peaaegu tasuta v\u00f5rreldes sharding'u integreerimisega t\u00f6\u00f6tavasse s\u00fcsteemi.<\/p>\n<p><\/p>\n<p><strong>Tarantooliga t\u00f6\u00f6tamine l\u00e4bi koormuse tasakaalustajate<\/strong>. Hetkel \u00fchendame k\u00f5ik uued andmebaasid kohe koormuse tasakaalustajate kaudu t\u00f6\u00f6sse. See v\u00f5imaldab funktsionaalsust laiendada ja saavutada suuremat t\u00f5rke taluvust. <\/p>\n<p><\/p>\n<p><strong>Automaatne failover<\/strong>. Paigaldasin k\u00f5ik t\u00f6\u00f6riistad, mis on vajalikud automaatse failover'i jaoks, kuna esimesed eba\u00f5nnestumised p\u00e4rast k\u00e4ivitamist olid seotud selle puudumisega. P\u00e4rast S3 kogemust k\u00e4ivitati k\u00f5ik j\u00e4rgmised tooted selle arvesse v\u00f5tmisega.<\/p>\n<p><\/p>\n<p><strong>S3 funktsioon 'Versioonimine'<\/strong>. Alguses tundus, et see ei ole v\u00e4ga n\u00f5utud funktsionaalsus. Selle v\u00f5imaluse integreerimine t\u00f6\u00f6tava s\u00fcsteemi arhitektuuri on \u00e4\u00e4rmiselt keeruline.<\/p>\n<p><\/p>\n<p><strong>Erinev arveldus<\/strong>. Kuidas me integreerisime arvelduse meie s\u00fcsteemi, toetas see alguses h\u00e4sti, kuid hiljem muutus see takistuseks, oleks parem, kui see oleks t\u00e4iesti eraldi teenus.<\/p>\n<p><\/p>\n<h3 id=\"chto-bylo-udachnym-resheniem\">Mis oli edukas lahendus<\/h3>\n<p><\/p>\n<p><strong>Andmemudel<\/strong>. Ajalugu n\u00e4itas, et teenuse arendamise k\u00e4igus \u00fchtisime \u00fcsna t\u00e4pselt Amazon'i andmemudeliga, seega suudame rakendada seal olevaid funktsioone.<\/p>\n<p><\/p>\n<p><strong>Shardimise skeem<\/strong>. Toetaksin selliseid vahemiku p\u00f5hiseid shardimisi konteinerite kaupa, kuna see v\u00f5imaldab h\u00e4sti jaotada p\u00e4ringud erinevate konteinerite vahel suurel klastril.<\/p>\n<p><\/p>\n<p><strong>Tarantooli kasutamine<\/strong>. Tarantool aitas oluliselt teenuse arendamisel ja selle kohandumisel, saime andmetega h\u00f5lpsasti t\u00f6\u00f6tada, transformeerida ja shardida salvestust, samas ei olnud tarvis minna rakenduse kihile. <\/p>\n<p><\/p>\n<blockquote><p>See ettekannet k\u00f5las esmakordselt <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Databases Meetup<\/a><\/noindex> by Mail.ru Cloud Solutions&amp; Tarrantool. Vaata <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=jM4hL2u6JM0&amp;list=PLQzTaxmOHjntyNRPWhaWHqlHp8UN_wgQ3\">video<\/a><\/noindex> teisi ettekandeid ja tellige \u00fcrituste teateid Telegramis <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Kubernetesest Mail.ru Grupis<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Samuti saate vaadata minu vana ettekannet S3-st v\u00f5i lugeda minu kolleegi artiklit plokk salvestuse kohta.<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=O0iIADHgBVc\">Amazon S3 arhitektuuri p\u00f6\u00f6rduv inseneritegevus ja kuidas MCS S3 salvestus v\u00e4lja n\u00e4gi 3 aastat tagasi.<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">Rohkem kui Ceph: MCS-i pilve blokeeringu salvestus<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/513356\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>Storage Corridor by St-Pete \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042f Mons Anderson, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Mail.ru Cloud Solutions, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430\u0448\u0435 S3-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u043c\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0443\u043b\u044f \u0441\u0435\u0439\u0447\u0430\u0441. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 @Databases Meetup by Mail.ru Cloud Solutions &amp; Tarantool. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":91091,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-91090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"Storage Corridor by St-Pete \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042f Mons Anderson, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Mail.ru Cloud Solutions, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430\u0448\u0435 S3-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u043c\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0443\u043b\u044f \u0441\u0435\u0439\u0447\u0430\u0441. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 @Databases Meetup by Mail.ru Cloud Solutions &amp; Tarantool.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 S3: 3 \u0433\u043e\u0434\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 Mail.ru Cloud Storage | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"Storage Corridor by St-Pete \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042f Mons Anderson, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Mail.ru Cloud Solutions, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430\u0448\u0435 S3-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u043c\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0443\u043b\u044f \u0441\u0435\u0439\u0447\u0430\u0441. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 @Databases Meetup by Mail.ru Cloud Solutions &amp; Tarantool.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47S3 arhitektuur: 3 aastat Mail.ru Cloud Storage'i evolutsiooni | ProHoster","description":"Storage Corridor by St-Pete Tere! Mina olen Mons Anderson, Mail.ru Cloud Solutions'i platvormi arhitekt, ja r\u00e4\u00e4gin, kuidas me ehitasime oma S3-lao, kuidas see t\u00f6\u00f6tab, millised lahendused osutusid edukaks ning mida oleks pidanud muutma, kui me alstartaksime sama projekti nullist praegu. Artikkel on koostatud p\u00f5hinedes ettekandele @Databases Meetup by Mail.ru Cloud Solutions &amp; Tarantool.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 S3: 3 \u0433\u043e\u0434\u0430 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u0438 Mail.ru Cloud Storage | ProHoster","og:description":"Storage Corridor by St-Pete \u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u042f Mons Anderson, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b Mail.ru Cloud Solutions, \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043d\u0430\u0448\u0435 S3-\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u0443\u0434\u0430\u0447\u043d\u044b\u043c\u0438, \u0430 \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u043e\u0438\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043d\u0443\u043b\u044f \u0441\u0435\u0439\u0447\u0430\u0441. \u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u043a\u043b\u0430\u0434\u0430 \u043d\u0430 @Databases Meetup by Mail.ru Cloud Solutions &amp; Tarantool.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-08T11:42:11+00:00","article:modified_time":"2020-08-08T11:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"91090","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:34:25","updated":"2022-10-02 13:27:50"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=91090"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/91090\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/91091"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=91090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=91090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=91090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}