FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

L-istorja tal-ħolqien ta 'VKontakte tinsab fuq il-Wikipedija; qalilha Pavel innifsu. Jidher li kulħadd diġà jafha. Dwar l-interni, l-arkitettura u l-istruttura tas-sit fuq HighLoad++ Pavel qalli lura fl-2010. Bosta servers nixxew minn dak iż-żmien, għalhekk se naġġornaw l-informazzjoni: nissekkjawha, noħorġu l-ġewwieni, iżennu, u nħarsu lejn l-apparat VK minn perspettiva teknika.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Alexey Akulovich (AterCattus) iżviluppatur backend fit-tim VKontakte. It-traskrizzjoni ta’ dan ir-rapport hija tweġiba kollettiva għal mistoqsijiet ta’ spiss dwar l-operat tal-pjattaforma, l-infrastruttura, is-servers u l-interazzjoni bejniethom, iżda mhux dwar l-iżvilupp, jiġifieri dwar il-ħadid. Separatament, dwar databases u x'għandu VK minflok, dwar il-ġbir ta 'zkuk u l-monitoraġġ tal-proġett kollu kollu kemm hu. Dettalji taħt il-qatgħa.



Għal aktar minn erba 'snin ilni nittratta kull xorta ta' kompiti relatati mal-backend.

  • It-tlugħ, il-ħażna, l-ipproċessar, id-distribuzzjoni tal-midja: vidjow, live streaming, awdjo, ritratti, dokumenti.
  • Infrastruttura, pjattaforma, monitoraġġ tal-iżviluppatur, zkuk, caches reġjonali, CDN, protokoll RPC proprjetarju.
  • Integrazzjoni ma 'servizzi esterni: notifiki push, parsing ta' links esterni, RSS feed.
  • Ngħinu lill-kollegi b'diversi mistoqsijiet, li t-tweġibiet għalihom jeħtieġu għadis f'kodiċi mhux magħruf.

Matul dan iż-żmien, kelli sehem f'ħafna komponenti tas-sit. Irrid naqsam din l-esperjenza.

Arkitettura ġenerali

Kollox, bħas-soltu, jibda b'server jew grupp ta' servers li jaċċettaw talbiet.

Server ta' quddiem

Is-server ta 'quddiem jaċċetta talbiet permezz ta' HTTPS, RTMP u WSS.

HTTPS - dawn huma talbiet għall-verżjonijiet tal-web prinċipali u mobbli tas-sit: vk.com u m.vk.com, u klijenti uffiċjali u mhux uffiċjali oħra tal-API tagħna: klijenti mobbli, messaġġiera. Għandna riċeviment RTMP-traffiku għal xandiriet Live b'servers ta 'quddiem separati u WSS-konnessjonijiet għal Streaming API.

Għal HTTPS u WSS fuq servers ta 'min nginx. Għax-xandiriet RTMP, dan l-aħħar qlibna għas-soluzzjoni tagħna stess kive, iżda huwa lil hinn mill-ambitu tar-rapport. Għat-tolleranza tal-ħsarat, dawn is-servers jirreklamaw indirizzi IP komuni u jaġixxu fi gruppi sabiex jekk ikun hemm problema fuq wieħed mis-servers, it-talbiet tal-utenti ma jintilfux. Għal HTTPS u WSS, dawn l-istess servers jikkriptaw it-traffiku sabiex jieħdu parti mit-tagħbija tas-CPU fuqhom infushom.

Mhux se nitkellmu aktar dwar WSS u RTMP, iżda biss dwar talbiet standard HTTPS, li normalment huma assoċjati ma 'proġett tal-web.

Backend

Wara l-quddiem hemm normalment servers backend. Huma jipproċessaw talbiet li s-server ta 'quddiem jirċievi mill-klijenti.

Hija servers kPHP, li fuqu qed jaħdem id-daemon HTTP, minħabba li HTTPS diġà huwa decrypted. kPHP huwa server li jaħdem fuq mudelli prefork: jibda proċess prinċipali, mazz ta 'proċessi tat-tfal, jgħaddilhom is-sokits tas-smigħ u jipproċessaw it-talbiet tagħhom. F'dan il-każ, il-proċessi ma jerġgħux jinbdew bejn kull talba mill-utent, iżda sempliċement reset l-istat tagħhom għall-istat oriġinali ta 'valur żero - talba wara talba, minflok jerġgħu jibdew.

Distribuzzjoni tat-tagħbija

Il-backends kollha tagħna mhumiex ġabra kbira ta 'magni li jistgħu jipproċessaw kwalunkwe talba. Aħna lilhom maqsuma fi gruppi separati: ġenerali, mobbli, api, video, staging... Il-problema fuq grupp separat ta 'magni mhux se taffettwa l-oħrajn kollha. F'każ ta 'problemi bil-vidjo, l-utent li jisma' l-mużika lanqas biss ikun jaf dwar il-problemi. Liema backend biex tibgħat it-talba hija deċiża minn nginx fuq quddiem skond il-konfigurazzjoni.

Ġbir u ribilanċjar metriċi

Biex nifhmu kemm hemm bżonn li jkollna karozzi f’kull grupp, aħna tistrieħx fuq QPS. Il-backends huma differenti, għandhom talbiet differenti, kull talba għandha kumplessità differenti tal-kalkolu tal-QPS. Huwa għalhekk li aħna aħna joperaw bil-kunċett ta 'tagħbija fuq is-server kollu kemm hu - fuq is-CPU u perf.

Għandna eluf ta' servers bħal dawn. Kull server fiżiku jmexxi grupp kPHP biex jirriċikla l-qlub kollha (minħabba li kPHP huwa b'kamin wieħed).

Server tal-Kontenut

CS jew Content Server huwa ħażna. CS huwa server li jaħżen fajls u jipproċessa wkoll fajls uploaded u kull xorta ta 'kompiti sinkroniċi fl-isfond li l-frontend prinċipali tal-web jassenjalu.

Għandna għexieren ta 'eluf ta' servers fiżiċi li jaħżnu fajls. L-utenti jħobbu jtellgħu fajls, u aħna nħobbu naħżnuhom u naqsmuhom. Xi wħud minn dawn is-servers huma magħluqa minn servers speċjali pu/pp.

pu/pp

Jekk ftaħt it-tab tan-netwerk f'VK, rajt pu/pp.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

X'inhu pu/pp? Jekk nagħlqu server wara l-ieħor, allura hemm żewġ għażliet għat-tlugħ u t-tniżżil ta’ fajl fis-server li kien magħluq: direttament permezz http://cs100500.userapi.com/path jew permezz ta' server intermedju - http://pu.vk.com/c100500/path.

Pu huwa l-isem storiku għat-tlugħ tar-ritratti, u pp huwa prokura tar-ritratti. Jiġifieri, server wieħed huwa għat-tlugħ tar-ritratti, u ieħor huwa għat-tlugħ. Issa mhux biss ritratti huma mgħobbija, iżda l-isem ġie ppreservat.

Dawn is-servers ittemm is-sessjonijiet HTTPSbiex tneħħi t-tagħbija tal-proċessur mill-ħażna. Ukoll, peress li l-fajls tal-utent huma pproċessati fuq dawn is-servers, l-inqas informazzjoni sensittiva maħżuna fuq dawn il-magni, l-aħjar. Per eżempju, ċwievet ta 'encryption HTTPS.

Peress li l-magni huma magħluqa mill-magni l-oħra tagħna, nistgħu naffordjaw li ma nagħtuhomx IPs esterni "abjad", u agħti "griż". B'dan il-mod aħna ffrankati fuq il-pool IP u garantiti li nipproteġu l-magni minn aċċess minn barra - sempliċement m'hemm l-ebda IP biex tidħol fiha.

Reżiljenza fuq IPs kondiviżi. F'termini ta 'tolleranza għall-ħsarat, l-iskema taħdem l-istess - diversi servers fiżiċi għandhom IP fiżiku komuni, u l-ħardwer quddiemhom jagħżel fejn jibgħat it-talba. Nitkellem dwar għażliet oħra aktar tard.

Il-punt kontroversjali huwa li f'dan il-każ il-klijent iżomm inqas konnessjonijiet. Jekk hemm l-istess IP għal diversi magni - bl-istess ospitanti: pu.vk.com jew pp.vk.com, il-browser tal-klijent għandu limitu fuq in-numru ta 'talbiet simultanji lil host wieħed. Iżda fiż-żmien ta 'HTTP/2 kullimkien, nemmen li dan m'għadux daqshekk rilevanti.

L-iżvantaġġ ovvju tal-iskema huwa li trid ippumpja t-traffiku kollu, li tmur għall-ħażna, permezz ta 'server ieħor. Peress li aħna nippompjaw it-traffiku permezz ta' magni, għadna ma nistgħux nippompjaw traffiku qawwi, pereżempju, vidjo, billi nużaw l-istess skema. Aħna jittrasmettuha direttament - konnessjoni diretta separata għal ħażniet separati speċifikament għall-vidjo. Aħna jittrasmettu kontenut eħfef permezz ta 'prokura.

Ftit ilu ksibna verżjoni mtejba tal-prokura. Issa jien ngħidlek kif huma differenti minn dawk ordinarji u għaliex dan huwa meħtieġ.

Ħad

F'Settembru 2017, Oracle, li qabel kienet xtara lil Sun, keċċew numru kbir ta’ impjegati ta’ Sun. Nistgħu ngħidu li f'dan il-mument il-kumpanija ma baqgħetx teżisti. Meta għażlu isem għas-sistema l-ġdida, l-amministraturi tagħna ddeċidew li jagħtu ġieħ lill-memorja ta 'din il-kumpanija u semmew is-sistema l-ġdida Sun. Fostna nfusna sempliċement insejħulha "xemx".

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

pp kellu ftit problemi. IP wieħed għal kull grupp - cache ineffettiv. Diversi servers fiżiċi jaqsmu indirizz IP komuni, u m'hemm l-ebda mod biex tikkontrolla liema server se tmur it-talba. Għalhekk, jekk utenti differenti jiġu għall-istess fajl, allura jekk ikun hemm cache fuq dawn is-servers, il-fajl jispiċċa fil-cache ta 'kull server. Din hija skema ineffiċjenti ħafna, iżda ma seta' jsir xejn.

Konsegwentement - ma nistgħux shard kontenut, għaliex ma nistgħux nagħżlu server speċifiku għal dan il-grupp - għandhom IP komuni. Ukoll għal xi raġunijiet interni għandna ma kienx possibbli li jiġu installati tali servers fir-reġjuni. Huma kienu biss f'San Pietruburgu.

Bix-xemx, biddilna s-sistema tal-għażla. Issa għandna routing anycast: routing dinamiku, anycast, daemon awto-kontroll. Kull server għandu l-IP individwali tiegħu, iżda subnet komuni. Kollox huwa kkonfigurat b'tali mod li jekk server wieħed ifalli, it-traffiku jinfirex fuq is-servers l-oħra tal-istess grupp awtomatikament. Issa huwa possibbli li tagħżel server speċifiku, ebda caching żejda, u l-affidabbiltà ma ġietx affettwata.

Appoġġ tal-piż. Issa nistgħu naffordjaw li ninstallaw magni ta 'qawwa differenti kif meħtieġ, u wkoll, f'każ ta' problemi temporanji, ibiddlu l-piżijiet tax-"xemx" tax-xogħol biex inaqqsu t-tagħbija fuqhom, sabiex "jistrieħu" u jerġgħu jibdew jaħdmu.

Qsim mill-kontenut id. Ħaġa umoristiċi dwar sharding: normalment aħna shard kontenut sabiex utenti differenti jmorru għall-istess fajl permezz tal-istess "xemx" sabiex ikollhom cache komuni.

Riċentement nedejna l-applikazzjoni "Clover". Dan huwa kwizz onlajn f'xandira diretta, fejn l-ospitant jistaqsi mistoqsijiet u l-utenti jwieġbu f'ħin reali, billi jagħżlu l-għażliet. L-app għandha chat fejn l-utenti jistgħu chat. Fl-istess ħin jista 'jqabbad max-xandira aktar minn 100 elf ruħ. Kollha jiktbu messaġġi li jintbagħtu lill-parteċipanti kollha, u avatar jiġi flimkien mal-messaġġ. Jekk 100 elf ruħ jiġu għal avatar wieħed f'"xemx", allura xi drabi jista 'jirrombla wara sħaba.

Sabiex tiflaħ tifqigħ ta 'talbiet għall-istess fajl, huwa għal ċertu tip ta' kontenut li aħna nixgħel skema stupida li tifrex fajls madwar "suns" kollha disponibbli fir-reġjun.

Xemx minn ġewwa

Reverse proxy fuq nginx, cache jew fir-RAM jew fuq diski veloċi Optane/NVMe. Eżempju: http://sun4-2.userapi.com/c100500/path — rabta max-“xemx”, li tinsab fir-raba’ reġjun, it-tieni grupp ta’ servers. Jagħlaq il-fajl tal-passaġġ, li jinsab fiżikament fuq is-server 100500.

Cache

Aħna nżidu nodu ieħor fl-iskema arkitettonika tagħna - l-ambjent tal-caching.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Hawn taħt hija d-dijagramma tat-tqassim caches reġjonali, hemm madwar 20 minnhom. Dawn huma l-postijiet fejn jinsabu l-caches u "suns", li jistgħu jaħtfu t-traffiku permezz tagħhom infushom.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Dan huwa caching tal-kontenut multimedjali; l-ebda dejta tal-utent ma hija maħżuna hawn - biss mużika, vidjow, ritratti.

Biex tiddetermina r-reġjun tal-utent, aħna aħna niġbru prefissi tan-netwerk BGP imħabbra fir-reġjuni. Fil-każ ta 'fallback, irridu wkoll nanalizzaw id-database tal-geoip jekk ma nistgħux insibu l-IP bil-prefissi. Aħna niddeterminaw ir-reġjun mill-IP tal-utent. Fil-kodiċi, nistgħu nħarsu lejn reġjun wieħed jew aktar tal-utent - dawk il-punti li huwa l-eqreb ġeografikament għalihom.

Kif taħdem?

Aħna ngħoddu l-popolarità tal-fajls skont ir-reġjun. Hemm numru tal-cache reġjonali fejn jinsab l-utent, u identifikatur tal-fajl - nieħdu dan il-par u nżidu l-klassifikazzjoni ma 'kull download.

Fl-istess ħin, id-demons - servizzi fir-reġjuni - minn żmien għal żmien jaslu għand l-API u jgħidu: "Jiena tali u tali cache, agħtini lista tal-fajls l-aktar popolari fir-reġjun tiegħi li għadhom mhumiex fuqi. ” L-API tagħti mazz ta 'fajls magħżula skond il-klassifikazzjoni, id-daemon iniżżilhom, jeħodhom fir-reġjuni u jagħti l-fajls minn hemm. Din hija d-differenza fundamentali bejn pu/pp u Sun mill-caches: jagħtu l-fajl permezz tagħhom immedjatament, anki jekk dan il-fajl ma jkunx fil-cache, u l-cache l-ewwel tniżżel il-fajl għalih innifsu, u mbagħad jibda jagħtih lura.

F'dan il-każ nikbru kontenut eqreb lejn l-utenti u t-tixrid tat-tagħbija tan-netwerk. Pereżempju, biss mill-cache ta 'Moska aħna nqassmu aktar minn 1 Tbit/s matul is-sigħat peak.

Imma hemm problemi - cache servers mhumiex tal-gomma. Għal kontenut super popolari, xi drabi ma jkunx hemm biżżejjed netwerk għal server separat. Is-servers tal-cache tagħna huma 40-50 Gbit/s, iżda hemm kontenut li jimblokka kompletament kanal bħal dan. Qegħdin nimxu lejn l-implimentazzjoni tal-ħażna ta 'aktar minn kopja waħda ta' fajls popolari fir-reġjun. Nittama li nimplimentawha sal-aħħar tas-sena.

Ħarsa lejn l-arkitettura ġenerali.

  • Servers ta' quddiem li jaċċettaw talbiet.
  • Backends li jipproċessaw it-talbiet.
  • Ħażniet li jingħalqu b'żewġ tipi ta' prokuri.
  • Caches reġjonali.

X'hemm nieqes minn din id-dijagramma? Naturalment, id-databases li fihom naħżnu d-data.

Databases jew magni

Aħna nsejħulhom mhux databases, iżda magni - Magni, għaliex aħna prattikament m'għandniex databases fis-sens ġeneralment aċċettat.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Din hija miżura meħtieġa. Dan ġara għaliex fl-2008-2009, meta VK kellu tkabbir splussiv fil-popolarità, il-proġett ħadem għal kollox fuq MySQL u Memcache u kien hemm problemi. MySQL iħobb jikkraxxja u jikkorrompi fajls, u warajh ma jirkuprax, u Memcache gradwalment iddegrada fil-prestazzjoni u kellu jerġa 'jinbeda.

Jirriżulta li l-proġett dejjem aktar popolari kellu ħażna persistenti, li jikkorrompi d-data, u cache, li jonqos. F'kundizzjonijiet bħal dawn, huwa diffiċli li jiġi żviluppat proġett li qed jikber. Ġie deċiż li nippruvaw niktbu mill-ġdid l-affarijiet kritiċi li l-proġett kien iffukat fuqhom fuq ir-roti tagħna stess.

Is-soluzzjoni kienet ta’ suċċess. Kien hemm opportunità biex isir dan, kif ukoll neċessità estrema, għaliex modi oħra ta 'skala ma kinux jeżistu dak iż-żmien. Ma kienx hemm mazz ta 'databases, NoSQL kien għadu ma jeżistix, kien hemm biss MySQL, Memcache, PostrgreSQL - u hekk.

Operazzjoni universali. L-iżvilupp kien immexxi mit-tim tagħna ta 'żviluppaturi C u kollox sar b'mod konsistenti. Irrispettivament mill-magna, kollha kellhom bejn wieħed u ieħor l-istess format ta 'fajl miktub fuq disk, l-istess parametri ta' tnedija, ipproċessaw sinjali bl-istess mod, u ġabu ruħhom bejn wieħed u ieħor l-istess f'każ ta 'sitwazzjonijiet u problemi tat-tarf. Bit-tkabbir tal-magni, huwa konvenjenti għall-amministraturi li joperaw is-sistema - m'hemm l-ebda żoo li jeħtieġ li jinżamm, u għandhom jerġgħu jitgħallmu kif joperaw kull database ġdida ta 'parti terza, li għamilha possibbli li malajr u iżidu b’mod konvenjenti n-numru tagħhom.

Tipi ta' magni

It-tim kiteb pjuttost ftit magni. Hawn huma biss xi wħud minnhom: ħabib, ħjiel, immaġni, ipdb, ittri, listi, zkuk, memcached, meowdb, aħbarijiet, nostradamus, ritratt, playlists, pmemcached, sandbox, tfittxija, ħażna, likes, kompiti, ...

Għal kull kompitu li jeħtieġ struttura ta 'dejta speċifika jew tipproċessa talbiet atipiċi, it-tim C jikteb magna ġdida. Għaliex le.

Għandna magna separata memcached, li hija simili għal waħda regolari, iżda ma 'mazz ta' goodies, u li ma jonqosx. Mhux ClickHouse, iżda taħdem ukoll. Disponibbli separatament pmemcached - dan hu persistenti memcached, li tista 'wkoll taħżen data fuq disk, barra minn hekk, milli tidħol fis-RAM, sabiex ma titlef id-data meta terġa' tibda. Hemm diversi magni għal kompiti individwali: kjuwijiet, listi, settijiet - dak kollu li jeħtieġ il-proġett tagħna.

Clusters

Mill-perspettiva tal-kodiċi, m'hemmx bżonn li wieħed jaħseb f'magni jew databases bħala proċessi, entitajiet jew istanzi. Il-kodiċi jaħdem speċifikament ma 'clusters, bi gruppi ta' magni - tip wieħed għal kull cluster. Ejja ngħidu li hemm cluster memcached - huwa biss grupp ta 'magni.

Il-kodiċi m'għandux għalfejn ikun jaf il-post fiżiku, id-daqs, jew in-numru ta 'servers għal kollox. Huwa jmur għall-cluster billi juża ċertu identifikatur.

Biex dan jaħdem, trid iżżid entità oħra li tinsab bejn il-kodiċi u l-magni - prokura.

prokura RPC

Prokura xarabank li jgħaqqad, li fuqu jimxi kważi s-sit kollu. Fl-istess ħin għandna ebda skoperta tas-servizz — minflok, hemm konfigurazzjoni għal dan il-prokura, li jaf il-lokazzjoni tal-clusters kollha u shards kollha ta 'dan il-cluster. Dan huwa dak li jagħmlu l-amministraturi.

Il-programmaturi ma jimpurtahom xejn kemm, fejn u x'jiswa - huma biss imorru għall-cluster. Dan jippermettilna ħafna. Meta jirċievi talba, il-prokura tidderieġi mill-ġdid it-talba, billi jkun jaf fejn - jiddetermina dan huwa stess.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

F'dan il-każ, il-prokura hija punt ta' protezzjoni kontra l-falliment tas-servizz. Jekk xi magna tnaqqas jew tiġġarraf, allura l-prokura jifhem dan u jirrispondi kif xieraq għan-naħa tal-klijent. Dan jippermettilek tneħħi l-timeout - il-kodiċi ma jistenna li l-magna tirrispondi, iżda jifhem li mhux qed jaħdem u jeħtieġ li jġib ruħu b'xi mod differenti. Il-kodiċi għandu jkun ippreparat għall-fatt li d-databases mhux dejjem jaħdmu.

Implimentazzjonijiet speċifiċi

Kultant aħna xorta verament irridu li jkollna xi tip ta 'soluzzjoni mhux standard bħala magna. Fl-istess ħin, ġie deċiż li ma nużawx l-rpc-proxy lesti tagħna, maħluqa speċifikament għall-magni tagħna, iżda li nagħmlu prokura separata għall-kompitu.

Għal MySQL, li għad għandna hawn u hemm, nużaw db-proxy, u għal ClickHouse - Kittenhouse.

Ġeneralment jaħdem bħal dan. Hemm ċertu server, imexxi kPHP, Go, Python - b'mod ġenerali, kwalunkwe kodiċi li jista 'juża l-protokoll RPC tagħna. Il-kodiċi jimxi lokalment fuq prokura RPC - kull server fejn jinsab il-kodiċi jmexxi l-prokura lokali tiegħu stess. Fuq talba, il-prokura jifhem fejn għandu jmur.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Jekk magna waħda trid tmur għal oħra, anki jekk tkun ġar, tgħaddi minn prokura, minħabba li l-ġar jista 'jkun f'ċentru tad-dejta ieħor. Il-magna m'għandhiex tistrieħ fuq li tkun taf il-post ta 'xi ħaġa oħra minbarra nfisha - din hija s-soluzzjoni standard tagħna. Imma ovvjament hemm eċċezzjonijiet :)

Eżempju ta' skema TL li skontha joperaw il-magni kollha.

memcache.not_found                                = memcache.Value;
memcache.strvalue	value:string flags:int = memcache.Value;
memcache.addOrIncr key:string flags:int delay:int value:long = memcache.Value;

tasks.task
    fields_mask:#
    flags:int
    tag:%(Vector int)
    data:string
    id:fields_mask.0?long
    retries:fields_mask.1?int
    scheduled_time:fields_mask.2?int
    deadline:fields_mask.3?int
    = tasks.Task;
 
tasks.addTask type_name:string queue_id:%(Vector int) task:%tasks.Task = Long;

Dan huwa protokoll binarju, li l-eqreb analogu tiegħu huwa protobuf. L-iskema tippreskrivi oqsma fakultattivi, tipi kumplessi - estensjonijiet ta 'skalari built-in, u mistoqsijiet. Kollox jaħdem skont dan il-protokoll.

RPC fuq TL fuq TCP/UDP... UDP?

Għandna protokoll RPC għall-eżekuzzjoni tat-talbiet tal-magni li jimxi fuq l-iskema TL. Dan kollu jaħdem fuq konnessjoni TCP/UDP. TCP jinftiehem, imma għaliex għandna bżonn UDP spiss?

UDP jgħin tevita l-problema ta 'numru kbir ta' konnessjonijiet bejn is-servers. Jekk kull server għandu prokura RPC u, b'mod ġenerali, jista 'jmur għal kwalunkwe magna, allura hemm għexieren ta' eluf ta 'konnessjonijiet TCP għal kull server. Hemm tagħbija, iżda hija inutli. Fil-każ tal-UDP din il-problema ma teżistix.

Ebda handshake TCP żejda. Din hija problema tipika: meta titnieda magna ġdida jew server ġdid, ħafna konnessjonijiet TCP jiġu stabbiliti f'daqqa. Għal talbiet ħfief żgħar, pereżempju, tagħbija UDP, il-komunikazzjoni kollha bejn il-kodiċi u l-magna hija żewġ pakketti UDP: wieħed itir f'direzzjoni waħda, it-tieni fl-oħra. Vjaġġ tar-ritorn wieħed - u l-kodiċi rċieva tweġiba mill-magna mingħajr handshake.

Iva, kollox jaħdem biss b'persentaġġ żgħir ħafna ta 'telf ta' pakkett. Il-protokoll għandu appoġġ għal ritrażmissjoni u timeouts, imma jekk nitilfu ħafna, se nġibu kważi TCP, li mhux profittabbli. Aħna ma nsuqux UDP madwar l-oċeani.

Għandna eluf ta 'servers bħal dawn, u l-iskema hija l-istess: pakkett ta' magni huwa installat fuq kull server fiżiku. Huma fil-biċċa l-kbira b'ħajt wieħed biex jaħdmu malajr kemm jista 'jkun mingħajr imblukkar, u huma mqassma bħala soluzzjonijiet b'ħajt wieħed. Fl-istess ħin, m'għandna xejn aktar affidabbli minn dawn il-magni, u tingħata ħafna attenzjoni lill-ħażna persistenti tad-dejta.

Ħażna ta' data persistenti

Magni jiktbu binlogs. Binlog huwa fajl li fit-tmiem tiegħu jiżdied avveniment għal bidla fl-istat jew fid-dejta. F'soluzzjonijiet differenti tissejjaħ b'mod differenti: log binarju, WAL, AOF, iżda l-prinċipju huwa l-istess.

Biex tevita li l-magna terġa 'taqra l-binlog kollu għal ħafna snin meta terġa' tibda, il-magni jiktbu Snapshots - stat attwali. Jekk meħtieġ, jaqraw minnha l-ewwel, u mbagħad jispiċċaw il-qari mill-binlog. Il-binlogs kollha huma miktuba fl-istess format binarju - skont l-iskema TL, sabiex l-amministraturi jkunu jistgħu jamministrawhom bl-istess mod billi jużaw l-għodod tagħhom. M'hemm l-ebda ħtieġa bħal din għal snapshots. Hemm header ġenerali li jindika li snapshot huwa int, magic tal-magna, u liema korp mhux importanti għal ħadd. Din hija problema bil-magna li rreġistrat l-istampa.

Se niddeskrivi malajr il-prinċipju tal-operat. Hemm server li fuqu taħdem il-magna. Huwa jiftaħ binlog vojt ġdid għall-kitba u jikteb avveniment għall-bidla għaliha.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

F'xi punt, jew jiddeċiedi li jieħu ritratt huwa stess, jew jirċievi sinjal. Is-server joħloq fajl ġdid, jikteb l-istat kollu tiegħu fih, jehmeż id-daqs tal-binlog attwali - offset - mat-tmiem tal-fajl, u jkompli jikteb aktar. Binlog ġdid ma jinħoloqx.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

F'xi punt, meta l-magna reġgħet bdiet, se jkun hemm kemm binlog kif ukoll snapshot fuq id-diska. Il-magna taqra l-istampa sħiħa u tgħolli l-istat tagħha f'ċertu punt.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Jaqra l-pożizzjoni li kienet fil-ħin li nħolqot l-istampa u d-daqs tal-binlog.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Aqra t-tmiem tal-binlog biex tikseb l-istat attwali u tkompli tikteb aktar avvenimenti. Din hija skema sempliċi; il-magni kollha tagħna jaħdmu skontha.

Replikazzjoni tad-dejta

Bħala riżultat, id-data replikazzjoni fil tagħna ibbażat fuq stqarrija — aħna niktbu fil-binlog mhux xi tibdil fil-paġna, iżda jiġifieri talbiet għall-bidla. Simili ħafna għal dak li jiġi fuq in-netwerk, immodifikat ftit biss.

L-istess skema tintuża mhux biss għar-replikazzjoni, iżda wkoll biex toħloq backups. Għandna magna - kaptan tal-kitba li jikteb lill-binlog. Fi kwalunkwe post ieħor fejn l-amministraturi jistabbilixxuh, dan il-binlog jiġi kkupjat, u dak hu - għandna backup.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Jekk meħtieġ qari replikaBiex tnaqqas it-tagħbija tal-qari tas-CPU, il-magna tal-qari hija sempliċement imnedija, li taqra t-tmiem tal-binlog u tesegwixxi dawn il-kmandi lokalment.

Id-dewmien hawn huwa żgħir ħafna, u huwa possibbli li ssir taf kemm ir-replika għadha lura wara l-kaptan.

Tqassim tad-dejta fil-prokura RPC

Kif jaħdem sharding? Il-prokura kif jifhem lil liema shard ta’ cluster għandha tibgħat? Il-kodiċi ma jgħidx: "Ibgħat għal 15-il shards!" - le, dan isir mill-prokura.

L-aktar skema sempliċi hija firstint — l-ewwel numru fit-talba.

get(photo100_500) => 100 % N.

Dan huwa eżempju għal protokoll ta' test sempliċi memcached, iżda, ovvjament, il-mistoqsijiet jistgħu jkunu kumplessi u strutturati. L-eżempju jieħu l-ewwel numru fil-mistoqsija u l-bqija meta diviż bid-daqs tal-cluster.

Dan huwa utli meta rridu li jkollna lokalità tad-dejta ta 'entità waħda. Ejja ngħidu 100 huwa utent jew grupp ID, u rridu li d-dejta kollha ta 'entità waħda tkun fuq shard wieħed għal mistoqsijiet kumplessi.

Jekk ma jimpurtaniex kif it-talbiet huma mifruxa mal-cluster, hemm għażla oħra - hashing l-shard kollu.

hash(photo100_500) => 3539886280 % N

Nieħdu wkoll il-hash, il-bqija tad-diviżjoni u n-numru shard.

Dawn iż-żewġ għażliet jaħdmu biss jekk inkunu ppreparati għall-fatt li meta nżidu d-daqs tal-cluster, naqsmuh jew inżiduh b'ħafna drabi. Pereżempju, kellna shards 16, m'għandniex biżżejjed, irridu aktar - nistgħu niksbu 32 ​​b'mod sikur mingħajr waqfien. Jekk irridu nżidu mhux multipli, se jkun hemm waqfien, għax ma nkunux nistgħu naqsmu kollox b'mod preċiż mingħajr telf. Dawn l-għażliet huma utli, iżda mhux dejjem.

Jekk irridu nżidu jew ineħħu numru arbitrarju ta 'servers, nużaw Hashing konsistenti fuq iċ-ċirku a la Ketama. Iżda fl-istess ħin, nitilfu kompletament il-lokalità tad-dejta; irridu ngħaqqdu t-talba lill-cluster sabiex kull biċċa tirritorna r-rispons żgħir tagħha stess, u mbagħad ingħaqad it-tweġibiet għall-prokura.

Hemm talbiet super-speċifiċi. Jidher bħal dan: RPC proxy jirċievi t-talba, jiddetermina liema cluster tmur u jiddetermina l-shard. Imbagħad hemm jew kitba masters, jew, jekk il-cluster ikollu replika appoġġ, jibgħat lil replika fuq talba. Il-prokura tagħmel dan kollu.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Zkuk

Aħna niktbu zkuk b'diversi modi. L-aktar waħda ovvja u sempliċi hija ikteb zkuk għal memcache.

ring-buffer: prefix.idx = line

Hemm prefiss ewlieni - l-isem tal-ġurnal, linja, u hemm id-daqs ta 'dan il-ġurnal - in-numru ta' linji. Nieħdu numru każwali minn 0 għan-numru ta 'linji nieqes 1. Iċ-ċavetta f'memcache hija prefiss magħqud ma' dan in-numru każwali. Aħna niffrankaw il-linja tal-ġurnal u l-ħin kurrenti għall-valur.

Meta jkun meħtieġ li taqra zkuk, inwettqu Multi Get iċ-ċwievet kollha, magħżula skont il-ħin, u b'hekk tikseb log tal-produzzjoni f'ħin reali. L-iskema tintuża meta għandek bżonn tiddibaggja xi ħaġa fil-produzzjoni f'ħin reali, mingħajr ma tkisser xejn, mingħajr ma tieqaf jew tħalli t-traffiku lejn magni oħra, iżda dan il-ġurnal ma jdumx ħafna.

Għal ħażna affidabbli ta 'zkuk għandna magna zkuk-magna. Dan huwa preċiżament għaliex inħoloq u tintuża ħafna f'numru kbir ta 'clusters. L-akbar cluster li naf taħżen 600 TB ta’ zkuk ippakkjati.

Il-magna hija antika ħafna, hemm gruppi li diġà għandhom 6-7 snin. Hemm problemi magħha li qed nippruvaw insolvu, pereżempju, bdejna nużaw ClickHouse b'mod attiv biex naħżnu zkuk.

Ġbir taz-zkuk fi ClickHouse

Din id-dijagramma turi kif nimxu fil-magni tagħna.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Hemm kodiċi li jmur lokalment permezz tal-RPC għall-RPC-proxy, u jifhem fejn għandu jmur għall-magna. Jekk irridu niktbu zkuk f'ClickHouse, għandna bżonn nibdlu żewġ partijiet f'din l-iskema:

  • ibdel xi magna ma ClickHouse;
  • ibdel il-prokura RPC, li ma tistax taċċessa ClickHouse, b'xi soluzzjoni li tista ', u permezz ta' RPC.

Il-magna hija sempliċi - aħna nibdluha ma 'server jew grupp ta' servers ma 'ClickHouse.

U biex tmur ClickHouse, għamilna KittenHouse. Jekk immorru direttament minn KittenHouse għal ClickHouse, mhux se tlaħħaq. Anke mingħajr talbiet, dan jiżdied minn konnessjonijiet HTTP ta 'numru kbir ta' magni. Biex l-iskema taħdem, fuq server ma ClickHouse prokura reverse lokali titqajjem, li huwa miktub b'tali mod li jista 'jiflaħ il-volumi meħtieġa ta' konnessjonijiet. Jista' wkoll jibferja d-data fih innifsu b'mod relattivament affidabbli.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Xi drabi ma rridux nimplimentaw l-iskema RPC f'soluzzjonijiet mhux standard, pereżempju, f'nginx. Għalhekk, KittenHouse għandha l-abbiltà li tirċievi zkuk permezz tal-UDP.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Jekk il-mittent u r-riċevitur tar-zkuk jaħdmu fuq l-istess magna, allura l-probabbiltà li jitlef pakkett UDP fi ħdan il-host lokali hija pjuttost baxxa. Bħala kompromess bejn il-ħtieġa li tiġi implimentata RPC f'soluzzjoni ta 'parti terza u l-affidabbiltà, aħna sempliċement nużaw l-UDP li tibgħat. Nirritornaw għal din l-iskema aktar tard.

Monitoraġġ

Għandna żewġ tipi ta' zkuk: dawk miġbura mill-amministraturi fuq is-servers tagħhom u dawk miktuba mill-iżviluppaturi mill-kodiċi. Huma jikkorrispondu għal żewġ tipi ta 'metriċi: sistema u prodott.

Metriċi tas-sistema

Jaħdem fuq is-servers kollha tagħna netdata, li tiġbor l-istatistika u tibgħathom lil Karbonju tal-grafita. Għalhekk, ClickHouse tintuża bħala sistema ta 'ħażna, u mhux Whisper, pereżempju. Jekk meħtieġ, tista 'taqra direttament minn ClickHouse, jew tuża grafana għal metriċi, graffs u rapporti. Bħala żviluppaturi, għandna aċċess biżżejjed għal Netdata u Grafana.

Metriċi tal-prodott

Għall-konvenjenza, ktibna ħafna affarijiet. Pereżempju, hemm sett ta 'funzjonijiet ordinarji li jippermettulek tikteb Counts, UniqueCounts valuri fi statistiċi, li jintbagħtu x'imkien aktar.

statlogsCountEvent   ( ‘stat_name’,            $key1, $key2, …)
statlogsUniqueCount ( ‘stat_name’, $uid,    $key1, $key2, …)
statlogsValuetEvent  ( ‘stat_name’, $value, $key1, $key2, …)

$stats = statlogsStatData($params)

Sussegwentement, nistgħu nużaw filtri tal-għażla u tal-grupp u nagħmlu dak kollu li rridu mill-istatistika - nibnu graffs, ikkonfiguraw Watchdogs.

Aħna niktbu ħafna ħafna metriċi in-numru ta 'avvenimenti huwa minn 600 biljun għal 1 triljun kuljum. Madankollu, irridu nżommuhom mill-inqas ftit sninbiex jifhmu xejriet fil-metriċi. It-tqegħid kollu flimkien hija problema kbira li għadna ma solvejniex. Ngħidlek kif ilha taħdem għal dawn l-aħħar snin.

Għandna funzjonijiet li jiktbu dawn il-metriċi għal memcache lokalibiex jitnaqqas in-numru ta' entrati. Darba f'perjodu qasir ta' żmien imnedija lokalment stats-daemon jiġbor ir-rekords kollha. Sussegwentement, id-dimonju jgħaqqad il-metriċi f'żewġ saffi ta 'servers zkuk-kolletturi, li jiġbor l-istatistika minn mazz ta 'magni tagħna sabiex is-saff ta' warajhom ma jmutx.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Jekk meħtieġ, nistgħu niktbu direttament lil kolletturi taz-zkuk.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Iżda l-kitba mill-kodiċi direttament lill-kolletturi, billi tevita lil stas-daemom, hija soluzzjoni li ma tantx tista' tiskala minħabba li żżid it-tagħbija fuq il-kollettur. Is-soluzzjoni hija adattata biss jekk għal xi raġuni ma nistgħux ngħollu l-memcache stats-daemon fuq il-magna, jew iġġarraf u morna direttament.

Sussegwentement, zkuk-kolletturi jingħaqdu l-istatistika fi meowDB - din hija d-database tagħna, li tista 'wkoll taħżen metriċi.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Imbagħad nistgħu nagħmlu selezzjonijiet binarji "kważi SQL" mill-kodiċi.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Esperiment

Fis-sajf tal-2018, kellna hackathon intern, u ħarġet l-idea li nippruvaw nissostitwixxu l-parti ħamra tad-dijagramma b'xi ħaġa li tista 'taħżen metriċi f'ClickHouse. Għandna zkuk fuq ClickHouse - għaliex ma tippruvax?

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Kellna skema li kitbet zkuk permezz ta’ KittenHouse.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

Iddeċidejna żid “*House” oħra mad-dijagramma, li se tirċievi eżattament il-metriċi fil-format hekk kif il-kodiċi tagħna jiktebhom permezz ta 'UDP. Imbagħad din *House tibdelhom f'inserzjonijiet, bħal zkuk, li KittenHouse tifhem. Huwa jista 'jwassal perfettament dawn ir-zkuk lil ClickHouse, li għandu jkun kapaċi jaqrahom.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

L-iskema bil-memcache, stats-daemon u logs-collectors database hija sostitwita b'din waħda.

FAQ dwar l-arkitettura u x-xogħol ta 'VKontakte

L-iskema bil-memcache, stats-daemon u logs-collectors database hija sostitwita b'din waħda.

  • Hemm dispaċċ mill-kodiċi hawn, li huwa miktub lokalment fi StatsHouse.
  • StatsHouse jikteb metriċi UDP, diġà kkonvertiti f'inserzjonijiet SQL, lil KittenHouse f'lottijiet.
  • KittenHouse tibgħathom lil ClickHouse.
  • Jekk irridu naqrawhom, allura naqrawhom billi tevita StatsHouse - direttament minn ClickHouse billi tuża SQL regolari.

Għadu esperiment, imma aħna nħobbu kif jirriżulta. Jekk nirranġaw il-problemi bl-iskema, allura forsi naqilbu għal kollox. Personalment, nittama li hekk.

L-iskema ma jiffrankax il-ħadid. Inqas servers huma meħtieġa, stats-daemons u logs-collectors lokali mhumiex meħtieġa, iżda ClickHouse teħtieġ server akbar minn dawk fl-iskema attwali. Jinħtieġu inqas servers, iżda jridu jkunu aktar għaljin u aktar b'saħħithom.

Skjerament

L-ewwel, ejja nħarsu lejn l-iskjerament PHP. Qed niżviluppaw fi Mur: użu GitLab и TeamCity għall-iskjerament. Il-fergħat ta 'żvilupp huma magħquda fil-fergħa prinċipali, mill-kaptan għall-ittestjar huma magħquda fi staging, u mill-istadju fil-produzzjoni.

Qabel l-iskjerament, jittieħdu l-fergħa tal-produzzjoni attwali u dik preċedenti, u l-fajls diff huma kkunsidrati fihom - bidliet: maħluqa, imħassra, mibdula. Din il-bidla hija rreġistrata fil-binlog ta 'magna copyfast speċjali, li tista' malajr tirreplika l-bidliet fil-flotta kollha tas-server tagħna. Dak li jintuża hawn mhux ikkupjar direttament, iżda replikazzjoni tal-gossip, meta server wieħed jibgħat bidliet lill-eqreb ġirien tiegħu, dawk lill-ġirien tagħhom, eċċ. Dan jippermettilek taġġorna l-kodiċi f'għexieren u unitajiet ta' sekondi madwar il-flotta kollha. Meta l-bidla tilħaq ir-replika lokali, tapplika dawn l-irqajja’ tagħha sistema ta' fajls lokali. It-tkeċċija ssir ukoll skont l-istess skema.

Aħna wkoll niskjeraw ħafna kPHP u għandu wkoll l-iżvilupp tiegħu stess fuq Mur skond id-dijagramma ta' hawn fuq. Peress li dan HTTP server binarju, allura ma nistgħux nipproduċu diff - ir-rilaxx binarju jiżen mijiet ta 'MB. Għalhekk, hawn għażla oħra - il-verżjoni hija miktuba binlog copyfast. Ma 'kull build tiżdied, u matul rollback tiżdied ukoll. Verżjoni replikat għal servers. Copyfasts lokali jaraw li verżjoni ġdida daħlet fil-binlog, u bl-istess replikazzjoni tal-gossip jieħdu l-aħħar verżjoni tal-binarju għalihom infushom, mingħajr ma għeja s-server kaptan tagħna, iżda b'attenzjoni jinfirxu t-tagħbija fuq in-netwerk. Dak li ġej tnedija mill-ġdid grazzjuż għall-verżjoni l-ġdida.

Għall-magni tagħna, li huma wkoll essenzjalment binarji, l-iskema hija simili ħafna:

  • fergħa kaptan tal-git;
  • binarju in .deb;
  • il-verżjoni hija miktuba fuq binlog copyfast;
  • replikat għal servers;
  • is-server jiġbed .dep frisk;
  • dpkg -i;
  • tnedija mill-ġdid grazzjuż għal verżjoni ġdida.

Id-differenza hija li l-binarju tagħna huwa ppakkjat fl-arkivji .deb, u meta ippumpjar huma dpkg -i jitqiegħdu fuq is-sistema. Għaliex kPHP jiġi skjerat bħala binarju, u l-magni huma skjerati bħala dpkg? Dan ġara hekk. Taħdem - tmissx.

Ħoloq utli:

Alexey Akulovich huwa wieħed minn dawk li, bħala parti mill-Kumitat tal-Programm, jgħin PHP Russja fis-17 ta 'Mejju se jsir l-akbar avveniment għall-iżviluppaturi PHP fi żminijiet riċenti. Ħares liema PC frisk għandna, xiex kelliema (tnejn minnhom qed jiżviluppaw il-qalba tal-PHP!) - tidher qisha xi ħaġa li ma tistax titlef jekk tikteb PHP.

Sors: www.habr.com

Żid kumment