{"id":55009,"date":"2020-01-10T00:00:00","date_gmt":"2020-01-09T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo"},"modified":"2020-02-18T14:03:04","modified_gmt":"2020-02-18T11:03:04","slug":"arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","title":{"rendered":"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/04d68ff091d9d271bfd352a6639e2f20.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Artem Denisov ( <noindex><a rel=\"nofollow\" href=\"https:\/\/habrahabr.ru\/users\/bo0rsh201\/\" class=\"user_link\">bo0rsh201<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habrahabr.ru\/company\/badoo\/\">Badoo<\/a><\/noindex>)<\/h2>\n<p>\nA Badoo a vil\u00e1g legnagyobb t\u00e1rskeres\u0151 oldala. Jelenleg k\u00f6r\u00fclbel\u00fcl 330 milli\u00f3 felhaszn\u00e1l\u00f3nk van vil\u00e1gszerte. De ami a mai besz\u00e9lget\u00e9s szempontj\u00e1b\u00f3l sokkal fontosabb, az az, hogy k\u00f6r\u00fclbel\u00fcl 3 petab\u00e1jt felhaszn\u00e1l\u00f3i f\u00e9nyk\u00e9p van t\u00e1rolva n\u00e1lunk. Naponta k\u00f6r\u00fclbel\u00fcl 3,5 milli\u00f3 \u00faj f\u00e9nyk\u00e9p ker\u00fcl felt\u00f6lt\u00e9sre a felhaszn\u00e1l\u00f3ink \u00e1ltal, \u00e9s az olvas\u00e1si terhel\u00e9s k\u00f6r\u00fclbel\u00fcl <b>80 ezer lek\u00e9rdez\u00e9s m\u00e1sodpercenk\u00e9nt<\/b>. Ez el\u00e9g sok a backend sz\u00e1m\u00e1ra, \u00e9s n\u00e9ha neh\u00e9zs\u00e9geink ad\u00f3dnak vele.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/4e4690f9b0d95bd76fbbc1cd6805c26c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBesz\u00e9lni fogok a rendszer tervez\u00e9s\u00e9r\u0151l, amely a f\u00e9nyk\u00e9peket t\u00e1rolja \u00e9s szolg\u00e1ltatja az eg\u00e9szben, \u00e9s bemutatom a fejleszt\u0151k n\u00e9z\u0151pontj\u00e1t. A fejl\u0151d\u00e9s\u00e9r\u0151l egy r\u00f6vid visszatekint\u00e9st fogok adni, ahol a legfontosabb m\u00e9rf\u00f6ldk\u00f6veket kiemelem, de a r\u00e9szletekben m\u00e1r csak azokr\u00f3l a megold\u00e1sokr\u00f3l fogok besz\u00e9lni, amelyeket jelenleg haszn\u00e1lunk.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nMost pedig kezdj\u00fck el.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"SU9ETg39FEg\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/SU9ETg39FEg\/hqdefault.jpg\" alt=\"Vide\u00f3 lej\u00e1tsz\u00e1sa\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nAhogy m\u00e1r mondtam, ez egy visszatekint\u00e9s lesz, \u00e9s hogy legyen mivel kezdeni, n\u00e9zz\u00fck meg a legban\u00e1lisabb p\u00e9ld\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/22b9627cda7ccadd9869b64e9d043d89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVan egy k\u00f6z\u00f6s feladatunk, el kell fogadnunk, t\u00e1rolnunk \u00e9s ki kell adnunk a felhaszn\u00e1l\u00f3k f\u00e9nyk\u00e9peit. \u00cdgy ez a feladat \u00e1ltal\u00e1nos, b\u00e1rmilyen megold\u00e1st haszn\u00e1lhatunk:<\/p>\n<ul>\n<li>modern felh\u0151 alap\u00fa t\u00e1rol\u00f3t,<\/li>\n<li>dobozos megold\u00e1sokat, amelyekb\u0151l most is rengeteg van;<\/li>\n<li>be\u00e1ll\u00edthatunk t\u00f6bb g\u00e9pet a saj\u00e1t adatk\u00f6zpontunkban, nagy merevlemezekkel, \u00e9s ott t\u00e1rolhatjuk a f\u00e9nyk\u00e9peket.<\/li>\n<\/ul>\n<p>\nA Badoo t\u00f6rt\u00e9nelmileg \u2014 most is, \u00e9s akkor is (amikor ez csak kezd\u0151d\u00f6tt) \u2014 a saj\u00e1t szerverein m\u0171k\u00f6dik, a saj\u00e1t adatk\u00f6zpontjainkban. Ez\u00e9rt sz\u00e1munkra ez az opci\u00f3 volt az optim\u00e1lis.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/9434fbabada15670297c551066ad7e71.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEgyszer\u0171en vett\u00fcnk n\u00e9h\u00e1ny g\u00e9pet, elnevezt\u00fck \u0151ket \u00abphotos\u00bb-nak, \u00e9s lett egy klaszter\u00fcnk, ami a f\u00e9nyk\u00e9peket t\u00e1rolja. De \u00fagy t\u0171nik, valami hi\u00e1nyzik. Ahhoz, hogy mindez m\u0171k\u00f6dj\u00f6n, valamilyen m\u00f3don meg kell hat\u00e1roznunk, hogy melyik g\u00e9pen mely f\u00e9nyk\u00e9peket fogunk t\u00e1rolni. \u00c9s itt sem kell felfedezni Amerik\u00e1t.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/36258e7107fd8c60f7e9e563a2cb681c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHozz\u00e1adunk a felhaszn\u00e1l\u00f3i inform\u00e1ci\u00f3kat tartalmaz\u00f3 t\u00e1rol\u00f3nkhoz egy mez\u0151t. Ez lesz a shardol\u00e1si kulcs. A mi eset\u00fcnkben ezt place_id-nak nevezt\u00fck el, \u00e9s ez az id jel\u00f6li a helyet, ahol a felhaszn\u00e1l\u00f3k f\u00e9nyk\u00e9pei t\u00e1rolva vannak. T\u00e9rk\u00e9peket k\u00e9sz\u00edt\u00fcnk.<\/p>\n<p>Az els\u0151 szakaszban ezt ak\u00e1r manu\u00e1lisan is el lehet v\u00e9gezni \u2013 azt mondjuk, hogy ennek a felhaszn\u00e1l\u00f3nak a f\u00e9nyk\u00e9pe ezzel a helysz\u00ednnel egy ilyen szerverre fog \u00e9rkezni. Ennek a t\u00e9rk\u00e9pnek k\u00f6sz\u00f6nhet\u0151en mindig tudjuk, mikor t\u00f6lt fel a felhaszn\u00e1l\u00f3 egy f\u00e9nyk\u00e9pet, hova kell azt menteni, \u00e9s tudjuk, honnan kell \u00e1tadni.<\/p>\n<p>Ez egy teljesen trivi\u00e1lis s\u00e9ma, de el\u00e9g jelent\u0151s el\u0151nyei vannak. Az els\u0151 \u2013 ahogyan m\u00e1r mondtam, hogy egyszer\u0171, a m\u00e1sodik pedig az, hogy ezzel a megk\u00f6zel\u00edt\u00e9ssel k\u00f6nnyen v\u00edzszintesen sk\u00e1l\u00e1zhatunk, egyszer\u0171en \u00faj g\u00e9pek bevon\u00e1s\u00e1val \u00e9s ezek hozz\u00e1ad\u00e1s\u00e1val a t\u00e9rk\u00e9phez. M\u00e1sra nincs sz\u00fcks\u00e9g.<\/p>\n<p>\u00cdgy telt az id\u0151 n\u00e1lunk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/3effb442702f162f7bad9c18ec54392e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz valamikor 2009 k\u00f6r\u00fcl t\u00f6rt\u00e9nt. J\u00f6ttek a g\u00e9pek, sz\u00e1ll\u00edtott\u00e1k \u0151ket...<\/p>\n<p>\u00c9s egy id\u0151 ut\u00e1n \u00e9szrevett\u00fck, hogy ennek a s\u00e9m\u00e1nak bizonyos h\u00e1tr\u00e1nyai vannak. Milyen h\u00e1tr\u00e1nyok?<\/p>\n<p>Els\u0151sorban a korl\u00e1tozott kapacit\u00e1s. Egy fizikai szerverre nem tudunk annyi merevlemezt beszor\u00edtani, mint szeretn\u00e9nk. Ez id\u0151vel \u00e9s a dataset n\u00f6veked\u00e9s\u00e9vel probl\u00e9m\u00e1t jelentett.<\/p>\n<p>M\u00e1sodszor. Ez egy atypikus g\u00e9pkonfigur\u00e1ci\u00f3, mivel ezeket a g\u00e9peket nehezen lehet \u00fajrahaszn\u00e1lni m\u00e1s klaszterekben, el\u00e9g specifikusak, azaz teljes\u00edtm\u00e9nyben gyeng\u00e9knek kell lenni\u00fck, de k\u00f6zben nagy merevlemezzel rendelkezni\u00fck.<\/p>\n<p>Ez mind 2009-re vonatkozik, de ezek az ig\u00e9nyek alapvet\u0151en ma is aktu\u00e1lisak. Van retrospekt\u00edv\u00e1nk, ez\u00e9rt 2009-ben igaz\u00e1n nem volt minden rendben ezzel kapcsolatban.<\/p>\n<p>\u00c9s az utols\u00f3 pont \u2013 az \u00e1r.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/e49010eaeab139199d8fe010caa65bf0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAkkoriban az \u00e1r nagyon borsos volt, \u00e9s alternat\u00edv\u00e1kat kellett keresn\u00fcnk. Vagyis jobban kellett hasznos\u00edtani a helyet az adatk\u00f6zpontokban \u00e9s magukat a fizikai szervereket, amelyeken mindez elhelyezkedett. A rendszer m\u00e9rn\u00f6keink nagy kutat\u00e1sba kezdtek, amely sor\u00e1n sz\u00e1mos k\u00fcl\u00f6nb\u00f6z\u0151 lehet\u0151s\u00e9get \u00e1ttekintettek. F\u00e1jlklaszterez\u0151 rendszereket n\u00e9ztek, mint a PolyCeph \u00e9s Lustre. Ott teljes\u00edtm\u00e9nyprobl\u00e9m\u00e1k voltak, \u00e9s el\u00e9g neh\u00e9z volt az \u00fczemeltet\u00e9s. Lemondtak r\u00f3la. Megpr\u00f3b\u00e1lt\u00e1k az eg\u00e9sz datasetet NFS-en kereszt\u00fcl csatlakoztatni minden g\u00e9phez, hogy \u00edgy valahogy sk\u00e1l\u00e1zzanak. Az olvas\u00e1ssal is probl\u00e9m\u00e1k ad\u00f3dtak, k\u00fcl\u00f6nb\u00f6z\u0151 megold\u00e1sokat pr\u00f3b\u00e1lgattak k\u00fcl\u00f6nb\u00f6z\u0151 besz\u00e1ll\u00edt\u00f3kt\u00f3l.<\/p>\n<p>V\u00e9g\u00fcl pedig arra \u00e1llapodtunk meg, hogy elkezdt\u00fck haszn\u00e1lni a \u00fagynevezett Storage Area Network-ot.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/e99402fa641f3bd5fc8d57a9f8995642.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEzek olyan nagy SHD-k, amelyek kifejezetten nagy mennyis\u00e9g\u0171 adat t\u00e1rol\u00e1s\u00e1ra vannak kialak\u00edtva. Ezek olyan lemezekb\u0151l \u00e1ll\u00f3 polcok, amelyek v\u00e9gterm\u00e9k-kiad\u00f3 g\u00e9pekre vannak csatlakoztatva optik\u00e1n kereszt\u00fcl. \u00cdgy teh\u00e1t van egy viszonylag kicsi g\u00e9pcsoportunk, \u00e9s ezek a SHD-k \u00e1tl\u00e1that\u00f3ak a kiad\u00e1si logik\u00e1nk sz\u00e1m\u00e1ra, azaz a nginx-\u00fcnk vagy b\u00e1rki m\u00e1s sz\u00e1m\u00e1ra, \u00e9s kiszolg\u00e1lj\u00e1k az ezekkel a f\u00e9nyk\u00e9pekkel kapcsolatos k\u00e9r\u00e9seket.<\/p>\n<p>Ennek a megold\u00e1snak voltak nyilv\u00e1nval\u00f3 el\u0151nyei. Ez egy SHD. Kifejezetten fot\u00f3k t\u00e1rol\u00e1s\u00e1ra lett tervezve. Ez olcs\u00f3bb\u00e1 v\u00e1lik, mintha egyszer\u0171en be\u00e1ll\u00edtan\u00e1nk g\u00e9peket merevlemezekkel.<\/p>\n<p>A m\u00e1sodik el\u0151ny. <\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/7fd2e7d629cc239096b14c68be5f76bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz, hogy a kapacit\u00e1s sokkal nagyobb\u00e1 v\u00e1lt, teh\u00e1t sokkal t\u00f6bb t\u00e1rol\u00f3helyet tudunk elhelyezni sokkal kisebb t\u00e9rfogatban.<\/p>\n<p>De h\u00e1tr\u00e1nyok is voltak, amelyek meglehet\u0151sen gyorsan napvil\u00e1gra ker\u00fcltek. A felhaszn\u00e1l\u00f3k \u00e9s a rendszerre nehezed\u0151 terhel\u00e9s n\u00f6veked\u00e9s\u00e9vel teljes\u00edtm\u00e9nybeli probl\u00e9m\u00e1k kezdtek jelentkezni. A probl\u00e9ma itt meglehet\u0151sen nyilv\u00e1nval\u00f3 - b\u00e1rmely SHD, amelyet sok f\u00e9nyk\u00e9p t\u00e1rol\u00e1s\u00e1ra terveztek kis t\u00e9rfogatban, \u00e1ltal\u00e1ban szenved az intenz\u00edv olvas\u00e1st\u00f3l. Ez val\u00f3j\u00e1ban \u00e9rv\u00e9nyes b\u00e1rmely felh\u0151alap\u00fa t\u00e1rol\u00f3ra vagy b\u00e1rmilyen dologra. Jelenleg nem l\u00e9tezik olyan ide\u00e1lis t\u00e1rol\u00f3, amely v\u00e9gtelen\u00fcl sk\u00e1l\u00e1zhat\u00f3 lenne, amelybe b\u00e1rmit be lehetne dugni, \u00e9s nagyon j\u00f3l elviseln\u00e9 az olvas\u00e1st. K\u00fcl\u00f6n\u00f6sen a v\u00e9letlenszer\u0171 olvas\u00e1sokkal.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/566e836e2fe13a2a3d040ae3fa865d6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAhogyan a f\u00e9nyk\u00e9peink eset\u00e9ben is, mert a f\u00e9nyk\u00e9peket nem sorozatosan k\u00e9rik le, \u00e9s ez nagyon er\u0151sen befoly\u00e1solja a teljes\u00edtm\u00e9ny\u00fcket.<\/p>\n<p>M\u00e1r a mai adatok alapj\u00e1n is, ha m\u00e1r t\u00f6bb mint 500 RPS esik ki a f\u00e9nyk\u00e9pekhez egy g\u00e9pen, amelyhez a t\u00e1rol\u00f3 csatlakozik, m\u00e1r probl\u00e9m\u00e1k kezd\u0151dnek. Ez sz\u00e1munkra el\u00e9g rossz volt, mert a felhaszn\u00e1l\u00f3k sz\u00e1ma n\u00f6vekszik, \u00e9s minden csak rosszabbodnia kell. Ezt valahogy optimaliz\u00e1lni kell.<\/p>\n<p>Az optimaliz\u00e1l\u00e1s \u00e9rdek\u00e9ben akkor \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy nyilv\u00e1nval\u00f3an megn\u00e9zz\u00fck a terhel\u00e9si profilt - mi t\u00f6rt\u00e9nik egy\u00e1ltal\u00e1n, mit kell optimaliz\u00e1lni.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/d67310e6b90c4ee1337065790576c9a0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9s itt minden a kez\u00fcnkre j\u00e1tszik.<\/p>\n<p>Az els\u0151 di\u00e1n m\u00e1r eml\u00edtettem: 80 ezer olvas\u00e1si k\u00e9r\u00e9s\u00fcnk van m\u00e1sodpercenk\u00e9nt, mind\u00f6ssze 3,5 milli\u00f3 felt\u00f6lt\u00e9s mellett naponta. Teh\u00e1t ez h\u00e1rom nagys\u00e1grend k\u00fcl\u00f6nbs\u00e9g. Nyilv\u00e1nval\u00f3, hogy az olvas\u00e1st kell optimaliz\u00e1lni, \u00e9s gyakorlatilag vil\u00e1gos, hogyan.<\/p>\n<p>Van m\u00e9g egy kis r\u00e9szlet. A szolg\u00e1ltat\u00e1s jellege olyan, hogy az ember regisztr\u00e1l, felt\u00f6lt egy fot\u00f3t, majd akt\u00edvan n\u00e9zi m\u00e1s embereket, l\u00e1jkolja \u0151ket, \u00e9s \u0151t is akt\u00edvan mutatj\u00e1k m\u00e1soknak. Azt\u00e1n tal\u00e1l mag\u00e1nak p\u00e1rt, vagy nem tal\u00e1l p\u00e1rt, ahogy alakul, \u00e9s egy id\u0151re abbahagyja a szolg\u00e1ltat\u00e1s haszn\u00e1lat\u00e1t. Abban a pillanatban, amikor \u0151 haszn\u00e1lja, a fot\u00f3i nagyon keresettek \u2013 sok ember n\u00e9zi \u0151ket. Amint abbahagyja, el\u00e9g gyorsan kiesik a kor\u00e1bbi intenz\u00edv megjelen\u00edt\u00e9sekb\u0151l m\u00e1sok sz\u00e1m\u00e1ra, \u00e9s a fot\u00f3i ir\u00e1nti kereslet gyakorlatilag megsz\u0171nik.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/dcc7e306055d8f2b0895f24679bfc3e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz\u00e9rt nek\u00fcnk nagyon kicsi, forr\u00f3 adat\u00e1llom\u00e1nyunk van. De e m\u00f6g\u00f6tt rengeteg k\u00e9r\u00e9s \u00e1ll. \u00c9s egy\u00e9rtelm\u0171 megold\u00e1sk\u00e9nt felmer\u00fcl, hogy hozz\u00e1 kellene adni egy cache-t.<\/p>\n<p>Az LRU cache megoldja minden probl\u00e9m\u00e1nkat. Mit tesz\u00fcnk?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/2bd0c88a97d928f386db21549fc02500.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHozz\u00e1adunk a nagy t\u00e1rol\u00f3 klaszter\u00fcnk el\u00e9 m\u00e9g egy viszonylag kis m\u00e9ret\u0171t, amit fot\u00f3k\u00e9szletnek (photoscache) nevez\u00fcnk. Ez l\u00e9nyeg\u00e9ben csak egy cache proxy.<\/p>\n<p>Hogyan m\u0171k\u00f6dik ez bel\u00fclr\u0151l? Itt van a felhaszn\u00e1l\u00f3nk, itt a t\u00e1rol\u00f3. Minden \u00fagy, mint r\u00e9gen. Mit adunk hozz\u00e1 k\u00f6z\u00e9j\u00fck?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/7b7b5f102f1c012b2aef8f02ec731fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz egyszer\u0171en egy g\u00e9p, amelynek fizikailag helyi diszkje van, ami gyors. Ez SSD, mondjuk. \u00c9s ezen a diszken t\u00e1rolunk valamilyen lok\u00e1lis cache-t.<\/p>\n<p>Hogyan n\u00e9z ez ki? A felhaszn\u00e1l\u00f3 k\u00e9r egy fot\u00f3t. Az NGINX el\u0151sz\u00f6r a helyi cache-ben keresi. Ha ott nincs, akkor proxy_pass-on kereszt\u00fcl azonnal a t\u00e1rol\u00f3ra hivatkozik, let\u00f6lti onnan a f\u00e9nyk\u00e9pet, \u00e9s \u00e1tadja azt a felhaszn\u00e1l\u00f3nak.<\/p>\n<p>De ez nagyon egyszer\u0171en \u00e9s \u00e9rthetetlen\u00fcl hangzik, hogy mi t\u00f6rt\u00e9nik bel\u00fcl. Ez k\u00f6r\u00fclbel\u00fcl \u00edgy m\u0171k\u00f6dik.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/46be24df171d1008e2a9099b7e4c9be6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA cache logikailag h\u00e1rom r\u00e9tegre van osztva. Amikor azt mondom, hogy \u201eh\u00e1rom r\u00e9teg\u201d, ez nem jelenti, hogy ott bonyolult rendszer lenne. Nem, ez pap\u00edron csup\u00e1n h\u00e1rom mappa a f\u00e1jlrendszerben:<\/p>\n<ol>\n<li>Ez a buffer, ahov\u00e1 a proxy-b\u00f3l \u00e9ppen felt\u00f6lt\u00f6tt f\u00e9nyk\u00e9pek ker\u00fclnek.<\/li>\n<li>Ez a forr\u00f3 cache, amelyben akt\u00edvan keresett f\u00e9nyk\u00e9pek tal\u00e1lhat\u00f3k.<\/li>\n<li>\u00c9s a hideg cache, ahov\u00e1 a f\u00e9nyk\u00e9peket fokozatosan kiszor\u00edtj\u00e1k a forr\u00f3b\u00f3l, amikor kevesebb k\u00e9r\u00e9s \u00e9rkezik hozz\u00e1juk.<\/li>\n<\/ol>\n<p>\nAhhoz, hogy ez m\u0171k\u00f6dj\u00f6n, valamilyen m\u00f3don kezelni kell ezt a cache-t, \u00e1t kell helyezni f\u00e9nyk\u00e9peket benne stb. Ez is egy nagyon primit\u00edv folyamat.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/9b16fe3e99a5f88f06169f6e5eedf2b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz Nginx minden egyes k\u00e9r\u00e9sr\u0151l feljegyzi az access.log-ot a RAMDisk-re, amelyben megadja a f\u00e9nyk\u00e9p el\u00e9r\u00e9si \u00fatj\u00e1t, amelyet \u00e9ppen kiszolg\u00e1lt (term\u00e9szetesen relat\u00edv \u00fatvonal), \u00e9s azt is, hogy milyen szegmenssel kezelt\u00e9k. Teh\u00e1t ott lehet \u00edrva, hogy \u201efot\u00f3 1\u201d, majd j\u00f6het a puffert\u00e1rol\u00f3, a forr\u00f3 cache, a hideg cache vagy a proxy.<\/p>\n<p>Ez alapj\u00e1n valahogy meg kell hoznunk a d\u00f6nt\u00e9st, hogy mi t\u00f6rt\u00e9njen a f\u00e9nyk\u00e9ppel.<\/p>\n<p>Minden g\u00e9pen fut egy kis daemon, amely folyamatosan olvassa ezt a logot, \u00e9s a saj\u00e1t mem\u00f3ri\u00e1j\u00e1ban t\u00e1rolja a k\u00fcl\u00f6nf\u00e9le f\u00e9nyk\u00e9pek felhaszn\u00e1l\u00e1si statisztik\u00e1it.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/0dceda5e5ff432d1609520f0c152f152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCsak \u00f6sszegy\u0171jti az adatokat, sz\u00e1ml\u00e1l\u00f3kat vezet, \u00e9s id\u0151k\u00f6z\u00f6nk\u00e9nt v\u00e9grehajtja a k\u00f6vetkez\u0151 l\u00e9p\u00e9seket. Az akt\u00edvan k\u00e9rt f\u00e9nyk\u00e9peket, amelyekre sok k\u00e9r\u00e9s \u00e9rkezik, \u00e1thelyezi a forr\u00f3 cache-be, f\u00fcggetlen\u00fcl att\u00f3l, hogy hol helyezkednek el.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/941c13ecfea88372f3a7eb62d81b0c4e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAzokat a f\u00e9nyk\u00e9peket, amelyeket ritk\u00e1n k\u00e9rnek \u00e9s egyre ritk\u00e1bban k\u00e9rnek, fokozatosan kiszor\u00edtja a forr\u00f3 cache-b\u0151l a hidegbe.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/a07235246995ad2fa4e6aeccae23a629.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9s amikor a cache-ben elfogy a hely, egyszer\u0171en mindent elkezd\u00fcnk t\u00f6r\u00f6lni a hideg cache-b\u0151l v\u00e1logat\u00e1s n\u00e9lk\u00fcl. Ez egy\u00e9bk\u00e9nt j\u00f3l m\u0171k\u00f6dik.<\/p>\n<p>Ahhoz, hogy a f\u00e9nyk\u00e9p azonnal t\u00e1rol\u00f3djon a proxyz\u00e1l\u00e1s sor\u00e1n a puffert\u00e1rol\u00f3ba, a proxy_store direkt\u00edv\u00e1t haszn\u00e1ljuk, \u00e9s a puffert\u00e1rol\u00f3 is RAMDisk, teh\u00e1t a felhaszn\u00e1l\u00f3nak ez nagyon gyorsan m\u0171k\u00f6dik. Ez a cache szerver bels\u0151 m\u0171k\u00f6d\u00e9s\u00e9vel kapcsolatban.<\/p>\n<p>Nyitott k\u00e9rd\u00e9s maradt, hogyan osszuk el a k\u00e9r\u00e9seket ezek k\u00f6z\u00f6tt a szerverek k\u00f6z\u00f6tt.<\/p>\n<p>Tegy\u00fck fel, hogy van egy h\u00fasz t\u00e1rol\u00f3 g\u00e9pb\u0151l \u00e1ll\u00f3 klaszter \u00e9s h\u00e1rom cache szerver (\u00edgy alakult).<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/6bc970b687701f3b6d57e153e3abed18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nValamilyen m\u00f3don meg kell hat\u00e1roznunk, hogy mely k\u00e9r\u00e9s melyik f\u00e9nyk\u00e9hez tartozik \u00e9s hova ir\u00e1ny\u00edtsuk \u0151ket.<\/p>\n<p>A legegyszer\u0171bb lehet\u0151s\u00e9g a Round Robin. Vagy v\u00e9letlenszer\u0171en kell ezt csin\u00e1lni?<\/p>\n<p>Ez nyilv\u00e1nval\u00f3an sz\u00e1mos h\u00e1tr\u00e1nnyal j\u00e1r, mert ebben az esetben nagyon hat\u00e9konytalanul fogjuk haszn\u00e1lni a cache-t. A k\u00e9r\u00e9sek v\u00e9letlenszer\u0171 g\u00e9pekre fognak \u00e9rkezni: itt cache-elt\u00e9k, a szomsz\u00e9dos g\u00e9pen pedig m\u00e1r nincs meg. \u00c9s ha m\u0171k\u00f6dik, akkor is nagyon rosszul fog m\u0171k\u00f6dni. M\u00e9g egy kis g\u00e9psor eset\u00e9n is.<\/p>\n<p>Valamilyen m\u00f3don egy\u00e9rtelm\u0171en meg kell hat\u00e1roznunk, hogy melyik szerverre ir\u00e1ny\u00edtsunk egy adott k\u00e9r\u00e9st.<\/p>\n<p>Van egy egyszer\u0171 m\u00f3dszer. Kivessz\u00fck az URL hash-\u00e9t vagy a shard key hash-\u00e9t, amely az URL-ben tal\u00e1lhat\u00f3, \u00e9s osztjuk a szerverek sz\u00e1m\u00e1val. M\u0171k\u00f6dni fog? M\u0171k\u00f6dni fog.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/794a82ac1268b651ab936f0225b802a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeh\u00e1t n\u00e1lunk sz\u00e1zsz\u00e1zal\u00e9kos k\u00e9r\u00e9s van, p\u00e9ld\u00e1ul egy \u201eexample_url\u201d mindig a \u201e2\u201d azonos\u00edt\u00f3j\u00fa szerverre \u00e9rkezik, \u00e9s a cache folyamatosan a lehet\u0151 legjobban hasznosul.<\/p>\n<p>De egy probl\u00e9ma mer\u00fcl fel a re-sharding sor\u00e1n. Re-sharding \u2014 itt az a l\u00e9nyeg, hogy megv\u00e1ltoztatjuk a szerverek sz\u00e1m\u00e1t.<\/p>\n<p>Tegy\u00fck fel, hogy a cache-\u00fcnk nem b\u00edrja a terhel\u00e9st, \u00e9s \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy hozz\u00e1adunk m\u00e9g egy g\u00e9pet.<\/p>\n<p>Hozz\u00e1adjuk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/5f2fcba4c4f267c069811c3677bd0213.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMost m\u00e1r nem h\u00e1romra, hanem n\u00e9gyre osztunk. \u00cdgy szinte minden kulcsunk, ami kor\u00e1bban volt, szinte minden URL most m\u00e1s szervereken \u00e9li \u00e9let\u00e9t. Az \u00f6sszes cache azonnal \u00e9rv\u00e9nytelen\u00edtve lett. Minden k\u00e9r\u00e9s a cluster-storage-unkra z\u00fadult, ami miatt t\u00falterhelt lett, le\u00e1llt a szolg\u00e1ltat\u00e1s, \u00e9s el\u00e9gedettlen felhaszn\u00e1l\u00f3k keletkeztek. Ezt nem akarjuk.<\/p>\n<p>Ez a megold\u00e1s nek\u00fcnk sem felel meg.<\/p>\n<p>Teh\u00e1t mit kell tenn\u00fcnk? Valahogy hat\u00e9konyan kell haszn\u00e1lnunk a cache-t, folyamatosan egy k\u00e9r\u00e9snek ugyanarra a szerverre kell landolnia, de ugyanakkor rezilienseknek kell lenn\u00fcnk a re-shardinggal szemben. Van ilyen megold\u00e1s, nem is olyan bonyolult. Ezt h\u00edvj\u00e1k k\u00f6vetkezetes hashel\u00e9snek.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/1380758686274df9755a7ebf7d1c8753.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHogy n\u00e9z ez ki?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/44f97abfac46fa9f361055548819e8a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFogunk egy funkci\u00f3t a shard-azonos\u00edt\u00f3b\u00f3l, \u00e9s elkenj\u00fck minden \u00e9rt\u00e9k\u00e9t egy k\u00f6r\u00f6n. Teh\u00e1t a 0 pontban bels\u0151 \u00e9s k\u00fcls\u0151 minimumai tal\u00e1lkoznak. Ezut\u00e1n ezen a k\u00f6r\u00f6n helyezz\u00fck el az \u00f6sszes szerver\u00fcnket k\u00f6r\u00fclbel\u00fcl \u00edgy:<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/d470ec615a789913a6baa2726b05acea.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMinden szervert egy pont hat\u00e1roz meg, \u00e9s az a szektor, amely az \u00f3ramutat\u00f3 j\u00e1r\u00e1s\u00e1val megegyez\u0151 ir\u00e1nyban halad fel\u00e9, term\u00e9szetesen ebb\u0151l a hosztb\u00f3l szolg\u00e1lja ki. Amikor k\u00e9rd\u00e9seink \u00e9rkeznek, azonnal l\u00e1tjuk, hogy p\u00e9ld\u00e1ul az A k\u00e9r\u00e9s \u2014 ennek ilyen a hash \u00e9rt\u00e9ke \u2014 \u00e9s a 2-es szervert szolg\u00e1lja ki. A B k\u00e9r\u00e9s \u2014 a 3-as szervert. \u00c9s \u00edgy tov\u00e1bb.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/fcdbd1caa9f1162cf02e8b0a1c79cb74.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMit t\u00f6rt\u00e9nik ebben a helyzetben re-shardingkor?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/7386cda826e9419d5f8a9a0d6d6703c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNem \u00e9rv\u00e9nytelen\u00edtj\u00fck az \u00f6sszes cache-t, mint kor\u00e1bban, \u00e9s nem mozd\u00edtjuk el az \u00f6sszes kulcsot, hanem az egyes szektorokat kis t\u00e1vols\u00e1gokra mozd\u00edtjuk el \u00fagy, hogy a szabadd\u00e1 v\u00e1lt helyre, \u00fagymond, bef\u00e9rjen a hatodik szerver\u00fcnk, amit hozz\u00e1 szeretn\u00e9nk adni, \u00e9s odadugjuk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/8680e0cf023ce911b4d162e9102c0545.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTerm\u00e9szetesen ilyen helyzetben a kulcsok is eltol\u00f3dnak. De sokkal gyeng\u00e9bben, mint kor\u00e1bban. Azt l\u00e1tjuk, hogy az els\u0151 k\u00e9t kulcsunk a saj\u00e1t szerverein maradt, \u00e9s csak az utols\u00f3 kulcs eset\u00e9ben v\u00e1ltozott a gyors\u00edt\u00f3t\u00e1raz\u00f3 szerver. Ez el\u00e9g hat\u00e9konyan m\u0171k\u00f6dik, \u00e9s ha fokozatosan adsz hozz\u00e1 \u00faj hosztokat, akkor nagy probl\u00e9m\u00e1t nem okoz. Fokozatosan adsz hozz\u00e1, v\u00e1rod, hogy a gyors\u00edt\u00f3t\u00e1r megint megteljen, \u00e9s minden j\u00f3l m\u0171k\u00f6dik.<\/p>\n<p>Az egyetlen k\u00e9rd\u00e9s a meghib\u00e1sod\u00e1sokn\u00e1l mer\u00fcl fel. Tegy\u00fck fel, hogy van egy g\u00e9p, ami meghib\u00e1sodott.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/8e3301af782ce8983716c4bc9add79a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c9s nem szeretn\u00e9nk ebben a pillanatban \u00fajragener\u00e1lni ezt a t\u00e9rk\u00e9pet, \u00e9rv\u00e9nytelen\u00edteni a gyors\u00edt\u00f3t\u00e1r egy r\u00e9sz\u00e9t, \u00e9s \u00edgy tov\u00e1bb, ha p\u00e9ld\u00e1ul a g\u00e9p \u00fajraindult, \u00e9s valahogy meg kellene szolg\u00e1lnunk a k\u00e9r\u00e9seket. Csak egy tartal\u00e9k f\u00e9nyk\u00e9pez\u0151 gyors\u00edt\u00f3t\u00e1rat tartunk minden helysz\u00ednen, ami b\u00e1rmely g\u00e9p helyettes\u00edt\u00e9s\u00e9re szolg\u00e1l, ami most meghib\u00e1sodott. Ha hirtelen egy szerver\u00fcnk el\u00e9rhetetlenn\u00e9 v\u00e1lik, a forgalom oda megy. Ekkor term\u00e9szetesen nincs ott semmilyen gyors\u00edt\u00f3t\u00e1r, teh\u00e1t hideg, de legal\u00e1bb a felhaszn\u00e1l\u00f3i k\u00e9r\u00e9sek feldolgozva vannak. Ha ez egy r\u00f6vid id\u0151tartam, akkor ezt teljesen nyugodtan \u00e1tv\u00e9szelj\u00fck. Csak a t\u00e1rol\u00f3ra megn\u00f6vekedett terhel\u00e9s jut. Ha pedig hossz\u00fa intervallumr\u00f3l van sz\u00f3, akkor m\u00e1r d\u00f6nt\u00e9st hozhatunk arr\u00f3l, hogy elt\u00e1vol\u00edtjuk-e ezt a szervert a t\u00e9rk\u00e9pr\u0151l vagy sem, esetleg helyettes\u00edtj\u00fck-e egy m\u00e1sikkal.<\/p>\n<p>Ez a gyors\u00edt\u00f3t\u00e1raz\u00f3 rendszerrel kapcsolatos. N\u00e9zz\u00fck meg az eredm\u00e9nyeket.<\/p>\n<p>Els\u0151 pillant\u00e1sra nem t\u0171nik bonyolultnak. De ez a cache-kezel\u00e9si m\u00f3dszer k\u00f6r\u00fclbel\u00fcl 98%-os tal\u00e1lati ar\u00e1nyt adott nek\u00fcnk. Azaz ebb\u0151l a napi 80 ezer k\u00e9r\u00e9sb\u0151l csup\u00e1n 1600 jut el a t\u00e1rol\u00f3khoz, \u00e9s ez teljesen norm\u00e1lis terhel\u00e9s, amelyet nyugodtan elviselnek, mindig van tartal\u00e9kunk.<\/p>\n<p>Ezeket a szervereket h\u00e1rom DC-nkben helyezt\u00fck el, \u00e9s h\u00e1rom jelenl\u00e9tet kaptunk \u2013 Pr\u00e1ga, Miami \u00e9s Hongkong.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/64eef492b65a014d8ba3c808b6579b41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cdgy t\u00f6bb\u00e9-kev\u00e9sb\u00e9 lok\u00e1lisan helyezkednek el a c\u00e9lpiacainkhoz.<\/p>\n<p>R\u00e1ad\u00e1sul kaptunk egy gyors\u00edt\u00f3t\u00e1raz\u00f3 proxyt, ahol a CPU val\u00f3j\u00e1ban kihaszn\u00e1latlan, mert a tartalom kiszolg\u00e1l\u00e1s\u00e1hoz nem sz\u00fcks\u00e9ges annyira. \u00c9s ott az NGINX+ Lua seg\u00edts\u00e9g\u00e9vel nagyon sok hasznos logik\u00e1t megval\u00f3s\u00edtottunk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/b65c609df5e1985240d04ee65a3e4f55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00e9ld\u00e1ul k\u00eds\u00e9rletezhet\u00fcnk a webp vagy a progressz\u00edv jpeg form\u00e1tumokkal (ezek hat\u00e9kony, modern form\u00e1tumok), figyelve, hogy ez hogyan befoly\u00e1solja a forgalmat, d\u00f6nt\u00e9seket hozva, p\u00e9ld\u00e1ul k\u00fcl\u00f6nb\u00f6z\u0151 orsz\u00e1gok sz\u00e1m\u00e1ra aktiv\u00e1lva; dinamikusan \u00e1tm\u00e9retezni vagy v\u00e1logatni a f\u00e9nyk\u00e9peket menet k\u00f6zben.<\/p>\n<p>Ez egy j\u00f3 use case, amikor p\u00e9ld\u00e1ul van egy mobilalkalmaz\u00e1sunk, amely f\u00e9nyk\u00e9peket mutat, \u00e9s a mobilalkalmaz\u00e1s nem szeretn\u00e9, hogy a kliens CPU-j\u00e1t felhaszn\u00e1lja egy nagy f\u00e9nyk\u00e9p lek\u00e9r\u00e9s\u00e9re \u00e9s annak k\u00e9s\u0151bbi \u00e1tm\u00e9retez\u00e9s\u00e9re, hogy betehesse a n\u00e9zetbe. Egyszer\u0171en dinamikusan megadhatjuk az URL-ben bizonyos param\u00e9tereket az UPort-ban, \u00e9s a fot\u00f3k cache-e automatikusan \u00e1tm\u00e9retezi a f\u00e9nyk\u00e9pet. \u00c1ltal\u00e1ban a legjobban illeszked\u0151 m\u00e9retet v\u00e1lasztja, amely fizikailag ott van a lemezen, legk\u00f6zelebb a k\u00e9rt m\u00e9rethez, \u00e9s lekicsiny\u00edti azt a konkr\u00e9t koordin\u00e1t\u00e1kra.<\/p>\n<blockquote><p>Egy\u00e9bk\u00e9nt k\u00f6zz\u00e9tett\u00fck az elm\u00falt \u00f6t \u00e9v fejleszt\u0151i konferenci\u00e1ir\u00f3l k\u00e9sz\u00fclt videofelv\u00e9teleket nyilv\u00e1nosan. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/\">HighLoad++<\/a><\/noindex>. N\u00e9zd meg, tanulm\u00e1nyozd, oszd meg, \u00e9s iratkozz fel a <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/user\/profyclub\">YouTube-csatorn\u00e1ra<\/a><\/noindex>.<\/p><\/blockquote>\n<p>\nTov\u00e1bb\u00e1 sok term\u00e9klogik\u00e1t is hozz\u00e1adhatunk. P\u00e9ld\u00e1ul az URL param\u00e9terei szerint k\u00fcl\u00f6nb\u00f6z\u0151 v\u00edzjeleket adhatunk hozz\u00e1, elmoshatjuk a f\u00e9nyk\u00e9peket, hom\u00e1lyos\u00edthatjuk vagy pixellel fedhetj\u00fck el. Amikor meg akarunk mutatni egy emberi f\u00e9nyk\u00e9pet, de nem akarjuk, hogy az arca l\u00e1that\u00f3 legyen, ez j\u00f3l m\u0171k\u00f6dik, minden meg van val\u00f3s\u00edtva itt.<\/p>\n<p>Mit kaptunk? H\u00e1rom jelenl\u00e9tet, j\u00f3 tal\u00e1lati ar\u00e1nyt, \u00e9s mellette a CPU-nk nem pihen ezeken a g\u00e9peken. Most m\u00e1r a CPU fontosabb\u00e1 v\u00e1lt, mint kor\u00e1bban. Er\u0151sebb g\u00e9peket kell beszerezn\u00fcnk, de ez meg\u00e9ri.<\/p>\n<p>Ami a f\u00e9nyk\u00e9pek sz\u00e1ll\u00edt\u00e1s\u00e1t illeti. Itt minden el\u00e9g vil\u00e1gos \u00e9s nyilv\u00e1nval\u00f3. Azt hiszem, nem fedeztem fel Amerik\u00e1t, \u00edgy m\u0171k\u00f6dik gyakorlatilag minden CDN.<\/p>\n<p>Val\u00f3sz\u00edn\u0171leg a tapasztalt hallgat\u00f3nak felmer\u00fclhetett a k\u00e9rd\u00e9s: mi\u00e9rt ne vegy\u00fck egyszer\u0171en \u00e9s cser\u00e9lj\u00fck le mindent CDN-re? Nagyj\u00e1b\u00f3l ugyanazt kaptuk volna, minden modern CDN k\u00e9pes erre. \u00c9s itt t\u00f6bb ok is van.<\/p>\n<p>Az els\u0151 \u2014 a f\u00e9nyk\u00e9pek.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/592c10eb74d46191bfcedec120f68556.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz az infrastrukt\u00far\u00e1nk egyik kulcsfontoss\u00e1g\u00fa pill\u00e9re, \u00e9s min\u00e9l nagyobb ellen\u0151rz\u00e9st szeretn\u00e9nk felette. Ha ez egy harmadik f\u00e9lt\u0151l sz\u00e1rmaz\u00f3 megold\u00e1s, \u00e9s nincs hatalmunk felette, el\u00e9g neh\u00e9z lesz ezzel egy\u00fctt \u00e9lni, amikor nagy adathalmazon van, \u00e9s amikor nagyon nagy felhaszn\u00e1l\u00f3i k\u00e9r\u00e9s \u00e1radat van.<\/p>\n<p>P\u00e9lda k\u00f6vetkezik. Jelenleg, a saj\u00e1t infrastrukt\u00far\u00e1nkon, p\u00e9ld\u00e1ul ha b\u00e1rmilyen probl\u00e9ma vagy f\u00f6ldalatti z\u00f6rej mer\u00fcl fel, be tudunk l\u00e9pni a g\u00e9pre, \u00e9s hibakeres\u00e9st tudunk v\u00e9gezni, mondhatni. Hozz\u00e1adhatunk olyan metrik\u00e1k gy\u0171jt\u00e9s\u00e9t, amelyek csak nek\u00fcnk fontosak, k\u00eds\u00e9rletez\u00e9sre is van lehet\u0151s\u00e9g\u00fcnk, figyelj\u00fck, hogy ez hogyan hat a grafikonokra stb. Jelenleg nagyon sok statisztik\u00e1t gy\u0171jt\u00fcnk err\u0151l a gyors\u00edt\u00f3t\u00e1r-klaszterr\u0151l. Id\u0151nk\u00e9nt r\u00e1n\u00e9z\u00fcnk, \u00e9s sok\u00e1ig kutatunk k\u00fcl\u00f6nb\u00f6z\u0151 anom\u00e1li\u00e1kat. Ha ez a CDN oldalon lenne, sokkal nehezebb lenne ellen\u0151rizni. Vagy p\u00e9ld\u00e1ul, ha valamilyen baleset t\u00f6rt\u00e9nik, tudjuk, mi t\u00f6rt\u00e9nt, tudjuk, hogyan \u00e9lj\u00fcnk vele, \u00e9s hogyan k\u00fczdj\u00fcnk meg vele. Ez az els\u0151 k\u00f6vetkeztet\u00e9s.<\/p>\n<p>A m\u00e1sodik k\u00f6vetkeztet\u00e9s ink\u00e1bb t\u00f6rt\u00e9nelmi, mert a rendszer m\u00e1r r\u00e9g\u00f3ta fejl\u0151dik, \u00e9s sokf\u00e9le \u00fczleti k\u00f6vetelm\u00e9ny volt k\u00fcl\u00f6nb\u00f6z\u0151 szakaszokban, \u00e9s nem mindig f\u00e9rnek bele a CDN koncepci\u00f3j\u00e1ba.<\/p>\n<p>A kor\u00e1bbiakb\u00f3l k\u00f6vetkez\u0151 pont \u2013<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/007cf3aed2f9cc12185fc3865bf9d196.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz az, hogy a fot\u00f3gyors\u00edt\u00f3k eset\u00e9n sok specifikus logik\u00e1nk van, amelyet nem mindig lehet k\u00e9r\u00e9sre hozz\u00e1adni. Val\u00f3sz\u00edn\u0171leg egyetlen CDN sem fog k\u00e9r\u00e9sedre egyedi dolgokat hozz\u00e1adni. P\u00e9ld\u00e1ul URL-ek titkos\u00edt\u00e1sa, ha nem akarod, hogy az \u00fcgyf\u00e9l m\u00f3dos\u00edthassa azokat. Ha szeretn\u00e9d megv\u00e1ltoztatni az URL-t a szerveren, \u00e9s titkos\u00edtani, majd dinamikus param\u00e9tereket adni ide.<\/p>\n<p>Milyen k\u00f6vetkeztet\u00e9s ad\u00f3dik? A mi eset\u00fcnkben a CDN nem egy t\u00fals\u00e1gosan j\u00f3 alternat\u00edva.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/cfc2963cca2357cf6b0f63419a4dc436.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA te eset\u00e9ben, ha vannak specifikus \u00fczleti k\u00f6vetelm\u00e9nyeid, akkor b\u00e1tran megval\u00f3s\u00edthatod ugyanezt, amit megmutattam neked. Ez hasonl\u00f3 terhel\u00e9si profil mellett remek\u00fcl fog m\u0171k\u00f6dni.<\/p>\n<p>De ha van egy \u00e1ltal\u00e1nos megold\u00e1sod, \u00e9s a feladat nem t\u00fal specifikus, akkor nyugodtan v\u00e1laszthatsz CDN-t. Vagy ha sz\u00e1modra sokkal fontosabb az id\u0151 \u00e9s az er\u0151forr\u00e1sok, mint a kontroll.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/b76d25404918a5d0d8bf1d6644c8d873.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA modern CDN-ek gyakorlatilag mindent tartalmaznak, amir\u0151l most besz\u00e9ltem. Kiv\u00e9ve n\u00e9h\u00e1ny plusz-m\u00ednusz funkci\u00f3t.<\/p>\n<p>Ez a f\u00e9nyk\u00e9pek kiad\u00e1s\u00e1r\u00f3l sz\u00f3l.<\/p>\n<p>Most pedig egy kicsit l\u00e9pj\u00fcnk el\u0151re a visszatekint\u00e9s\u00fcnkben, \u00e9s besz\u00e9lj\u00fcnk a t\u00e1rol\u00e1sr\u00f3l.<\/p>\n<p>2013-ban.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/f218bfc899512041967842430c02aa9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA cache server has been added, and performance issues are gone. Everything is fine. The dataset is growing. By 2013, we had about 80 servers connected to the storages, and about 40 cache servers in each data center. That's 560 terabytes of data for each data center, or about a petabyte in total.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/ef741ba4a9164e6940f55e93dfb46ef0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWith the growth of the dataset, operational costs began to rise sharply. How did this manifest?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/6cf5e489a4e97bc6e26fc6d4d16505b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn this scheme, shown here\u2014with the SAN, its connected machines, and caches\u2014there are many points of failure. While we have previously managed the failure of cache servers, which are more or less predictable and understandable, the situation on the storage side was much worse.<\/p>\n<p>Firstly, the Storage Area Network (SAN) itself can fail.<\/p>\n<p>Secondly, it connects to the endpoint machines via optical fiber. There may be problems with optical cards and switches.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/6959b79284c5b1244a70a1d64f191893.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThere are certainly fewer of these than with the SAN itself, but nevertheless, they are also points of failure.<\/p>\n<p>Next, there's the machine that connects to the storage. It can also fail.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/1801cb502663a4de14329a5e67dfed79.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSo we have three points of failure.<\/p>\n<p>Additionally, besides the points of failure, maintaining the storage itself is complex.<\/p>\n<p>It's a complicated multi-component system, and systems engineers often struggle with it.<\/p>\n<p>Lastly, the most critical point: if any of these three points fails, there is a non-zero probability of losing user data, as the file system may become corrupted.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/4bf8bc1c73a2beef74cb4ee0ee45679b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSuppose the file system is corrupted. Its recovery takes a long time\u2014up to a week with substantial data volumes. Moreover, we are likely to end up with a heap of unknown files that need to be matched somehow to users' photos. We risk losing data. The risk is quite high. The more often such situations occur, and the more problems arise in this chain, the greater this risk becomes.<\/p>\n<p>Something had to be done about this. We decided that we needed to back up the data. This is actually an obvious solution and a good one. What did we do?<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/f80ec2b65003c40bd2fabf88966b3e05.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThis is what our server that was connected to the storage looked like before. It had one main partition, that is simply a block device, which actually represents a mount on remote storage via optical fiber.<\/p>\n<p>We simply added a second partition.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/d3dba75ef477269d92145cd69d587527.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMellett fel\u00e1ll\u00edtottunk egy m\u00e1sodik t\u00e1rol\u00f3t (szerencs\u00e9re nem dr\u00e1ga), \u00e9s backup-part\u00edci\u00f3k\u00e9nt nevezt\u00fck el. Ez is optik\u00e1n kereszt\u00fcl csatlakozik, ugyanazon a g\u00e9pen tal\u00e1lhat\u00f3. De valahogy szinkroniz\u00e1lnunk kell az adatokat k\u00f6z\u00f6tt\u00fck.<\/p>\n<p>Itt egyszer\u0171en l\u00e9trehozunk egy aszinkron sorozatot mell\u00e9.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/67bced2b45c589009cfb01a1c21398a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNem nagyon terhelt. Tudjuk, hogy kev\u00e9s bejegyz\u00e9s\u00fcnk van. A sorozat csup\u00e1n egy t\u00e1bl\u00e1zat a MySQL-ben, amelybe olyan sorok \u00edr\u00f3dnak, mint 'el kell menteni ezt a f\u00e9nyk\u00e9pet'. B\u00e1rmilyen v\u00e1ltoz\u00e1s vagy felt\u00f6lt\u00e9s eset\u00e9n m\u00e1solunk a f\u0151 part\u00edci\u00f3r\u00f3l a backupra aszinkron m\u00f3don vagy valamilyen h\u00e1tt\u00e9rmunk\u00e1val.<\/p>\n<p>\u00cdgy mindig k\u00e9t konzisztens part\u00edci\u00f3nk van. M\u00e9g ha a rendszer egyik r\u00e9sze meghib\u00e1sodik is, mindig v\u00e1lthatunk a f\u0151 \u00e9s a backup part\u00edci\u00f3 k\u00f6z\u00f6tt, \u00e9s minden folytat\u00f3dik.<\/p>\n<p>De emiatt jelent\u0151sen megn\u00f6vekszik az olvas\u00e1si terhel\u00e9s, mivel a felhaszn\u00e1l\u00f3k, akik a f\u0151 part\u00edci\u00f3r\u00f3l olvasnak (mivel ott frissebb a k\u00e9p), el\u0151sz\u00f6r ott n\u00e9zik meg a k\u00e9pet, majd keresnek a backup-on, ha nem tal\u00e1ltak (de ezt m\u00e1r az NGINX v\u00e9gzi), \u00e9s ezen k\u00edv\u00fcl a backup rendszer\u00fcnk is olvas a f\u0151 part\u00edci\u00f3r\u00f3l. Ez nem felt\u00e9tlen\u00fcl sz\u0171k keresztmetszet, de nem akartuk feleslegesen n\u00f6velni a terhel\u00e9st.<\/p>\n<p>\u00cdgy hozz\u00e1adtunk egy harmadik lemezt, amely egy kis SSD, \u00e9s buffernek nevezt\u00fck el.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/fd35481822b4170087e5f670bf338dc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMost hogyan m\u0171k\u00f6dik ez.<\/p>\n<p>A felhaszn\u00e1l\u00f3 felt\u00f6lt egy fot\u00f3t a bufferbe, majd egy esem\u00e9ny ker\u00fcl a sorba arr\u00f3l, hogy azt k\u00e9t part\u00edci\u00f3ra kell m\u00e1solni. Az m\u00e1sol\u00f3dik, \u00e9s a f\u00e9nyk\u00e9p egy ideig (mondjuk egy nap) a bufferben \u00e9l, majd csak azut\u00e1n t\u00f6rl\u0151dik. Ez nagym\u00e9rt\u00e9kben jav\u00edtja a felhaszn\u00e1l\u00f3i \u00e9lm\u00e9nyt, mivel a felhaszn\u00e1l\u00f3 felt\u00f6lti a f\u00e9nyk\u00e9pet, \u00e9s jellemz\u0151en azonnal \u00e9rkeznek r\u00e1 a k\u00e9r\u00e9sek, vagy \u0151 maga friss\u00edti az oldalt. De mindez f\u00fcgg az alkalmaz\u00e1st\u00f3l, amely v\u00e9grehajtja a felt\u00f6lt\u00e9st.<\/p>\n<p>Vagy p\u00e9ld\u00e1ul, ha m\u00e1s emberek, akikhez elkezdte mutatni, azonnal k\u00fcldenek k\u00e9r\u00e9seket a f\u00e9nyk\u00e9p ut\u00e1n. A cache-ben m\u00e9g nincs, az els\u0151 k\u00e9r\u00e9s nagyon gyorsan t\u00f6rt\u00e9nik. Alapvet\u0151en ez hasonl\u00f3 a f\u00e9nyk\u00e9p cache-hez. A lass\u00fa t\u00e1rol\u00f3 egy\u00e1ltal\u00e1n nem vesz r\u00e9szt ebben. Azt\u00e1n egy nap m\u00falva, amikor t\u00f6rl\u00e9sre ker\u00fcl, addigra m\u00e1r vagy cache-elve lett a cache r\u00e9teg\u00fcnkben, vagy m\u00e1r val\u00f3sz\u00edn\u0171leg senkinek sincs sz\u00fcks\u00e9ge r\u00e1. Teh\u00e1t a felhaszn\u00e1l\u00f3i \u00e9lm\u00e9ny nagym\u00e9rt\u00e9kben javult ezeknek az egyszer\u0171 manipul\u00e1ci\u00f3knak k\u00f6sz\u00f6nhet\u0151en.<\/p>\n<p>Nos, \u00e9s a legfontosabb: meg\u00e1lltunk az adatok elveszt\u00e9s\u00e9vel.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/526f549457dd0c438f32b0adb76df76c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMondhatni, hogy meg\u00e1lltunk <em>potenci\u00e1lisan<\/em> adatokat vesz\u00edtani, mivel k\u00fcl\u00f6n\u00f6sebben nem vesztett\u00fcnk el. De a vesz\u00e9ly megvolt. L\u00e1tjuk, hogy ez a megold\u00e1s term\u00e9szetesen j\u00f3, de egy kicsit olyan, mintha a probl\u00e9ma t\u00fcneteit sim\u00edtan\u00e1nk el, ahelyett, hogy v\u00e9glegesen megoldan\u00e1nk. N\u00e9h\u00e1ny probl\u00e9ma megmaradt.<\/p>\n<p>El\u0151sz\u00f6r is, ez egy hibapont a fizikai hosztn\u00e1l, amelyen az eg\u00e9sz g\u00e9pezet m\u0171k\u00f6dik, ez nem t\u0171nt el.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/0eb3d292655a7edf912793ed81e8931c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nM\u00e1sodszor, megmaradtak a SAN-okkal kapcsolatos probl\u00e9m\u00e1k, azok neh\u00e9z karbantart\u00e1sa stb. Ez nem volt kritikus t\u00e9nyez\u0151, de szerettem volna megpr\u00f3b\u00e1lni, hogyan tudn\u00e1nk \u00e9lni ezek n\u00e9lk\u00fcl.<\/p>\n<p>A harmadik verzi\u00f3t k\u00e9sz\u00edtett\u00fck el (val\u00f3j\u00e1ban a m\u00e1sodik verzi\u00f3t) \u2013 a tartal\u00e9kverzi\u00f3t. Hogyan n\u00e9zett ez ki?<\/p>\n<p>Ez volt, ami volt \u2013<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/8b1749b6feed200f8a64529ee2316c1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nF\u0151 probl\u00e9m\u00e1ink a fizikai hosszal kapcsolatosak.<\/p>\n<p>El\u0151sz\u00f6r is, elt\u00e1vol\u00edtjuk a SAN-okat, mert k\u00eds\u00e9rletezni szeretn\u00e9nk, csak lok\u00e1lis merevlemezeket szeretn\u00e9nk kipr\u00f3b\u00e1lni.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/fd0f5a8627d9179fcbc7097c1c18505f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz m\u00e1r 2014-2015, \u00e9s akkoriban a merevlemezek helyzete \u00e9s kapacit\u00e1sa egyetlen hoszton sokkal jobb lett. \u00dagy d\u00f6nt\u00f6tt\u00fcnk, mi\u00e9rt ne pr\u00f3b\u00e1ln\u00e1nk ki.<\/p>\n<p>A k\u00f6vetkez\u0151 l\u00e9p\u00e9s, hogy fizikailag \u00e1thelyezz\u00fck a backup ter\u00fclet\u00fcnket egy k\u00fcl\u00f6n g\u00e9pre.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/456e00bc8557d3340b06efcd1dde8a08.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cdgy kapunk egy ilyen s\u00e9m\u00e1t. K\u00e9t g\u00e9p\u00fcnk van, amelyek azonos adat\u00e1llom\u00e1nyokat t\u00e1rolnak. Teljes m\u00e9rt\u00e9kben tartal\u00e9kolj\u00e1k egym\u00e1st, \u00e9s az adatokat egy h\u00e1l\u00f3zaton kereszt\u00fcl szinkroniz\u00e1lj\u00e1k egy aszinkron soron kereszt\u00fcl ugyanabban a MySQL-ben.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/d44cdb7b440ad4c58cc625123306a8c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz az\u00e9rt m\u0171k\u00f6dik j\u00f3l, mert kev\u00e9s a felv\u00e9tel. Teh\u00e1t ha a felv\u00e9tel ar\u00e1nyos lenne az olvas\u00e1ssal, tal\u00e1n lenne n\u00e9mi h\u00e1l\u00f3zati t\u00falterhel\u00e9s\u00fcnk \u00e9s probl\u00e9m\u00e1ink. Kev\u00e9s a felv\u00e9tel, sok az olvas\u00e1s \u2013 ez a m\u00f3dszer j\u00f3l m\u0171k\u00f6dik, \u00edgy el\u00e9g ritk\u00e1n m\u00e1soljuk a f\u00e9nyk\u00e9peket a k\u00e9t szerver k\u00f6z\u00f6tt.<\/p>\n<p>Hogyan m\u0171k\u00f6dik ez, ha egy kicsit r\u00e9szletesebben megn\u00e9zz\u00fck.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/071c11abb6ee1d7734c53052139ff04b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFelt\u00f6lt\u00e9s. A terhel\u00e9seloszt\u00f3 egyszer\u0171en v\u00e9letlenszer\u0171en v\u00e1laszt ki hosztokat a p\u00e1rb\u00f3l \u00e9s v\u00e9gzi a felt\u00f6lt\u00e9st. Ek\u00f6zben term\u00e9szetesen v\u00e9gzi az \u00e1llapotellen\u0151rz\u00e9seket, hogy megbizonyosodjon arr\u00f3l, hogy a g\u00e9p nem esett ki. \u00cdgy csak akt\u00edv szerverre t\u00f6lt f\u00e1jlokat, majd az aszinkron soron kereszt\u00fcl m\u00e1solja azokat a szomsz\u00e9dj\u00e1ra. A felt\u00f6lt\u00e9s teljesen egyszer\u0171.<\/p>\n<p>A feladat egy kicsit bonyolultabb.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/f494904aec823456e18b987a8c98bf56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nItt a Lua seg\u00edtett nek\u00fcnk, mert a vanilla NGINX-en neh\u00e9zkesebb ezt a logik\u00e1t megval\u00f3s\u00edtani. El\u0151sz\u00f6r a els\u0151 szerverhez k\u00fcld\u00fcnk egy k\u00e9r\u00e9st, hogy megn\u00e9zz\u00fck, van-e fot\u00f3 ott, mert potenci\u00e1lisan felt\u00f6lthett\u00e9k p\u00e9ld\u00e1ul a szomsz\u00e9dhoz, \u00e9s ide m\u00e9g nem \u00e9rkezett meg. Ha a fot\u00f3 ott van, az j\u00f3. Azonnal \u00e1tadjuk az \u00fcgyf\u00e9lnek, \u00e9s lehet, hogy gyors\u00edt\u00f3t\u00e1razunk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/de5f77e997bb049f4cfc1709da0f1788.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHa nincs, egyszer\u0171en egy k\u00e9r\u00e9st k\u00fcld\u00fcnk a szomsz\u00e9dnak, ahonnan garant\u00e1ltan megkapjuk.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/79aa5592acd28dfbc815261d0276c2e7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTeh\u00e1t megint lehet mondani: probl\u00e9m\u00e1k lehetnek a teljes\u00edtm\u00e9nnyel, mert a folyamatos round trip-ek \u2013 a fot\u00f3t felt\u00f6lt\u00f6tt\u00e9k, itt nincs, k\u00e9t k\u00e9r\u00e9st k\u00fcld\u00fcnk egy helyett, ez lassan kell hogy m\u0171k\u00f6dj\u00f6n.<\/p>\n<p>A mi helyzet\u00fcnkben ez nem m\u0171k\u00f6dik lassan.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/52ca3902d80990f512201672cd5e6441.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSok metrik\u00e1t gy\u0171jt\u00fcnk e rendszer alapj\u00e1n, \u00e9s ennek a mechanizmusnak a felt\u00e9telezett tal\u00e1lati ar\u00e1nya k\u00f6r\u00fclbel\u00fcl 95%. Azaz a backup k\u00e9s\u00e9se kicsi, \u00e9s ennek k\u00f6sz\u00f6nhet\u0151en gyakorlatilag garant\u00e1ltan, miut\u00e1n a fot\u00f3 fel lett t\u00f6ltve, egyb\u0151l megszerezz\u00fck, \u00e9s nem kell k\u00e9tszer oda-vissza menni.<\/p>\n<p>\u00cdgy mit nyert\u00fcnk m\u00e9g, ami nagyon men\u0151?<\/p>\n<p>R\u00e9gebben f\u0151 backup-part\u00edci\u00f3ink voltak, \u00e9s onnan sorban olvastunk. Azaz mindig el\u0151sz\u00f6r az alapb\u00f3l kerest\u00fcnk, majd a backup-b\u00f3l. Ez egy l\u00e9p\u00e9s volt.<\/p>\n<p>Most p\u00e1rhuzamosan olvasunk k\u00e9t g\u00e9pr\u0151l. Round Robin-nal osztjuk el a k\u00e9r\u00e9seket. Kis sz\u00e1zal\u00e9kban k\u00e9tszer k\u00fcld\u00fcnk k\u00e9r\u00e9st. De a teljes\u00edtm\u00e9ny\u00fcnk most k\u00e9tszer akkora olvas\u00e1si kapacit\u00e1ssal rendelkezik, mint kor\u00e1bban. \u00c9s a terhel\u00e9s jelent\u0151sen cs\u00f6kkent, mind az ad\u00e1s g\u00e9peken, mind a t\u00e1rol\u00f3kon, amik akkoriban szint\u00e9n voltak.<\/p>\n<p>Ami az el\u00e9rhet\u0151s\u00e9get illeti. Val\u00f3j\u00e1ban ez\u00e9rt k\u00fczd\u00f6tt\u00fcnk a legf\u0151k\u00e9ppen. Az el\u00e9rhet\u0151s\u00e9ggel itt minden nagyszer\u0171en m\u0171k\u00f6d\u00f6tt.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/a030a477e60d6e1f3d0b4e3395013df5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz egyik g\u00e9p meghib\u00e1sodik.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/42900b24e340c03ea642fd49f5b410ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNincs semmi probl\u00e9ma! A rendszertechnikusnak \u00e9jszaka m\u00e9g fel sem kell kelnia, v\u00e1rhat reggelig, semmi ijeszt\u0151 nem t\u00f6rt\u00e9nik.<\/p>\n<p>M\u00e9g ha a g\u00e9p meghib\u00e1sod\u00e1sakor a sor is le\u00e1ll, akkor sincs probl\u00e9ma, a napl\u00f3 el\u0151sz\u00f6r a m\u0171k\u00f6d\u0151 g\u00e9pen halmoz\u00f3dik fel, majd m\u00e1sodik l\u00e9p\u00e9sben a sorban, \u00e9s azt\u00e1n arra a g\u00e9pre, amelyik egy id\u0151 ut\u00e1n \u00fajra \u00fczembe l\u00e9p.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/ef42eadaaf3e3ecbf70847e9f88c1582.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUgyanaz a karbantart\u00e1ssal. Egyszer\u0171en lekapcsolunk egy g\u00e9pet, manu\u00e1lisan elt\u00e1vol\u00edtjuk az \u00f6sszes poolb\u00f3l, le\u00e1ll a forgalma, v\u00e9gez\u00fcnk egy kis karbantart\u00e1st, m\u00f3dos\u00edtunk valamit, majd vissza\u00e1ll\u00edtjuk a m\u0171k\u00f6d\u00e9sbe, \u00e9s ez a backup el\u00e9g gyorsan utol\u00e9ri mag\u00e1t. Teh\u00e1t, ha egy g\u00e9p egy napot \u00e1ll, a le\u00e1ll\u00e1s k\u00f6r\u00fclbel\u00fcl n\u00e9h\u00e1ny perc alatt bep\u00f3tolhat\u00f3. Ez t\u00e9nyleg nagyon kev\u00e9s. A hibat\u0171r\u00e9ssel, ahogy m\u00e1r mondtam, itt minden nagyszer\u0171.<\/p>\n<p>Milyen k\u00f6vetkeztet\u00e9seket vonhatunk le ebb\u0151l a tartal\u00e9kos rendszerr\u0151l?<\/p>\n<p>Hibat\u0171r\u00e9st kaptunk.<\/p>\n<p>Egyszer\u0171bb \u00fczemeltet\u00e9s. Mivel a g\u00e9peken helyi merevlemezek vannak, ez sokkal k\u00e9nyelmesebb a m\u00e9rn\u00f6k\u00f6k sz\u00e1m\u00e1ra, akik ezzel dolgoznak.<\/p>\n<p>Kett\u0151s tartal\u00e9kot kaptunk az olvas\u00e1sra.<\/p>\n<p>Ez nagyon j\u00f3 b\u00f3nusz a hibat\u0171r\u00e9shez.<\/p>\n<p>De vannak probl\u00e9m\u00e1k is. Most sokkal bonyolultabb fejleszteni olyan funkci\u00f3kat, amelyek kapcsol\u00f3dnak ehhez, mert a rendszer 100%-ban v\u00e9glegesen konzisztens lett.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/b650276a41730cc303180e8304c5dabb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFolyamatosan gondolkodnunk kell p\u00e9ld\u00e1ul egy h\u00e1tt\u00e9rfeladatban: \u201eMelyik szerveren futunk most?\u201d, \u201eBiztosan van itt aktu\u00e1lis fot\u00f3?\u201d stb. Ez term\u00e9szetesen mind becsomagolva van, \u00e9s a programoz\u00f3, aki a \u00fczleti logik\u00e1t \u00edrja, sz\u00e1m\u00e1ra \u00e1tl\u00e1that\u00f3. De ennek ellen\u00e9re egy nagy bonyolult r\u00e9teg jelent meg. De k\u00e9szen \u00e1llunk erre, cser\u00e9be azok\u00e9rt az el\u0151ny\u00f6k\u00e9rt, amiket kaptunk.<\/p>\n<p>Itt is \u00fajabb konfliktus l\u00e9p fel.<\/p>\n<p>El\u0151sz\u00f6r azt mondtam, hogy minden a helyi merevlemezeken val\u00f3 t\u00e1rol\u00e1s rossz. Most viszont azt mondom, hogy tetszik ez nek\u00fcnk.<\/p>\n<p>Igen, val\u00f3ban, az id\u0151 m\u00fal\u00e1s\u00e1val a helyzet jelent\u0151sen megv\u00e1ltozott, \u00e9s ma ennek a megk\u00f6zel\u00edt\u00e9snek sok el\u0151nye van. Egyr\u00e9szt sokkal egyszer\u0171bb \u00fczemeltet\u00e9st kapunk.<\/p>\n<p>M\u00e1sr\u00e9szt ez teljes\u00edtm\u00e9nyesebb, mert nincsenek automatikus vez\u00e9rl\u0151k \u00e9s csatlakoz\u00e1sok a t\u00e1rol\u00f3khoz.<\/p>\n<p>Ott hatalmas g\u00e9pcsarnok van, itt viszont csak n\u00e9h\u00e1ny lemez, ami konkr\u00e9tan itt a g\u00e9pen RAID-be van \u00e1ll\u00edtva.<\/p>\n<p>De vannak h\u00e1tr\u00e1nyai is.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/3c090e0801f1a686dc0d5fefce697c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEz k\u00f6r\u00fclbel\u00fcl m\u00e1sf\u00e9l szoros\u00e1ba ker\u00fcl, mint a SAN-ok haszn\u00e1lata, m\u00e9g a mai \u00e1rak mellett is. Ez\u00e9rt \u00fagy d\u00f6nt\u00f6tt\u00fcnk, hogy nem mer\u00fcnk teljesen \u00e1t\u00e1llni a helyi merevlemezes g\u00e9pekre a nagy klaszter\u00fcnkb\u0151l, \u00e9s ink\u00e1bb egy hibrid megold\u00e1st v\u00e1lasztottunk.<\/p>\n<p>A g\u00e9pek fele n\u00e1lunk merevlemezekkel m\u0171k\u00f6dik (h\u00e1t, nem fele \u2013 kb. 30 sz\u00e1zal\u00e9k). A fennmarad\u00f3 r\u00e9sz pedig r\u00e9gi g\u00e9pek, amelyeken kor\u00e1bban az els\u0151 tartal\u00e9kol\u00e1si s\u00e9ma volt. Csak \u00fajra csatlakoztattuk \u0151ket, mivel nek\u00fcnk nincsenek \u00faj adatok, vagy b\u00e1rmi m\u00e1s, csak a mountokat \u00e1thelyezt\u00fck egy fizikai gazd\u00e1r\u00f3l kett\u0151re.<\/p>\n<p>\u00cdgy nagy t\u00e1rhely-olvas\u00e1si kapacit\u00e1sunk lett, \u00e9s \u00f6sszevontuk. Ha kor\u00e1bban egy g\u00e9phez egy t\u00e1rol\u00f3t csatlakoztattunk, most egy p\u00e1rhoz n\u00e9gyet csatlakoztatunk, p\u00e9ld\u00e1ul. \u00c9s ez norm\u00e1lisan m\u0171k\u00f6dik.<\/p>\n<p>\u00d6sszefoglaljuk, hogy mi val\u00f3sult meg, mi\u00e9rt k\u00fczd\u00f6tt\u00fcnk, \u00e9s siker\u00fclt-e.<\/p>\n<h3>\u00d6sszegz\u00e9s<\/h3>\n<p>\n33 milli\u00f3 felhaszn\u00e1l\u00f3nk van.<\/p>\n<p>H\u00e1rom jelenl\u00e9t\u00fcnket r\u00e9szlegesen Pr\u00e1g\u00e1ban, Miami-ban \u00e9s Hongkongban alak\u00edtottuk ki.<\/p>\n<p>Ezekben tal\u00e1lhat\u00f3 a cache r\u00e9teg, ami gyors helyi SSD-kkel rendelkez\u0151 g\u00e9peket tartalmaz, ahol egyszer\u0171 NGINX rendszer m\u0171k\u00f6dik, az access.log-jaival \u00e9s Python d\u00e9monokkal, amelyek mindezt feldolgozz\u00e1k \u00e9s kezelik a cache-t.<\/p>\n<p>Ha szeretn\u00e9, a saj\u00e1t projektj\u00e9ben, ha a f\u00e9nyk\u00e9pek nem olyan kritikusak \u00d6nnek, mint sz\u00e1munkra, vagy ha a trade-off a kontroll \u00e9s a fejleszt\u00e9si sebess\u00e9g k\u00f6z\u00f6tt \u00d6nnek m\u00e1s ir\u00e1nyba billen, akkor nyugodtan helyettes\u00edtheti CDN-nel, a modern CDN-ek ezt j\u00f3l csin\u00e1lj\u00e1k.<\/p>\n<p>Ezut\u00e1n j\u00f6n a t\u00e1rol\u00e1si r\u00e9teg, ahol a p\u00e1r g\u00e9pb\u0151l \u00e1ll\u00f3 klaszterek tal\u00e1lhat\u00f3k, amelyek egym\u00e1st tartal\u00e9kolj\u00e1k, \u00e9s minden v\u00e1ltoz\u00e1skor aszinkron m\u00f3don m\u00e1solj\u00e1k a f\u00e1jlokat egyik g\u00e9pr\u0151l a m\u00e1sikra.<\/p>\n<p>Ezeknek a g\u00e9peknek egy r\u00e9sze helyi merevlemezekkel m\u0171k\u00f6dik.<\/p>\n<p>Ezeknek a g\u00e9peknek egy r\u00e9sze SAN-hoz csatlakozik.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/5ddbc4f73d86aa1f83734885d8c9dea0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEgyr\u00e9szt ez k\u00e9nyelmesebb \u00fczemeltet\u00e9s szempontj\u00e1b\u00f3l \u00e9s valamivel produkt\u00edvabb, m\u00e1sr\u00e9szt a densit\u00e1s \u00e9s a gigabyte-ra es\u0151 \u00e1r szempontj\u00e1b\u00f3l is k\u00e9nyelmes.<\/p>\n<p>Ez egy r\u00f6vid \u00e1ttekint\u00e9s az architekt\u00far\u00e1r\u00f3l, amit kaptunk, \u00e9s arr\u00f3l, hogyan fejl\u0151d\u00f6tt mindez.<\/p>\n<p>M\u00e9g n\u00e9h\u00e1ny egyszer\u0171 tan\u00e1cs a f\u0151n\u00f6kt\u0151l.<\/p>\n<p>El\u0151sz\u00f6r is, ha hirtelen \u00fagy d\u00f6nt, hogy minden\u00e1ron jav\u00edtani kell az infrafot\u00f3in, el\u0151sz\u00f6r m\u00e9rje fel, mert lehet, hogy semmit sem kell jav\u00edtani.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/7770f41d0b190eb78ae0d19f4c8182a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHozok egy p\u00e9ld\u00e1t. Van egy klaszter\u00fcnk, amely a chat-ekben az attachment-b\u0151l f\u00e9nyk\u00e9peket ad, \u00e9s ott m\u00e9g mindig a 2009-es rendszer m\u0171k\u00f6dik, \u00e9s senki sem szenved ett\u0151l. Mindenkinek j\u00f3, mindenki el\u00e9gedett.<\/p>\n<p>Ahhoz, hogy m\u00e9rni tudjunk, el\u0151sz\u00f6r is \u00e1ll\u00edtsunk be egy csom\u00f3 metrik\u00e1t, n\u00e9zz\u00fck meg \u0151ket, \u00e9s csak ezut\u00e1n d\u00f6nts\u00e9tek el, hogy miben vagytok el\u00e9gedetlenek, mit kellene jav\u00edtani. Ahhoz, hogy ezt m\u00e9rhess\u00fck, van egy klassz eszk\u00f6z\u00fcnk, ami a Pinba n\u00e9vre hallgat.<\/p>\n<p>Ez lehet\u0151v\u00e9 teszi, hogy nagyon r\u00e9szletes statisztik\u00e1kat gy\u0171jts\u00fcnk az NGINX-t\u0151l minden egyes k\u00e9r\u00e9sr\u0151l \u00e9s v\u00e1laszk\u00f3dr\u00f3l, a v\u00e1laszid\u0151k eloszl\u00e1s\u00e1r\u00f3l - mindent, amit csak szeretn\u00e9l. Sz\u00e1mos analitikai rendszerhez vannak k\u00f6t\u0151d\u00e9sei, \u00edgy ezeket sz\u00e9p m\u00f3don \u00e1t tudod n\u00e9zni.<\/p>\n<p>El\u0151sz\u00f6r m\u00e9rj\u00fcnk - azt\u00e1n jav\u00edtsunk.<\/p>\n<p>Tov\u00e1bb\u00e1. Az olvas\u00e1st a cache optimaliz\u00e1l\u00e1s\u00e1val, a \u00edr\u00e1st pedig shardinggal v\u00e9gezz\u00fck, de ez nyilv\u00e1nval\u00f3 dolog.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/f53a4777f1a2c7793eba4a72c94263a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTov\u00e1bb\u00e1. Ha most kezded el \u00e9p\u00edteni a rendszeredet, sokkal jobb, ha a f\u00e9nyk\u00e9peket immutable f\u00e1jlokk\u00e9nt kezelj\u00fck. \u00cdgy elvesz\u00edted az eg\u00e9sz sorozatnyi probl\u00e9m\u00e1t a cache invalid\u00e1l\u00e1s\u00e1val, azzal kapcsolatban, hogy a logik\u00e1nak hogyan kell megtal\u00e1lni a megfelel\u0151 f\u00e9nyk\u00e9p verzi\u00f3j\u00e1t, \u00e9s \u00edgy tov\u00e1bb.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/f345c59681275326cda1320b4f188ce9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTegy\u00fck fel, hogy felt\u00f6lt\u00f6tt\u00e9l egy k\u00e9pet, majd elforgattad azt, \u00fcgyelj arra, hogy ez egy fizikailag m\u00e1s f\u00e1jl legyen. Vagyis nem kell gondolkodnod azon, hogy most sp\u00f3rolok egy kis helyet, ugyanabba a f\u00e1jlba \u00edrom, megv\u00e1ltoztatom a verzi\u00f3t. Ez mindig rosszul m\u0171k\u00f6dik, \u00e9s sok fejt\u00f6r\u00e9st okoz k\u00e9s\u0151bb.<\/p>\n<p>K\u00f6vetkez\u0151 pont. Az azonnali m\u00e9retez\u00e9s.<\/p>\n<p>Kor\u00e1bban, amikor a felhaszn\u00e1l\u00f3k f\u00e9nyk\u00e9peket t\u00f6lt\u00f6ttek fel, azonnal rengeteg k\u00fcl\u00f6nb\u00f6z\u0151 m\u00e9retet v\u00e1gtunk le minden eshet\u0151s\u00e9gre, k\u00fcl\u00f6nb\u00f6z\u0151 klienseknek, \u00e9s ezek mind a lemezen voltak. Most m\u00e1r ezt elhagytuk.<\/p>\n<p>Csak h\u00e1rom alapm\u00e9retet hagytunk meg: kicsi, k\u00f6zepes \u00e9s nagy. Minden m\u00e1s m\u00e9retet egyszer\u0171en lecs\u00f6kkent\u00fcnk abb\u00f3l a m\u00e9retb\u0151l, amelyet az Uport k\u00e9rdezett, csak legy\u00e1rtjuk a lecs\u00f6kkentett verzi\u00f3t \u00e9s \u00e1tadjuk a felhaszn\u00e1l\u00f3nak.<\/p>\n<p>A cache-elt r\u00e9teg CPU-ja itt sokkal olcs\u00f3bb, mint ha folyamatosan \u00fajragener\u00e1ln\u00e1nk ezeket a m\u00e9reteket minden egyes t\u00e1rol\u00f3n. Tegy\u00fck fel, hogy \u00fajat szeretn\u00e9nk hozz\u00e1adni, ez egy h\u00f3napot jelent - k\u00fcl\u00f6nb\u00f6z\u0151 helyeken v\u00e9gig kell futtatni egy scriptet, ami mindezt sz\u00e9pen elv\u00e9gzi an\u00e9lk\u00fcl, hogy a klasztert le\u00e1ll\u00edtan\u00e1. Vagyis, ha van lehet\u0151s\u00e9ged most v\u00e1lasztani, \u00e9rdemes min\u00e9l kevesebb fizikai m\u00e9retet l\u00e9trehozni, de hogy legyen valamilyen eloszl\u00e1s, mondjuk h\u00e1rom. Minden egy\u00e9b m\u00e9retet egyszer\u0171en azonnal \u00e1tm\u00e9retez\u00fcnk a megl\u00e9v\u0151 modulok seg\u00edts\u00e9g\u00e9vel. Ez most m\u00e1r nagyon egyszer\u0171 \u00e9s el\u00e9rhet\u0151.<\/p>\n<p>Az inkrement\u00e1lis aszinkron biztons\u00e1gi ment\u00e9s j\u00f3 dolog.<\/p>\n<p>Gyakorlatunk alapj\u00e1n ez a rendszer nagyszer\u0171en m\u0171k\u00f6dik a m\u00f3dos\u00edtott f\u00e1jlok k\u00e9sleltetett m\u00e1sol\u00e1s\u00e1val.<\/p>\n<p><img decoding=\"async\" alt=\"A f\u00e9nyk\u00e9pek t\u00e1rol\u00e1s\u00e1nak \u00e9s \u00e1tad\u00e1s\u00e1nak architekt\u00far\u00e1ja a Badoo-n\" src=\"\/wp-content\/uploads\/2020\/01\/0e550721e838654e61e1fa4d08f9bb93.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAz utols\u00f3 pont szint\u00e9n nyilv\u00e1nval\u00f3. Ha jelenleg nincsenek ilyen probl\u00e9m\u00e1k az infrastrukt\u00far\u00e1j\u00e1ban, de van valami, ami t\u00f6nkremehet, az biztosan t\u00f6nkremegy, amikor egy kicsit t\u00f6bbet b\u00edr el. Ez\u00e9rt \u00e9rdemes el\u0151re gondolkodni \u00e9s elker\u00fclni a probl\u00e9m\u00e1kat. Ennyit a r\u00e9szemr\u0151l.<\/p>\n<h3>Kapcsolat<\/h3>\n<p>\n\u00bb <noindex><a rel=\"nofollow\" href=\"https:\/\/habrahabr.ru\/users\/bo0rsh201\/\" class=\"user_link\">bo0rsh201<\/a><\/noindex> <br \/>\n\u00bb <noindex><a rel=\"nofollow\" href=\"https:\/\/habrahabr.ru\/company\/badoo\/\">A Badoo c\u00e9g blogja<\/a><\/noindex><\/p>\n<blockquote><p>Ez a dokumentum a legjobb el\u0151ad\u00e1sok egyik\u00e9nek a konferencia fejleszt\u0151i magas terhel\u00e9s\u0171 rendszerek t\u00e9m\u00e1j\u00e1ban t\u00f6rt\u00e9nt \u00e1tirata <noindex><a rel=\"nofollow\" href=\"http:\/\/highload.ru\/?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">HighLoad++<\/a><\/noindex>. Kevesebb mint egy h\u00f3nap van h\u00e1tra a HighLoad++ 2017 konferenci\u00e1ig.<\/p>\n<p>M\u00e1r k\u00e9sz van n\u00e1lunk <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\">A konferencia programja<\/a><\/noindex>, jelenleg akt\u00edvan formul\u00e1ljuk az \u00fctemtervet.<\/p>\n<p>Id\u00e9n tov\u00e1bbra is az architekt\u00far\u00e1k \u00e9s sk\u00e1l\u00e1z\u00f3d\u00e1s t\u00e9m\u00e1j\u00e1t kutatjuk:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\/2946.html?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">Hogyan szolg\u00e1ljunk ki egymilli\u00e1rd felhaszn\u00e1l\u00f3t \u00e9s adjunk \u00e1t terabites forgalmat<\/a><\/noindex> \/ \u0418\u0433\u043e\u0440\u044c \u0412\u0430\u0441\u0438\u043b\u044c\u0435\u0432<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\/3088.html?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">Hogyan \u00edrjuk \u00e1t a VKontakte szem\u00e9lyes \u00fczenetek adatb\u00e1zis\u00e1t a null\u00e1r\u00f3l, \u00e9s migr\u00e1ljunk r\u00e1 \u00e1ll\u00e1sid\u0151 n\u00e9lk\u00fcl<\/a><\/noindex> \/ \u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u0415\u0433\u043e\u0440\u043e\u0432<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\/2843.html?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">Hal\u00e1l akci\u00f3s \u00e1ron: hogyan pr\u00f3b\u00e1lt\u00e1k a Yandex.P\u00e9nzek felp\u00f6rgetni magukat a Black Friday-re \u00e9s meg\u00e1llni<\/a><\/noindex> \/ \u0410\u043d\u0430\u0442\u043e\u043b\u0438\u0439 \u041f\u043b\u0430\u0441\u043a\u043e\u0432\u0441\u043a\u0438\u0439<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\/3003.html?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">Hibat\u0171r\u0151 architekt\u00fara a bank front\u00e1lis rendszer\u00e9ben<\/a><\/noindex> \/ \u0420\u043e\u043c\u0430\u043d \u0428\u0435\u0445\u043e\u0432\u0446\u043e\u0432, \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u0413\u0440\u043e\u043c\u0430\u0442\u0447\u0438\u043a\u043e\u0432<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\/2948.html?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">A fizet\u00e9si rendszer architekt\u00far\u00e1ja: szinte enterprise<\/a><\/noindex> \/ \u0424\u0438\u043b\u0438\u043f\u043f \u0414\u0435\u043b\u044c\u0433\u044f\u0434\u043e<\/li>\n<\/ul>\n<p>\nN\u00e9h\u00e1ny ilyen anyagot online kurzusunkhoz is felhaszn\u00e1lunk, amely a magas terhel\u00e9s\u0171 rendszer fejleszt\u00e9s\u00e9r\u0151l sz\u00f3l. <noindex><a rel=\"nofollow\" href=\"http:\/\/highload.guide\/?utm_source=habr&amp;utm_medium=media&amp;utm_campaign=past.articles&amp;utm_content=common\">HighLoad.Guide<\/a><\/noindex> \u2014 egy speci\u00e1lisan \u00f6sszev\u00e1logatott levelek, cikkek, anyagok, vide\u00f3k sorozata. M\u00e1r most t\u00f6bb mint 30 egyedi anyag tal\u00e1lhat\u00f3 a tank\u00f6nyv\u00fcnkben. Csatlakozzon!\n<\/p><\/blockquote>\n<p>Forr\u00e1s: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/oleg-bunin\/blog\/340976\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0410\u0440\u0442\u0435\u043c \u0414\u0435\u043d\u0438\u0441\u043e\u0432 ( bo0rsh201, Badoo) Badoo \u2014 \u044d\u0442\u043e \u043a\u0440\u0443\u043f\u043d\u0435\u0439\u0448\u0438\u0439 \u0432 \u043c\u0438\u0440\u0435 \u0441\u0430\u0439\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 330 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u043c\u0438\u0440\u0443. \u041d\u043e, \u0447\u0442\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430, \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0445\u0440\u0430\u043d\u0438\u043c \u043e\u043a\u043e\u043b\u043e 3 \u043f\u0435\u0442\u0430\u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439. \u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u043d\u044c \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043b\u0438\u0432\u0430\u044e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 3,5 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u043e\u0432 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-55009","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0410\u0440\u0442\u0435\u043c \u0414\u0435\u043d\u0438\u0441\u043e\u0432 (\" \/>\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-hraneniya-i-otdachi-fotografij-v-badoo\" \/>\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 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0447\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0432 Badoo | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0410\u0440\u0442\u0435\u043c \u0414\u0435\u043d\u0438\u0441\u043e\u0432 (\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo\" \/>\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-01-09T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:03:04+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\udd47A fot\u00f3k t\u00e1rol\u00e1si \u00e9s megjelen\u00edt\u00e9si architekt\u00far\u00e1ja a Badoo-n | ProHoster","description":"Artem Denisov (","canonical_url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","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 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0434\u0430\u0447\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 \u0432 Badoo | ProHoster","og:description":"\u0410\u0440\u0442\u0435\u043c \u0414\u0435\u043d\u0438\u0441\u043e\u0432 (","og:url":"https:\/\/prohoster.info\/hu\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","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-01-09T21:00:00+00:00","article:modified_time":"2020-02-18T11:03:04+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"55009","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":"2026-01-24 13:30:15","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:53:49","updated":"2026-01-24 13:30:15","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\/55009","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=55009"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/posts\/55009\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/media?parent=55009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/categories?post=55009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hu\/wp-json\/wp\/v2\/tags?post=55009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}