{"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\/sq\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","title":{"rendered":"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" 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>\nBadoo \u00ebsht\u00eb platforma m\u00eb e madhe p\u00ebr takime n\u00eb bot\u00eb. Aktualisht, kemi rreth 330 milion p\u00ebrdorues t\u00eb regjistruar n\u00eb mbar\u00eb bot\u00ebn. Por, \u00e7ka \u00ebsht\u00eb edhe m\u00eb e r\u00ebnd\u00ebsishme n\u00eb kontekstin e diskutimit ton\u00eb sot, \u00ebsht\u00eb se ruajm\u00eb rreth 3 petabyte fotografish nga p\u00ebrdoruesit. \u00c7do dit\u00eb, p\u00ebrdoruesit tan\u00eb ngarkojn\u00eb rreth 3.5 milion fotografi t\u00eb reja dhe ngarkesa e leximit arrin rreth <b>80 mij\u00eb k\u00ebrkesa n\u00eb sekond\u00eb<\/b>. Kjo \u00ebsht\u00eb mjaft p\u00ebr back-end-in ton\u00eb dhe ndonj\u00ebher\u00eb na hasim n\u00eb disa v\u00ebshtir\u00ebsi.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/4e4690f9b0d95bd76fbbc1cd6805c26c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDo flas p\u00ebr dizajnin e k\u00ebtij sistemi, i cili ruan dhe ofron fotografi n\u00eb p\u00ebrgjith\u00ebsi, dhe do e shpjegoj nga k\u00ebndv\u00ebshtrimi i zhvilluesit. Mund t\u00eb ket\u00eb nj\u00eb retrospektiv\u00eb t\u00eb shkurt\u00ebr mbi zhvillimin e saj, ku do t\u00eb p\u00ebrmend disa pika kryesore, por do flas m\u00eb n\u00eb detaje vet\u00ebm p\u00ebr zgjidhjet q\u00eb po p\u00ebrdorim aktualisht.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nTani le t\u00eb fillojm\u00eb.<\/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=\"Luaj videon\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><br \/>\nSi\u00e7 e thash\u00eb, kjo do t\u00eb jet\u00eb nj\u00eb retrospektiv\u00eb, dhe p\u00ebr ta filluar nga di\u00e7ka, le t\u00eb marrim nj\u00eb shembull t\u00eb thjesht\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/22b9627cda7ccadd9869b64e9d043d89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKemi nj\u00eb detyr\u00eb t\u00eb p\u00ebrgjithshme; na nevojitet t\u00eb pranojm\u00eb, ruajm\u00eb dhe ofrojm\u00eb fotografit\u00eb e p\u00ebrdoruesve. N\u00eb k\u00ebt\u00eb form\u00eb, detyra \u00ebsht\u00eb e p\u00ebrgjithshme, ne mund t\u00eb p\u00ebrdorim gjith\u00e7ka:<\/p>\n<ul>\n<li>storage moderne n\u00eb cloud,<\/li>\n<li>\u00e7do zgjidhje t\u00eb \u00e7ertifikuar, t\u00eb cilat ka shum\u00eb tani;<\/li>\n<li>mund t\u00eb vendosim disa makina n\u00eb qendr\u00ebn ton\u00eb t\u00eb t\u00eb dh\u00ebnave dhe t'i pajisim me disqe t\u00eb m\u00ebdhenj p\u00ebr t\u00eb ruajtur fotografit\u00eb aty.<\/li>\n<\/ul>\n<p>\nBadoo historikisht ka qen\u00eb \u2014 dhe tani, ashtu si n\u00eb at\u00eb koh\u00eb kur gjith\u00e7ka po fillonte \u2014 n\u00eb serverat tan\u00eb t\u00eb pronarit, brenda qendrave tona t\u00eb t\u00eb dh\u00ebnave. Prandaj, ky opsion ishte optimal p\u00ebr ne.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/9434fbabada15670297c551066ad7e71.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThjesht mor\u00ebm disa makina, i quajt\u00ebm \"fotografit\u00eb\", dhe formuam nj\u00eb klaster q\u00eb ruan fotografit\u00eb. Por, duket se di\u00e7ka i mungon. P\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb t\u00eb funksionoj\u00eb, duhet dikush t\u00eb p\u00ebrcaktoj\u00eb se n\u00eb cilin server do ruajm\u00eb cilat fotografi. Dhe k\u00ebtu nuk kemi nevoj\u00eb t\u00eb rihapim Amerik\u00ebn.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/36258e7107fd8c60f7e9e563a2cb681c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nShtojm\u00eb n\u00eb storage-in ton\u00eb me informacionin e p\u00ebrdoruesve nj\u00eb fush\u00eb t\u00eb re. Kjo do t\u00eb jet\u00eb \u00e7el\u00ebsi i sharding-ut. N\u00eb rastin ton\u00eb, e quajt\u00ebm place_id, dhe ky id i vendit tregon vendin ku ruhet fotografia e p\u00ebrdoruesit. Ne krijojm\u00eb harta.<\/p>\n<p>N\u00eb faz\u00ebn fillestare, mund ta b\u00ebjm\u00eb madje edhe me duar \u2014 themi se fotografia e k\u00ebtij p\u00ebrdoruesi me k\u00ebt\u00eb vend do t\u00eb p\u00ebrfundoj\u00eb n\u00eb k\u00ebt\u00eb server. Fal\u00eb k\u00ebsaj harte, ne gjithmon\u00eb e dim\u00eb ku duhet ta ruajm\u00eb fotografin\u00eb kur p\u00ebrdoruesi e ngarkon, dhe e dim\u00eb se nga ku duhet ta ofrojm\u00eb.<\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb skem\u00eb shum\u00eb e thjesht\u00eb, por ka disa avantazhe t\u00eb r\u00ebnd\u00ebsishme. E para, \u00ebsht\u00eb e thjesht\u00eb, si\u00e7 e thash\u00eb, dhe e dyta \u00ebsht\u00eb se me k\u00ebt\u00eb qasje ne mund t\u00eb rritemi leht\u00ebsisht n\u00eb m\u00ebnyr\u00eb horizontale, thjesht duke shtuar makina t\u00eb reja dhe duke i shtuar ato n\u00eb hart\u00eb. Nuk ka nevoj\u00eb p\u00ebr asgj\u00eb m\u00eb shum\u00eb.<\/p>\n<p>K\u00ebshtu ishte p\u00ebr nj\u00eb koh\u00eb t\u00eb gjat\u00eb p\u00ebr ne.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/3effb442702f162f7bad9c18ec54392e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIshte diku n\u00eb vitin 2009. Shtonim makina, po sillnim...<\/p>\n<p>Dhe n\u00eb nj\u00eb moment filluam t\u00eb v\u00ebzim se kjo skem\u00eb kishte disa disavantazhe. \u00c7far\u00eb disavantazhesh?<\/p>\n<p>E para, \u00ebsht\u00eb kapaciteti i kufizuar. N\u00eb nj\u00eb server fizik, nuk mund t\u00eb vendosim aq shum\u00eb disqe t\u00eb ngurt\u00eb sa do t\u00eb donim. Kjo, me kalimin e koh\u00ebs dhe rritjen e dataset-it, u b\u00eb nj\u00eb problem.<\/p>\n<p>E dyta. Kjo \u00ebsht\u00eb nj\u00eb konfigurim i pazakonsh\u00ebm p\u00ebr makinat, pasi t\u00eb tilla makina \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb rip\u00ebrdoren n\u00eb klastere t\u00eb tjera, jan\u00eb mjaft specifike, dmth, duhet t\u00eb jen\u00eb t\u00eb dob\u00ebta n\u00eb performanc\u00eb, por po ashtu me disqe t\u00eb m\u00ebdhenj.<\/p>\n<p>Kjo ishte situata n\u00eb vitin 2009, por megjithat\u00eb k\u00ebto k\u00ebrkesa jan\u00eb t\u00eb r\u00ebnd\u00ebsishme edhe sot. Ne kemi nj\u00eb retrospektiv\u00eb, prandaj n\u00eb vitin 2009, gjith\u00e7ka ishte keq lidhur me k\u00ebto.<\/p>\n<p>Dhe pika e fundit \u2014 \u00ebsht\u00eb \u00e7mimi.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/e49010eaeab139199d8fe010caa65bf0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c7mimi at\u00ebher\u00eb ishte mjaft i lart\u00eb, dhe na duhej t\u00eb k\u00ebrkonim disa alternativa. Duhet t\u00eb gjendeshim m\u00eb mir\u00eb me menaxhimin e hap\u00ebsir\u00ebs n\u00eb qendrat e t\u00eb dh\u00ebnave dhe po ashtu me server\u00ebt fizik\u00eb ku ruhej gjith\u00e7ka. Ingjiner\u00ebt tan\u00eb sistemik\u00eb filluan nj\u00eb hulumtim t\u00eb madh, ku rishikuan shum\u00eb opsione t\u00eb ndryshme. Ata shqyrtuan gjithashtu sisteme t\u00eb skedar\u00ebve t\u00eb klasterit, si PolyCeph dhe Lustre. Kishte probleme me performanc\u00ebn dhe ishte shum\u00eb e v\u00ebshtir\u00eb p\u00ebr t'u operuar. Hoq\u00ebn dor\u00eb. Provuan t\u00eb lidhin t\u00eb gjith\u00eb dataset-in p\u00ebrmes NFS n\u00eb \u00e7do makin\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb ta zgjidhnin k\u00ebt\u00eb \u00e7\u00ebshtje. Leximi gjithashtu doli i v\u00ebshtir\u00eb; provuan zgjidhje t\u00eb ndryshme nga ofrues t\u00eb ndrysh\u00ebm.<\/p>\n<p>N\u00eb p\u00ebrfundim, ne vendos\u00ebm q\u00eb t\u00eb fillonim t\u00eb p\u00ebrdornim ashtuquajturin Storage Area Network.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/e99402fa641f3bd5fc8d57a9f8995642.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebto jan\u00eb SHD shum\u00eb t\u00eb m\u00ebdha, t\u00eb cilat jan\u00eb t\u00eb orientuara p\u00ebr t\u00eb ruajtur sasi t\u00eb m\u00ebdha t\u00eb t\u00eb dh\u00ebnave. Ato p\u00ebrb\u00ebjn\u00eb rafte me disqe q\u00eb jan\u00eb montuar n\u00eb makinat p\u00ebrfundimtare t\u00eb dh\u00ebnies p\u00ebrmes optik\u00ebs. K\u00ebshtu, ne kemi nj\u00eb grup t\u00eb caktuar makinash, mjaft t\u00eb vog\u00ebl, dhe k\u00ebto SHD, t\u00eb cilat jan\u00eb transparente p\u00ebr logjik\u00ebn ton\u00eb t\u00eb dh\u00ebnies, pra p\u00ebr nginx-in ton\u00eb ose p\u00ebr ndonj\u00eb tjet\u00ebr, sh\u00ebrbejn\u00eb k\u00ebrkesat p\u00ebr k\u00ebto fotografi.<\/p>\n<p>Ky zgjidhje kishte p\u00ebrpar\u00ebsi evidente. Ky \u00ebsht\u00eb SHD. Ai \u00ebsht\u00eb orientuar p\u00ebr t\u00eb ruajtur fotografi. Kjo rezulton m\u00eb e lir\u00eb se sa t\u00eb vendosim thjesht makina me disqe t\u00eb ngurt\u00eb.<\/p>\n<p>P\u00ebrfitimi i dyt\u00eb. <\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/7fd2e7d629cc239096b14c68be5f76bf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb se kapaciteti \u00ebsht\u00eb rritur ndjesh\u00ebm, pra ne mund t\u00eb ruajm\u00eb shum\u00eb m\u00eb tep\u00ebr storage me nj\u00eb volum shum\u00eb m\u00eb t\u00eb vog\u00ebl.<\/p>\n<p>Por pati dhe disavantazhe q\u00eb u zbuluan mjaft shpejt. Me rritjen e numrit t\u00eb p\u00ebrdoruesve dhe ngarkes\u00ebs n\u00eb k\u00ebt\u00eb sistem, filluan t\u00eb shfaqen probleme me performanc\u00ebn. Dhe problemi \u00ebsht\u00eb mjaft i qart\u00eb \u2014 \u00e7do SHD, e destinuar p\u00ebr t\u00eb ruajtur shum\u00eb fotografi n\u00eb nj\u00eb volum t\u00eb vog\u00ebl, zakonisht vuan nga nj\u00eb lexim intensiv. Kjo \u00ebsht\u00eb n\u00eb t\u00eb v\u00ebrtet\u00eb e v\u00ebrtet\u00eb p\u00ebr \u00e7do storage n\u00eb cloud, dhe \u00e7do gj\u00eb tjet\u00ebr. Aktualisht nuk kemi nj\u00eb storage ideal, q\u00eb do t\u00eb ishte pafund\u00ebsisht i zgjeruesh\u00ebm, ku mund t\u00eb fusnim gjith\u00e7ka dhe ai do t\u00eb p\u00ebrballonte shum\u00eb mir\u00eb leximet, sidomos leximet rast\u00ebsore.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/566e836e2fe13a2a3d040ae3fa865d6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi\u00e7 ndodh me fotografit\u00eb tona, sepse fotografit\u00eb k\u00ebrkohen n\u00eb m\u00ebnyr\u00eb t\u00eb paq\u00ebndrueshme dhe kjo ndikojn\u00eb shum\u00eb n\u00eb performanc\u00ebn e tyre.<\/p>\n<p>Dhe deri n\u00eb sot, n\u00ebse ne kemi m\u00eb shum\u00eb se 500 RPS p\u00ebr fotografi n\u00eb makin\u00eb, me t\u00eb cil\u00ebn lidhet storage, fillojn\u00eb problemet. Dhe kjo ishte mjaft e keqe p\u00ebr ne, sepse numri i p\u00ebrdoruesve po rritet, gjith\u00e7ka duhet t\u00eb b\u00ebhet vet\u00ebm m\u00eb keq. Duhet ta optimizojm\u00eb k\u00ebt\u00eb ndonj\u00ebher\u00eb.<\/p>\n<p>P\u00ebr t\u00eb optimizuar, n\u00eb at\u00eb koh\u00eb ne vendos\u00ebm, mjaft qart\u00eb, t\u00eb shohim profilin e ngarkes\u00ebs \u2014 \u00e7far\u00eb po ndodh, \u00e7far\u00eb duhet t\u00eb optimizohet.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/d67310e6b90c4ee1337065790576c9a0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe k\u00ebtu gjith\u00e7ka punon n\u00eb favorin ton\u00eb.<\/p>\n<p>Un\u00eb n\u00eb sliden e par\u00eb kam th\u00ebn\u00eb: ne kemi 80 mij\u00eb k\u00ebrkesa n\u00eb sekond\u00eb p\u00ebr lexim me vet\u00ebm 3.5 milion\u00eb uploads n\u00eb dit\u00eb. Pra, kjo \u00ebsht\u00eb nj\u00eb diferenc\u00eb prej tre rendesh. Mjaft e qart\u00eb se duhet t\u00eb optimizojm\u00eb leximin dhe \u00ebsht\u00eb pothuajse e qart\u00eb se si.<\/p>\n<p>Ka nj\u00eb moment tjet\u00ebr t\u00eb vog\u00ebl. Speficika e sh\u00ebrbimit \u00ebsht\u00eb e till\u00eb q\u00eb p\u00ebrdoruesi regjistrohet, ngarkon nj\u00eb fotografi, pastaj fillon t\u00eb shikoj\u00eb aktivisht t\u00eb tjer\u00ebt, t'i p\u00eblqej\u00eb ata, ai shfaqet aktivisht p\u00ebr t\u00eb tjer\u00ebt. Pastaj ai gjen nj\u00eb \u00e7ift ose jo, si do dal\u00eb, dhe p\u00ebr nj\u00eb koh\u00eb t\u00eb caktuar ndalon s\u00eb p\u00ebrdoruri sh\u00ebrbimin. N\u00eb k\u00ebt\u00eb moment, kur ai p\u00ebrdor, fotografit\u00eb e tij jan\u00eb shum\u00eb t\u00eb nxehta \u2014 ato k\u00ebrkohen nga shum\u00eb njer\u00ebz. Pasi ai ndalon, ai shpejt r\u00ebnkon nga shfaqja intensive p\u00ebr t\u00eb tjer\u00ebt si\u00e7 b\u00ebnte m\u00eb par\u00eb, dhe fotografit\u00eb e tij pothuajse nuk k\u00ebrkohen.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/dcc7e306055d8f2b0895f24679bfc3e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPra, kemi nj\u00eb dataset shum\u00eb t\u00eb vog\u00ebl t\u00eb nxeht\u00eb. Por, p\u00ebrkundrazi, ka shum\u00eb k\u00ebrkesa p\u00ebr t\u00eb. Nj\u00eb solucion i qart\u00eb k\u00ebtu \u00ebsht\u00eb t\u00eb shtojm\u00eb nj\u00eb cache.<\/p>\n<p>Cache me LRU do t\u00eb zgjidhte t\u00eb gjitha problemet tona. \u00c7far\u00eb b\u00ebjm\u00eb ne?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/2bd0c88a97d928f386db21549fc02500.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe shtojm\u00eb para klasterit ton\u00eb t\u00eb madh me storage nj\u00eb tjet\u00ebr relativisht t\u00eb vog\u00ebl, i cili quhet fotokash\u00eb (photoscache). Kjo, n\u00eb thelb, \u00ebsht\u00eb thjesht nj\u00eb proxy caches.<\/p>\n<p>Si funksionon nga brenda? Ky \u00ebsht\u00eb p\u00ebrdoruesi yn\u00eb, ky \u00ebsht\u00eb storage. T\u00eb gjitha, si m\u00eb par\u00eb. \u00c7far\u00eb shtojm\u00eb nd\u00ebrmjet tyre?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/7b7b5f102f1c012b2aef8f02ec731fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb thjesht nj\u00eb makin\u00eb me nj\u00eb disk lokal fizik, q\u00eb \u00ebsht\u00eb i shpejt\u00eb. Ky \u00ebsht\u00eb nj\u00eb SSD, p\u00ebr shembull. Dhe n\u00eb k\u00ebt\u00eb disk ruhet nj\u00eb cache lokal.<\/p>\n<p>Si duket kjo? P\u00ebrdoruesi d\u00ebrgon nj\u00eb k\u00ebrkes\u00eb p\u00ebr nj\u00eb fotografi. NGINX e k\u00ebrkon at\u00eb fillimisht n\u00eb cache lokal. N\u00ebse nuk e gjen, at\u00ebher\u00eb b\u00ebn thjesht proxy_pass n\u00eb storage ton\u00eb, shkarkon fotografin\u00eb nga aty dhe ia jep p\u00ebrdoruesit.<\/p>\n<p>Por \u00ebsht\u00eb mjaft e thjesht\u00eb dhe e paqart\u00eb se \u00e7far\u00eb ndodh brenda. Funksionon m\u00eb para n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/46be24df171d1008e2a9099b7e4c9be6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCache \u00ebsht\u00eb ndar\u00eb logjikisht n\u00eb tri nivele. Kur flas p\u00ebr \"tri nivele\", nuk do t\u00eb thot\u00eb se ndonj\u00ebher\u00eb ka nj\u00eb sistem t\u00eb nd\u00ebrlikuar. Jo, kjo \u00ebsht\u00eb thjesht tre direktori n\u00eb sistemin e skedar\u00ebve:<\/p>\n<ol>\n<li>Ky \u00ebsht\u00eb bufferi, ku shkojn\u00eb fotografit\u00eb e sapo ngarkuara nga proxy.<\/li>\n<li>Ky \u00ebsht\u00eb cache i ngroht\u00eb, ku ruhen fotografit\u00eb q\u00eb k\u00ebrkohen aktivisht tani.<\/li>\n<li>Dhe ky \u00ebsht\u00eb cache i ftoht\u00eb, ku fotografit\u00eb gradualisht \u00e7ohen nga ai i ngrohti, kur po i vijn\u00eb m\u00eb pak k\u00ebrkesa.<\/li>\n<\/ol>\n<p>\nP\u00ebr ta b\u00ebr\u00eb k\u00ebt\u00eb t\u00eb funksionoj\u00eb, duhet t\u00eb menaxhojm\u00eb n\u00eb nj\u00ebfar\u00eb m\u00ebnyre k\u00ebt\u00eb cache, duhet t\u00eb zhvendosim fotografit\u00eb atje dhe tjer\u00eb. Ky \u00ebsht\u00eb nj\u00eb proces gjithashtu shum\u00eb primitiv.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/9b16fe3e99a5f88f06169f6e5eedf2b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNginx thjesht shkruan n\u00eb RAMDisk access.log p\u00ebr \u00e7do k\u00ebrkes\u00eb, ku specifikohet rruga p\u00ebr fotografin\u00eb q\u00eb po sh\u00ebrben aktualisht (rruga relative, natyrisht) dhe se cila seksion e ka sh\u00ebrbyer. D.m.th., aty mund t\u00eb ket\u00eb nj\u00eb sh\u00ebnim si 'foto 1' dhe m\u00eb tej ose buferi, ose cache-i i ngroht\u00eb, ose cache-i i ftoht\u00eb, ose proxy.<\/p>\n<p>Var\u00ebsisht nga kjo, na nevojitet nj\u00eb vendim p\u00ebr \u00e7far\u00eb t\u00eb b\u00ebjm\u00eb me fotografin\u00eb.<\/p>\n<p>N\u00eb secil\u00ebn makin\u00eb kemi nj\u00eb demon t\u00eb vog\u00ebl q\u00eb vazhdimisht lexon k\u00ebt\u00eb log dhe ruan statistik\u00ebn p\u00ebr p\u00ebrdorimin e fotografive t\u00eb ndryshme n\u00eb memorien e tij.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/0dceda5e5ff432d1609520f0c152f152.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAi thjesht mbledh aty, mban num\u00ebruesit dhe her\u00eb pas here b\u00ebn k\u00ebt\u00eb. Fotografi t\u00eb k\u00ebrkuara aktivisht, p\u00ebr t\u00eb cilat vijn\u00eb shum\u00eb k\u00ebrkesa, ai i zhvendos n\u00eb cache-in e ngroht\u00eb, pavar\u00ebsisht se ku ndodhen.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/941c13ecfea88372f3a7eb62d81b0c4e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFotografit\u00eb q\u00eb k\u00ebrkohen rrall\u00eb dhe kan\u00eb filluar t\u00eb k\u00ebrkohen m\u00eb rrall\u00eb, ai gradualisht i d\u00ebbon nga cache-i i ngroht\u00eb n\u00eb at\u00eb t\u00eb ftoht\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/a07235246995ad2fa4e6aeccae23a629.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe kur kemi vend t\u00eb mbaruar n\u00eb cache, thjesht fillojm\u00eb t\u00eb fshijm\u00eb gjith\u00e7ka nga cache-i i ftoht\u00eb pa ndonj\u00eb p\u00ebrzgjedhje. Dhe kjo, p\u00ebr t\u00eb qen\u00eb e sakt\u00eb, funksionon shum\u00eb mir\u00eb.<\/p>\n<p>P\u00ebr sigurimin q\u00eb fotografia ruhet menj\u00ebher\u00eb kur b\u00ebhet proxy n\u00eb bufer, ne p\u00ebrdorim direktiv\u00ebn proxy_store dhe buferi \u00ebsht\u00eb gjithashtu RAMDisk, dometh\u00ebn\u00eb p\u00ebr p\u00ebrdoruesin funksionon shum\u00eb shpejt. Kjo \u00ebsht\u00eb ajo q\u00eb lidhet me brend\u00ebsin\u00eb e serverit q\u00eb cache.<\/p>\n<p>Ka mbetur \u00e7\u00ebshtja se si t\u00eb shp\u00ebrndajm\u00eb k\u00ebrkesat p\u00ebr k\u00ebto servera.<\/p>\n<p>Supozoni se kemi nj\u00eb kluster me p\u00ebrb\u00ebrje nga nj\u00ebzet makina storage dhe tre servera q\u00eb cache (ka ndodhur k\u00ebshtu).<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/6bc970b687701f3b6d57e153e3abed18.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa nevojitet nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb p\u00ebrcaktuar se cilat k\u00ebrkesa shkojn\u00eb pas cilave fotografi dhe ku duhet t\u00eb zbarkojn\u00eb.<\/p>\n<p>M\u00ebnyra m\u00eb e thjesht\u00eb \u2014 \u00ebsht\u00eb Round Robin. Apo ta b\u00ebjm\u00eb k\u00ebt\u00eb rast\u00ebsisht?<\/p>\n<p>Kjo, natyrisht, ka disa disavantazhe, sepse do t\u00eb p\u00ebrdorim shum\u00eb joefikasht cache-in n\u00eb nj\u00eb situat\u00eb t\u00eb till\u00eb. K\u00ebrkesat do t\u00eb zbarkojn\u00eb n\u00eb disa makina rast\u00ebsore: k\u00ebtu \u00ebsht\u00eb cache-uar, n\u00eb p\u00ebrkrah nuk ka m\u00eb. Dhe gjith\u00e7ka do t\u00eb funksionoj\u00eb, n\u00ebse ndodhi, shum\u00eb keq. Edhe kur numri i makinave n\u00eb kluster \u00ebsht\u00eb i vog\u00ebl.<\/p>\n<p>Na nevojitet ndonj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb p\u00ebrcaktuar qart\u00eb se n\u00eb cilin server duhet t\u00eb zbarkoj\u00eb cila k\u00ebrkes\u00eb.<\/p>\n<p>Ka nj\u00eb m\u00ebnyr\u00eb banale. Ne marrim hash nga URL-ja ose hash nga \u00e7el\u00ebsi yn\u00eb t\u00eb sharding, i cili \u00ebsht\u00eb n\u00eb URL, dhe e ndajm\u00eb at\u00eb me numrin e server\u00ebve. A do t\u00eb funksionoj\u00eb? Po.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/794a82ac1268b651ab936f0225b802a2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nD.m.th., kemi nj\u00eb k\u00ebrkes\u00eb 100% p\u00ebr nj\u00eb 'example_url' gjithmon\u00eb do t\u00eb zbarkoj\u00eb n\u00eb serverin me indeks '2', dhe cache do t\u00eb shfryt\u00ebzohet vazhdimisht sa m\u00eb mir\u00eb.<\/p>\n<p>Por lind problemi me reshardoing n\u00eb nj\u00eb skem\u00eb t\u00eb till\u00eb. Resharding \u2014 kam parasysh ndryshimin e numrit t\u00eb server\u00ebve.<\/p>\n<p>T\u00eb supozosh se klustra jon\u00eb e caching ka pushuar s\u00eb funksionuari dhe vendos\u00ebm t\u00eb shtojm\u00eb nj\u00eb makin\u00eb tjet\u00ebr.<\/p>\n<p>E shtojm\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/5f2fcba4c4f267c069811c3677bd0213.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTani ndarja e gjitha b\u00ebhet jo me tre, por me kat\u00ebr. N\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb, pothuajse t\u00eb gjitha \u00e7el\u00ebsat q\u00eb kishim m\u00eb par\u00eb, pothuajse t\u00eb gjitha URL-t\u00eb tani jetojn\u00eb n\u00eb server\u00eb t\u00eb ndrysh\u00ebm. I gjith\u00eb cache-u u invalidua menj\u00ebher\u00eb. T\u00eb gjitha k\u00ebrkesat e furishme shkaktuan kaos te klusteri yn\u00eb storage, ai u braktis dhe p\u00ebrdoruesit e pak\u00ebnaqur. Kjo nuk d\u00ebshirohet.<\/p>\n<p>Ky variant gjithashtu nuk na p\u00ebrshtatet.<\/p>\n<p>Pra, \u00e7far\u00eb duhet t\u00eb b\u00ebjm\u00eb? Duhet t\u00eb p\u00ebrdorim disa m\u00ebnyra efektive p\u00ebr t\u00eb shfryt\u00ebzuar cache-in, duke zbarkuar vazhdimisht nj\u00eb k\u00ebrkes\u00eb n\u00eb t\u00eb nj\u00ebjtin server, por duke qen\u00eb t\u00eb q\u00ebndruesh\u00ebm ndaj reshardimit. Dhe nj\u00eb zgjidhje e till\u00eb ekziston, nuk \u00ebsht\u00eb aq e komplikuar. Quhet hashing i q\u00ebndruesh\u00ebm.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/1380758686274df9755a7ebf7d1c8753.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi duket kjo?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/44f97abfac46fa9f361055548819e8a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe marrim ndonj\u00eb funksion nga \u00e7el\u00ebsi i sharding dhe e shtrijm\u00eb t\u00eb gjitha vlerat e saj rreth nj\u00eb rrethi. D.m.th., n\u00eb pik\u00ebn 0 ne kemi vlerat e saj minimale dhe maksimale t\u00eb sigluara. M\u00eb pas, ne vendosim n\u00eb t\u00eb nj\u00ebjtin rreth t\u00eb gjith\u00eb server\u00ebt tan\u00eb n\u00eb k\u00ebt\u00eb m\u00ebnyr\u00eb:<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/d470ec615a789913a6baa2726b05acea.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c7do server p\u00ebrcaktohet nga nj\u00eb pik\u00eb, dhe sektori q\u00eb shkon deri tek ai n\u00eb drejtim t\u00eb akrep\u00ebve \u00ebsht\u00eb, gjithmon\u00eb, sh\u00ebrbyer nga ky host. Kur na vijn\u00eb k\u00ebrkesat, ne menj\u00ebher\u00eb shohim se, p\u00ebr shembull, k\u00ebrkesa A \u2014 ka nj\u00eb hash t\u00eb till\u00eb \u2014 dhe sh\u00ebrbehet nga serveri 2. K\u00ebrkesa B \u2014 nga serveri 3. Dhe k\u00ebshtu me radh\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/fcdbd1caa9f1162cf02e8b0a1c79cb74.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c7far\u00eb ndodh n\u00eb k\u00ebt\u00eb situat\u00eb gjat\u00eb reshardimit?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/7386cda826e9419d5f8a9a0d6d6703c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe nuk invalidojm\u00eb t\u00eb gjith\u00eb cache-in, si m\u00eb par\u00eb, dhe nuk zhvendosim t\u00eb gjith\u00eb \u00e7el\u00ebsat, por zhvendosim secilin sektor n\u00eb nj\u00eb distanc\u00eb t\u00eb vog\u00ebl n\u00eb at\u00eb m\u00ebnyr\u00eb, q\u00eb n\u00eb vendin e lir\u00eb, si\u00e7 thon\u00eb, t\u00eb vendoset serveri yn\u00eb i gjasht\u00eb, q\u00eb duam ta shtojm\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/8680e0cf023ce911b4d162e9102c0545.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSigurisht, n\u00eb nj\u00eb situat\u00eb t\u00eb till\u00eb \u00e7el\u00ebsat gjithashtu l\u00ebvizin. Por ata l\u00ebvizin shum\u00eb m\u00eb pak se m\u00eb par\u00eb. Dhe ne shohim se dy \u00e7el\u00ebsat tan\u00eb t\u00eb par\u00eb kan\u00eb mbetur n\u00eb server\u00ebt e tyre, nd\u00ebrsa \u00ebsht\u00eb ndryshuar vet\u00ebm serveri q\u00eb cache p\u00ebr \u00e7el\u00ebsin e fundit. Kjo funksionon mjaft efektivisht, dhe n\u00ebse shtoni server\u00eb t\u00eb rinj gradualisht, nuk ka ndonj\u00eb problem t\u00eb madh k\u00ebtu. Ju pak nga pak shtoni, prisni q\u00eb cache t\u00eb mbushet s\u00ebrish dhe gjith\u00e7ka funksionon mir\u00eb.<\/p>\n<p>Nj\u00eb pyetje mbetet e hapur n\u00eb rastet e refuzimit. Le t\u00eb themi se kemi ndonj\u00eb makin\u00eb q\u00eb ka dal\u00eb jasht\u00eb funksionit.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/8e3301af782ce8983716c4bc9add79a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe nuk do t\u00eb donim shum\u00eb t\u00eb rinovonim k\u00ebt\u00eb hart\u00eb, t\u00eb inaktivizonim nj\u00eb pjes\u00eb t\u00eb caches dhe k\u00ebshtu me radh\u00eb, n\u00ebse, p\u00ebr shembull, makina u ributua, dhe ne duam t\u00eb sh\u00ebrbejm\u00eb ndonj\u00eb m\u00ebnyr\u00eb k\u00ebrkesat. Thjesht mbajm\u00eb nj\u00eb fotokash rezerv\u00eb n\u00eb \u00e7do vend, e cila sh\u00ebrben si z\u00ebvend\u00ebsim p\u00ebr \u00e7do makin\u00eb q\u00eb aktualisht ka dal\u00eb jasht\u00eb funksionit. N\u00ebse ndonj\u00ebher\u00eb ndonj\u00eb server b\u00ebhet i paaksesuesh\u00ebm, trafiku shkon atje. N\u00eb k\u00ebt\u00eb rast, sigurisht, nuk kemi asnj\u00eb cache atje, dmth. \u00ebsht\u00eb i ftoht\u00eb, por t\u00eb pakt\u00ebn k\u00ebrkesat e p\u00ebrdoruesve p\u00ebrpunohen. N\u00ebse \u00ebsht\u00eb nj\u00eb interval i shkurt\u00ebr, ne e kalojm\u00eb at\u00eb mjaft qet\u00eb. Thjesht ka m\u00eb shum\u00eb ngarkes\u00eb n\u00eb ruajtje. N\u00ebse \u00ebsht\u00eb nj\u00eb interval i gjat\u00eb, at\u00ebher\u00eb ne mund t\u00eb marrim nj\u00eb vendim \u2014 t\u00eb heqim k\u00ebt\u00eb server nga harta apo jo, ose ndoshta ta z\u00ebvend\u00ebsojm\u00eb me nj\u00eb tjet\u00ebr.<\/p>\n<p>Kjo \u00ebsht\u00eb p\u00ebr sistemin e caching. Le t\u00eb shikojm\u00eb rezultatet.<\/p>\n<p>Duket si\u00e7 nuk ka asgj\u00eb t\u00eb komplikuar k\u00ebtu. Por ky m\u00ebnyr\u00eb e menaxhimit t\u00eb caches na dha nj\u00eb hit rate prej rreth 98%. Dmth. nga k\u00ebto 80 mij\u00eb k\u00ebrkesa n\u00eb sekond\u00eb, vet\u00ebm 1600 arrijn\u00eb n\u00eb ruajtje, dhe kjo \u00ebsht\u00eb nj\u00eb ngarkes\u00eb krejt normale, ata e p\u00ebrballojn\u00eb qet\u00eb, gjithmon\u00eb kemi rezerva.<\/p>\n<p>Kemi vendosur k\u00ebta server\u00eb n\u00eb tre qendrat tona t\u00eb t\u00eb dh\u00ebnave dhe kemi marr\u00eb tre pika pranis\u00eb \u2014 Prag\u00eb, Miami dhe Hong Kong.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/64eef492b65a014d8ba3c808b6579b41.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu, ato jan\u00eb m\u00eb shum\u00eb-m\u00eb pak lokalisht t\u00eb vendosura p\u00ebr \u00e7do nj\u00eb nga tregjet tona t\u00eb synuara.<\/p>\n<p>Dhe si nj\u00eb bonus t\u00eb k\u00ebndsh\u00ebm, kemi marr\u00eb k\u00ebt\u00eb proxy caching, ku CPU realisht \u00ebsht\u00eb n\u00eb gjum\u00eb, sepse p\u00ebr dor\u00ebzimin e p\u00ebrmbajtjes, nuk \u00ebsht\u00eb kaq i nevojsh\u00ebm. Dhe atje me NGINX+ Lua kemi realizuar shum\u00eb logjik\u00eb utilitare.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/b65c609df5e1985240d04ee65a3e4f55.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr shembull, mund t\u00eb eksperimentohet me webp apo progressive jpeg (k\u00ebto jan\u00eb formate moderne efektive), t\u00eb shikojm\u00eb se si ndikon n\u00eb trafik, t\u00eb marrim ndonj\u00eb vendim, t\u00eb aktivizojm\u00eb p\u00ebr vende t\u00eb caktuara, etj.; t\u00eb kryejm\u00eb rip\u00ebrmasim dinamik apo prerje fotografish n\u00eb fluks.<\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb p\u00ebrdorim i mir\u00eb, kur p.sh., keni nj\u00eb aplikacion mobil q\u00eb shfaq fotografi, dhe aplikacioni mobil nuk d\u00ebshiron t\u00eb shpenzoj\u00eb CPU-n\u00eb e klientit p\u00ebr t\u00eb k\u00ebrkuar nj\u00eb fotografi t\u00eb madhe dhe pastaj ta rip\u00ebrmasoj\u00eb at\u00eb n\u00eb nj\u00eb madh\u00ebsi t\u00eb caktuar p\u00ebr ta vendosur n\u00eb pamje. Ne mund t\u00eb specifikojm\u00eb thjesht dinamik n\u00eb URL ndonj\u00eb paramet\u00ebr n\u00eb UPort t\u00eb supozuar, dhe fotokasha vet\u00eb do ta rip\u00ebrmasoj\u00eb fotografin\u00eb. N\u00eb p\u00ebrgjith\u00ebsi, ai do t\u00eb zgjedh\u00eb madh\u00ebsin\u00eb q\u00eb e kemi fizikisht n\u00eb disk, sa m\u00eb af\u00ebr q\u00eb t\u00eb jet\u00eb k\u00ebrkes\u00ebs, dhe do ta reduktoj\u00eb n\u00eb koordinatat specifike.<\/p>\n<blockquote><p>P\u00ebr m\u00eb tep\u00ebr, kemi publikuar n\u00eb dispozit\u00eb t\u00eb hapur videot e pes\u00eb viteve t\u00eb fundit t\u00eb konferenc\u00ebs s\u00eb zhvilluesve t\u00eb sistemeve me ngarkes\u00eb t\u00eb lart\u00eb. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/\">HighLoad++<\/a><\/noindex>. Shikoni, studio, ndani dhe abonohuni n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/user\/profyclub\">kanalin YouTube<\/a><\/noindex>.<\/p><\/blockquote>\n<p>\nGjithashtu, ne mund t\u00eb shtojm\u00eb shum\u00eb logjik\u00eb produkti atje. P\u00ebr shembull, mund t\u00eb shtojm\u00eb watermark t\u00eb ndrysh\u00ebm sipas parametrave t\u00eb URL-s\u00eb, mund t\u00eb blurrojm\u00eb fotografit\u00eb, t'i zbehim ose t'i pixelojm\u00eb. Kjo \u00ebsht\u00eb kur duam t\u00eb tregojm\u00eb fotografin\u00eb e nj\u00eb personi, por nuk duam t\u00eb tregojm\u00eb fytyr\u00ebn e tij, funksionon mir\u00eb, \u00ebsht\u00eb realizuar gjith\u00e7ka k\u00ebtu.<\/p>\n<p>\u00c7far\u00eb kemi marr\u00eb? Kemi marr\u00eb tri pika pranis\u00eb, nj\u00eb hit rate t\u00eb mir\u00eb, dhe n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb CPU nuk \u00ebsht\u00eb n\u00eb gjum\u00eb n\u00eb k\u00ebto makina. Ai tani ka ngjallur sigurisht m\u00eb shum\u00eb r\u00ebnd\u00ebsi se m\u00eb par\u00eb. Na nevojitet t\u00eb vendosim makina m\u00eb t\u00eb fuqishme, por ia vlen.<\/p>\n<p>Kjo \u00ebsht\u00eb p\u00ebr dor\u00ebzimin e fotografive. K\u00ebtu gjith\u00e7ka \u00ebsht\u00eb mjaft e qart\u00eb dhe e dukshme. Mendoj se nuk kam zbuluar Amerik\u00ebn, k\u00ebshtu funksionon praktikisht \u00e7do CDN.<\/p>\n<p>Dhe, me siguri, nj\u00eb d\u00ebgjues i sofistikuar mund t\u00eb ket\u00eb nj\u00eb pyetje: pse thjesht t\u00eb mos e nd\u00ebrroni gjith\u00e7ka n\u00eb CDN? Do t\u00eb ishte p\u00ebraf\u00ebrsisht e nj\u00ebjt\u00eb, t\u00eb gjitha CDN moderne e b\u00ebjn\u00eb k\u00ebt\u00eb. Dhe k\u00ebtu jan\u00eb disa arsye.<\/p>\n<p>E para \u2014 jan\u00eb fotografit\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/592c10eb74d46191bfcedec120f68556.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb nj\u00eb nga momentet ky\u00e7e t\u00eb infrastruktur\u00ebs ton\u00eb, dhe na nevojitet sa m\u00eb shum\u00eb kontroll mbi to. N\u00ebse \u00ebsht\u00eb nj\u00eb zgjidhje nga nj\u00eb shit\u00ebs i pal\u00ebs s\u00eb tret\u00eb, dhe ju nuk keni asnj\u00eb pushtet mbi at\u00eb, do t\u00eb jet\u00eb mjaft e v\u00ebshtir\u00eb t\u00eb jetoni me t\u00eb, kur keni nj\u00eb dataset t\u00eb madh, dhe kur keni nj\u00eb fluks shum\u00eb t\u00eb madh t\u00eb k\u00ebrkesave nga p\u00ebrdoruesit.<\/p>\n<p>T\u00eb jap nj\u00eb shembull. Tani, n\u00eb infrastruktur\u00ebn ton\u00eb, mund t\u00eb hyjm\u00eb n\u00eb nj\u00eb makin\u00eb p\u00ebr t\u00eb b\u00ebr\u00eb debugging, n\u00eb rast se ka ndonj\u00eb problem apo ndonj\u00eb zhurm\u00eb nga n\u00ebntoka. Mund t\u00eb shtojm\u00eb grumbullimin e disa metricave q\u00eb na nevojiten, mund t\u00eb eksperimentojm\u00eb dhe t\u00eb shohim si ndikojn\u00eb ato n\u00eb grafikat, etj. Tani po grumbullohet shum\u00eb statistik\u00eb nga ky klaster caching. Dhe ne her\u00eb pas here e shqyrtojm\u00eb at\u00eb dhe studiojm\u00eb me kujdes ndonj\u00eb anomali. N\u00ebse kjo do t\u00eb ishte n\u00eb an\u00ebn e CDN-s\u00eb, do t\u00eb ishte shum\u00eb m\u00eb e v\u00ebshtir\u00eb p\u00ebr ta kontrolluar. Ose, p\u00ebr shembull, n\u00ebse ndodh ndonj\u00eb aksident, ne e dim\u00eb se \u00e7far\u00eb ka ndodhur, dim\u00eb si t\u00eb jetojm\u00eb me t\u00eb dhe si ta p\u00ebrballojm\u00eb. Ky \u00ebsht\u00eb p\u00ebrfundimi i par\u00eb.<\/p>\n<p>P\u00ebrfundimi i dyt\u00eb \u00ebsht\u00eb gjithashtu historik, sepse sistemi \u00ebsht\u00eb duke u zhvilluar prej koh\u00ebsh dhe shum\u00eb k\u00ebrkesa t\u00eb ndryshme biznesi n\u00eb etapa t\u00eb ndryshme kan\u00eb qen\u00eb, dhe nuk gjithmon\u00eb ato p\u00ebrshtaten n\u00eb konceptin e CDN-s\u00eb.<\/p>\n<p>Dhe pika q\u00eb rrjedh nga e kaluara \u2013<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/007cf3aed2f9cc12185fc3865bf9d196.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00cbsht\u00eb se n\u00eb fotoklashet tona kemi shum\u00eb logjik\u00eb specifike, t\u00eb cil\u00ebn nuk mund ta shtojm\u00eb gjithmon\u00eb me porosi. Nuk ka gjasa q\u00eb ndonj\u00eb CDN t\u00eb shtoj\u00eb ndonj\u00eb gj\u00eb t\u00eb personalizuar sipas k\u00ebrkes\u00ebs tuaj. P\u00ebr shembull, n\u00ebse d\u00ebshironi t\u00eb encryptoni URL-t\u00eb, n\u00ebse nuk doni q\u00eb klienti t\u00eb mund t\u00eb ndryshoj\u00eb ndonj\u00eb gj\u00eb. D\u00ebshironi ta ndryshoni URL-n\u00eb n\u00eb server dhe ta encryptoni at\u00eb, dhe pastaj t\u00eb dor\u00ebzoni disa parametra dinamik\u00eb k\u00ebtu.<\/p>\n<p>Cili \u00ebsht\u00eb p\u00ebrfundimi i arsyesh\u00ebm? N\u00eb rastin ton\u00eb, CDN nuk \u00ebsht\u00eb nj\u00eb alternativ\u00eb shum\u00eb e mir\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/cfc2963cca2357cf6b0f63419a4dc436.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPor n\u00eb rastin tuaj, n\u00ebse keni k\u00ebrkesa specifike biznesi, mund ta realizoni t\u00eb gjith\u00eb at\u00eb q\u00eb ju tregova. Dhe kjo do t\u00eb punoj\u00eb shk\u00eblqyer me nj\u00eb profil ngarkese t\u00eb ngjash\u00ebm.<\/p>\n<p>Por n\u00ebse keni nj\u00eb zgjidhje t\u00eb p\u00ebrgjithshme, dhe detyra nuk \u00ebsht\u00eb shum\u00eb e ve\u00e7ant\u00eb, mund t\u00eb p\u00ebrdorni qet\u00ebsisht CDN. Ose n\u00ebse p\u00ebr ju \u00ebsht\u00eb shum\u00eb m\u00eb e r\u00ebnd\u00ebsishme koha dhe burimet, sesa kontrolli.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/b76d25404918a5d0d8bf1d6644c8d873.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe CDN-t\u00eb moderne kan\u00eb pothuajse t\u00eb gjitha ato q\u00eb ju tregova tani. P\u00ebrve\u00e7 ndonj\u00eb funksioni t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p>Kjo ka t\u00eb b\u00ebj\u00eb me dor\u00ebzimin e fotografive.<\/p>\n<p>Le t\u00eb kalojm\u00eb tani pak m\u00eb p\u00ebrpara n\u00eb retrospektiv\u00ebn ton\u00eb dhe t\u00eb flasim p\u00ebr ruajtjen.<\/p>\n<p>Viti 2013 ishte.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/f218bfc899512041967842430c02aa9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nServer\u00ebt caching u shtuan, problemet me performanc\u00ebn u zhduk\u00ebn. Gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull. Dataset-i po rritet. N\u00eb vitin 2013 kishim rreth 80 server\u00eb t\u00eb lidhur me storage-t\u00eb dhe rreth 40 caching n\u00eb \u00e7do Qend\u00ebr t\u00eb Dh\u00ebnash. Kjo \u00ebsht\u00eb rreth 560 terabajt t\u00eb dh\u00ebnash n\u00eb \u00e7do Qend\u00ebr t\u00eb Dh\u00ebnash, pra rreth nj\u00eb petabajt n\u00eb total.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/ef741ba4a9164e6940f55e93dfb46ef0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDhe me rritjen e dataset-it, kostot operacionale filluan t\u00eb rriten n\u00eb m\u00ebnyr\u00eb t\u00eb konsiderueshme. N\u00eb \u00e7far\u00eb shprehej kjo?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/6cf5e489a4e97bc6e26fc6d4d16505b5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb k\u00ebt\u00eb skem\u00eb, e cila \u00ebsht\u00eb vizatuar \u2014 me SAN, me makinat e lidhura dhe cache-t\u00eb \u2014 ka shum\u00eb pika d\u00ebshtimi. N\u00ebse me d\u00ebshtimin e server\u00ebve caching m\u00eb par\u00eb u p\u00ebrball\u00ebm, aty gjith\u00e7ka \u00ebsht\u00eb relativisht e parashikueshme dhe e qart\u00eb, n\u00eb an\u00ebn e storage-it ishte shum\u00eb m\u00eb keq.<\/p>\n<p>S\u00eb pari, vet\u00eb Storage Area Network (SAN) mund t\u00eb d\u00ebshtoj\u00eb.<\/p>\n<p>S\u00eb dyti, ai \u00ebsht\u00eb i lidhur me optik\u00eb n\u00eb makinat p\u00ebrfundimtare. Mund t\u00eb ket\u00eb probleme me kartat optike, switch-at.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/6959b79284c5b1244a70a1d64f191893.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSigurisht, numri i tyre nuk \u00ebsht\u00eb kaq i madh sa ai i SAN-s\u00eb, por megjithat\u00eb, jan\u00eb gjithashtu pika d\u00ebshtimi.<\/p>\n<p>M\u00eb pas, vet\u00eb makina q\u00eb \u00ebsht\u00eb e lidhur me storage-in. Ajo gjithashtu mund t\u00eb d\u00ebshtoj\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/1801cb502663a4de14329a5e67dfed79.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPra, kemi tre pika d\u00ebshtimi.<\/p>\n<p>P\u00ebrve\u00e7 pikave t\u00eb d\u00ebshtimit, kjo \u00ebsht\u00eb nj\u00eb mir\u00ebmbajtje e r\u00ebnd\u00eb e vet\u00eb storage-eve.<\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb sistem i nd\u00ebrlikuar shum\u00ebkomponent, dhe inxhinier\u00ebt sistemik shpesh hasin v\u00ebshtir\u00ebsi me t\u00eb.<\/p>\n<p>Dhe pika e fundit, m\u00eb e r\u00ebnd\u00ebsishmja. N\u00ebse ndonj\u00eb prej k\u00ebtyre tre pikave ndodh t\u00eb d\u00ebshtoj\u00eb, kemi nj\u00eb probabilitet jo zero p\u00ebr t\u00eb humbur t\u00eb dh\u00ebnat e p\u00ebrdoruesit, pasi mund t\u00eb d\u00ebshtoj\u00eb sistemi i skedar\u00ebve.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/4bf8bc1c73a2beef74cb4ee0ee45679b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe t\u00eb supozojm\u00eb se sistemi i skedar\u00ebve ka d\u00ebshtuar. Restaurimi i tij merr, p\u00ebrve\u00e7 k\u00ebsaj, shum\u00eb koh\u00eb \u2014 mund t\u00eb zgjas\u00eb nj\u00eb jav\u00eb n\u00ebse ka nj\u00eb volum t\u00eb madh t\u00eb t\u00eb dh\u00ebnave. Dhe p\u00ebr m\u00eb tep\u00ebr, n\u00eb fund mund t\u00eb kemi nj\u00eb num\u00ebr t\u00eb madh skedar\u00ebsh t\u00eb paqart\u00eb, q\u00eb duhet t\u00eb p\u00ebrshtat\u00ebn ndonj\u00eb m\u00ebnyr\u00eb me fotografit\u00eb e p\u00ebrdoruesve. Dhe rrezikojm\u00eb t\u00eb humbim t\u00eb dh\u00ebnat. Rreziku \u00ebsht\u00eb mjaft i lart\u00eb. Dhe sa m\u00eb shpesh q\u00eb ndodhin situata t\u00eb tilla, dhe sa m\u00eb shum\u00eb probleme paraqiten n\u00eb t\u00eb gjith\u00eb k\u00ebt\u00eb zinxhir, aq m\u00eb i lart\u00eb \u00ebsht\u00eb ky rrezik.<\/p>\n<p>Duhej t\u00eb b\u00ebjm\u00eb di\u00e7ka p\u00ebr k\u00ebt\u00eb. Dhe ne vendos\u00ebm q\u00eb thjesht t\u00eb b\u00ebjm\u00eb nj\u00eb kopje rezerv\u00eb t\u00eb t\u00eb dh\u00ebnave. Kjo n\u00eb t\u00eb v\u00ebrtet\u00eb \u00ebsht\u00eb nj\u00eb zgjidhje e qart\u00eb dhe e mir\u00eb. \u00c7far\u00eb b\u00ebm\u00eb?<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/f80ec2b65003c40bd2fabf88966b3e05.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu dukej serveri yn\u00eb, i cili ishte i lidhur me storage-in m\u00eb par\u00eb. Ky \u00ebsht\u00eb nj\u00eb ndarje kryesore, ky \u00ebsht\u00eb thjesht nj\u00eb pajisje bllokimi q\u00eb p\u00ebrfaq\u00ebson n\u00eb t\u00eb v\u00ebrtet\u00eb nj\u00eb mount n\u00eb storage-in e larg\u00ebt p\u00ebrmes optik\u00ebs.<\/p>\n<p>Ne thjesht shtuam nj\u00eb ndarje t\u00eb dyt\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/d3dba75ef477269d92145cd69d587527.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVendos\u00ebm nj\u00eb storage t\u00eb dyt\u00eb pran\u00eb (fatmir\u00ebsisht, ekonomikisht nuk \u00ebsht\u00eb aq e shtrenjt\u00eb), dhe e quajt\u00ebm at\u00eb ndarje backup. Ai gjithashtu \u00ebsht\u00eb i lidhur me optik\u00eb, ndodhet n\u00eb t\u00eb nj\u00ebjtin server. Por na nevojitet nj\u00eb m\u00ebnyr\u00eb p\u00ebr t\u00eb sinkronizuar t\u00eb dh\u00ebnat midis tyre.<\/p>\n<p>K\u00ebtu ne thjesht vendosim nj\u00eb radh\u00eb asinkrone ngjitur.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/67bced2b45c589009cfb01a1c21398a5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNuk \u00ebsht\u00eb shum\u00eb e ngarkuar. E dim\u00eb q\u00eb kemi pak regjistrime. Rradha \u00ebsht\u00eb thjesht nj\u00eb tabel\u00eb n\u00eb MySQL, n\u00eb t\u00eb cil\u00ebn shkruhen rreshta si \"duhet t\u00eb b\u00ebjm\u00eb backup t\u00eb k\u00ebsaj fotografie\". me ndonj\u00eb ndryshim ose me ngarkimin, ne kopjojm\u00eb nga ndarja kryesore n\u00eb backup me nj\u00eb worker asinkron ose thjesht ndonj\u00eb background worker.<\/p>\n<p>Dhe k\u00ebshtu ne gjithmon\u00eb kemi dy ndarje konsistente. Edhe n\u00ebse nj\u00eb pjes\u00eb e k\u00ebtij sistemi d\u00ebshton, ne gjithmon\u00eb mund t\u00eb nd\u00ebrronim ndarjen kryesore me backup-in, dhe gjith\u00e7ka do t\u00eb vazhdoj\u00eb t\u00eb funksionoj\u00eb.<\/p>\n<p>Por p\u00ebr shkak t\u00eb k\u00ebsaj, ngarkesa p\u00ebr leximin rritet ndjesh\u00ebm, sepse p\u00ebrve\u00e7 klient\u00ebve q\u00eb lexojn\u00eb nga ndarja kryesore, sepse ata s\u00eb pari shohin fotografin\u00eb atje (ajo \u00ebsht\u00eb m\u00eb e fresk\u00ebt atje), dhe m\u00eb pas k\u00ebrkojn\u00eb n\u00eb backup n\u00ebse nuk e gjejn\u00eb (por kjo e b\u00ebn thjesht NGINX), ka dhe sistemi yn\u00eb i backup-it q\u00eb tani lexon nga ndarja kryesore. Nuk ishte se kjo ishte pika e ngusht\u00eb, por nuk doja t\u00eb rrisja ngarkes\u00ebn, esencialisht, thjesht k\u00ebshtu.<\/p>\n<p>Dhe ne shtuam nj\u00eb disk t\u00eb tret\u00eb, i cili \u00ebsht\u00eb nj\u00eb SSD i vog\u00ebl, dhe e quajt\u00ebm buffer.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/fd35481822b4170087e5f670bf338dc5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi funksionon tani.<\/p>\n<p>P\u00ebrdoruesi ngarkon nj\u00eb foto n\u00eb buffer, m\u00eb pas d\u00ebrgohet nj\u00eb event n\u00eb radh\u00eb q\u00eb thot\u00eb se duhet ta kopjojm\u00eb n\u00eb dy ndarje. Ajo kopjohet, dhe fotografia p\u00ebr nj\u00eb periudh\u00eb t\u00eb caktuar (le t\u00eb themi, nj\u00eb dit\u00eb) jeton n\u00eb buffer, dhe vet\u00ebm at\u00ebher\u00eb hiqet. Kjo e p\u00ebrmir\u00ebson ndjesh\u00ebm p\u00ebrvoj\u00ebn e p\u00ebrdoruesit, sepse p\u00ebrdoruesi zakonisht ngarkon nj\u00eb foto dhe menj\u00ebher\u00eb pas saj fillojn\u00eb t\u00eb vijn\u00eb k\u00ebrkesa, ose ai vet\u00eb refresh-on faqen. Por gjith\u00e7ka varion nga aplikacioni q\u00eb b\u00ebn ngarkimin.<\/p>\n<p>Ose, p\u00ebr shembull, njer\u00ebz t\u00eb tjer\u00eb q\u00eb fillojn\u00eb ta shohin at\u00eb foto, menj\u00ebher\u00eb pas saj d\u00ebrgojn\u00eb k\u00ebrkesa. N\u00eb cache nuk \u00ebsht\u00eb akoma, k\u00ebrkesa e par\u00eb ndodh shum\u00eb shpejt. N\u00eb thelb, ashtu si me fotokeshin. Storage i ngadalt\u00eb nuk angazhohet fare n\u00eb k\u00ebt\u00eb. Dhe kur pas nj\u00eb dite ajo do t\u00eb hiqet, ajo tashm\u00eb \u00ebsht\u00eb ose e cached n\u00eb pjes\u00ebn ton\u00eb t\u00eb caching, ose p\u00ebr shum\u00eb t\u00eb gjith\u00eb, ndoshta, nuk \u00ebsht\u00eb m\u00eb e nevojshme. Pra, p\u00ebrvoja e p\u00ebrdoruesit ka p\u00ebrmir\u00ebsuar ndjesh\u00ebm fal\u00eb k\u00ebtyre manipulimeve t\u00eb thjeshta.<\/p>\n<p>Dhe, m\u00eb e r\u00ebnd\u00ebsishmja: ne kemi ndaluar t\u00eb humbasim t\u00eb dh\u00ebna.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/526f549457dd0c438f32b0adb76df76c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe, le t\u00eb themi, kemi ndaluar <em>potencialisht<\/em> t\u00eb humbasim t\u00eb dh\u00ebna, sepse ve\u00e7se nuk i humbnim. Por rreziku ishte. Ne shohim se kjo zgjidhje, natyrisht, \u00ebsht\u00eb e mir\u00eb, por \u00ebsht\u00eb pak si nj\u00eb sistem p\u00ebr t\u00eb zbutur simptomat e problemit, n\u00eb vend q\u00eb ta zgjidhte at\u00eb deri n\u00eb fund. Dhe disa probleme mbet\u00ebn k\u00ebtu.<\/p>\n<p>S\u00eb pari, kjo \u00ebsht\u00eb pika e d\u00ebshtimit n\u00eb form\u00ebn e vet fizik t\u00eb hostit, n\u00eb t\u00eb cilin funksionon e gjith\u00eb kjo makineri, ajo nuk ka ikur askund.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/0eb3d292655a7edf912793ed81e8931c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00eb dyti, mbeten problemet me SAN-t\u00eb, ka mbetur mir\u00ebmbajtja e tyre e r\u00ebnd\u00eb, etj. Kjo nuk ishte ndonj\u00eb faktor kritik, por do t\u00eb doja ta provoja t\u00eb jetojm\u00eb ndryshe.<\/p>\n<p>Dhe ne b\u00ebm\u00eb nj\u00eb version t\u00eb tret\u00eb (n\u00eb themel, n\u00eb t\u00eb v\u00ebrtet\u00eb versionin e dyt\u00eb) - versionin e rezervimit. Si dukej kjo?<\/p>\n<p>Kjo \u00ebsht\u00eb ajo q\u00eb ishte -<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/8b1749b6feed200f8a64529ee2316c1a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProblem kryesor p\u00ebr ne ishte se ky \u00ebsht\u00eb nj\u00eb host fizik.<\/p>\n<p>S\u00eb pari, ne heqim SAN-t\u00eb, sepse duam t\u00eb eksperimentojm\u00eb, duam t\u00eb provosh thjesht disqe lokale.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/fd0f5a8627d9179fcbc7097c1c18505f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb tashm\u00eb 2014-2015, dhe n\u00eb at\u00eb koh\u00eb gjendja me disqet dhe kapacitetin e tyre n\u00eb nj\u00eb host u p\u00ebrmir\u00ebsua ndjesh\u00ebm. Vendos\u00ebm, pse t\u00eb mos e provojm\u00eb.<\/p>\n<p>Dhe m\u00eb pas ne thjesht marrim ndarjen ton\u00eb t\u00eb backup-it dhe e transferojm\u00eb fizikisht n\u00eb nj\u00eb makin\u00eb t\u00eb ve\u00e7ant\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/456e00bc8557d3340b06efcd1dde8a08.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu, kemi nj\u00eb skem\u00eb t\u00eb till\u00eb. Ne kemi dy makina, t\u00eb cilat ruajn\u00eb dataset t\u00eb nj\u00ebjt\u00eb. Ato rezervojn\u00eb plot\u00ebsisht nj\u00ebra-tjetr\u00ebn dhe sinkronizojn\u00eb t\u00eb dh\u00ebnat p\u00ebrmes rrjetit p\u00ebrmes nj\u00eb rradhe asinkrone n\u00eb t\u00eb nj\u00ebjtin MySQL.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/d44cdb7b440ad4c58cc625123306a8c8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPse kjo funksionon mir\u00eb - sepse kemi pak regjistrime. N\u00ebse regjistrimi do t\u00eb ishte n\u00eb p\u00ebrpjes\u00ebtim me leximin, ndoshta do t\u00eb kishim ndonj\u00eb overhead rrjeti dhe probleme. Ka pak regjistrime, shum\u00eb lexim - ky m\u00ebnyr\u00eb punon mir\u00eb, dmth ne mjaft rrall\u00eb kopjojm\u00eb fotografit\u00eb mes k\u00ebtyre dy server\u00ebve.<\/p>\n<p>Si funksionon n\u00ebse shohim pak m\u00eb n\u00eb detaje.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/071c11abb6ee1d7734c53052139ff04b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNgarkimi. Balancuesi thjesht zgjedh host t\u00eb rast\u00ebsish\u00ebm me \u00e7iftin dhe e b\u00ebn ngarkimin atje. N\u00eb k\u00ebt\u00eb rast, ai natyrisht b\u00ebn kontrollime sh\u00ebndet\u00ebsore, shikon q\u00eb makina t\u00eb mos kishte r\u00ebn\u00eb. Pra, ai ngarkon fotografit\u00eb vet\u00ebm n\u00eb serverin e gjall\u00eb, dhe m\u00eb pas p\u00ebrmes rradhe asinkrone kjo gjith\u00e7ka kopjohet n\u00eb fqinjine e tij. Me ngarkimin gjith\u00e7ka \u00ebsht\u00eb shum\u00eb e thjesht\u00eb.<\/p>\n<p>Me detyrat \u00ebsht\u00eb pak m\u00eb e komplikuar.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/f494904aec823456e18b987a8c98bf56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebtu na ndihmoi Lua, sepse n\u00eb NGINX-in e zakonsh\u00ebm \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb b\u00ebsh nj\u00eb logjik\u00eb t\u00eb till\u00eb. Ne s\u00eb pari b\u00ebjm\u00eb k\u00ebrkes\u00ebn n\u00eb serverin e par\u00eb, shikojm\u00eb n\u00ebse fotografia \u00ebsht\u00eb atje, sepse potencialisht ajo mund t\u00eb jet\u00eb ngarkuar, p\u00ebr shembull, tek fqinj, dhe k\u00ebtu ende nuk ka arritur. N\u00ebse fotografia \u00ebsht\u00eb atje, kjo \u00ebsht\u00eb mir\u00eb. Ne e japim menj\u00ebher\u00eb at\u00eb klientit dhe, ndoshta, e cache-ojm\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/de5f77e997bb049f4cfc1709da0f1788.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00ebse nuk \u00ebsht\u00eb aty, ne thjesht b\u00ebjm\u00eb nj\u00eb k\u00ebrkes\u00eb p\u00ebr fqinj dhe nga aty e marrim garantuar.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/79aa5592acd28dfbc815261d0276c2e7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPra ndaj, p\u00ebrs\u00ebri mund t\u00eb themi: mund t\u00eb ket\u00eb probleme me performanc\u00ebn, p\u00ebr shkak t\u00eb udh\u00ebtimeve t\u00eb vazhdueshme - foto t\u00eb ngarkuara, k\u00ebtu nuk \u00ebsht\u00eb, ne b\u00ebjm\u00eb dy k\u00ebrkesa n\u00eb vend t\u00eb nj\u00eb, kjo duhet t\u00eb funksionoj\u00eb ngadal\u00eb.<\/p>\n<p>N\u00eb situat\u00ebn ton\u00eb, kjo nuk funksionon ngadal\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/52ca3902d80990f512201672cd5e6441.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe mbledhim nj\u00eb sasi t\u00eb madhe metrikash p\u00ebr k\u00ebt\u00eb sistem, dhe norma e goditjeve t\u00eb till\u00eb \u00ebsht\u00eb rreth 95%. Pra, vonesa e k\u00ebtij backup-i \u00ebsht\u00eb e vog\u00ebl, dhe p\u00ebr shkak t\u00eb k\u00ebsaj ne praktikisht garantuar, pas ngarkimit t\u00eb fotos, e marrim at\u00eb q\u00eb hera e par\u00eb dhe nuk shkojm\u00eb dy her\u00eb.<\/p>\n<p>Pra, \u00e7far\u00eb kemi fituar, dhe \u00e7far\u00eb \u00ebsht\u00eb shum\u00eb e bukur?<\/p>\n<p>M\u00eb par\u00eb kishim nj\u00eb seksion kryesor backup-i, dhe ne lexonim prej tij n\u00eb m\u00ebnyr\u00eb t\u00eb rregullt. K\u00ebshtu q\u00eb gjithmon\u00eb fillonim me kryesorin dhe pastaj me backup-in. Kjo ishte nj\u00ebra udh\u00eb.<\/p>\n<p>Tani ne po shfryt\u00ebzojm\u00eb leximin nga dy makina n\u00eb t\u00eb nj\u00ebjt\u00ebn koh\u00eb. Shp\u00ebrndajm\u00eb k\u00ebrkesat n\u00eb m\u00ebnyr\u00eb Round Robin. N\u00eb nj\u00eb p\u00ebrqindje t\u00eb vog\u00ebl rastesh, ne b\u00ebjm\u00eb dy k\u00ebrkesa. Por tashm\u00eb kemi dy her\u00eb m\u00eb shum\u00eb kapacitete p\u00ebr lexim se m\u00eb par\u00eb. Dhe ngarkesa ka r\u00ebn\u00eb ndjesh\u00ebm p\u00ebr makinat q\u00eb japin sh\u00ebrbim, si dhe p\u00ebr ruajt\u00ebsit q\u00eb kishim n\u00eb at\u00eb koh\u00eb.<\/p>\n<p>Sa i p\u00ebrket q\u00ebndrueshm\u00ebris\u00eb. N\u00eb fakt, p\u00ebr k\u00ebt\u00eb ne luftonim kryesisht. K\u00ebtu q\u00ebndrueshm\u00ebria \u00ebsht\u00eb arritur shk\u00eblqyer.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/a030a477e60d6e1f3d0b4e3395013df5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNj\u00eb makin\u00eb del jasht funksionit.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/42900b24e340c03ea642fd49f5b410ff.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAsnj\u00eb problem! Inxhinieri sistemik nuk ka nevoj\u00eb t\u00eb zgjohesh nat\u00ebn, mund t\u00eb pres\u00eb deri n\u00eb m\u00ebngjes, asgj\u00eb e keqe nuk do t\u00eb ndodh\u00eb.<\/p>\n<p>N\u00ebse edhe pas d\u00ebshtimit t\u00eb k\u00ebsaj makine del jasht\u00eb funksionit rendi, asnj\u00eb problem, thjesht logu do t\u00eb grumbullohet fillimisht n\u00eb makin\u00ebn aktive, pastaj do t\u00eb p\u00ebrpiqet t\u00eb hyj\u00eb n\u00eb rend, e m\u00eb pas n\u00eb at\u00eb makin\u00eb q\u00eb do t\u00eb rikthehet n\u00eb pun\u00eb pas nj\u00eb kohe.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/ef42eadaaf3e3ecbf70847e9f88c1582.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE nj\u00ebjta gj\u00eb ndodh edhe me mir\u00ebmbajtjen. Thjesht fikim nj\u00eb nga makinat, e heqim dorazi nga t\u00eb gjitha grupet, ndalon trafikimin, b\u00ebjm\u00eb ndonj\u00eb mir\u00ebmbajtje, ndonj\u00eb rregullim dhe pastaj e rikthejm\u00eb n\u00eb pun\u00eb, dhe ky backup arrin mjaft shpejt. Pra, nj\u00eb dit\u00eb downtime p\u00ebr nj\u00eb makin\u00eb kalohet brenda disa minutash. Kjo \u00ebsht\u00eb shum\u00eb pak. Sa p\u00ebr q\u00ebndrueshm\u00ebrin\u00eb, p\u00ebrs\u00ebris, k\u00ebtu gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull.<\/p>\n<p>\u00c7far\u00eb p\u00ebrfundimesh mund t\u00eb nxjerrim nga kjo skem\u00eb e rezervimit?<\/p>\n<p>Arrit\u00ebm q\u00ebndrueshm\u00ebrin\u00eb.<\/p>\n<p>Eksplorim i thjesht\u00eb. Pasi q\u00eb n\u00eb makinat jan\u00eb disqet e forta lokale, kjo \u00ebsht\u00eb shum\u00eb m\u00eb e p\u00ebrshtatshme nga perspektiva e inxhinier\u00ebve q\u00eb punojn\u00eb me t\u00eb.<\/p>\n<p>Kemi fituar nj\u00eb kapacitet t\u00eb dyfisht\u00eb p\u00ebr lexim.<\/p>\n<p>Kjo \u00ebsht\u00eb nj\u00eb bonus shum\u00eb i mir\u00eb p\u00ebr q\u00ebndrueshm\u00ebrin\u00eb.<\/p>\n<p>Por ka edhe probleme. Tani kemi nj\u00eb zhvillim shum\u00eb m\u00eb t\u00eb nd\u00ebrlikuar t\u00eb disa karakteristikave t\u00eb lidhura me k\u00ebt\u00eb, sepse sistemi ka kaluar n\u00eb 100% q\u00ebndrueshm\u00ebri eventuale.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/b650276a41730cc303180e8304c5dabb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNe duhet, le t\u00eb themi, n\u00eb ndonj\u00eb pun\u00eb mbrapa t\u00eb mendojm\u00eb vazhdimisht: \"Cili server \u00ebsht\u00eb ai tani?\", \"A \u00ebsht\u00eb me t\u00eb v\u00ebrtet\u00eb nj\u00eb foto p\u00ebrkat\u00ebse k\u00ebtu?\" etj. Kjo, natyrisht, \u00ebsht\u00eb e gjitha e mb\u00ebshtjell\u00eb n\u00eb paketat, dhe p\u00ebr programuesin q\u00eb shkruan logjik\u00ebn e biznesit, kjo \u00ebsht\u00eb e tejdukshme. Por, gjithsesi, ka nj\u00eb strat t\u00eb madh t\u00eb nd\u00ebrlikuar q\u00eb \u00ebsht\u00eb shfaqur. Por ne jemi t\u00eb gatsh\u00ebm t\u00eb pajtohemi me k\u00ebt\u00eb p\u00ebr shkak t\u00eb p\u00ebrfitimeve q\u00eb mor\u00ebn nga ai.<\/p>\n<p>Dhe k\u00ebtu s\u00ebrish ndodh nj\u00ebfar\u00eb konflikti.<\/p>\n<p>N\u00eb fillim thash\u00eb q\u00eb t\u00eb ruajt\u00ebsh gjith\u00e7ka n\u00eb disqet e forta lokale - \u00ebsht\u00eb keq. Tani po them se na ka p\u00eblqyer.<\/p>\n<p>Po, me t\u00eb v\u00ebrtet\u00eb, me kalimin e koh\u00ebs situata ka ndryshuar shum\u00eb dhe tani ky qasje ka shum\u00eb p\u00ebrfitime. Para s\u00eb gjithash, ne po arrijm\u00eb nj\u00eb eksplorim m\u00eb t\u00eb thjesht\u00eb.<\/p>\n<p>S\u00eb dyti, kjo \u00ebsht\u00eb m\u00eb efikase, sepse nuk kemi ato kontrollet automatike, lidhjet me raftet e disqeve.<\/p>\n<p>Aty \u00ebsht\u00eb nj\u00eb makineri e madhe, nd\u00ebrsa k\u00ebtu kemi thjesht disa disqe q\u00eb jan\u00eb konkretisht t\u00eb mbledhura n\u00eb raid n\u00eb k\u00ebt\u00eb makin\u00eb.<\/p>\n<p>Por ka edhe disavantazhe.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/3c090e0801f1a686dc0d5fefce697c56.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb rreth 1.5 her\u00eb m\u00eb e shtrenjt\u00eb se p\u00ebrdorimi i SAN-ve madje edhe me \u00e7mimet e sotme. Prandaj, ne vendos\u00ebm q\u00eb t\u00eb mos konvertojm\u00eb t\u00ebr\u00eb klasterin ton\u00eb t\u00eb madh n\u00eb makina me disqe lokale dhe vendos\u00ebm t\u00eb mbajm\u00eb nj\u00eb zgjidhje hibride.<\/p>\n<p>Pjesa m\u00eb e madhe e makinave punon me disqe t\u00eb forta (pra, jo gjysma - ndoshta rreth 30%). Nd\u00ebrsa pjesa tjet\u00ebr - jan\u00eb makinat e vjetra, n\u00eb t\u00eb cilat m\u00eb par\u00eb ishte skema e par\u00eb e rezervimit. Thjesht i kemi rikozatuar, pasi na nevojiten as m\u00eb shum\u00eb t\u00eb dh\u00ebna asgj\u00eb tjet\u00ebr, thjesht e ndryshuam montimin nga nj\u00eb host fizik n\u00eb dy.<\/p>\n<p>Dhe kemi fituar nj\u00eb kapacitet t\u00eb madh p\u00ebr lexim, dhe e kemi zgjeruar. N\u00ebse m\u00eb par\u00eb ne montonim nj\u00eb ruajt\u00ebs p\u00ebr nj\u00eb makin\u00eb, tani montojm\u00eb kat\u00ebr, p\u00ebr shembull, p\u00ebr nj\u00eb \u00e7ift. Dhe kjo funksionon normalisht.<\/p>\n<p>Le t\u00eb p\u00ebrfundojm\u00eb me p\u00ebrmbledhjen e asaj q\u00eb kemi arritur, p\u00ebr \u00e7far\u00eb kemi luftuar dhe a e kemi arritur.<\/p>\n<h3>P\u00ebrfundimet<\/h3>\n<p>\nKemi p\u00ebrdorues - plot 33 milion.<\/p>\n<p>Kemi tre pika pranije - Prag\u00eb, Miami, Hong Kong.<\/p>\n<p>Atohet nj\u00eb stratifikim e shp\u00ebrdorimit, q\u00eb p\u00ebrfshin makin\u00ebn q\u00eb punon me disqe lokale t\u00eb shpejt\u00eb (SSD), mbi t\u00eb cilat funksionon nj\u00eb sistem i thjesht\u00eb nga NGINX, log-un e tij t\u00eb qasjes dhe demon\u00ebt n\u00eb Python, t\u00eb cil\u00ebt merren me p\u00ebrpunimin dhe menaxhimin e caches.<\/p>\n<p>N\u00ebse d\u00ebshironi, n\u00eb projektin tuaj, n\u00ebse fotot nuk jan\u00eb aq t\u00eb r\u00ebnd\u00ebsishme sa p\u00ebr ne, ose n\u00ebse balancimi i kontrollit ndaj shpejt\u00ebsis\u00eb s\u00eb zhvillimit dhe shpenzimeve t\u00eb burimeve \u00ebsht\u00eb m\u00eb i favorsh\u00ebm p\u00ebr ju, at\u00ebher\u00eb mund ta z\u00ebvend\u00ebsoni at\u00eb me CDN, t\u00eb cil\u00ebt e b\u00ebjn\u00eb k\u00ebt\u00eb mjaft mir\u00eb.<\/p>\n<p>Pas k\u00ebsaj, vijon nj\u00eb stratifikim ruajtjeje, ku kemi grupe makinash q\u00eb rezervojn\u00eb nj\u00ebra-tjetr\u00ebn, duke kopjuar skedar\u00ebt nga nj\u00ebri te tjetri asinkronisht me \u00e7do ndryshim.<\/p>\n<p>Nj\u00eb pjes\u00eb e k\u00ebtyre makinave punon me disqe t\u00eb ngurta lokale.<\/p>\n<p>Nj\u00eb pjes\u00eb e k\u00ebtyre makinave \u00ebsht\u00eb e lidhur me SAN.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/5ddbc4f73d86aa1f83734885d8c9dea0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00ebshtu, nga nj\u00ebra an\u00eb, kjo \u00ebsht\u00eb m\u00eb e leht\u00eb p\u00ebr t'u menaxhuar dhe pak m\u00eb e efektshme, nd\u00ebrsa nga ana tjet\u00ebr, \u00ebsht\u00eb e p\u00ebrshtatshme p\u00ebr densitetin e vendosjes dhe \u00e7mimin p\u00ebr gigabajt.<\/p>\n<p>Ky \u00ebsht\u00eb nj\u00eb p\u00ebrmbledhje e shkurt\u00ebr e arkitektur\u00ebs s\u00eb asaj q\u00eb kemi arritur dhe si \u00ebsht\u00eb zhvilluar gjith\u00e7ka.<\/p>\n<p>Disa k\u00ebshilla t\u00eb thjeshta nga kapo.<\/p>\n<p>S\u00eb pari, n\u00ebse papritur vendosni se duhet t\u00eb p\u00ebrmir\u00ebsoni gjith\u00e7ka n\u00eb infrastruktur\u00ebn tuaj t\u00eb fotove, noshtesoni, sepse ndoshta nuk \u00ebsht\u00eb e nevojshme t\u00eb p\u00ebrmir\u00ebsoni asgj\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/7770f41d0b190eb78ae0d19f4c8182a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMarr nj\u00eb shembull. Ne kemi nj\u00eb grup makinash q\u00eb dor\u00ebzojn\u00eb fotografit\u00eb nga bashk\u00ebngjitjet n\u00eb biseda, dhe akoma funksionon nj\u00eb skem\u00eb q\u00eb nga viti 2009, dhe askush nuk ka probleme. T\u00eb gjith\u00eb jan\u00eb t\u00eb lumtur, t\u00eb gjith\u00eb e pelqejn\u00eb.<\/p>\n<p>P\u00ebr t\u00eb matur, s\u00eb pari vendosni shum\u00eb metrike, shikoni dhe pastaj vendosni se \u00e7far\u00eb nuk jeni t\u00eb k\u00ebnaqur dhe \u00e7far\u00eb duhet p\u00ebrmir\u00ebsuar. P\u00ebr t\u00eb matur, ne kemi nj\u00eb mjet t\u00eb shk\u00eblqyer q\u00eb quhet Pinba.<\/p>\n<p>Ai lejon mbledhjen e statistik\u00ebs nga NGINX shum\u00eb t\u00eb holl\u00ebsishme p\u00ebr \u00e7do k\u00ebrkes\u00eb dhe kode p\u00ebrgjigjesh, dhe shp\u00ebrndarjen e koh\u00ebve \u2014 gjith\u00e7ka q\u00eb d\u00ebshironi. Ai ka lidhje me sisteme t\u00eb ndryshme analitike dhe mund t\u00eb shikoni gjith\u00e7ka bukur.<\/p>\n<p>S\u00eb pari matni \u2014 pastaj p\u00ebrmir\u00ebsoni.<\/p>\n<p>Pastaj, ne optimizojm\u00eb leximin me cache, shkrimin \u2014 me sharding, por kjo \u00ebsht\u00eb nj\u00eb pik\u00eb e qart\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/f53a4777f1a2c7793eba4a72c94263a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr m\u00eb tep\u00ebr, n\u00ebse sapo po filloni t\u00eb nd\u00ebrtoni sistemin tuaj, \u00ebsht\u00eb shum\u00eb m\u00eb mir\u00eb t\u00eb b\u00ebni fotografit\u00eb si skedar\u00eb t\u00eb pandryshuesh\u00ebm. Duke e b\u00ebr\u00eb k\u00ebt\u00eb, humbni menj\u00ebher\u00eb nj\u00eb klas\u00eb t\u00ebr\u00eb problemesh lidhur me invalidimin e caches, ku logjika duhet t\u00eb gjej\u00eb versionin e duhur t\u00eb fotografis\u00eb etj.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/f345c59681275326cda1320b4f188ce9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebr shembull, n\u00ebse ngarkoni nj\u00eb qind\u00ebsh, pastaj e ktheni, b\u00ebni q\u00eb t\u00eb jet\u00eb nj\u00eb skedar fizikisht tjet\u00ebr. Pra, nuk ka nevoj\u00eb t\u00eb mendoni se mund t\u00eb kurseni pak hap\u00ebsir\u00eb duke e shkruar n\u00eb t\u00eb nj\u00ebjtin skedar.<\/p>\n<p>Pika tjet\u00ebr. Rreth resize n\u00eb flutur.<\/p>\n<p>M\u00eb par\u00eb, kur p\u00ebrdoruesit ngarkonin fotografi, ne prer\u00eb nj\u00eb mori formatash p\u00ebr \u00e7do rast, p\u00ebr klient\u00eb t\u00eb ndrysh\u00ebm, dhe t\u00eb gjith\u00eb ishin n\u00eb disk. Tani, ne e kemi l\u00ebn\u00eb k\u00ebt\u00eb.<\/p>\n<p>Tani, ne kemi mbajtur vet\u00ebm tre formate kryesore: t\u00eb vogla, t\u00eb mesme dhe t\u00eb m\u00ebdha. T\u00eb gjitha t\u00eb tjerat thjesht i ulim n\u00eb madh\u00ebsin\u00eb q\u00eb k\u00ebrkohen n\u00eb Uport, thjesht b\u00ebjm\u00eb uljen dhe i dor\u00ebzojm\u00eb p\u00ebrdoruesit.<\/p>\n<p>CPU i stratifikimit t\u00eb caches k\u00ebtu rezulton shum\u00eb m\u00eb i lir\u00eb sesa n\u00ebse do t\u00eb rip\u00ebrftoheshim vazhdimisht k\u00ebto formate n\u00eb \u00e7do ruajtje. Po, n\u00ebse duam t\u00eb shtojm\u00eb nj\u00eb t\u00eb ri, kjo \u00ebsht\u00eb nj\u00eb pun\u00eb q\u00eb zgjat nj\u00eb muaj \u2014 p\u00ebr t\u00eb ngarkuar nj\u00eb skript n\u00eb t\u00eb gjitha k\u00ebto q\u00eb ta b\u00ebjm\u00eb me kujdes, pa r\u00ebn\u00eb grupin. Pra, n\u00ebse tani keni mund\u00ebsin\u00eb t\u00eb zgjidhni, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb krijoni sa m\u00eb pak madh\u00ebsi fizike, por t\u00eb keni nj\u00eb shp\u00ebrndarje t\u00eb ndonj\u00eb forme, le t\u00eb themi tre. T\u00eb gjitha t\u00eb tjerat thjesht t\u2019i rregullojm\u00eb n\u00eb flutur duke p\u00ebrdorur module t\u00eb gatshme. Tani kjo \u00ebsht\u00eb shum\u00eb e leht\u00eb dhe e aksesueshme.<\/p>\n<p>Dhe backup-incremental asinkron \u00ebsht\u00eb i mir\u00eb.<\/p>\n<p>Si\u00e7 ka treguar praktika jon\u00eb, nj\u00eb skem\u00eb e till\u00eb funksionon mir\u00eb me kopjimin e vonuar t\u00eb skedar\u00ebve t\u00eb ndryshuar.<\/p>\n<p><img decoding=\"async\" alt=\"Arkitektura e ruajtjes dhe shp\u00ebrndarjes s\u00eb fotografive n\u00eb Badoo\" src=\"\/wp-content\/uploads\/2020\/01\/0e550721e838654e61e1fa4d08f9bb93.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPika e fundit gjithashtu \u00ebsht\u00eb e qart\u00eb. N\u00ebse n\u00eb infrastruktur\u00ebn tuaj tani nuk ka probleme t\u00eb tilla, por ka di\u00e7ka q\u00eb mund t\u00eb d\u00ebshtoj\u00eb, ajo do t\u00eb d\u00ebshtoj\u00eb patjet\u00ebr, kur t\u00eb b\u00ebhet pak m\u00eb shum\u00eb. Pra, \u00ebsht\u00eb m\u00eb mir\u00eb t\u00eb mendoni p\u00ebr k\u00ebt\u00eb paraprakisht dhe t\u00eb mos p\u00ebrballeni me probleme. Kjo \u00ebsht\u00eb e gjitha.<\/p>\n<h3>Kontakte<\/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\/\">Blogu i kompanis\u00eb Badoo<\/a><\/noindex><\/p>\n<blockquote><p>Ky raport \u00ebsht\u00eb nj\u00eb transkript i nj\u00eb nga performancave m\u00eb t\u00eb mira n\u00eb konferenc\u00ebn e zhvilluesve t\u00eb sistemeve me ngarkes\u00eb t\u00eb lart\u00eb. <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>. Ka mbetur m\u00eb pak se nj\u00eb muaj deri n\u00eb konferenc\u00ebn HighLoad++ 2017.<\/p>\n<p>Ne kemi p\u00ebrgatitur tashm\u00eb <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/2017\/abstracts\">Programi i konferenc\u00ebs<\/a><\/noindex>, tani po formohet aktivisht orari.<\/p>\n<p>K\u00ebt\u00eb vit vazhdojm\u00eb t\u00eb eksplorojm\u00eb tem\u00ebn e arkitekturave dhe p\u00ebrmir\u00ebsimeve:<\/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\">Si t\u00eb sh\u00ebrbejm\u00eb nj\u00eb miliard p\u00ebrdoruesish dhe t\u00eb dor\u00ebzojm\u00eb terabit trafik<\/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\">Si t\u00eb shkruajm\u00eb nga e para baz\u00ebn e t\u00eb dh\u00ebnave t\u00eb mesazheve personale n\u00eb VKontakte dhe ta migrojm\u00eb pa ndalim.<\/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\">Vdekja nga shkrirja: si Yandex.Money u p\u00ebrpoq t\u00eb p\u00ebrgatitet p\u00ebr Black Friday dhe t\u00eb q\u00ebndroj\u00eb<\/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\">Arkitektura e q\u00ebndrueshme e sistemit ballor t\u00eb bank\u00ebs<\/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\">Arkitektura e sistemit t\u00eb pagesave: pothuajse enterprise<\/a><\/noindex> \/ \u0424\u0438\u043b\u0438\u043f\u043f \u0414\u0435\u043b\u044c\u0433\u044f\u0434\u043e<\/li>\n<\/ul>\n<p>\nDisa nga k\u00ebto materiale p\u00ebrdoren gjithashtu n\u00eb kursin ton\u00eb online t\u00eb trajnimit p\u00ebr zhvillimin e sistemeve me ngarkes\u00eb t\u00eb lart\u00eb <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 \u00ebsht\u00eb nj\u00eb seri letrash, artikujsh, materialesh dhe videosh t\u00eb seleksionuara me kujdes. Tani e kemi m\u00eb shum\u00eb se 30 materiale unike n\u00eb manualin ton\u00eb. Bashkohuni!\n<\/p><\/blockquote>\n<p>Burimi: <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.0.1 - 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\/sq\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \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\/sq\/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\udd47Arkitektura e ruajtjes dhe dh\u00ebnies s\u00eb fotografive n\u00eb Badoo | ProHoster","description":"Artem Denisov (","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/arhitektura-hraneniya-i-otdachi-fotografij-v-badoo","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/55009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=55009"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/55009\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=55009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=55009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=55009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}