{"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\/sq\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","title":{"rendered":"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" 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\">Korridori i Ruajtjes<\/a><\/noindex> nga St-Pete<\/em><\/p>\n<p><\/p>\n<p>P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve! Un\u00eb jam Mons Anderson, arkitekt i platform\u00ebs <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>, do t\u00eb flas se si nd\u00ebrtuam ruajtjen ton\u00eb S3, si funksionon, cilat zgjidhje u d\u00ebshmuan t\u00eb suksesshme dhe cilat do t\u00eb ishin ndryshuar n\u00ebse do ta fillonim nj\u00eb projekt t\u00eb till\u00eb nga e para tani.<\/p>\n<p><\/p>\n<p>Artikulli \u00ebsht\u00eb p\u00ebrgatitur n\u00eb baz\u00eb t\u00eb nj\u00eb raporti n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Databases Meetup<\/a><\/noindex> nga Mail.ru Cloud Solutions &amp; Tarantool. N\u00eb artikull do t\u00eb flasim p\u00ebr:<\/p>\n<p><\/p>\n<ul>\n<li>si ishte e organizuar ruajtja e Mail.ru, mbi t\u00eb cil\u00ebn nd\u00ebrtuam ruajtjen S3;<\/li>\n<li>\u00e7far\u00eb shtuam p\u00ebr ta b\u00ebr\u00eb Mail.ru Cloud Storage;<\/li>\n<li>si funksionon modeli i objekteve t\u00eb ruajtjes dhe cilat hapa u b\u00ebn\u00eb p\u00ebr t\u00eb dal\u00eb n\u00eb prodhim;<\/li>\n<li>p\u00ebr p\u00ebrmir\u00ebsimet e sistemit t\u00eb prodhimit: pavarsit\u00eb dhe shkall\u00ebzimi;<\/li>\n<li>si e realizuam sharding dhe reshards;<\/li>\n<li>si dhe p\u00ebr pun\u00ebn me certifikatat SSL.<\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00ebse nuk d\u00ebshironi t\u00eb lexoni, mund t\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/NEgm1nsv-qg\">shikoni<\/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\">Si ishte e organizuar ruajtja e Mail.ru, mbi t\u00eb cil\u00ebn nd\u00ebrtuam ruajtjen S3<\/h2>\n<p><\/p>\n<p>Zhvillimi i S3 ton\u00eb filloi mbi ruajtjen e Cloud Mail.ru, prandaj \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb tregojm\u00eb se si \u00ebsht\u00eb organizuar dhe \u00e7far\u00eb mund t\u00eb b\u00ebj\u00eb.<\/p>\n<p><\/p>\n<p>Ruajtja e Cloud Mail.ru p\u00ebrb\u00ebhet nga server\u00eb me disqe. Mesatarisht, nj\u00eb server storage modern p\u00ebrb\u00ebhet nga 36 disqe me 12-14 terabajt. M\u00eb par\u00eb disqet ishin m\u00eb t\u00eb vogla, por n\u00eb tri vitet e fundit kapacitetet e disqeve jan\u00eb rritur dhe sot kjo \u00ebsht\u00eb pothuajse gjysm\u00eb petabajti t\u00eb dh\u00ebna t\u00eb pap\u00ebrpunuara. <\/p>\n<p><\/p>\n<p>Disqet nga server\u00ebt e ndrysh\u00ebm t\u00eb ruajtjes kombinohen n\u00eb ato q\u00eb quhen '\u00e7iftet' (pair). Nj\u00eb \u00e7ift \u00ebsht\u00eb nj\u00eb nj\u00ebsia e vetme e ruajtjes s\u00eb skedar\u00ebve. N\u00eb thelb, kjo \u00ebsht\u00eb nj\u00eb disk i montuar n\u00eb nj\u00eb pjes\u00eb t\u00eb caktuar n\u00eb nj\u00eb rrug\u00eb t\u00eb caktuar, ku mund t\u00eb jen\u00eb skedar\u00eb q\u00eb identifikohen me hash-et. <\/p>\n<p><\/p>\n<p>\u00c7ifti \u00ebsht\u00eb nj\u00eb em\u00ebr historik, \u00ebsht\u00eb ruajtur deri sot, megjithat\u00eb tani n\u00eb nj\u00eb \u00e7ift nuk \u00ebsht\u00eb e nevojshme t\u00eb ket\u00eb vet\u00ebm dy disqe. Mund t\u00eb ket\u00eb tre disqe, si dhe mund t\u00eb ket\u00eb ruajtje hibrid, p\u00ebr shembull 3\/2. <\/p>\n<p>\n<img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/544ab79846539262e2d4dff6ab95ffff.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>\u00c7iftet (pair) jan\u00eb nj\u00ebsit\u00eb e ruajtjes s\u00eb objekteve<\/em><\/p>\n<p><\/p>\n<p>T\u00eb gjitha \u00e7ifti ruajn\u00eb n\u00eb PairDB \u2014 kjo \u00ebsht\u00eb nj\u00eb aplikacion i bazuar n\u00eb Tarantool. T\u00eb gjitha bazat n\u00eb ruajtjen ton\u00eb, duke filluar nga t\u00eb parat, jan\u00eb Tarantool, nuk p\u00ebrdorim baza t\u00eb tjera.<\/p>\n<p><\/p>\n<p>PairDB ruan t\u00eb gjitha \u00e7iftet, gjendjet e tyre, hap\u00ebsir\u00ebn e lir\u00eb, mund\u00ebsit\u00eb e d\u00ebshtimit, gabimet m\u00eb t\u00eb fundit. Ajo gjithashtu mund t\u00eb vizitoj\u00eb \u00e7iftet, p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar gjendjen e tyre, p\u00ebr t\u00eb kontrolluar n\u00ebse ato funksionojn\u00eb ose jo. Pra, PairDB \u00ebsht\u00eb nj\u00eb pamje e p\u00ebrgjithshme e gjendjes s\u00eb t\u00eb gjitha disqeve t\u00eb sistemit ton\u00eb.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/d50781b8b51ed5fe126bc84e19c934d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Pair DB: databaza me gjendjen e \u00e7ifteve<\/em><\/p>\n<p><\/p>\n<p>N\u00eb pika ruhen skedar\u00ebt dhe, p\u00ebr t\u00eb ditur se n\u00eb cil\u00ebn pik\u00eb ndodhet cili skedar, ne kemi nevoj\u00eb p\u00ebr nj\u00eb baz\u00eb tjet\u00ebr - FileDB. Ajo ruan mapimin, p\u00ebrcaktimin e p\u00ebrputhjes: skedari i till\u00eb ruhet n\u00eb pik\u00ebn e till\u00eb, si dhe nj\u00eb sasi t\u00eb vog\u00ebl atributesh t\u00eb nevojshme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/b1a64737cf7f916bff446c10c1f01d4c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><em>File DB: vendi ku ruhen skedar\u00ebt<\/em><\/p>\n<p>Nj\u00eb lidhje e r\u00ebnd\u00ebsishme \u00ebsht\u00eb sh\u00ebrbimi Nylon, ruter p\u00ebr t\u00eb punuar me bazat e t\u00eb dh\u00ebnave. Ai \u00ebsht\u00eb pika e vetme e hyrjes, e cila lejon t\u00eb punojm\u00eb p\u00ebrmes nj\u00eb nd\u00ebrfaqeje t\u00eb vetme si me PairDB ashtu edhe me FileDB. Ky \u00ebsht\u00eb nj\u00eb sh\u00ebrbim stateless, ai ekzekuton balancimin e k\u00ebrkesave, kupton se n\u00eb cilin shard FileDB duhet t\u00eb shkoj\u00eb, di se cilat pika jan\u00eb aktive dhe cilat jo.<\/p>\n<p>\n<img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/3e2225f229c8cfa462d620d2b5fb581e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Nylon: ruter p\u00ebr t\u00eb punuar me bazat e t\u00eb dh\u00ebnave<\/em><\/p>\n<p><\/p>\n<p>Po ashtu, n\u00eb depo k\u00ebrkohet nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb vendosur p\u00ebrmbajtje. P\u00ebr k\u00ebt\u00eb ka sh\u00ebrbimin - Streamer. Ai ofron dy metoda HTTP: metoda PUT, p\u00ebr t\u00eb ngarkuar p\u00ebrmbajtjen n\u00eb depo, dhe metoda GET, p\u00ebr ta marr\u00eb at\u00eb. HTTP \u00ebsht\u00eb nj\u00eb protokoll mjaft popullor dhe i p\u00ebrshtatsh\u00ebm p\u00ebr transferimin e t\u00eb dh\u00ebnave. <\/p>\n<p><\/p>\n<p>Kur ne i drejtohemi Streamer&#8217;y, ai p\u00ebrmes Nylon i drejtohet PairDB, e kupton se n\u00eb cil\u00ebn \u00e7ift mund t\u00eb ngarkohet skedari, e m\u00eb pas e kalon t\u00eb dh\u00ebnat p\u00ebrmes WebDAV n\u00eb k\u00ebt\u00eb \u00e7ift. <\/p>\n<p><\/p>\n<p>N\u00eb thelb, \u00e7do server storage \u00ebsht\u00eb nginx plus disqet q\u00eb jan\u00eb t\u00eb montuar n\u00eb rrug\u00ebt e caktuara. Ne mund t\u00eb ngarkojm\u00eb nj\u00eb skedar n\u00eb depo nga Streamer, ta fshijm\u00eb at\u00eb, ta riformatojm\u00eb ose ta kontrollojm\u00eb p\u00ebr integritet. Pra, kjo \u00ebsht\u00eb nj\u00eb nd\u00ebrfaqe e p\u00ebrshtatshme p\u00ebr nd\u00ebrveprimin me nivel t\u00eb ul\u00ebt me depo. <\/p>\n<p>\n<img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/3722a89ed44cace36e9cb1f8bee4bd1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Streamer: pika e hyrjes n\u00eb depo<\/em><\/p>\n<p><\/p>\n<h2 id=\"chto-my-dobavili-chtoby-sdelat-s3-hranilische\">\u00c7far\u00eb kemi shtuar p\u00ebr t\u00eb krijuar depo S3<\/h2>\n<p><\/p>\n<p>Pra, ne shqyrtuam struktur\u00ebn e p\u00ebrgjithshme baz\u00eb t\u00eb depozit\u00ebs n\u00eb momentin kur filluam t\u00eb aktivizojm\u00eb depo S3. Me metod\u00ebn PUT mund t\u00eb vendosnim p\u00ebrmbajtje t\u00eb rastit atje dhe t\u00eb merrnim si identifikues i k\u00ebtyre t\u00eb dh\u00ebnave hash-in. Me k\u00ebt\u00eb identifikues m\u00eb pas mund t\u00eb shkonim dhe t\u00eb merrnim skedarin e origjin\u00ebs. Por kjo nuk mjafton p\u00ebr zbatimin e S3. N\u00eb protokollin S3, p\u00ebrve\u00e7 ruajtjes s\u00eb vet objekteve, ka:<\/p>\n<p><\/p>\n<ul>\n<li>ruajtja e metadatanave - karakteristika shtes\u00eb t\u00eb objekteve;<\/li>\n<li>organizimi i aksesit n\u00eb objekte p\u00ebrmes HTTP;<\/li>\n<li>grupimi i objekteve n\u00eb koleksione - buckets;<\/li>\n<li>HTTP-S3 Endpoint. S3 organizon t\u00eb dh\u00ebnat n\u00eb struktura t\u00eb caktuara - buckets, secili prej t\u00eb cil\u00ebve ofron nj\u00eb pik\u00eb hyrjeje p\u00ebr ruajtjen e skedar\u00ebve.<\/li>\n<\/ul>\n<p><\/p>\n<p>P\u00ebr t\u00eb realizuar k\u00ebt\u00eb logjik\u00eb, ishte e nevojshme nj\u00eb sh\u00ebrbim i ve\u00e7ant\u00eb. Gjithashtu, d\u00ebshirohej q\u00eb t\u00eb parashikohet struktura p\u00ebr rritjen e m\u00ebtejshme t\u00eb sh\u00ebrbimit me shkall\u00ebzim linear.<\/p>\n<p><\/p>\n<h2 id=\"pervye-komponenty\">Komponent\u00ebt e par\u00eb<\/h2>\n<p><\/p>\n<p>Demon q\u00eb realizon API-n\u00eb S3. Ky \u00ebsht\u00eb API standard S3 i Amazon, i cili mb\u00ebshtet pun\u00ebn p\u00ebrmes XML p\u00ebr metadat\u00ebn dhe lejon transferimin e drejtp\u00ebrdrejt\u00eb t\u00eb p\u00ebrmbajtjes. Nuk na duhej t\u00eb shpiknim di\u00e7ka, gjith\u00e7ka \u00ebsht\u00eb e p\u00ebrshkruar dhe e dokumentuar.<\/p>\n<p><\/p>\n<p>Gjithashtu, para sh\u00ebrbimit vendos\u00ebm Nginx. E p\u00ebrdor\u00ebm p\u00ebr terminimin e SSL, balancimin e ngarkes\u00ebs, si dhe p\u00ebr disa logjik\u00eb n\u00eb Lua (metrika, regjistrimi dhe ndjekja).<\/p>\n<p><\/p>\n<p>P\u00ebr ruajtjen e metadatat\u00ebve S3, zgjodh\u00ebm gjithashtu Tarantool. N\u00eb versionin e par\u00eb, p\u00ebr metadatat demon S3 shkonte n\u00eb k\u00ebt\u00eb baz\u00eb, nd\u00ebrsa p\u00ebrmbajtja vet\u00eb ruhej n\u00eb nj\u00eb depo t\u00eb madhe p\u00ebrmes Streamer.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/03dddec282b5bb41eb63748ccfb6c9a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Nginx + API S3 + metadatat\u00eb<\/em><\/p>\n<p><\/p>\n<h2 id=\"obektnaya-model-hraneniya\">Modeli objektor i ruajtjes<\/h2>\n<p><\/p>\n<p>Le t\u00eb shohim se si funksionon S3. P\u00ebrdoruesi mund t\u00eb krijoj\u00eb nj\u00eb en\u00eb \u2014 nj\u00eb koleksion objektesh. En\u00eb adresohet me emrin e hostit dhe \u00ebsht\u00eb nj\u00eb subdomain i sh\u00ebrbimit. Brenda en\u00ebs, p\u00ebrdoruesi mund t\u00eb krijoj\u00eb objekte. Identifikuesi i objektit do t\u00eb jet\u00eb URL. P\u00ebrmbajtja e objektit \u00ebsht\u00eb nj\u00eb blob, nj\u00eb array t\u00eb dh\u00ebnash binare, t\u00eb cilat ne do t'i ruajm\u00eb n\u00eb depo. Gjithashtu, objekti ka atribute: emri \u2014 ai URL, ACL (lista e kontrollit t\u00eb aksesit), atribute t\u00eb tjera shtes\u00eb ose t\u00eb rast\u00ebsishme \u2014 e gjith\u00eb kjo ruhet n\u00eb metadat\u00ebn. <\/p>\n<p><\/p>\n<p>Schema e normalizuar e k\u00ebtyre t\u00eb dh\u00ebnave mund t\u00eb duket k\u00ebshtu: ka projekte q\u00eb i p\u00ebrkasin en\u00ebve, t\u00eb cilat i p\u00ebrkasin objekteve dhe objektet mund t\u00eb jen\u00eb t\u00eb p\u00ebrb\u00ebra. Duke qen\u00eb se nj\u00eb nga m\u00ebnyrat p\u00ebr t\u00eb ngarkuar objektin \u00ebsht\u00eb p\u00ebrmes pjes\u00ebve, p\u00ebr ngarkimin ka dy tabela ndihm\u00ebse: uploads dhe chunks. Gjithashtu, projektet kan\u00eb t\u00eb dh\u00ebna t\u00eb aksesit dhe faturimit. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/e2bede45ba4044f658b47a9840fd5224.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Schema e t\u00eb dh\u00ebnave<\/em><\/p>\n<p><\/p>\n<p>Duke qen\u00eb se ne po b\u00ebnim nj\u00eb sh\u00ebrbim b2b me akses t\u00eb paguar, n\u00eb k\u00ebt\u00eb skem\u00eb ishte e nevojshme faturimi.<br \/>\nSh\u00ebrbimi i faturimit e implementuam gjithashtu n\u00eb Tarantool. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" 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\">P\u00ebrmir\u00ebsimet e depo S3: hapat drejt prodhimit<\/h2>\n<p><\/p>\n<p>Ne tashm\u00eb kemi realizuar nj\u00eb model funksional q\u00eb mund t\u00eb p\u00ebrdoret: objektet dhe metadat\u00ebt ishin ruajtur, por p\u00ebr t\u00eb dal\u00eb n\u00eb prodhim na mungonin disa momente.<\/p>\n<p><\/p>\n<p>N\u00eb radh\u00eb t\u00eb par\u00eb, sistemi i kufizimit t\u00eb normave. N\u00ebse fillojm\u00eb sistemin pa t\u00eb, mund t\u00eb mbingarkohet ndonj\u00eb pjes\u00eb e sistemit n\u00eb rast t\u00eb nj\u00eb ngarkese maksimale. Kufizimi i norm\u00ebs duhet t\u00eb funksionoj\u00eb k\u00ebshtu: \u00e7do k\u00ebrkes\u00eb S3 vjen n\u00eb nj\u00eb host t\u00eb caktuar, ky host \u00ebsht\u00eb identifikuesi i kov\u00ebs, dhe kjo kova i p\u00ebrket ndonj\u00eb klienti. Na nevojitet t\u00eb p\u00ebrcaktojm\u00eb nj\u00eb funksion t\u00eb caktuar nga kova, i cili do t\u00eb lejoj\u00eb llogaritjen e kufizimit t\u00eb norm\u00ebs. <\/p>\n<p><\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, sistemi i kufizimit t\u00eb normave duhet t\u00eb jet\u00eb mjaft efikas p\u00ebr t\u00eb p\u00ebrballuar ngarkes\u00ebn q\u00eb vjen n\u00eb S3.<\/p>\n<p><\/p>\n<p>K\u00ebtu e p\u00ebrdor\u00ebm p\u00ebrs\u00ebri Tarantool. Kufizimet e norm\u00ebs jan\u00eb nj\u00eb klaster prej 21 instancash, instancat jan\u00eb t\u00eb ndara n\u00eb grupe, t\u00eb shp\u00ebrndara n\u00eb tri nyje fizike dhe t\u00eb bashkuara n\u00eb nj\u00eb klaster t\u00eb madh topologjik. Ndryshimet n\u00eb konfigurim shp\u00ebrndahen automatikisht n\u00ebp\u00ebr t\u00eb: vendosen kufizimet e normave, parametrat standard dhe konfigurimi. \u00c7do kov\u00eb trajtohet vet\u00ebm nga nj\u00eb instanc\u00eb. Kur nj\u00eb k\u00ebrkes\u00eb vjen p\u00ebr nj\u00eb kova t\u00eb caktuar, llogaritet instanca q\u00eb \u00ebsht\u00eb p\u00ebrgjegj\u00ebse p\u00ebr at\u00eb kova. Brenda k\u00ebsaj nyjeje, llogaritet norm\u00ebn aktuale t\u00eb hyrjeve sipas nj\u00eb algoritmi t\u00eb ngjash\u00ebm me Token Bucket. M\u00eb pas, sistemi i kufizimit t\u00eb normave, bazuar n\u00eb nivelet aktuale t\u00eb ngarkes\u00ebs dhe karakteristikave t\u00eb vendosura p\u00ebr at\u00eb kova t\u00eb caktuar, thot\u00eb n\u00ebse mund t\u00eb ekzektohet k\u00ebrkesa apo jo. Kontrolli i kufizimeve b\u00ebhet n\u00eb faz\u00ebn m\u00eb t\u00eb hershme t\u00eb realizimit t\u00eb k\u00ebrkes\u00ebs S3, duke mbrojtur t\u00eb gjitha elementet e tjera t\u00eb sistemit nga mbingarkesa e tep\u00ebrt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/1b91e5d1fe067c859ba9b36d58827579.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gjithashtu, n\u00ebn ngarkes\u00eb \u00ebsht\u00eb mjaft e v\u00ebshtir\u00eb t\u00eb kalosh pa cache. N\u00eb S3 n\u00ebnkuptohet qasje e shum\u00ebfisht\u00eb n\u00eb objektet e nj\u00ebjta, dometh\u00ebn\u00eb kjo \u00ebsht\u00eb nj\u00eb ruajtje e nxeht\u00eb. N\u00eb rastin normal, qasja n\u00eb nj\u00eb sked\u00eb t\u00eb vetme sh\u00ebrbehet nga e gjith\u00eb zinxhirin: Streamer, FileDB, PairDB, Storage. Por kur ka qasje t\u00eb shum\u00ebfishta n\u00eb sked\u00ebn, ne optimizojm\u00eb qasjen n\u00eb k\u00ebt\u00eb p\u00ebrmbajtje p\u00ebrmes nj\u00eb cache lokale.<\/p>\n<p><\/p>\n<p>Cache \u00ebsht\u00eb me disa nivele dhe realizohet me an\u00eb t\u00eb nginx, disqe lokale, SSD dhe RAM. K\u00ebtu nuk p\u00ebrdor\u00ebm Tarantool, sepse \u00ebsht\u00eb m\u00eb e leht\u00eb t\u00eb dor\u00ebzosh objektet nga sistemi i skedar\u00ebve, k\u00ebshtu mund t\u00eb realizojm\u00eb nj\u00eb strukture t\u00eb cache. P\u00ebr m\u00eb tep\u00ebr, kemi objekte t\u00eb m\u00ebdha me nj\u00eb madh\u00ebsi maksimale prej 32 gigabajt, dhe n\u00eb Tarantool mund t\u00eb ruajm\u00eb vet\u00ebm objekte t\u00eb vogla.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/faa02bd52a1d70642589d775f22c5e75.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ky ishte sistemi i par\u00eb me t\u00eb cilin u lan\u00e7uam, i cili kishte nj\u00eb kapacitet t\u00eb llogaritur, i mjaftuesh\u00ebm p\u00ebr t\u00eb eksploruar dhe kuptuar produktin, se si do t\u00eb funksiononte. <\/p>\n<p><\/p>\n<h2 id=\"dorabotki-boevoy-sistemy-feylover-i-masshtabirovanie\">P\u00ebrmir\u00ebsimet e sistemit t\u00eb luft\u00ebs: d\u00ebshtimi dhe shkall\u00ebzimi<\/h2>\n<p><\/p>\n<p>Sistemi ishte tashm\u00eb n\u00eb p\u00ebrdorim, por n\u00eb fillim humb\u00ebm disa detaje \u2014 duhej t\u00eb shtonim d\u00ebshtimin dhe shkall\u00ebzimin. <\/p>\n<p><\/p>\n<p>Demon\u00ebt tan\u00eb S3 merrnin t\u00eb dh\u00ebnat nga metadata p\u00ebrmes protokollit Tarantool. N\u00eb vend t\u00eb baz\u00ebs origjinale, vendos\u00ebm Tarantool, i cili sh\u00ebrbente si nj\u00eb router proxy p\u00ebr k\u00ebrkesat e metadatas. Nga k\u00ebndv\u00ebshtrimi i aplikacionit q\u00eb implementon API-n\u00eb, asgj\u00eb nuk ndryshoi \u2014 ai vazhdoi t\u00eb lidhet me baz\u00ebn p\u00ebrmes protokollit Tarantool, por routeri doli t'i ofronte d\u00ebshtim aktiv. Pra, ishim n\u00eb gjendje t\u00eb kontrollonim disponueshm\u00ebrin\u00eb e nodit, t\u00eb b\u00ebnim nj\u00eb shk\u00ebputje gjat\u00eb kalimeve dhe d\u00ebshtimeve e k\u00ebshtu me radh\u00eb. Nd\u00ebrkoh\u00eb, vet\u00eb aplikacioni nuk e modifikuam. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" 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\">M\u00eb shum\u00eb mbi m\u00ebnyr\u00ebn si e implementuam shardingun<\/h2>\n<p><\/p>\n<p>Pyetja tjet\u00ebr p\u00ebr t\u00eb cil\u00ebn duhej t\u00eb shqet\u00ebsoheshim ishte shardingu. Sistema po rritej, numri i objekteve po rritej dhe duhej t\u00eb sigurohej mund\u00ebsit\u00eb p\u00ebr rritje t\u00eb m\u00ebtejshme.<\/p>\n<p><\/p>\n<p>Le t\u00eb kthehemi n\u00eb skem\u00ebn e t\u00eb dh\u00ebnave: ka projekte, ka kube, kredite dhe faturim. K\u00ebto jan\u00eb objekte q\u00eb me shum\u00eb mund\u00ebsi nuk do t\u00eb rriten n\u00eb t\u00eb ardhmen afatshkurt\u00ebr as n\u00eb volum dhe as n\u00eb k\u00ebrkesa. Pra, nuk ka kuptim t'i shardojm\u00eb, dhe i kemi sjell\u00eb ato n\u00eb nj\u00eb instanc\u00eb t\u00eb ve\u00e7ant\u00eb, e cila do t\u00eb mbetet e pa sharduar. Kjo lejon nj\u00eb menaxhim m\u00eb t\u00eb konsoliduar t\u00eb projekteve dhe kubeve, pasi ka nj\u00eb pik\u00eb t\u00eb vetme t\u00eb pa sharduar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/c5a1c1a875e756e3dceb5f885fbda2c8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gjithashtu, n\u00eb skem\u00eb ka objekte q\u00eb rriten n\u00eb m\u00ebnyr\u00eb lineare \u2014 fillimisht kishim qindra mij\u00ebra, tani numri i tyre matet n\u00eb disa miliarda. K\u00ebto objekte, s\u00eb bashku me pjes\u00ebt e tyre, duhej t\u00eb ishin t\u00eb vendosura n\u00eb nj\u00eb klas\u00eb t\u00eb sharduar. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/00bb418cc61ad2e3e8797caf5d1ab202.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ne e ndam\u00eb skem\u00ebn, por objektet duhen t\u00eb punojn\u00eb me kube: nj\u00eb objekt gjithmon\u00eb i takon nj\u00eb kube t\u00eb caktuar, p\u00ebr m\u00eb tep\u00ebr, mbi kubin funksionon ACL. Prandaj, p\u00ebr \u00e7do shard me objekte, mbajm\u00eb nj\u00eb kopje hije t\u00eb \u00e7do kube. P\u00ebrve\u00e7 k\u00ebsaj, gjat\u00eb modifikimit t\u00eb objekteve dhe ekzekutimit t\u00eb k\u00ebrkesave, duhet t\u00eb llogarisim volumet p\u00ebr kryerjen e faturimit, ndaj n\u00eb \u00e7do shard ka num\u00ebrues p\u00ebr faturimin.<\/p>\n<p><\/p>\n<p>Gjithashtu, kemi shtuar disa tabela dhe komponent\u00eb t\u00eb tjer\u00eb:<\/p>\n<p><\/p>\n<ul>\n<li>koshin, p\u00ebr shkat\u00ebrrimin e projekteve t\u00eb vjetra q\u00eb fshihen ose ngrihen;<\/li>\n<li>nj\u00eb radh\u00eb p\u00ebr detyrat n\u00eb sfond, dometh\u00ebn\u00eb, ruajtja kryesore mund t\u00eb kryej\u00eb detyrat n\u00eb sfond q\u00eb nevojiten p\u00ebr t\u00eb b\u00ebr\u00eb n\u00eb klaster;<\/li>\n<li>mb\u00ebshtetje p\u00ebr lifecycle - mekanizmi q\u00eb lejon pun\u00eb me objekte, menaxhimin e ciklit t\u00eb jet\u00ebs s\u00eb tyre.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/933e98dc559eb8e6bac14003215a6836.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pasi q\u00eb nj\u00eb pjes\u00eb e t\u00eb dh\u00ebnave e shmang\u00ebm n\u00eb sharda, nevoja p\u00ebr nj\u00eb proxy sharding u shfaq. Do t\u00eb ishte e mundur t\u00eb rip\u00ebrdorej routeri p\u00ebr k\u00ebt\u00eb rol, por nj\u00eb proxy sharding e ndar\u00eb, e cila \u00ebsht\u00eb p\u00ebrgjegj\u00ebse vet\u00ebm p\u00ebr sharding t\u00eb t\u00eb dh\u00ebnave, lejon q\u00eb routeri t\u00eb shkoj\u00eb p\u00ebr t\u00eb dh\u00ebnat n\u00eb t\u00ebr\u00ebsi, pa menduar p\u00ebr sharding.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/4b181ed4629180e15558f25b1e4d5718.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb pas do t\u00eb flas p\u00ebr arsyen se pse ne nuk mor\u00ebm nj\u00eb zgjidhje t\u00eb gatshme, por donim t\u00eb krijonim nj\u00eb funksion t\u00eb personalizuar t\u00eb sharding. <\/p>\n<p><\/p>\n<p>Le t\u00eb shohim si \u00ebsht\u00eb e organizuar. Ne kemi 256 sharda t\u00eb disponueshme. P\u00ebr \u00e7do bucket ndalim nj\u00eb gam\u00eb duke p\u00ebrdorur nj\u00eb funksion konsistent. Kjo \u00ebsht\u00eb e thjesht\u00eb - si\u00e7 e p\u00ebrcaktoni p\u00ebrkat\u00ebsin\u00eb n\u00eb nj\u00eb shard duke p\u00ebrdorur nj\u00eb funksion konsistent, ju p\u00ebrcaktoni shardin fillestar dhe ndani gam\u00ebn:<\/p>\n<p><\/p>\n<p><code>f(bucket, shards) = n\u00ebngrup<\/code><\/p>\n<p><\/p>\n<p>K\u00ebshtu q\u00eb n\u00ebse marrim nj\u00eb bucket, mund t\u00eb themi se ai dhe t\u00eb dh\u00ebnat e tij do t\u00eb jen\u00eb gjithmon\u00eb n\u00eb nj\u00eb n\u00ebngrup t\u00eb caktuar nga t\u00eb gjitha shardat. Kjo ndihmon n\u00eb reduktimin e ndikimit t\u00eb disa buckets mbi t\u00eb tjer\u00ebt dhe thjeshton pun\u00ebn e k\u00ebrkesave map-reduce, kur \u00ebsht\u00eb e nevojshme, p\u00ebr shembull, t\u00eb b\u00ebni nj\u00eb listim t\u00eb objekteve t\u00eb bucket-it. P\u00ebr k\u00ebt\u00eb, \u00ebsht\u00eb e nevojshme t\u00eb anketoni t\u00eb gjitha shardat ku k\u00ebto objekte ruhen. N\u00ebse objektet do t\u00eb ishin n\u00eb t\u00eb gjitha shardat, \u00e7do listim do t\u00eb godiste sistemin n\u00eb t\u00ebr\u00ebsi, por k\u00ebtu ai godet vet\u00ebm nj\u00eb n\u00ebngrup t\u00eb caktuar.<\/p>\n<p><\/p>\n<p>M\u00eb pas - \u00e7do objekt i p\u00ebrket nj\u00eb bucket-i t\u00eb caktuar, prandaj kur ne i qasemi nj\u00eb objekti, ne i qasemi atij objekti sipas emrit n\u00eb bucket-in e caktuar. Dometh\u00ebn\u00eb, ne mund t\u00eb p\u00ebrcaktojm\u00eb nj\u00eb funksion p\u00ebr objektin jo nga t\u00eb gjitha gamat e disponueshme t\u00eb shardave, por vet\u00ebm nga n\u00ebngrupi i bucket-it t\u00eb tij:<\/p>\n<p><\/p>\n<p><code>f(object, subset) = shard<\/code><\/p>\n<p><\/p>\n<p>Ne marrim nj\u00eb objekt t\u00eb caktuar, n\u00eb cil\u00ebsimet e funksionit i kalojm\u00eb atje jo t\u00eb gjith\u00eb shardat, por n\u00ebngrupin e bucket-it t\u00eb tij - dhe marrim shardin specifik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/10480ad2430c228c511ff3cdc5071596.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pra, sharding \u00ebsht\u00eb realizuar, ka nj\u00eb proxy sharding. Tani mbetet q\u00eb nga routeri dhe baza me metadat t\u00eb shkoj\u00eb n\u00eb proxy sharding. P\u00ebr shembull, p\u00ebr krijimin e objekteve t\u00eb kopjave t\u00eb ashtuquajtura - kur krijojm\u00eb nj\u00eb bucket, ruajtja kryesore duhet t\u00eb krijoj\u00eb nj\u00eb p\u00ebrfaq\u00ebsues t\u00eb k\u00ebtij bucket-i n\u00eb t\u00eb gjitha shardat ku ai duhet t\u00eb jet\u00eb prezent.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" 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\">Si e realizuam reshuffling<\/h2>\n<p><\/p>\n<p>Problemi m\u00eb i madh i sharding-ut \u00ebsht\u00eb resharding. Ishte e r\u00ebnd\u00ebsishme p\u00ebr ne ta b\u00ebnim at\u00eb pa ndalesa, pasi sistemi tashm\u00eb ishte n\u00eb prodhim. Do t\u00eb tregoj se si e zgjidh\u00ebm k\u00ebt\u00eb problem duke marr\u00eb si shembull nj\u00eb detyr\u00eb t\u00eb ngjashme me migrimin e drejtp\u00ebrdrejt t\u00eb t\u00eb dh\u00ebnave nga nj\u00eb projekt n\u00eb nj\u00eb tjet\u00ebr.<\/p>\n<p><\/p>\n<p>M\u00eb posht\u00eb \u00ebsht\u00eb skema e klasterit ton\u00eb, e cila u krijua pas implementimit t\u00eb sharding-ut. Kemi nginx, S3 API, router, baz\u00ebn primare me projektet, proxy-n\u00eb sharding dhe pik\u00ebrisht shard-et.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/0e6bd16c7fc47437b3b7d96b6d9809a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb sip\u00ebr kam l\u00ebn\u00eb jasht\u00eb nj\u00eb detaj, q\u00eb n\u00eb nj\u00eb faz\u00eb t\u00eb caktuar t\u00eb projektit kishte nj\u00eb detyr\u00eb produkti: \"T\u00eb nisnim gjithashtu nj\u00eb ruajtje, Icebox, si Hotbox, por vet\u00ebm p\u00ebr t\u00eb dh\u00ebna t\u00eb ftohta\". N\u00eb thelb, ajo \u00ebsht\u00eb nj\u00eb ruajtje e ngjashme, por me URL t\u00eb tjera dhe pa cache.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/9ce9085e1d03e9a99b6b8ccc0717c653.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Icebox-u u p\u00ebrdor m\u00eb pak se Hotbox, prandaj ai kaloi nj\u00eb koh\u00eb t\u00eb gjat\u00eb pa ndonj\u00eb sharding. N\u00eb fund t\u00eb fundit, ne vendos\u00ebm t\u00eb heqim dor\u00eb nga ai dhe t\u00eb bashkojm\u00eb Hotbox-in dhe Icebox-in n\u00eb nj\u00eb sh\u00ebrbim t\u00eb vet\u00ebm, thjesht duke ndar\u00eb klasat e ruajtjes. <\/p>\n<p><\/p>\n<p>Bucket-at n\u00eb ruajtje nuk ishin t\u00eb p\u00ebrzier\u00eb, ata mund t\u00eb merren leht\u00ebsisht dhe t\u00eb transferohen, por klient\u00ebt p\u00ebrdornin t\u00eb dyja ruajtjet, k\u00ebshtu q\u00eb duhej t\u00eb zgjidhej problemi i munges\u00ebs s\u00eb ndalesave. Nuk mund t\u00eb thoshim thjesht se do t\u00eb fiknim dhe do t\u00eb kopjonim. Ne b\u00ebm\u00eb migrimin n\u00eb disa faza.<\/p>\n<p><\/p>\n<p>S\u00eb pari, ne synchronizuam ruajtjet primare. Kishim Tarantool dhe mund t\u00eb b\u00ebnim di\u00e7ka t\u00eb till\u00eb kur krijonim nj\u00eb objekt: <\/p>\n<p><\/p>\n<ul>\n<li>nj\u00eb k\u00ebrkes\u00eb p\u00ebr krijimin e nj\u00eb bucket-i, p\u00ebr shembull n\u00eb Hotbox, arrin n\u00eb baz\u00eb;<\/li>\n<li>Tarantool kontrollon n\u00eb nj\u00eb baz\u00eb tjet\u00ebr (n\u00eb k\u00ebt\u00eb rast \u2014 n\u00eb Icebox), q\u00eb nj\u00eb bucket i till\u00eb nuk ekziston;<\/li>\n<li>n\u00ebse bucket-i ekziston, baza thot\u00eb se nuk mund t\u00eb krijohet, dhe ai \u00ebsht\u00eb synchronizuar si ekzistues.<br \/>\n<img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/6694c9804f09942416c1717b455b9fd3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Synchronizimi i bucket-eve<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p>N\u00eb ruajtjen q\u00eb duhej t\u00eb priste t\u00eb gjitha t\u00eb dh\u00ebnat, u fut nj\u00eb shenj\u00eb p\u00ebr projektet dhe bucket-at q\u00eb tregon se ku ndodhet ky objekt. Ai mund t\u00eb ruhej lokalisht, pra n\u00eb Hotbox, n\u00eb Icebox \u2014 at\u00ebher\u00eb nuk ka t\u00eb dh\u00ebna nga ai n\u00eb ruajtjen e re, ose mund t\u00eb ishte n\u00eb gjendje migrimi.<\/p>\n<p><\/p>\n<p>N\u00ebse nj\u00eb projekt ose bucket kishte shenj\u00ebn Migrating, at\u00ebher\u00eb gjat\u00eb migrimit k\u00ebrkesa kryhej fillimisht n\u00eb ruajtjen e re, n\u00eb t\u00eb cil\u00ebn duhej t\u00eb ishin t\u00eb dh\u00ebnat, dhe n\u00ebse ato nuk ishin aty, k\u00ebrkesat d\u00ebrgoheshin n\u00eb ruajtjen alternative.<\/p>\n<p><\/p>\n<p>M\u00eb pas ne kaluam trafikun. Duke qen\u00eb se API mund t\u00eb sh\u00ebrbente p\u00ebr k\u00ebrkesat si t\u00eb Icebox, ashtu edhe t\u00eb Hotbox, ne arrit\u00ebm t\u00eb kalonim trafikun pa ndalesa, thjesht duke transferuar host-at dhe shtuar sh\u00ebnime p\u00ebrkat\u00ebse n\u00eb Nginx. <\/p>\n<p><\/p>\n<p>Pas k\u00ebtij, kur trafiku u drejtua, mund t\u00eb hiqnim Nginx dhe API nga Icebox.<br \/>\nM\u00eb pas, ne hoq\u00ebm Nginx nga Icebox dhe S3 API \u2014 dhe gjith\u00e7ka funksionoi:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/62d9f960fc1f11b875a8f8a5aa8e8152.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00eb pas nis\u00ebm nj\u00eb proces migrazioni n\u00eb sfond, i cili punon brenda baz\u00ebs \u2014 duke kaluar n\u00ebp\u00ebr \u00e7do projekt dhe tavat e tyre, duke u vendosur shenj\u00ebn Migrating, duke transferuar t\u00eb dh\u00ebnat dhe, pas p\u00ebrfundimit t\u00eb transferimit, duke vendosur shenj\u00ebn Local.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/1a3129136f7ccacfdcff260f10cb0605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pas transferimit t\u00eb t\u00eb dh\u00ebnave, nuk na nevojitet m\u00eb depoja e vjet\u00ebr, dhe ne heqim pjes\u00ebt e mbetura t\u00eb sistemit t\u00eb vjet\u00ebr, si dhe heqim mb\u00ebshtetje p\u00ebr statusin e migrazionit nga kodi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" src=\"\/wp-content\/uploads\/2020\/08\/13b6f11add40c21a3b9afc05dd0dfea9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me t\u00eb nj\u00ebjtat parime, u realizua edhe rishearding nga depoja e vjet\u00ebr n\u00eb t\u00eb sharduar:<\/p>\n<p><\/p>\n<ul>\n<li>E sh\u00ebnuam t\u00eb gjitha tavat si <code>Non-sharded<\/code>. T\u00eb gjitha k\u00ebrkesat p\u00ebr to shkuan n\u00eb depozita origjinale, t\u00eb pa sharduar.<\/li>\n<li>Tavat e reja krijoheshin menj\u00ebher\u00eb n\u00eb statusin <code>Sharded<\/code>.<\/li>\n<li>Merrnim tavat nj\u00eb nga nj\u00eb, vendosnim statusin <code>Migrating<\/code> dhe transferonim t\u00eb dh\u00ebnat.<\/li>\n<\/ul>\n<p><\/p>\n<p>K\u00ebrkesat gjat\u00eb k\u00ebsaj trajtoheshin n\u00eb parimin:<\/p>\n<p><\/p>\n<ul>\n<li>Lexojm\u00eb n\u00eb t\u00eb rejat, pastaj n\u00eb ato t\u00eb vjetra.<\/li>\n<li>Krijojm\u00eb vet\u00ebm n\u00eb t\u00eb reja.<\/li>\n<li>P\u00ebrdit\u00ebsojm\u00eb n\u00eb dy faza: n\u00ebse n\u00eb t\u00eb reja nuk ka, transferojm\u00eb nga t\u00eb vjetra n\u00eb t\u00eb reja, pastaj p\u00ebrdit\u00ebsojm\u00eb.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"rabota-s-ssl-sertifikatami\">Puna me certifikatat SSL<\/h2>\n<p><\/p>\n<blockquote><p>N\u00eb frontend ne p\u00ebrdorim Nginx. N\u00eb rastin ton\u00eb, ky nuk \u00ebsht\u00eb nj\u00eb Nginx i zakonsh\u00ebm, por OpenResty, Nginx me mb\u00ebshtetje p\u00ebr LuaJIT.<\/p><\/blockquote>\n<p>Nj\u00eb pjes\u00eb tjet\u00ebr e sistemit \u2014 puna me certifikatat SSL. N\u00eb depozitat S3 mund t\u00eb vendosni nj\u00eb domen t\u00eb vet, p\u00ebr t\u00eb aksesuar nj\u00eb tav\u00eb specifike, thjesht duke p\u00ebrdorur <code>CNAME<\/code>. Por pa HTTPS sot nuk b\u00ebhet: domeni i vet n\u00ebnkupton nj\u00eb certifikat SSL t\u00eb vet. <\/p>\n<p><\/p>\n<p>Si\u00e7 kam th\u00ebn\u00eb m\u00eb par\u00eb, p\u00ebr balancimin dhe terminimin e SSL, na p\u00ebrgjigjet Nginx. N\u00eb rastin ton\u00eb, ky nuk \u00ebsht\u00eb nj\u00eb Nginx i zakonsh\u00ebm, por OpenResty, Nginx me mb\u00ebshtetje p\u00ebr LuaJIT.<\/p>\n<p><\/p>\n<p>Kjo na mund\u00ebsoi ta m\u00ebsojm\u00eb Nginx-in ton\u00eb t\u00eb ofronte certifikata t\u00eb rast\u00ebsishme. Dhe na duhej t\u00eb ofronim certifikata dinamikisht (pa nevoj\u00ebn p\u00ebr t'i shkruar ato n\u00eb skedarin e konfigurimit). Ne p\u00ebrdor\u00ebm zgjerimin <code>ssl_certificate_by_lua<\/code>, e cila lejon t\u00eb lexosh certifikat\u00ebn nga nj\u00eb burim t\u00eb rast\u00ebsish\u00ebm pik\u00ebrisht gjat\u00eb h\u00ebndshakut TLS. Si depozita e certifikatave ne gjithashtu mor\u00ebm Tarantool: kjo lejon t\u00eb menaxhosh certifikatat nga jasht\u00eb dhe siguron kthimin jasht\u00ebzakonisht t\u00eb shpejt\u00eb.<\/p>\n<p><\/p>\n<p>Gjithashtu \u00ebsht\u00eb realizuar nj\u00eb demon i ve\u00e7ant\u00eb, i cili ka detyr\u00ebn e rregullt p\u00ebr t\u00eb p\u00ebrdit\u00ebsuar certifikatat, t\u00eb cilat jan\u00eb l\u00ebshuar me an\u00eb t\u00eb Let&#8217;s Encrypt.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage\" 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\">\u00c7far\u00eb do t\u00eb ruaja, dhe \u00e7far\u00eb do t\u00eb b\u00ebja ndryshe n\u00ebse do t\u00eb zhvilloja nj\u00eb ruajtje nga e para<\/h2>\n<p><\/p>\n<h3 id=\"chto-nuzhno-bylo-ispolzovat-s-samogo-nachala\">\u00c7far\u00eb duhej p\u00ebrdorur q\u00eb n\u00eb fillim<\/h3>\n<p><\/p>\n<p><strong>Shardimi nga fillimi<\/strong>. Shum\u00eb probleme i solli rikthimi n\u00eb sharding. \u00cbsht\u00eb e leht\u00eb ta b\u00ebsh, por megjithat\u00eb, n\u00ebse fillon projekte q\u00eb duhet t\u00eb shkall\u00ebzohen, m\u00eb mir\u00eb \u00ebsht\u00eb t\u00eb marr\u00ebsh menj\u00ebher\u00eb nj\u00eb klaster t\u00eb sharduar, madje edhe me numrin minimal t\u00eb nyjeve. Implementimi i shardimit n\u00eb fillim \u00ebsht\u00eb pothuajse falas n\u00eb krahasim me zbatimin e shardimit n\u00eb nj\u00eb sistem funksional.<\/p>\n<p><\/p>\n<p><strong>Puna me Tarantool p\u00ebrmes balancuesve<\/strong>. Tani ne menj\u00ebher\u00eb i lidhim t\u00eb gjitha bazat e reja n\u00eb pun\u00eb p\u00ebrmes balancuesve. Kjo lejon zgjerimin e funksionalitetit, duke arritur nj\u00eb q\u00ebndres\u00eb m\u00eb t\u00eb lart\u00eb ndaj mungesave. <\/p>\n<p><\/p>\n<p><strong>Autofailover<\/strong>. Do t\u00eb instaloja t\u00eb gjitha mjetet q\u00eb k\u00ebrkohen p\u00ebr autofailover, pasi d\u00ebshtimet e para pas lan\u00e7imit ishin t\u00eb lidhura me munges\u00ebn e tij. Pas p\u00ebrvoj\u00ebs me S3, t\u00eb gjitha produktet e m\u00ebpasshme u lan\u00e7uan duke marr parasysh k\u00ebt\u00eb.<\/p>\n<p><\/p>\n<p><strong>Karakteristika S3 \"Versionimi\"<\/strong>. N\u00eb fillim dukej se kjo funkcionalitet nuk kishte shum\u00eb k\u00ebrkes\u00eb. T\u00eb integronit k\u00ebt\u00eb mund\u00ebsi n\u00eb arkitektur\u00ebn e nj\u00eb sistemi funksional \u00ebsht\u00eb shum\u00eb e v\u00ebshtir\u00eb.<\/p>\n<p><\/p>\n<p><strong>Biling i ve\u00e7ant\u00eb<\/strong>. Ajo m\u00ebnyr\u00eb sesi e integruam billing n\u00eb sistemin ton\u00eb, u tregua e suksesshme n\u00eb fillim, por m\u00eb von\u00eb filloi t\u00eb pengoj\u00eb, do t\u00eb ishte m\u00eb mir\u00eb ta kishim si nj\u00eb sh\u00ebrbim t\u00ebr\u00ebsisht t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p><\/p>\n<h3 id=\"chto-bylo-udachnym-resheniem\">\u00c7far\u00eb ishte nj\u00eb zgjidhje e suksesshme<\/h3>\n<p><\/p>\n<p><strong>Modeli i t\u00eb dh\u00ebnave<\/strong>. Historia tregoi se me zhvillimin e sh\u00ebrbimit ne p\u00ebrputheshim mjaft sakt\u00eb me modelin e t\u00eb dh\u00ebnave t\u00eb Amazon, prandaj mund t\u00eb realizonim ato funksionalitete q\u00eb ekzistojn\u00eb aty.<\/p>\n<p><\/p>\n<p><strong>Skema e shardimit<\/strong>. Do t\u00eb mb\u00ebshtesja po t\u00eb nj\u00ebjtat sharding t\u00eb intervaleve sipas baketeve, pasi kjo lejon t\u00eb shp\u00ebrndahen mir\u00eb k\u00ebrkesat nga bakete t\u00eb ndryshme n\u00eb nj\u00eb klaster t\u00eb madh.<\/p>\n<p><\/p>\n<p><strong>P\u00ebrdorimi i Tarantool<\/strong>. Tarantool ndihmoi shum\u00eb n\u00eb zhvillimin dhe modifikimin e sh\u00ebrbimit, ne punuam me t\u00eb dh\u00ebnat leht\u00ebsisht, i transformuam dhe i sharduam ruajtjen, dhe nuk ishte nevoja t\u00eb kalonim n\u00eb layer-in e aplikacionit. <\/p>\n<p><\/p>\n<blockquote><p>Ky raport u paraqit p\u00ebr her\u00eb t\u00eb par\u00eb n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Databases Meetup<\/a><\/noindex> nga Mail.ru Cloud Solutions&amp;Tarantool. Shikoni <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=jM4hL2u6JM0&amp;list=PLQzTaxmOHjntyNRPWhaWHqlHp8UN_wgQ3\">video<\/a><\/noindex> prezentime t\u00eb tjera dhe abonohuni n\u00eb njoftimet e ngjarjeve n\u00eb Telegram <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">Rreth Kubernetes n\u00eb Mail.ru Group<\/a><\/noindex>.<\/p><\/blockquote>\n<p>Po ashtu mund t\u00eb shikoni raportin tim t\u00eb vjet\u00ebr mbi S3 ose t\u00eb lexoni artikullin e kolegut tim mbi ruajtjen me bllok.<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=O0iIADHgBVc\">Inxhinierimi revers i arkitektur\u00ebs Amazon S3 dhe si dukej ruajtja S3 e MCS tri vjet m\u00eb par\u00eb<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">M\u00eb shum\u00eb se Ceph: ruajtja bllok e cloud-it MCS<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>Burimi: <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 5.0.2 - aioseo.com -->\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\/sq\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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:url\" content=\"https:\/\/prohoster.info\/sq\/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\udd47Arkitektura S3: 3 vjet evolucioni i Mail.ru Cloud Storage | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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:url":"https:\/\/prohoster.info\/sq\/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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/91090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=91090"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/91090\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/91091"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=91090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=91090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=91090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}