{"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\/hu\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","title":{"rendered":"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" 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\">T\u00e1rol\u00e1si folyos\u00f3<\/a><\/noindex> Szentp\u00e9terv\u00e1rral<\/em><\/p>\n<p><\/p>\n<p>Mindenkinek j\u00f3 napot! Mons Andersonek h\u00edvnak, a platform architekt\u00e1ja vagyok <noindex><a rel=\"nofollow\" href=\"https:\/\/mcs.mail.ru\/\">Mail.ru Cloud Solutions<\/a><\/noindex>, elmondom, hogyan \u00e9p\u00edtett\u00fck fel az S3 t\u00e1rol\u00f3nkat, hogyan m\u0171k\u00f6dik, mik voltak a sikeres megold\u00e1sok \u00e9s min v\u00e1ltoztatn\u00e1nk, ha most kezden\u00e9nk egy hasonl\u00f3 projektet a null\u00e1r\u00f3l.<\/p>\n<p><\/p>\n<p>A cikk a Mail.ru Cloud Solutions &amp; Tarantool konferenci\u00e1n tartott el\u0151ad\u00e1s alapj\u00e1n k\u00e9sz\u00fclt. A cikkben besz\u00e9l\u00fcnk: <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Adatb\u00e1zis Meetup<\/a><\/noindex> hogyan volt fel\u00e9p\u00edtve a Mail.ru t\u00e1rol\u00f3, amelyre az S3 t\u00e1rol\u00f3nkat \u00e9p\u00edtett\u00fck;<\/p>\n<p><\/p>\n<ul>\n<li>mit adtunk hozz\u00e1, hogy l\u00e9trehozzuk a Mail.ru Cloud Storage-t;<\/li>\n<li>hogyan m\u0171k\u00f6dik az objektumt\u00e1rol\u00e1si modell \u00e9s milyen l\u00e9p\u00e9seket tett\u00fcnk a produkci\u00f3ba l\u00e9p\u00e9shez;<\/li>\n<li>a harci rendszer fejleszt\u00e9seir\u0151l: failover \u00e9s sk\u00e1l\u00e1z\u00e1s;<\/li>\n<li>hogyan val\u00f3s\u00edtottuk meg a shardol\u00e1st \u00e9s a reshardo-t;<\/li>\n<li>valamint az SSL tan\u00fas\u00edtv\u00e1nyokkal val\u00f3 munk\u00e1r\u00f3l.<\/li>\n<li>Ha nem akarsz olvasni, akkor<\/li>\n<\/ul>\n<p><\/p>\n<p>Hogyan volt fel\u00e9p\u00edtve a Mail.ru t\u00e1rol\u00f3, amelyre az S3 t\u00e1rol\u00f3nkat \u00e9p\u00edtett\u00fck <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/NEgm1nsv-qg\">megn\u00e9zheti<\/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\">Az S3 fejleszt\u00e9se a Mail.ru Cloud t\u00e1rol\u00f3n alapult, \u00edgy el\u0151sz\u00f6r el kell mondani, hogyan van fel\u00e9p\u00edtve \u00e9s mire k\u00e9pes.<\/h2>\n<p><\/p>\n<p>A Mail.ru Cloud t\u00e1rol\u00f3 merevlemezes szerverekb\u0151l \u00e1ll. \u00c1tlagosan egy modern storage-szerver 36 db 12\u201314 terab\u00e1jtos lemezb\u0151l \u00e1ll. Kor\u00e1bban kisebbek voltak a lemezek, de h\u00e1rom \u00e9v alatt a t\u00e1rol\u00f3kapacit\u00e1s megn\u0151tt, \u00e9s ma ez majdnem f\u00e9l petab\u00e1jt nyers adat.<\/p>\n<p><\/p>\n<p>A t\u00e1rol\u00f3 szerverek lemezei \u00fagynevezett \u201ep\u00e1rokba\u201d (pair) vannak egyes\u00edtve. A p\u00e1r egyetlen f\u00e1jlt t\u00e1rol\u00f3 egys\u00e9g. Val\u00f3j\u00e1ban ez az a lemez, amely egy meghat\u00e1rozott szakaszban, egy meghat\u00e1rozott \u00faton van csatlakoztatva, ahol f\u00e1jlok tal\u00e1lhat\u00f3k, amelyeket hash-ek azonos\u00edtanak. <\/p>\n<p><\/p>\n<p>A p\u00e1r egy t\u00f6rt\u00e9nelmi n\u00e9v, amely a mai napig megmaradt, b\u00e1r ma m\u00e1r nem k\u00f6telez\u0151, hogy csak k\u00e9t lemez szerepeljen a p\u00e1rban. Lehet ak\u00e1r h\u00e1rom lemez, \u00e9s k\u00fcl\u00f6nb\u00f6z\u0151 hibrid t\u00e1rol\u00e1sok is l\u00e9tezhetnek, p\u00e9ld\u00e1ul 3\/2. <\/p>\n<p><\/p>\n<p>A p\u00e1rok (pair) az objektumok t\u00e1rol\u00e1s\u00e1nak egys\u00e9gei <\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/544ab79846539262e2d4dff6ab95ffff.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Minden p\u00e1r a PairDB-ben t\u00e1rol\u00f3dik \u2013 ez egy Tarantool alap\u00fa alkalmaz\u00e1s. Minden adatb\u00e1zis a t\u00e1rol\u00f3ban, az els\u0151kt\u0151l kezdve, Tarantool, m\u00e1s adatb\u00e1zisokat nem haszn\u00e1lunk.<\/em><\/p>\n<p><\/p>\n<p>A PairDB t\u00e1rolja az \u00f6sszes p\u00e1rt, azok \u00e1llapot\u00e1t, a szabad helyet, a hibaelh\u00e1r\u00edt\u00e1si lehet\u0151s\u00e9geket \u00e9s az utols\u00f3 hib\u00e1kat. Emellett k\u00e9pes saj\u00e1t mag\u00e1t is friss\u00edteni a p\u00e1rokon, aktualiz\u00e1lni azok \u00e1llapot\u00e1t, ellen\u0151rizni, hogy m\u0171k\u00f6dnek-e. Teh\u00e1t a PairDB egyfajta \u00e1ltal\u00e1nos k\u00e9pet ad a rendszer\u00fcnk \u00f6sszes lemez\u00e9nek \u00e1llapot\u00e1r\u00f3l.<\/p>\n<p><\/p>\n<p>Pair DB: az \u00e1llapotokkal rendelkez\u0151 p\u00e1r adatb\u00e1zis<\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/d50781b8b51ed5fe126bc84e19c934d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Pair DB: az \u00e1llapotokkal rendelkez\u0151 p\u00e1r adatb\u00e1zis<\/em><\/p>\n<p><\/p>\n<p>A p\u00e1rok adatokat t\u00e1rolnak, \u00e9s ahhoz, hogy tudjuk, melyik f\u00e1jl hol tal\u00e1lhat\u00f3, sz\u00fcks\u00e9g van egy m\u00e1sik adatb\u00e1zisra - FileDB. Ez t\u00e1rolja a f\u00e1jlok \u00e9s p\u00e1rok k\u00f6z\u00f6tti megfeleltet\u00e9st, p\u00e9ld\u00e1ul: ez a f\u00e1jl itt tal\u00e1lhat\u00f3 a m\u00e1sik p\u00e1rban, illetve n\u00e9h\u00e1ny sz\u00fcks\u00e9ges attrib\u00fatumot.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/b1a64737cf7f916bff446c10c1f01d4c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><em>File DB: a f\u00e1jlok t\u00e1rol\u00e1s\u00e1nak helye<\/em><\/p>\n<p>Egy m\u00e1sik fontos elem a Nylon szolg\u00e1ltat\u00e1s, amely egy router az adatb\u00e1zisok kezel\u00e9s\u00e9re. Ez az egyetlen bel\u00e9p\u00e9si pont, lehet\u0151v\u00e9 teszi, hogy egys\u00e9ges fel\u00fcleten dolgozzunk a PairDB-vel \u00e9s a FileDB-vel is. Ez egy stateless szolg\u00e1ltat\u00e1s, amely k\u00e9ri a lek\u00e9rdez\u00e9sek terhel\u00e9seloszt\u00e1s\u00e1t, tudja, hogy a FileDB mely shardj\u00e1ra kell menni, \u00e9s ismeri, hogy mely p\u00e1rok akt\u00edvak \u00e9s melyek nem.<\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/3e2225f229c8cfa462d620d2b5fb581e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Nylon: router az adatb\u00e1zisok kezel\u00e9s\u00e9re<\/em><\/p>\n<p><\/p>\n<p>A t\u00e1rol\u00f3ba valamilyen m\u00f3don tartalmat is kell bevinni. Erre a Streamer szolg\u00e1ltat\u00e1s van. Ez k\u00e9t HTTP-m\u00f3dszert k\u00edn\u00e1l: PUT m\u00f3dszert, hogy tartalmat t\u00f6lts\u00fcnk fel a t\u00e1rol\u00f3ba, \u00e9s GET m\u00f3dszert, hogy onnan let\u00f6lthess\u00fck. Az HTTP egy el\u00e9g n\u00e9pszer\u0171 \u00e9s k\u00e9nyelmes adat\u00e1tviteli protokoll. <\/p>\n<p><\/p>\n<p>Amikor a Streamerhez fordulunk, akkor a Nylonon kereszt\u00fcl a PairDB-hez fordul, hogy kider\u00edtse, melyik p\u00e1rra lehet felt\u00f6lteni a f\u00e1jlt, majd ezt k\u00f6vet\u0151en WebDAV-on kereszt\u00fcl \u00e1tadja az adatokat erre a p\u00e1rra. <\/p>\n<p><\/p>\n<p>L\u00e9nyeg\u00e9ben b\u00e1rmilyen t\u00e1rol\u00f3szerver nginx plusz a megadott \u00fatvonalakon csatlakoztatott lemezek kombin\u00e1ci\u00f3ja. A Streamer seg\u00edts\u00e9g\u00e9vel f\u00e1jlt t\u00f6lthet\u00fcnk fel a t\u00e1rol\u00f3ba, t\u00f6r\u00f6lhetj\u00fck, \u00e1tnevezhetj\u00fck vagy ellen\u0151rizhetj\u00fck az integrit\u00e1s\u00e1t. Azaz ez egy k\u00e9nyelmes interf\u00e9sz az alacsony szint\u0171 t\u00e1rol\u00f3val val\u00f3 kapcsolattart\u00e1sra. <\/p>\n<p>\n<img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/3722a89ed44cace36e9cb1f8bee4bd1e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><em>Streamer: a t\u00e1rol\u00f3hoz val\u00f3 bel\u00e9p\u00e9si pont<\/em><\/p>\n<p><\/p>\n<h2 id=\"chto-my-dobavili-chtoby-sdelat-s3-hranilische\">Mit adtunk hozz\u00e1 az S3 t\u00e1rol\u00f3 l\u00e9trehoz\u00e1s\u00e1hoz<\/h2>\n<p><\/p>\n<p>Teh\u00e1t \u00e1ttekintett\u00fck a t\u00e1rol\u00f3 alapvet\u0151 fel\u00e9p\u00edt\u00e9s\u00e9t, amikor elhat\u00e1roztuk az S3 t\u00e1rol\u00f3 bevezet\u00e9s\u00e9t. A PUT m\u00f3dszer seg\u00edts\u00e9g\u00e9vel b\u00e1rmilyen tartalmat elhelyezhett\u00fcnk ott, \u00e9s ennek az adatnak a hash-\u00e9t kaptuk az azonos\u00edt\u00f3jak\u00e9nt. Ezzel az azonos\u00edt\u00f3val k\u00e9s\u0151bb visszat\u00e9rhett\u00fcnk az eredeti f\u00e1jl\u00e9rt. De ez nem elegend\u0151 az S3 megval\u00f3s\u00edt\u00e1s\u00e1hoz. Az S3 protokollban, az objektumok t\u00e1rol\u00e1sa mellett, van:<\/p>\n<p><\/p>\n<ul>\n<li>metaadatok t\u00e1rol\u00e1sa - az objektumok kieg\u00e9sz\u00edt\u0151 tulajdons\u00e1gai;<\/li>\n<li>az objektumokhoz val\u00f3 hozz\u00e1f\u00e9r\u00e9s szervez\u00e9se HTTP-n kereszt\u00fcl;<\/li>\n<li>az objektumok gy\u0171jt\u00e9se gy\u0171jtem\u00e9nyekbe - t\u00e1rol\u00f3k;<\/li>\n<li>HTTP-S3 v\u00e9gpont. Az S3 adatokat meghat\u00e1rozott strukt\u00far\u00e1kba szervezi - t\u00e1rol\u00f3k, amelyek mindegyike t\u00e1rol\u00e1si bel\u00e9p\u00e9si pontot biztos\u00edt a f\u00e1jlok sz\u00e1m\u00e1ra.<\/li>\n<\/ul>\n<p><\/p>\n<p>Ehhez a logik\u00e1hoz k\u00fcl\u00f6n szolg\u00e1ltat\u00e1sra volt sz\u00fcks\u00e9g. Emellett m\u00e1r az elej\u00e9t\u0151l fogva szerett\u00fck volna a szolg\u00e1ltat\u00e1s architekt\u00far\u00e1j\u00e1t \u00fagy megtervezni, hogy az line\u00e1risan sk\u00e1l\u00e1zhat\u00f3 legyen.<\/p>\n<p><\/p>\n<h2 id=\"pervye-komponenty\">Els\u0151 komponensek<\/h2>\n<p><\/p>\n<p>S3 API-t megval\u00f3s\u00edt\u00f3 d\u00e9mon. Ez az Amazon standard S3 API-ja, amely t\u00e1mogatja az XML-t a metadat\u00e1k kezel\u00e9s\u00e9re \u00e9s k\u00f6zvetlen\u00fcl lehet\u0151v\u00e9 teszi a tartalom \u00e1tvitel\u00e9t. Nem kellett semmit feltal\u00e1lnunk, minden le van \u00edrva \u00e9s dokument\u00e1lva.<\/p>\n<p><\/p>\n<p>A szolg\u00e1ltat\u00e1s el\u0151tt Nginx-t is telep\u00edtett\u00fcnk. Ezt haszn\u00e1ltuk az SSL termin\u00e1l\u00e1s\u00e1ra, a terhel\u00e9seloszt\u00e1sra, valamint n\u00e9mi logik\u00e1ra Lua nyelven (m\u00e9r\u0151sz\u00e1mok, napl\u00f3z\u00e1s \u00e9s nyomk\u00f6vet\u00e9s).<\/p>\n<p><\/p>\n<p>A S3 metadat\u00e1k t\u00e1rol\u00e1s\u00e1ra a Tarantool-t v\u00e1lasztottuk. Az els\u0151 verzi\u00f3ban a S3 d\u00e9mon a metadat\u00e1k\u00e9rt ebbe az adatb\u00e1zisba ment, a tartalmat pedig egy nagy t\u00e1rol\u00f3ban t\u00e1roltuk a Streamer-en kereszt\u00fcl.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/03dddec282b5bb41eb63748ccfb6c9a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Nginx + S3 API + metadat\u00e1k<\/em><\/p>\n<p><\/p>\n<h2 id=\"obektnaya-model-hraneniya\">Objektum t\u00e1rol\u00e1si modell<\/h2>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan m\u0171k\u00f6dik az S3. A felhaszn\u00e1l\u00f3 l\u00e9trehozhat egy v\u00f6dr\u00f6t - objektumok gy\u0171jtem\u00e9ny\u00e9t. A v\u00f6d\u00f6r egy hostn\u00e9vvel van c\u00edmezve, \u00e9s a szolg\u00e1ltat\u00e1s aldomainje. A v\u00f6d\u00f6r keretein bel\u00fcl a felhaszn\u00e1l\u00f3 objektumokat hozhat l\u00e9tre. Az objektum azonos\u00edt\u00f3ja egy URL lesz. Az objektum tartalma egy blob, bin\u00e1ris adatok t\u00f6mbje, amelyet a t\u00e1rol\u00f3ban fogunk t\u00e1rolni. Az objektumnak emellett vannak attrib\u00fatumai is: a n\u00e9v - az adott URL, ACL (hozz\u00e1f\u00e9r\u00e9s-vez\u00e9rl\u00e9si lista), egy\u00e9b kieg\u00e9sz\u00edt\u0151 vagy \u00f6nk\u00e9nyes attrib\u00fatumok - mindezek a metadat\u00e1kban ker\u00fclnek t\u00e1rol\u00e1sra. <\/p>\n<p><\/p>\n<p>Ezen adatok normaliz\u00e1lt s\u00e9m\u00e1ja a k\u00f6vetkez\u0151k\u00e9ppen n\u00e9zhet ki: vannak projektek, amelyek v\u00f6dr\u00f6ket birtokolnak, azok v\u00f6dr\u00f6k pedig objektumokat, \u00e9s az objektumok \u00f6sszetett\u00e9 v\u00e1lhatnak. Mivel az objektumokat egyes\u00e9vel is lehet felt\u00f6lteni, a felt\u00f6lt\u00e9shez k\u00e9t seg\u00e9dt\u00e1bl\u00e1zat \u00e1ll rendelkez\u00e9sre: uploads \u00e9s chunks. A projektek emellett hozz\u00e1f\u00e9r\u00e9si adatokat \u00e9s sz\u00e1ml\u00e1z\u00e1st is tartalmaznak. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/e2bede45ba4044f658b47a9840fd5224.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Adat s\u00e9ma<\/em><\/p>\n<p><\/p>\n<p>Mivel b2b szolg\u00e1ltat\u00e1st k\u00e9sz\u00edtett\u00fcnk fizet\u0151s hozz\u00e1f\u00e9r\u00e9ssel, ez\u00e9rt ebben a s\u00e9m\u00e1ban sz\u00fcks\u00e9g volt a sz\u00e1ml\u00e1z\u00e1sra is.<br \/>\nA sz\u00e1ml\u00e1z\u00f3 szolg\u00e1ltat\u00e1st szint\u00e9n Tarantoolon val\u00f3s\u00edtottuk meg. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" 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 t\u00e1rol\u00f3 fejleszt\u00e9sek: l\u00e9p\u00e9sek a termel\u00e9shez<\/h2>\n<p><\/p>\n<p>M\u00e1r l\u00e9trehoztunk egy m\u0171k\u00f6d\u0151 modellt, amelyet fel lehet haszn\u00e1lni: az objektumok \u00e9s metadat\u00e1k m\u00e1r t\u00e1rolva voltak, de a termel\u00e9shez val\u00f3 \u00e1t\u00e1ll\u00e1shoz m\u00e9g n\u00e9h\u00e1ny dolog hi\u00e1nyzott.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r is, a r\u00e1ta-limitek rendszere. Ha szolg\u00e1ltat\u00e1st ind\u00edtunk n\u00e9lk\u00fcle, cs\u00facsid\u0151szakban el\u0151re nem l\u00e1that\u00f3 m\u00f3don t\u00falterhelhetj\u00fck a rendszer egy r\u00e9sz\u00e9t. A r\u00e1ta-limitnek \u00fagy kell m\u0171k\u00f6dnie: b\u00e1rmely S3 k\u00e9r\u00e9s egy adott hosztra \u00e9rkezik, ez a hoszt a t\u00e1rol\u00f3 azonos\u00edt\u00f3ja, \u00e9s a t\u00e1rol\u00f3 egy bizonyos \u00fcgyf\u00e9lhez tartozik. Meg kell hat\u00e1roznunk egy olyan f\u00fcggv\u00e9nyt a t\u00e1rol\u00f3ra, amely lehet\u0151v\u00e9 teszi a r\u00e1ta-limit kisz\u00e1m\u00edt\u00e1s\u00e1t. <\/p>\n<p><\/p>\n<p>Ezenk\u00edv\u00fcl a r\u00e1ta-limitek rendszer\u00e9nek el\u00e9g teljes\u00edtm\u00e9ny\u0171nek kell lennie ahhoz, hogy elviselje a S3-ra \u00e9rkez\u0151 terhel\u00e9st.<\/p>\n<p><\/p>\n<p>Itt \u00fajra haszn\u00e1ltuk a Tarantool-t. A r\u00e1ta-limitek egy 21 p\u00e9ld\u00e1nyb\u00f3l \u00e1ll\u00f3 klaszter, a p\u00e9ld\u00e1nyokat csoportokba osztottuk, h\u00e1rom fizikai csom\u00f3pont k\u00f6z\u00f6tt elosztva \u00e9s egy nagy topol\u00f3giai klaszterbe egyes\u00edtve. A konfigur\u00e1ci\u00f3s v\u00e1ltoz\u00e1sok automatikusan terjednek: be\u00e1ll\u00edtjuk a r\u00e1ta-limiteket, az alap\u00e9rtelmezetteket \u00e9s a konfigur\u00e1ci\u00f3t. Minden t\u00e1rol\u00f3t szigor\u00faan egy p\u00e9ld\u00e1ny kezel. Amikor egy adott t\u00e1rol\u00f3ra \u00e9rkezik k\u00e9r\u00e9s, kisz\u00e1m\u00edtjuk, hogy melyik p\u00e9ld\u00e1ny felel\u0151s az adott t\u00e1rol\u00f3\u00e9rt. Ezen csom\u00f3pont keretein bel\u00fcl a k\u00e9rd\u00e9sek aktu\u00e1lis r\u00e1t\u00e1j\u00e1t egy Token Bucket-hoz hasonl\u00f3 algoritmus alapj\u00e1n sz\u00e1m\u00edtjuk. Ezut\u00e1n a r\u00e1ta-limitek rendszere, a terhel\u00e9s \u00e9s a konkr\u00e9t t\u00e1rol\u00f3hoz be\u00e1ll\u00edtott tulajdons\u00e1gok alapj\u00e1n megmondja, hogy a k\u00e9r\u00e9s v\u00e9grehajthat\u00f3-e vagy sem. A limitek ellen\u0151rz\u00e9se a S3 k\u00e9r\u00e9s legkor\u00e1bbi szakasz\u00e1ban t\u00f6rt\u00e9nik, v\u00e9dve a rendszer t\u00f6bbi elem\u00e9t a t\u00falzott terhel\u00e9st\u0151l. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/1b91e5d1fe067c859ba9b36d58827579.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1, terhel\u00e9s alatt neh\u00e9z meglenni a cache n\u00e9lk\u00fcl. Az S3-ban t\u00f6bbsz\u00f6ri hozz\u00e1f\u00e9r\u00e9st felt\u00e9telez\u00fcnk az azonos objektumokhoz, teh\u00e1t ez egy forr\u00f3 t\u00e1rol\u00f3. Norm\u00e1l esetben egyetlen f\u00e1jl el\u00e9r\u00e9se teljes l\u00e1ncot ig\u00e9nyel: Streamer, FileDB, PairDB, Storage. De ha t\u00f6bbsz\u00f6r h\u00edvunk meg egy f\u00e1jlt, akkor helyi cache seg\u00edts\u00e9g\u00e9vel optimaliz\u00e1ljuk az el\u00e9r\u00e9st.<\/p>\n<p><\/p>\n<p>A cache t\u00f6bbr\u00e9teg\u0171 \u00e9s nginx, helyi, SSD \u00e9s RAM lemezek seg\u00edts\u00e9g\u00e9vel van megval\u00f3s\u00edtva. Itt nem haszn\u00e1ltuk a Tarantool-t, mert a f\u00e1jlrendszerb\u0151l k\u00e9nyelmesebb a t\u00e1rgyakat \u00e1tadni, \u00edgy lehet\u0151s\u00e9g\u00fcnk van a cache elt\u00e9r\u00edt\u00e9s\u00e9re. Ezen k\u00edv\u00fcl nagy t\u00e1rgyaink vannak, maxim\u00e1lis m\u00e9ret\u00fck 32 gigab\u00e1jt, m\u00edg a Tarantool csak kis t\u00e1rgyakat tud cache-elni.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/faa02bd52a1d70642589d775f22c5e75.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ez az els\u0151 rendszer, amellyel elindultunk, rendelkezett egy kisz\u00e1m\u00edtott kapacit\u00e1ssal, ami elegend\u0151 volt a term\u00e9k felfedez\u00e9s\u00e9re \u00e9s meg\u00e9rt\u00e9s\u00e9re, valamint arra, hogy m\u0171k\u00f6dni fog. <\/p>\n<p><\/p>\n<h2 id=\"dorabotki-boevoy-sistemy-feylover-i-masshtabirovanie\">A harci rendszer fejleszt\u00e9se: failover \u00e9s sk\u00e1l\u00e1z\u00e1s<\/h2>\n<p><\/p>\n<p>A rendszer m\u00e1r harcban volt, de a kezdetekkor kihagytunk n\u00e9h\u00e1ny dolgot - sz\u00fcks\u00e9g volt a failover \u00e9s a sk\u00e1l\u00e1z\u00e1s hozz\u00e1ad\u00e1s\u00e1ra. <\/p>\n<p><\/p>\n<p>A S3 d\u00e9monunk a Tarantool protokollon kereszt\u00fcl gy\u0171jt\u00f6tte be a metadat\u00e1kat. Az eredeti adatb\u00e1zis hely\u00e9be Tarantool ker\u00fclt, amely proxy routerk\u00e9nt m\u0171k\u00f6d\u00f6tt a metadat\u00e1k lek\u00e9rdez\u00e9s\u00e9hez. Az alkalmaz\u00e1s szempontj\u00e1b\u00f3l, amely az API-t megval\u00f3s\u00edtja, semmi nem v\u00e1ltozott - ugyan\u00fagy a Tarantool protokollon kereszt\u00fcl hivatkozott az adatb\u00e1zisra, de a router biztos\u00edtani tudta az akt\u00edv failover-t. Teh\u00e1t ellen\u0151rizhett\u00fck a csom\u00f3pontok el\u00e9rhet\u0151s\u00e9g\u00e9t, sz\u00fcneteltethett\u00fck a v\u00e1lt\u00e1sokat \u00e9s hib\u00e1kat, \u00e9s \u00edgy tov\u00e1bb. Az alkalmaz\u00e1st k\u00f6zben nem m\u00f3dos\u00edtottuk. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" 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\">Tov\u00e1bbi r\u00e9szletek arr\u00f3l, hogyan val\u00f3s\u00edtottuk meg a shardol\u00e1st<\/h2>\n<p><\/p>\n<p>A k\u00f6vetkez\u0151 k\u00e9rd\u00e9s, amivel foglalkoznunk kellett, a shardol\u00e1s volt. A rendszer n\u0151tt, a objektek sz\u00e1ma n\u0151tt, \u00e9s biztos\u00edtani kellett a tov\u00e1bbi n\u00f6veked\u00e9s lehet\u0151s\u00e9g\u00e9t.<\/p>\n<p><\/p>\n<p>T\u00e9rj\u00fcnk vissza az adatmodellhez: vannak projektek, t\u00e1rol\u00f3k, kreditek \u00e9s sz\u00e1ml\u00e1z\u00e1s. Ezek olyan objektumok, amelyek nagy val\u00f3sz\u00edn\u0171s\u00e9ggel a k\u00f6zelj\u00f6v\u0151ben nem n\u0151nek ki egy p\u00e9ld\u00e1ny hat\u00e1rain k\u00edv\u00fcl sem t\u00e9rfogat, sem lek\u00e9rdez\u00e9sek szerint. Ez\u00e9rt nem \u00e9rdemes \u0151ket shardolni, \u00e9s k\u00fcl\u00f6n p\u00e9ld\u00e1nyba helyezt\u00fck \u0151ket, amely nem shardolt marad. Ez lehet\u0151v\u00e9 teszi a projektek \u00e9s t\u00e1rol\u00f3k k\u00f6vetkezetesebb kezel\u00e9s\u00e9t, mivel van egy egys\u00e9ges, nem shardolt pont. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/c5a1c1a875e756e3dceb5f885fbda2c8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A modellben vannak olyan objektumok is, amelyek line\u00e1risan n\u00f6vekednek - el\u0151sz\u00f6r sz\u00e1mos sz\u00e1zas nagys\u00e1grendben voltak, most pedig sz\u00e1muk milli\u00e1rdokban m\u00e9rhet\u0151. Ezeket az objektumokat \u00e9s r\u00e9szeiket shardolt klaszterbe kellett helyezni. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/00bb418cc61ad2e3e8797caf5d1ab202.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A modellt felosztottuk, de az objektumoknak dolgozniuk kell a t\u00e1rol\u00f3kkal: az objektum mindig egy adott t\u00e1rol\u00f3hoz tartozik, plusz a t\u00e1rol\u00f3n m\u0171k\u00f6dik az ACL. Teh\u00e1t minden shardhoz tartoz\u00f3 objektum eset\u00e9n egy \u00e1rny\u00e9km\u00e1solatot tartunk minden t\u00e1rol\u00f3r\u00f3l. Tov\u00e1bb\u00e1, amikor az objektumok m\u00f3dosulnak \u00e9s lek\u00e9rdez\u00e9seket v\u00e9geznek, figyelembe kell venni a sz\u00e1ml\u00e1z\u00e1si m\u00e9rt\u00e9ket, ez\u00e9rt minden shardon vannak sz\u00e1ml\u00e1l\u00f3ink a sz\u00e1ml\u00e1z\u00e1shoz.<\/p>\n<p><\/p>\n<p>Ezenk\u00edv\u00fcl m\u00e9g n\u00e9h\u00e1ny t\u00e1bl\u00e1zatot \u00e9s komponenst adtunk hozz\u00e1:<\/p>\n<p><\/p>\n<ul>\n<li>kos\u00e1r, a r\u00e9gi projektek t\u00f6rl\u00e9s\u00e9re, amelyek t\u00f6rl\u0151dnek vagy felf\u00fcggeszt\u00e9sre ker\u00fclnek;<\/li>\n<li>h\u00e1tt\u00e9rfeladatok sorfa, teh\u00e1t a f\u0151 t\u00e1rol\u00f3nak el kell l\u00e1tnia a h\u00e1tt\u00e9rfeladatokat, amelyeket a klaszteren el kell v\u00e9gezni;<\/li>\n<li>lifecycle t\u00e1mogat\u00e1s \u2014 egy mechanizmus, amely lehet\u0151v\u00e9 teszi az objektumok kezel\u00e9s\u00e9t \u00e9s \u00e9letciklusuk ir\u00e1ny\u00edt\u00e1s\u00e1t.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/933e98dc559eb8e6bac14003215a6836.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mivel az adatok egy r\u00e9sz\u00e9t shardokra vitt\u00fck, sz\u00fcks\u00e9g volt egy sharding proxira. Haszn\u00e1lhattuk volna a routert erre a szerepre, de egy k\u00fcl\u00f6n sharding proxi, amely kiz\u00e1r\u00f3lag az adatok shardingj\u00e1\u00e9rt felel, lehet\u0151v\u00e9 teszi a router sz\u00e1m\u00e1ra, hogy az adatokat teljes eg\u00e9sz\u00e9ben lek\u00e9rdezze, an\u00e9lk\u00fcl hogy a shardingra kellene gondolnia.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/4b181ed4629180e15558f25b1e4d5718.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcl\u00f6n elmagyar\u00e1zom, mi\u00e9rt nem v\u00e1lasztottunk k\u00e9sz megold\u00e1st, hanem egy egyedi sharding funkci\u00f3t szerett\u00fcnk volna l\u00e9trehozni. <\/p>\n<p><\/p>\n<p>N\u00e9zz\u00fck meg, hogyan van fel\u00e9p\u00edtve. 256 el\u00e9rhet\u0151 shardunk van. Minden egyes buckethez egy tartom\u00e1nyt rendel\u00fcnk egy konzisztens funkci\u00f3 seg\u00edts\u00e9g\u00e9vel. Ez egyszer\u0171 \u2014 ahogy a konzisztens funkci\u00f3 seg\u00edts\u00e9g\u00e9vel meghat\u00e1rozza, hogy melyik shardhoz tartozik, \u00fagy meghat\u00e1rozza a kezd\u0151 shardot \u00e9s kijel\u00f6li a tartom\u00e1nyt:<\/p>\n<p><\/p>\n<p><code>f(bucket, shards) = subset<\/code><\/p>\n<p><\/p>\n<p>Teh\u00e1t, ha az \u00fagynevezett bucketet vesz\u00fcnk, akkor elmondhat\u00f3, hogy \u0151 \u00e9s adatai mindig egy adott shardok egy konkr\u00e9t r\u00e9szhalmaz\u00e1n lesznek. Ez lehet\u0151v\u00e9 teszi az egyes bucketek hat\u00e1s\u00e1nak cs\u00f6kkent\u00e9s\u00e9t a m\u00e1sikra, \u00e9s egyszer\u0171s\u00edti a map-reduce lek\u00e9rdez\u00e9sek m\u0171k\u00f6d\u00e9s\u00e9t, amikor p\u00e9ld\u00e1ul a bucket objektumainak list\u00e1z\u00e1s\u00e1ra van sz\u00fcks\u00e9g. Ehhez minden shardot fel kell k\u00e9rdezni, ahol ezek az objektumok t\u00e1rolva vannak. Ha az objektumok minden shardon lenn\u00e9nek, b\u00e1rmely list\u00e1z\u00e1s az eg\u00e9sz rendszert \u00e9rinten\u00e9, de itt csak egy adott r\u00e9szhalmazt \u00e9rint.<\/p>\n<p><\/p>\n<p>Tov\u00e1bb\u00e1 \u2014 minden objektum egy adott buckethez tartozik, ez\u00e9rt amikor egy objektumhoz fordulunk, akkor egy bizonyos bucketben kell az objektum nev\u00e9t megadnunk. Teh\u00e1t egy funkci\u00f3t hat\u00e1rozhatunk meg az objektum sz\u00e1m\u00e1ra nem az \u00f6sszes el\u00e9rhet\u0151 shard tartom\u00e1ny\u00e1b\u00f3l, hanem csak az \u0151 bucket\u00e9nek a r\u00e9szhalmaz\u00e1b\u00f3l:<\/p>\n<p><\/p>\n<p><code>f(object, subset) = shard<\/code><\/p>\n<p><\/p>\n<p>Egy adott objektumot vesz\u00fcnk, a funkci\u00f3 argumentumak\u00e9nt nem az \u00f6sszes shardot, hanem az \u0151 bucket\u00e9nek a r\u00e9szhalmaz\u00e1t adjuk meg \u2014 \u00e9s megkapjuk a megfelel\u0151 shardot. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/10480ad2430c228c511ff3cdc5071596.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teh\u00e1t a sharding megval\u00f3sult, van sharding proxy. Ezut\u00e1n m\u00e1r csak annyit kell tenni, hogy a routerb\u0151l \u00e9s a metadatab\u00e1zisb\u00f3l a sharding proxyhoz forduljunk. P\u00e9ld\u00e1ul \u00e1rny\u00e9k m\u00e1solatok l\u00e9trehoz\u00e1s\u00e1hoz \u2014 amikor egy buckettet hozunk l\u00e9tre, a f\u0151 t\u00e1rol\u00f3nak el kell k\u00e9sz\u00edtenie ennek a buckett\u00e9nek a k\u00e9pvisel\u0151j\u00e9t minden shardon, ahol jelen kell lennie.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" 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\">Hogyan val\u00f3s\u00edtottuk meg a resharding-ot<\/h2>\n<p><\/p>\n<p>A legnagyobb probl\u00e9ma a shardel\u00e9sn\u00e9l a reshardenel\u00e9s. Fontos volt sz\u00e1munkra, hogy a rendszer m\u00e1r gy\u00e1rt\u00e1sban volt, \u00edgy minim\u00e1lis le\u00e1ll\u00e1ssal kellett megoldanunk. Bemutatom, hogyan oldottuk meg a probl\u00e9m\u00e1t egy hasonl\u00f3 feladat p\u00e9ld\u00e1j\u00e1n kereszt\u00fcl, adatokat migr\u00e1lva egy projektb\u0151l a m\u00e1sikba.<\/p>\n<p><\/p>\n<p>Al\u00e1bb l\u00e1that\u00f3 a klaszter\u00fcnk s\u00e9m\u00e1ja, amely a shardel\u00e9s bevezet\u00e9se ut\u00e1n k\u00e9sz\u00fclt. Van nginx, S3 API, router, projekt f\u0151 adatb\u00e1zisa, sharding proxy \u00e9s maguk a shardok.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/0e6bd16c7fc47437b3b7d96b6d9809a4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fent eml\u00edtettem, hogy a projekt egy bizonyos szakasz\u00e1ban volt egy term\u00e9kfeladat: \"Ind\u00edtsunk el egy \u00faj adatt\u00e1rol\u00f3t, Icebox-ot, mint a Hotbox, csak hideg adatokhoz\". Val\u00f3j\u00e1ban egy hasonl\u00f3 adatt\u00e1rol\u00f3, de m\u00e1s URL-en \u00e9s cache n\u00e9lk\u00fcli.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/9ce9085e1d03e9a99b6b8ccc0717c653.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az Icebox-ot kevesebbet haszn\u00e1lt\u00e1k, mint a Hotbox-ot, \u00edgy viszonylag sok\u00e1ig nem volt sz\u00fcks\u00e9g arra, hogy shard-olj\u00e1k. V\u00e9g\u00fcl \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy lemondunk r\u00f3la, \u00e9s egyes\u00edtj\u00fck a Hotbox-ot \u00e9s az Icebox-ot egy szolg\u00e1ltat\u00e1sba, \u00fagy, hogy egyszer\u0171en elv\u00e1lasztjuk a t\u00e1rol\u00e1si oszt\u00e1lyokat. <\/p>\n<p><\/p>\n<p>A t\u00e1rol\u00f3kban l\u00e9v\u0151 bucketek nem estek \u00f6ssze, k\u00f6nnyen \u00f6sszevonhat\u00f3k \u00e9s \u00e1thelyezhet\u0151k voltak, de a kliensek mindk\u00e9t t\u00e1rol\u00f3t haszn\u00e1lt\u00e1k, ez\u00e9rt meg kellett oldani a le\u00e1ll\u00e1s n\u00e9lk\u00fcli \u00e1t\u00e1ll\u00e1s probl\u00e9m\u00e1j\u00e1t. Nem lehetett egyszer\u0171en lekapcsolni \u00e9s lem\u00e1solni. T\u00f6bb l\u00e9p\u00e9sben v\u00e9gezt\u00fck el a migr\u00e1l\u00e1st.<\/p>\n<p><\/p>\n<p>El\u0151sz\u00f6r a f\u0151 t\u00e1rol\u00f3kat szinkroniz\u00e1ltuk. Volt Tarantoolunk, \u00e9s amikor egy objektumot l\u00e9trehoztunk, ezt \u00edgy tehett\u00fck: <\/p>\n<p><\/p>\n<ul>\n<li>a k\u00e9r\u00e9s \u00e9rkezik a bucket l\u00e9trehoz\u00e1s\u00e1ra, p\u00e9ld\u00e1ul a Hotbox-ban;<\/li>\n<li>a Tarantool ellen\u0151rzi egy m\u00e1sik adatb\u00e1zisban (ebben az esetben az Icebox-ban), hogy l\u00e9tezik-e ilyen bucket;<\/li>\n<li>ha a bucket l\u00e9tezik, az adatb\u00e1zis azt mondja, hogy nem lehet l\u00e9trehozni, \u00e9s az l\u00e9tez\u0151k\u00e9nt van szinkroniz\u00e1lva.<br \/>\n<img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/6694c9804f09942416c1717b455b9fd3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<em>Bucketek szinkroniz\u00e1l\u00e1sa<\/em><\/li>\n<\/ul>\n<p><\/p>\n<p>Abban a t\u00e1rol\u00f3ban, amelyik minden adatot fogadott, a projektek \u00e9s a bucketek sz\u00e1m\u00e1ra bevezett\u00fcnk egy jelz\u0151t, amely megmutatta, hol t\u00e1rol\u00f3dik az objektum. Ez helyben, teh\u00e1t a Hotbox-ban, az Icebox-ban is t\u00e1rolhat\u00f3 volt \u2014 ekkor az \u00faj t\u00e1rol\u00f3ban nem l\u00e9teznek adatok, vagy migr\u00e1ci\u00f3s \u00e1llapotban lehetett.<\/p>\n<p><\/p>\n<p>Ha a projekthez vagy buckethez a Migrating jelz\u0151 volt be\u00e1ll\u00edtva, a migr\u00e1ci\u00f3 sor\u00e1n a k\u00e9r\u00e9s el\u0151sz\u00f6r az \u00faj t\u00e1rol\u00f3ra ir\u00e1nyult, amelyben az adatoknak lenni\u00fck kellett, \u00e9s ha ott nem voltak, a k\u00e9r\u00e9seket alternat\u00edv t\u00e1rol\u00f3ra ir\u00e1ny\u00edtott\u00e1k.<\/p>\n<p><\/p>\n<p>Ezut\u00e1n \u00e1tkapcsoltuk a forgalmat. Mivel az API k\u00e9pes volt kezelni az Icebox \u00e9s a Hotbox k\u00e9r\u00e9seit is, le\u00e1ll\u00e1s n\u00e9lk\u00fcl tudtuk \u00e1tir\u00e1ny\u00edtani a forgalmat, egyszer\u0171en \u00e1thelyezve a hosztokat \u00e9s hozz\u00e1adva a megfelel\u0151 bejegyz\u00e9seket az Nginx-ben. <\/p>\n<p><\/p>\n<p>Miut\u00e1n a forgalmat \u00e1tir\u00e1ny\u00edtott\u00e1k, az Nginx \u00e9s az Icebox API elt\u00e1vol\u00edthat\u00f3 volt.<br \/>\nEzut\u00e1n elt\u00e1vol\u00edtottuk az Icebox nginx-t \u00e9s az S3 API-t \u2013 \u00e9s minden m\u0171k\u00f6d\u00f6tt:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/62d9f960fc1f11b875a8f8a5aa8e8152.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ezt k\u00f6vet\u0151en elind\u00edtottunk egy h\u00e1tt\u00e9rsorozatot, amely a b\u00e1zison bel\u00fcl m\u0171k\u00f6d\u00f6tt \u2013 elemr\u0151l elemre \u00e1tfogta az \u00f6sszes projektet \u00e9s azok t\u00e1rol\u00f3it, be\u00e1ll\u00edtotta sz\u00e1mukra a Migrating jelz\u0151t, \u00e1tvitte az adatokat, \u00e9s az \u00e1tvitel befejez\u00e9se ut\u00e1n a Local jelz\u0151t \u00e1ll\u00edtotta be.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/1a3129136f7ccacfdcff260f10cb0605.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Az adat\u00e1tvitel ut\u00e1n m\u00e1r nincs sz\u00fcks\u00e9g\u00fcnk a r\u00e9gi t\u00e1rol\u00f3ra, \u00edgy elt\u00e1vol\u00edtjuk a r\u00e9gi rendszer fennmarad\u00f3 r\u00e9szeit, \u00e9s megsz\u00fcntetj\u00fck a migr\u00e1ci\u00f3s st\u00e1tuszk\u00f3d t\u00e1mogat\u00e1s\u00e1t a k\u00f3db\u00f3l.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" src=\"\/wp-content\/uploads\/2020\/08\/13b6f11add40c21a3b9afc05dd0dfea9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ugyanezekkel az elvekkel hajtottuk v\u00e9gre a r\u00e9gi t\u00e1rol\u00f3b\u00f3l a shardolt t\u00e1rol\u00e1sra val\u00f3 \u00e1tkonfigur\u00e1l\u00e1st:<\/p>\n<p><\/p>\n<ul>\n<li>Minden t\u00e1rol\u00f3t megjel\u00f6lt\u00fcnk, mint <code>Nem shardolt<\/code>. Minden hozz\u00e1juk ir\u00e1nyul\u00f3 k\u00e9r\u00e9s az eredeti, nem shardolt t\u00e1rol\u00f3hoz ment.<\/li>\n<li>Az \u00faj t\u00e1rol\u00f3k azonnal Sharded st\u00e1tuszban j\u00f6ttek l\u00e9tre. <code>Egyes\u00e9vel \u00e1tvett\u00fck a t\u00e1rol\u00f3kat, be\u00e1ll\u00edtottuk a Migrating st\u00e1tuszt<\/code>.<\/li>\n<li>\u00e9s \u00e1tvitt\u00fck az adatokat. <code>K\u00e9rd\u00e9seket az al\u00e1bbi elv szerint szolg\u00e1ltunk ki:<\/code> Olvasunk az \u00fajb\u00f3l, majd a r\u00e9gib\u0151l.<\/li>\n<\/ul>\n<p><\/p>\n<p>Csak az \u00fajb\u00f3l k\u00e9sz\u00edt\u00fcnk.<\/p>\n<p><\/p>\n<ul>\n<li>K\u00e9tf\u00e1zis\u00faan friss\u00edtj\u00fck: ha az \u00fajb\u00f3l nincs, az \u00f6regb\u0151l \u00e1tvissz\u00fck az \u00fajb\u00f3l, majd friss\u00edtj\u00fck.<\/li>\n<li>SSL-tan\u00fas\u00edtv\u00e1nyok kezel\u00e9se<\/li>\n<li>A frontendben Nginx-et haszn\u00e1lunk. Eset\u00fcnkben ez nem a szok\u00e1sos Nginx, hanem OpenResty, LuaJIT t\u00e1mogat\u00e1s\u00fa Nginx.<\/li>\n<\/ul>\n<p><\/p>\n<h2 id=\"rabota-s-ssl-sertifikatami\">A rendszer egy m\u00e1sik r\u00e9sze az SSL tan\u00fas\u00edtv\u00e1nyok kezel\u00e9se. Az S3 t\u00e1rol\u00f3ban saj\u00e1t dom\u00e9nt \u00e1ll\u00edthat be a konkr\u00e9t t\u00e1rol\u00f3hoz val\u00f3 hozz\u00e1f\u00e9r\u00e9shez, egyszer\u0171en seg\u00edts\u00e9g\u00e9vel<\/h2>\n<p><\/p>\n<blockquote><p>. De manaps\u00e1g HTTPS n\u00e9lk\u00fcl nem lehet: a saj\u00e1t domain saj\u00e1t SSL-tan\u00fas\u00edtv\u00e1nyt felt\u00e9telez.<\/p><\/blockquote>\n<p>Mint m\u00e1r eml\u00edtettem, a terhel\u00e9seloszt\u00e1s\u00e9rt \u00e9s az SSL-terhel\u00e9ses\u00edt\u00e9s\u00e9rt az Nginx felel. Eset\u00fcnkben ez nem a szok\u00e1sos Nginx, hanem OpenResty, LuaJIT t\u00e1mogat\u00e1s\u00fa Nginx. <code>CNAME<\/code>Ez lehet\u0151v\u00e9 tette sz\u00e1munkra, hogy viszonylag egyszer\u0171en megtan\u00edtsuk az Nginx-et, hogy tetsz\u0151leges tan\u00fas\u00edtv\u00e1nyokat adjon \u00e1t. R\u00e1ad\u00e1sul a tan\u00fas\u00edtv\u00e1nyokat dinamikusan kellett biztos\u00edtanunk (an\u00e9lk\u00fcl, hogy a konfigur\u00e1ci\u00f3s f\u00e1jlba \u00edrn\u00e1nk \u0151ket). Felhaszn\u00e1ltuk a <\/p>\n<p><\/p>\n<p>ssl_certificate_by_lua<\/p>\n<p><\/p>\n<p>kiterjeszt\u00e9st, amely lehet\u0151v\u00e9 teszi, hogy a tan\u00fas\u00edtv\u00e1nyt tetsz\u0151leges forr\u00e1sb\u00f3l olvassuk be k\u00f6zvetlen\u00fcl a TLS-h\u00e1lny\u00e9k sor\u00e1n. A tan\u00fas\u00edtv\u00e1nyok t\u00e1rol\u00e1s\u00e1ra a Tarantool-t is haszn\u00e1ltuk: ez lehet\u0151v\u00e9 teszi a tan\u00fas\u00edtv\u00e1nyok k\u00fcls\u0151 kezel\u00e9s\u00e9t, \u00e9s rendk\u00edv\u00fcl gyors kiszolg\u00e1l\u00e1st biztos\u00edt. <code>Egy k\u00fcl\u00f6n d\u00e9mon is megval\u00f3s\u00edt\u00e1sra ker\u00fclt, amelynek feladata a Let\u2019s Encrypt \u00e1ltal kibocs\u00e1tott tan\u00fas\u00edtv\u00e1nyok rendszeres friss\u00edt\u00e9se.<\/code>, amely lehet\u0151v\u00e9 teszi a tan\u00fas\u00edtv\u00e1ny olvas\u00e1s\u00e1t egy tetsz\u0151leges forr\u00e1sb\u00f3l k\u00f6zvetlen\u00fcl a TLS-handsake sor\u00e1n. Tan\u00fas\u00edtv\u00e1nyt\u00e1rol\u00f3k\u00e9nt a Tarantool-t is v\u00e1lasztottuk: ez lehet\u0151v\u00e9 teszi a tan\u00fas\u00edtv\u00e1nyok k\u00fcls\u0151 kezel\u00e9s\u00e9t \u00e9s rendk\u00edv\u00fcl gyors visszat\u00e9r\u00e9st biztos\u00edt.<\/p>\n<p><\/p>\n<p>Egy k\u00fcl\u00f6n demon is megval\u00f3s\u00edt\u00e1sra ker\u00fclt, amelynek feladata a Let's Encrypt seg\u00edts\u00e9g\u00e9vel kiadott tan\u00fas\u00edtv\u00e1nyok rendszeres friss\u00edt\u00e9se.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"S3 architekt\u00fara: 3 \u00e9v a Mail.ru Cloud Storage fejl\u0151d\u00e9s\u00e9ben\" 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\">Mit mivel kezden\u00e9m az \u00faj t\u00e1rol\u00f3 fejleszt\u00e9s\u00e9t, \u00e9s mit csin\u00e1ln\u00e9k m\u00e1sk\u00e9pp?<\/h2>\n<p><\/p>\n<h3 id=\"chto-nuzhno-bylo-ispolzovat-s-samogo-nachala\">Mit kellett volna haszn\u00e1lni az elej\u00e9t\u0151l fogva?<\/h3>\n<p><\/p>\n<p><strong>Shardel\u00e9s azonnal<\/strong>. El\u00e9g sok probl\u00e9m\u00e1t okozott a reshardo. K\u00f6nny\u0171 megval\u00f3s\u00edtani, de ha olyan projekteket kezdesz, amelyeket sk\u00e1l\u00e1zni kell, jobb azonnal egy sharded klaszert v\u00e1lasztani, m\u00e9g ha minim\u00e1lis csom\u00f3pontokkal is. A sharding bevezet\u00e9se a kezdeti szakaszban szinte ingyenes a munkamenetbe val\u00f3 bevezet\u00e9shez k\u00e9pest.<\/p>\n<p><\/p>\n<p><strong>Munka Tarantool-lal load balancerek r\u00e9v\u00e9n<\/strong>. Most m\u00e1r minden \u00faj adatb\u00e1zist k\u00f6zvetlen\u00fcl load balanceren kereszt\u00fcl csatlakoztatunk. Ez lehet\u0151v\u00e9 teszi a funkcionalit\u00e1s b\u0151v\u00edt\u00e9s\u00e9t \u00e9s a magasabb hibat\u0171r\u00e9s el\u00e9r\u00e9s\u00e9t. <\/p>\n<p><\/p>\n<p><strong>Auto failover<\/strong>. Minden olyan eszk\u00f6zt telep\u00edtettem volna, ami az auto failoverhez sz\u00fcks\u00e9ges, mivel a kezdeti kudarcok a hi\u00e1nya miatt k\u00f6vetkeztek be. Az S3 tapasztalata ut\u00e1n a k\u00f6vetkez\u0151 term\u00e9keket ennek figyelembev\u00e9tel\u00e9vel ind\u00edtottuk el.<\/p>\n<p><\/p>\n<p><strong>S3 funkci\u00f3 \u00abVerzi\u00f3z\u00e1s\u00bb<\/strong>. Eleinte nem t\u0171nt a legkeresettebb funkci\u00f3nak. Az ilyen lehet\u0151s\u00e9g be\u00e9p\u00edt\u00e9se egy m\u0171k\u00f6d\u0151 rendszer architekt\u00far\u00e1j\u00e1ba rendk\u00edv\u00fcl neh\u00e9z.<\/p>\n<p><\/p>\n<p><strong>K\u00fcl\u00f6n billing<\/strong>. Ahogyan be\u00e9p\u00edtett\u00fck a billinget a rendszeren, az kezdetben j\u00f3l m\u0171k\u00f6d\u00f6tt, de k\u00e9s\u0151bb zavar\u00f3v\u00e1 v\u00e1lt, jobb lett volna, ha teljesen k\u00fcl\u00f6n szolg\u00e1ltat\u00e1sk\u00e9nt \u00fczemel.<\/p>\n<p><\/p>\n<h3 id=\"chto-bylo-udachnym-resheniem\">Mi volt a j\u00f3 d\u00f6nt\u00e9s<\/h3>\n<p><\/p>\n<p><strong>Adatmodell<\/strong>. A t\u00f6rt\u00e9net azt mutatta, hogy a szolg\u00e1ltat\u00e1s fejl\u0151d\u00e9s\u00e9vel meglehet\u0151sen pontosan egybees\u00fcnk az Amazon adatmodellel, ez\u00e9rt meg tudjuk val\u00f3s\u00edtani azokat a funkci\u00f3kat, amelyek ott megtal\u00e1lhat\u00f3k.<\/p>\n<p><\/p>\n<p><strong>Shardol\u00e1si s\u00e9ma<\/strong>. T\u00e1mogatn\u00e1m a hasonl\u00f3 tartom\u00e1ny alap\u00fa shardol\u00e1sokat a buckettek k\u00f6z\u00f6tt, mivel ez lehet\u0151v\u00e9 teszi a k\u00e9r\u00e9sek j\u00f3 eloszt\u00e1s\u00e1t k\u00fcl\u00f6nb\u00f6z\u0151 buckettekt\u0151l egy nagy klaszterben.<\/p>\n<p><\/p>\n<p><strong>Tarantool haszn\u00e1lata<\/strong>. A Tarantool nagym\u00e9rt\u00e9kben seg\u00edtett a szolg\u00e1ltat\u00e1s fejleszt\u00e9s\u00e9ben \u00e9s m\u00f3dos\u00edt\u00e1s\u00e1ban, k\u00f6nnyen dolgoztunk az adatokkal, \u00e1talak\u00edtottuk \u00e9s shardoltuk a t\u00e1rol\u00f3t, an\u00e9lk\u00fcl, hogy az alkalmaz\u00e1s szintj\u00e9re kellett volna l\u00e9pn\u00fcnk. <\/p>\n<p><\/p>\n<blockquote><p>Ez a besz\u00e9d el\u0151sz\u00f6r hangzott el <noindex><a rel=\"nofollow\" href=\"https:\/\/corp.mail.ru\/ru\/press\/events\/databases-2\/\">@Adatb\u00e1zis Meetup<\/a><\/noindex> by Mail.ru Cloud Solutions&amp;Tarantool. Tekintse meg <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=jM4hL2u6JM0&amp;list=PLQzTaxmOHjntyNRPWhaWHqlHp8UN_wgQ3\">vide\u00f3n<\/a><\/noindex> m\u00e1s el\u0151ad\u00e1sokat, \u00e9s iratkozz fel az esem\u00e9nyek \u00e9rtes\u00edt\u00e9seire a Telegramon <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/k8s_mail\">A Kubernetes k\u00f6r\u00fcl a Mail.ru Groupban<\/a><\/noindex>.<\/p><\/blockquote>\n<p>\u00d6n is megn\u00e9zheti a r\u00e9gi el\u0151ad\u00e1somat az S3-r\u00f3l, vagy olvashatja koll\u00e9g\u00e1m cikk\u00e9t a blokkt\u00e1rol\u00f3r\u00f3l.<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=O0iIADHgBVc\">Amazon S3 architekt\u00far\u00e1j\u00e1nak visszafejt\u00e9se \u00e9s hogyan n\u00e9zett ki az S3 t\u00e1rol\u00f3 az MCS-n\u00e9l 3 \u00e9vvel ezel\u0151tt<\/a><\/noindex>.<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/472694\/\">T\u00f6bb mint Ceph: MCS felh\u0151 blokkt\u00e1rol\u00f3ja<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>Forr\u00e1s: <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.3 - 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\/hu\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"hu_HU\" \/>\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\/hu\/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\udd47 S3 architekt\u00fara: 3 \u00e9v evol\u00faci\u00f3 a Mail.ru Cloud Storage-n\u00e1l | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/arhitektura-s3-3-goda-evolyuczii-mail-ru-cloud-storage","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hu_HU","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\/hu\/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\/hu\/wp-json\/wp\/v2\/posts\/91090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/comments?post=91090"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/91090\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media\/91091"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=91090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=91090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=91090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}