FAQ momba ny maritrano sy ny asan'ny VKontakte

Ny tantaran'ny famoronana VKontakte dia ao amin'ny Wikipedia; Pavel mihitsy no nilaza izany. Toa efa fantatry ny rehetra izy. Momba ny atiny, ny maritrano ary ny firafitry ny tranokala amin'ny HighLoad++ Pavel hoy aho tamin'ny 2010. Mpizara maro no tafaporitsaka nanomboka teo, ka havaozinay ny vaovao: hozarainay, hanala ny ao anatiny, lanjaina, ary hijery ny fitaovana VK amin'ny lafiny teknika.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Alexey Akulovich (AterCattus) mpandrindra backend ao amin'ny ekipa VKontakte. Ny dika mitovy amin'ity tatitra ity dia valiny iraisana amin'ireo fanontaniana apetraka matetika momba ny fampandehanana ny sehatra, fotodrafitrasa, lohamilina ary fifandraisana eo amin'izy ireo, fa tsy momba ny fampandrosoana, izany hoe momba ny vy. Misaraka, momba ny angon-drakitra sy izay ananan'ny VK kosa, momba ny fanangonana logs sy ny fanaraha-maso ny tetikasa iray manontolo. Ny antsipiriany eo ambanin'ny fanapahana.



Nandritra ny efa-taona mahery aho no niatrika ireo karazana asa rehetra mifandraika amin'ny backend.

  • Mampakatra, mitahiry, manodina, mizara haino aman-jery: horonan-tsary, mivantana mivantana, feo, sary, antontan-taratasy.
  • Fotodrafitrasa, sehatra, fanaraha-maso ny developer, logs, cache-paritra, CDN, protocol RPC proprietary.
  • Fampidirana amin'ny serivisy ivelany: fampandrenesana fanosehana, parsing rohy ivelany, famahanana RSS.
  • Manampy ny mpiara-miasa amin'ny fanontaniana isan-karazany, ny valiny izay mitaky mitsoraka amin'ny kaody tsy fantatra.

Nandritra io fotoana io dia nanana tanana tamin'ny singa maro tao amin'ilay tranokala aho. Te hizara ity traikefa ity aho.

Architecture ankapobeny

Ny zava-drehetra, toy ny mahazatra, dia manomboka amin'ny mpizara na vondrona mpizara izay manaiky fangatahana.

Server aloha

Ny mpizara eo aloha dia manaiky fangatahana amin'ny alàlan'ny HTTPS, RTMP ary WSS.

HTTPS - ireto no fangatahana ny dikan-tranonkala lehibe sy finday amin'ny tranokala: vk.com sy m.vk.com, ary mpanjifa ofisialy sy tsy ofisialy hafa an'ny API: mpanjifa finday, iraka. Misy fandraisana RTMP-Fifamoivoizana ho an'ny fampielezam-peo mivantana miaraka amin'ny lohamilina misaraka sy WSS- fifandraisana ho an'ny Streaming API.

Ho an'ny HTTPS sy WSS amin'ny mpizara dia mendrika izany nginx. Ho an'ny fandefasana RTMP, vao haingana izahay no nivadika tamin'ny vahaolanay manokana kive, fa any an-dafin'ny tatitry ny tatitra. Ho an'ny fandeferana diso, ireo mpizara ireo dia manao dokambarotra adiresy IP mahazatra ary miasa amin'ny vondrona mba tsy ho very ny fangatahan'ny mpampiasa raha misy olana amin'ny iray amin'ireo mpizara. Ho an'ny HTTPS sy WSS, ireo lohamilina mitovy ireo dia manodinkodina ny fifamoivoizana mba handraisana anjara amin'ny enta-mavesatra CPU.

Tsy hiresaka bebe kokoa momba ny WSS sy RTMP izahay, fa momba ny fangatahana HTTPS mahazatra, izay matetika mifandray amin'ny tetikasa tranonkala.

Backend

Ao ambadiky ny anoloana dia matetika misy mpizara backend. Izy ireo dia mikarakara ny fangatahana azon'ny mpizara eo aloha avy amin'ny mpanjifa.

izany kPHP mpizara, izay mandeha ny daemon HTTP, satria efa voahidy ny HTTPS. kPHP dia mpizara izay mandeha modely prefork: manomboka dingana maîtrise, andian-ankizy maromaro, mandalo socket mihaino azy ireo ary mikarakara ny fangatahan'izy ireo. Amin'ity tranga ity, ny dingana dia tsy averina eo anelanelan'ny fangatahana tsirairay avy amin'ny mpampiasa, fa avereno fotsiny amin'ny toetry ny zero-value tany am-boalohany - fangatahana aorian'ny fangatahana, fa tsy manomboka.

Fizarana entana

Ny lamosinay rehetra dia tsy fitambarana milina lehibe afaka mikarakara ny fangatahana rehetra. Izahay azy ireo mizara ho vondrona samihafa: ankapobeny, finday, api, horonan-tsary, fampisehoana... Tsy hisy fiantraikany amin'ny hafa rehetra ny olana amin'ny vondrona milina misaraka. Raha misy olana amin'ny horonan-tsary, ny mpampiasa izay mihaino mozika dia tsy hahafantatra akory ny olana. Izay backend handefasana ny fangatahana dia tapa-kevitra amin'ny nginx eo anoloana araka ny config.

Fanangonana metrika sy fampifandanjana

Mba hahatakarana hoe firy ny fiara tokony hananantsika isaky ny vondrona, isika aza miantehitra amin'ny QPS. Ny backend dia samy hafa, samy hafa ny fangatahana, ny fangatahana tsirairay dia manana fahasarotana hafa amin'ny kajy QPS. Izany no mahatonga antsika miasa miaraka amin'ny foto-kevitra momba ny enta-mavesatra eo amin'ny mpizara manontolo - amin'ny CPU sy ny perf.

Manana mpizara an'arivony toy izany izahay. Ny mpizara ara-batana tsirairay dia mitantana vondrona kPHP mba hanodina ny cores rehetra (satria kofehy tokana ny kPHP).

Content Server

CS na Content Server dia fitahirizana. CS dia mpizara izay mitahiry rakitra ary manodina ireo rakitra nampidirina sy ireo karazana asa synchronous rehetra izay omen'ny web frontend azy.

Manana mpizara ara-batana an'aliny izahay mitahiry rakitra. Ny mpampiasa dia tia mampakatra rakitra, ary tianay ny mitahiry sy mizara azy ireo. Ny sasany amin'ireo mpizara ireo dia nakaton'ny mpizara pu/pp manokana.

pu/pp

Raha nanokatra ny tabilao tambajotra ao amin'ny VK ianao dia nahita pu/pp.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Inona no atao hoe pu/pp? Raha manakatona mpizara iray isika, dia misy safidy roa hampidirana sy hisintona rakitra amin'ny mpizara izay nakatona: mivantana ny alalan ' http://cs100500.userapi.com/path na amin'ny alàlan'ny server intermediate - http://pu.vk.com/c100500/path.

Pu no anarana manan-tantara amin'ny fampiakarana sary, ary pp dia proxy sary. Izany hoe, ny lohamilina iray dia natao hampakatra sary, ary ny iray hafa kosa ho an'ny fampiakarana. Ankehitriny tsy ny sary ihany no entina, fa ny anarana dia voatahiry.

Ireo mpizara ireo atsaharo ny fivoriana HTTPShanesorana ny entana processeur amin'ny fitahirizana. Ary koa, satria voahodina amin'ireo lohamilina ireo ny rakitra mpampiasa, ny fampahalalana tsy dia saro-pady voatahiry ao amin'ireo milina ireo no tsara kokoa. Ohatra, ny fanalahidy fanafenana HTTPS.

Koa satria ny milina dia nakaton'ny milina hafa, dia afaka ny tsy hanome azy ireo "fotsy" IP ivelany, ary manome "gray". Tamin'izany fomba izany dia nitahiry tao amin'ny dobo IP izahay ary niantoka ny fiarovana ny milina amin'ny fidirana ivelany - tsy misy IP hidirana fotsiny.

Faharetana amin'ny IP iombonana. Raha ny momba ny fandeferana diso dia mitovy ny tetika - mpizara ara-batana maro no manana IP ara-batana mahazatra, ary ny fitaovana eo anoloan'izy ireo dia misafidy ny toerana handefasana ny fangatahana. Hiresaka safidy hafa aho any aoriana any.

Ny teboka mampiady hevitra dia ny amin'ity tranga ity ny mpanjifa dia mitazona fifandraisana vitsy kokoa. Raha misy IP mitovy amin'ny milina maromaro - miaraka amin'ny mpampiantrano iray ihany: pu.vk.com na pp.vk.com, ny navigateur mpanjifa dia manana fetra amin'ny isan'ny fangatahana miaraka amin'ny mpampiantrano iray. Saingy amin'ny fotoanan'ny HTTP/2 hatraiza hatraiza, mino aho fa tsy misy dikany intsony izany.

Ny tsy fahampian'ny drafitra dia ny tsy maintsy atao paompy ny fifamoivoizana rehetra, izay mankany amin'ny fitahirizana, amin'ny alàlan'ny mpizara hafa. Koa satria manondraka ny fifamoivoizana amin'ny milina izahay, dia tsy mbola afaka manondraka fifamoivoizana be, ohatra, horonan-tsary, mampiasa tetika mitovy. Ampitainay mivantana izany - fifandraisana mivantana misaraka ho an'ny fitahirizana misaraka manokana ho an'ny horonan-tsary. Mampita votoaty maivana kokoa amin'ny alalan'ny proxy izahay.

Vao tsy ela akory izay dia nahazo kinova proxy nohatsaraina izahay. Ankehitriny dia holazaiko aminao ny maha-samihafa azy ireo amin'ny olon-tsotra ary nahoana no ilaina izany.

Sun

Tamin'ny Septambra 2017, Oracle, izay nividy Sun teo aloha, nandroaka mpiasan'ny Sun marobe. Afaka milaza isika fa amin'izao fotoana izao dia tsy nisy intsony ny orinasa. Rehefa nisafidy anarana ho an'ny rafitra vaovao ny mpitantana anay dia nanapa-kevitra ny hanome voninahitra ny fahatsiarovana an'ity orinasa ity ary nomena anarana hoe Masoandro ny rafitra vaovao. Amin'ny tenantsika dia antsoina hoe "masoandro" fotsiny izy.

FAQ momba ny maritrano sy ny asan'ny VKontakte

pp dia nanana olana vitsivitsy. IP iray isaky ny vondrona - cache tsy mahomby. Mpizara ara-batana maro no mizara adiresy IP mahazatra, ary tsy misy fomba hifehezana izay lohamilina halehan'ny fangatahana. Noho izany, raha misy mpampiasa samihafa tonga amin'ny rakitra iray ihany, dia raha misy cache ao amin'ireo lohamilina ireo, ny rakitra dia miafara amin'ny cache an'ny mpizara tsirairay. Tetika tena tsy mahomby io, saingy tsy nisy azo natao.

Noho izany- tsy afaka mizara votoaty isika, satria tsy afaka misafidy mpizara manokana ho an'ity vondrona ity izahay - manana IP iraisana izy ireo. Ary koa noho ny antony anatiny sasany ananantsika tsy azo atao ny mametraka lohamilina toy izany any amin'ny faritra. Tao Saint-Pétersbourg ihany no nijoroan’izy ireo.

Miaraka amin'ny masoandro, nanova ny rafitra fifantenana izahay. Ankehitriny dia manana anycast routing: lalana dynamique, anycast, daemon manamarina tena. Ny mpizara tsirairay dia manana IP manokana, fa subnet mahazatra. Ny zava-drehetra dia voarindra amin'ny fomba izay raha tsy mahomby ny mpizara iray, dia miparitaka amin'ny lohamilina hafa amin'ny vondrona iray ihany ny fifamoivoizana. Ankehitriny dia azo atao ny mifidy mpizara manokana, tsy misy cache tafahoatra, ary tsy nisy fiantraikany ny fahatokisana.

Fanohanana lanja. Amin'izao fotoana izao dia afaka mametraka milina amin'ny hery samihafa araka izay ilaina isika, ary koa, raha misy olana vonjimaika, manova ny lanjan'ny "masoandro" miasa mba hampihenana ny enta-mavesatra eo aminy, mba "hiala sasatra" ary manomboka miasa indray.

Sharding amin'ny votoaty id. Zavatra mampihomehy momba ny sharding: mazàna no manaparitaka votoaty izahay mba hahafahan'ireo mpampiasa samihafa mandeha amin'ny rakitra iray amin'ny alàlan'ny "masoandro" iray ihany mba hananany cache iombonana.

Vao haingana izahay no namoaka ny fampiharana "Clover". Ity dia fanontaniana an-tserasera amin'ny fampielezam-peo mivantana, izay ametrahan'ny mpampiantrano fanontaniana ary valian'ny mpampiasa amin'ny fotoana tena izy, misafidy safidy. Ny app dia manana chat ahafahan'ny mpampiasa mifampiresaka. Afaka mifandray amin'ny fampielezam-peo miaraka mihoatra ny 100 arivo ny olona. Izy rehetra dia manoratra hafatra izay alefa amin'ny mpandray anjara rehetra, ary misy avatar miaraka amin'ny hafatra. Raha olona 100 arivo no tonga amin'ny avatar iray ao anatin'ny "masoandro" iray, dia mety hihodinkodina ao ambadiky ny rahona izany indraindray.

Mba hanoherana ny fiparitahan'ny fangatahana mitovy amin'ny rakitra iray, dia ho an'ny karazana atiny iray no avadikay tetika adala izay manaparitaka rakitra amin'ny "masoandro" rehetra misy ao amin'ny faritra.

Masoandro avy ao anatiny

Reverse proxy amin'ny nginx, cache na amin'ny RAM na amin'ny kapila Optane/NVMe haingana. Ohatra: http://sun4-2.userapi.com/c100500/path — rohy mankany amin'ny "masoandro", izay hita ao amin'ny faritra fahefatra, ny vondrona mpizara faharoa. Manakatona ny rakitra lalana, izay mipetraka ara-batana amin'ny mpizara 100500.

fonony

Manampy node iray hafa amin'ny rafitra ara-javakanto izahay - ny tontolo caching.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Ity ambany ity ny kisary fisehon'ny cache faritra, misy 20 eo ho eo izy ireo. Ireo no toerana misy ny cache sy ny "masoandro", izay afaka mitahiry ny fifamoivoizana amin'ny tenany.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Ity dia cache votoaty multimedia; tsy misy angon-drakitra mpampiasa voatahiry eto - mozika, horonan-tsary, sary fotsiny.

Mba hamaritana ny faritry ny mpampiasa, izahay manangona prefix amin'ny tambajotra BGP nambara any amin'ny faritra izahay. Amin'ny trangan'ny fallback dia tsy maintsy manara-maso ny angon-drakitra geoip ihany koa isika raha tsy mahita ny IP amin'ny alàlan'ny prefix. Izahay no mamaritra ny faritra amin'ny alàlan'ny IP an'ny mpampiasa. Ao amin'ny kaody dia afaka mijery faritra iray na maromaro amin'ny mpampiasa isika - ireo teboka izay akaiky azy ara-jeografika.

Ahoana no miasa?

Isainay ny lazan'ny rakitra araka ny faritra. Misy ny isan'ny cache faritra misy ny mpampiasa, ary ny famantarana ny rakitra - alainay ity mpivady ity ary ampitomboinay ny naoty isaky ny fampidinana.

Mandritra izany fotoana izany, ny demony - serivisy any amin'ny faritra - indraindray dia tonga ao amin'ny API ary miteny hoe: "Izaho no cache toy izany, omeo ahy ny lisitry ny rakitra malaza indrindra ao amin'ny faritra misy ahy izay tsy mbola ato amiko. ” Ny API dia manolotra rakitra maromaro voasokajy araka ny naoty, ny daemon no misintona azy ireo, mitondra azy ireo any amin'ny faritra ary manatitra ireo rakitra avy any. Ity no fahasamihafana fototra eo amin'ny pu/pp sy ny Sun avy amin'ny caches: omeny avy hatrany ny rakitra, na dia tsy ao anaty cache aza ity rakitra ity, ary ny cache dia misintona ny rakitra ho azy aloha, ary avy eo dia manomboka mamerina izany.

Amin'ity tranga ity dia mahazo votoaty akaiky kokoa ny mpampiasa ary manaparitaka ny vesatry ny tambajotra. Ohatra, avy amin'ny cache ao Moskoa ihany no mizara mihoatra ny 1 Tbit/s mandritra ny ora be.

Saingy misy olana - Ny mpizara cache dia tsy fingotra. Ho an'ny votoaty malaza be, indraindray tsy ampy ny tambajotra ho an'ny mpizara mitokana. Ny lohamilina cache dia 40-50 Gbit/s, saingy misy votoaty manakatona tanteraka ny fantsona toy izany. Miroso amin'ny fametrahana fitahirizana rakitra malaza mihoatra ny iray ao amin'ny faritra izahay. Manantena aho fa hampihatra izany amin'ny faran'ny taona.

Nijery ny maritrano ankapobeny izahay.

  • Mpizara eo aloha izay manaiky fangatahana.
  • Mamerina ny fangatahana fangatahana.
  • Fitehirizana voahidy amin'ny karazana proxy roa.
  • Cache faritra.

Inona no tsy ampy amin'ity kisary ity? Mazava ho azy, ny angon-drakitra izay itahirizantsika angona.

Databases na maotera

Tsy ny angona no iantsoanay azy ireo, fa ny motera - Motera, satria saika tsy manana tahiry amin'ny heviny eken'ny besinimaro izahay.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Fepetra ilaina izany. Nitranga izany satria tamin'ny taona 2008-2009, rehefa nitombo be ny lazany ny VK, dia niasa tanteraka tamin'ny MySQL sy Memcache ny tetikasa ary nisy olana. Tena tian'ny MySQL ny nandrava sy nanimba ny rakitra, taorian'izay dia tsy niverina intsony, ary niharatsy tsikelikely ny fahombiazan'ny Memcache ary tsy maintsy naverina naverina.

Hita fa ny tetikasa miha-malaza dia manana fitahirizana maharitra, izay manimba angon-drakitra, ary misy cache, izay miadana. Amin'ny toe-javatra toy izany dia sarotra ny mamolavola tetikasa mitombo. Tapa-kevitra ny hanandrana hanoratra indray ireo zavatra manan-danja izay nifantohan'ny tetikasa tamin'ny bisikiletanay manokana.

Nahomby ny vahaolana. Nisy ny fahafahana nanao izany, ary koa ny filàna faran'izay mafy, satria tsy nisy ny fomba fanamafisam-peo hafa tamin'izany fotoana izany. Tsy nisy angon-drakitra maromaro, tsy mbola nisy ny NoSQL, ny MySQL, Memcache, PostrgreSQL ihany - ary izay no izy.

Hetsika manerantany. Ny fampandrosoana dia notarihin'ny ekipanay C developer ary ny zava-drehetra dia natao tamin'ny fomba tsy tapaka. Na inona na inona motera, izy rehetra dia manana endrika mitovy amin'ny rakitra nosoratana tamin'ny kapila, mitovy ny mari-pamantarana fanombohana, ireo famantarana nokarakaraina tamin'ny fomba mitovy, ary nitovy ny fitondrantenany raha sendra misy toe-javatra sy olana. Miaraka amin'ny fitomboan'ny maotera dia mety tsara ho an'ny mpitantana ny miasa ny rafitra - tsy misy toeram-pijerem-biby izay mila tazonina, ary tsy maintsy mianatra indray ny fomba fiasan'ny antoko fahatelo vaovao, izay nahafahana nitombo haingana sy mora. ny isany.

Karazana maotera

Nanoratra milina vitsivitsy ny ekipa. Ireto ny sasany amin'izy ireo: namana, soso-kevitra, sary, ipdb, litera, lisitra, logs, memcached, meowdb, vaovao, nostradamus, sary, playlists, pmemcached, sandbox, fikarohana, fitahirizana, tia, asa, ...

Ho an'ny asa tsirairay izay mitaky firafitry ny angon-drakitra manokana na fanodinana ny fangatahana atypical, ny ekipa C dia manoratra motera vaovao. Fa nahoana no tsy.

Manana motera mitokana izahay memcached, izay mitovitovy amin'ny mahazatra, fa miaraka amin'ny karazan-tsoavaly, ary tsy miadana. Tsy ClickHouse, fa miasa ihany koa. Misy misaraka pmemcached - ity dia maharitra memcached, izay afaka mitahiry angon-drakitra amin'ny kapila ihany koa, ankoatra izay, mifanaraka amin'ny RAM, mba tsy ho very data rehefa manomboka. Misy motera isan-karazany ho an'ny asa tsirairay: filaharana, lisitra, set - izay rehetra takian'ny tetikasantsika.

sampahony

Amin'ny fomba fijery kaody, tsy ilaina ny mieritreritra ny motera na angona ho toy ny dingana, enti-manana, na ohatra. Ny kaody dia miasa manokana amin'ny cluster, miaraka amin'ny vondrona motera - karazana iray isaky ny cluster. Andao atao hoe misy cluster memcached - vondrona milina fotsiny izy io.

Ny kaody dia tsy mila mahafantatra ny toerana ara-batana, ny habeny, na ny isan'ny mpizara. Mandeha any amin'ny cluster izy amin'ny fampiasana famantarana iray.

Mba hampandehanana izany dia mila manampy singa iray hafa ianao izay eo anelanelan'ny code sy ny motera - taratasy fanomezam-pahefana.

RPC proxy

taratasy fanomezam-pahefana bus mampifandray, izay saika mandeha ny tranokala manontolo. Amin'izay fotoana izay koa isika dia manana tsy mahita serivisy - fa kosa, misy config ho an'ity proxy ity, izay mahafantatra ny toerana misy ny cluster rehetra sy ny ampahany rehetra amin'ity cluster ity. Izany no ataon'ny admin.

Ny mpandrindra dia tsy miraharaha mihitsy hoe ohatrinona, aiza ary ohatrinona ny vidiny - mandeha any amin'ny cluster fotsiny izy ireo. Izany dia mamela antsika betsaka. Rehefa mahazo fangatahana, ny proxy dia mamindra ny fangatahana, mahafantatra hoe aiza - izy no mamaritra izany.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Amin'ity tranga ity, ny proxy dia teboka fiarovana amin'ny tsy fahombiazan'ny serivisy. Raha miadana na mianjera ny motera sasany, dia takatry ny proxy izany ary mamaly mifanaraka amin'ny mpanjifa. Izany dia mamela anao hanaisotra ny fe-potoana - ny kaody dia tsy miandry ny maotera mamaly, fa mahatakatra fa tsy miasa ary mila mitondra tena amin'ny fomba hafa. Ny kaody dia tsy maintsy miomana amin'ny zava-misy fa tsy mandeha foana ny angon-drakitra.

Fampiharana manokana

Indraindray isika dia tena te hanana karazana vahaolana tsy manara-penitra ho toy ny motera. Nandritra izany fotoana izany dia nanapa-kevitra ny tsy hampiasa ny rpc-proxy efa vita, noforonina manokana ho an'ny moteranay, fa hanao proxy manokana ho an'ny asa.

Ho an'ny MySQL, izay mbola ananantsika etsy sy eroa, dia mampiasa db-proxy izahay, ary ho an'ny ClickHouse - Kittenhouse.

Amin'ny ankapobeny dia miasa toy izao izy io. Misy mpizara iray, mandeha kPHP, Go, Python - amin'ny ankapobeny, izay code rehetra afaka mampiasa ny protocol RPC. Ny kaody dia mandeha eo an-toerana amin'ny proxy RPC - ny mpizara tsirairay izay misy ny kaody dia mitondra ny proxy eo an-toerana. Raha angatahana dia takatry ny proxy ny toerana haleha.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Raha te handeha amin'ny iray hafa ny motera iray, na dia mpifanolo-bodirindrina aza, dia mandeha amin'ny proxy, satria ny mpifanolo-bodirindrina dia mety any amin'ny foibe data hafa. Ny motera dia tsy tokony hiantehitra amin'ny fahafantarana ny toerana misy na inona na inona afa-tsy ny tenany - izany no vahaolana mahazatra. Fa mazava ho azy fa misy maningana :)

Ohatra iray amin'ny TL-skema izay miasa ny motera rehetra.

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;

Ity dia protocol binary, ny analogue akaiky indrindra dia protobuf. Ny skema dia mamaritra saha tsy azo atao, karazana saro-takarina - fanitarana scalars naorina, ary fanontaniana. Ny zava-drehetra dia miasa araka ity protocol ity.

RPC mihoatra ny TL mihoatra ny TCP/UDP… UDP?

Manana protocol RPC izahay amin'ny fanatanterahana ny fangatahana maotera izay mandeha eo an-tampon'ny rafitra TL. Izany rehetra izany dia miasa amin'ny fifandraisana TCP/UDP. TCP dia azo takarina, fa nahoana isika no mila UDP matetika?

Manampy ny UDP ialao ny olan'ny fifandraisana be dia be eo amin'ny mpizara. Raha manana proxy RPC ny mpizara tsirairay ary, amin'ny ankapobeny, dia afaka mandeha amin'ny motera rehetra, dia misy fifandraisana TCP an'aliny isaky ny mpizara. Misy enta-mavesatra, nefa tsy misy ilana azy. Raha ny UDP dia tsy misy io olana io.

Tsy misy fifampikasohana TCP miverimberina. Olana mahazatra ity: rehefa misy motera vaovao na lohamilina vaovao natomboka dia maro ny fifandraisana TCP no tafapetraka indray mandeha. Ho an'ny fangatahana kely maivana, ohatra, ny karama UDP, ny fifandraisana rehetra eo amin'ny code sy ny motera dia fonosana UDP roa: ny iray manidina amin'ny lalana iray, ny faharoa amin'ny ilany iray. Iray fihodinana - ary ny kaody nahazo valiny avy amin'ny maotera tsy misy tànana.

Eny, miasa fotsiny izany rehetra izany miaraka amin'ny isan-jaton'ny fahaverezan'ny fonosana. Ny protocol dia manana fanohanana ny fandefasana indray sy ny fiatoana, fa raha very be isika dia hahazo TCP saika, izay tsy mahasoa. Tsy mitondra UDP manerana ny ranomasina izahay.

Manana mpizara an'arivony toy izany izahay, ary mitovy ny tetika: misy motera iray napetraka amin'ny mpizara ara-batana tsirairay. Ny ankamaroany dia manana kofehy tokana izy ireo mba hihazakazaka haingana araka izay azo atao tsy misy fanakanana, ary voaravaka ho vahaolana tokana. Amin'izay fotoana izay ihany, tsy manana zavatra azo itokisana kokoa noho ireo motera ireo isika, ary be dia be ny fiheverana ny fitahirizana angon-drakitra maharitra.

Fitehirizana angon-drakitra maharitra

Manoratra binlogs ny motera. Ny binlog dia rakitra iray amin'ny fiafaran'ny fampidirana hetsika ho an'ny fanovana fanjakana na data. Amin'ny vahaolana samihafa dia antsoina amin'ny fomba hafa: log binary, Wal, AOF, fa mitovy ny foto-pitsipika.

Mba hisorohana ny motera tsy hamaky ny binlog manontolo mandritra ny taona maro rehefa manomboka indray, dia manoratra ny motera snapshots - fanjakana ankehitriny. Raha ilaina, dia mamaky azy ireo aloha izy ireo, ary avy eo dia mamarana ny famakiana ao amin'ny binlog. Ny binlogs rehetra dia nosoratana tamin'ny endrika binary mitovy - araka ny rafitra TL, mba ahafahan'ny admin mitantana azy ireo mitovy amin'ny fitaovany. Tsy ilaina ny snapshot toy izany. Misy lohateny ankapobeny izay manondro hoe iza no sary int, majika amin'ny motera, ary iza no vatana tsy manan-danja amin'ny olona. Olana amin'ny motera nandrakitra ny sary.

Holazaiko haingana ny fitsipiky ny fiasana. Misy mpizara izay mandeha ny motera. Manokatra binlog poakaty vaovao ho an'ny fanoratana izy ary manoratra hetsika hanovana izany.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Amin'ny fotoana iray dia manapa-kevitra ny haka sary ny tenany izy, na mahazo famantarana. Mamorona rakitra vaovao ny mpizara, manoratra ny toerany manontolo ao anatiny, mampiditra ny haben'ny binlog ankehitriny - offset - amin'ny faran'ny rakitra, ary manohy manoratra bebe kokoa. Tsy noforonina ny binlog vaovao.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Amin'ny fotoana iray, rehefa miverina ny motera, dia hisy binlog sy sary eo amin'ny kapila. Ny motera dia mamaky ny sary manontolo ary mampiakatra ny toerany amin'ny fotoana iray.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Mamaky ny toerana nisy tamin'ny fotoana namoronana ny sary sy ny haben'ny binlog.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Mamaky ny faran'ny binlog hahazoana ny fanjakana ankehitriny ary manohy manoratra hetsika fanampiny. Tetika tsotra ity, ny moteranay rehetra dia miasa araka izany.

Data replication

Vokatr'izany, ny replication data ao aminay mifototra amin'ny fanambarana - tsy manoratra ao amin'ny binlog izahay fa tsy misy fanovana pejy, fa izany fanovana fangatahana. Tena mitovy amin'izay tonga amin'ny tambazotra, novaina kely fotsiny.

Ny rafitra mitovy dia ampiasaina tsy amin'ny replication, fa koa mba hamorona backups. Manana motera izahay - tompon'andraikitra manoratra amin'ny binlog. Any amin'ny toerana hafa izay nametrahan'ny admin azy io dia adika io binlog io, ary izay ihany - manana backup izahay.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Raha mila ianao mamaky kopiaMba hampihenana ny enta-mavesatra amin'ny famakiana CPU dia alefa tsotra izao ny maotera mamaky, izay mamaky ny faran'ny binlog ary manatanteraka ireo baiko ireo eo an-toerana.

Ny fahatarana eto dia tena kely, ary azo atao ny mamantatra hoe ohatrinona ny replica ao ambadiky ny tompony.

Fizarana data amin'ny proxy RPC

Ahoana no fiasan'ny sharding? Ahoana no ahafantaran'ny proxy hoe iza amin'ny cluster shard halefa? Ny kaody dia tsy milaza hoe: "Alefaso 15 shards!" - Tsia, ataon'ny proxy izany.

Ny tetika tsotra indrindra dia voalohany - ny laharana voalohany amin'ny fangatahana.

get(photo100_500) => 100 % N.

Ity dia ohatra ho an'ny protocole texte memcached tsotra, saingy, mazava ho azy, ny fanontaniana dia mety ho sarotra sy voalamina. Ny ohatra dia maka ny isa voalohany amin'ny fangatahana ary ny ambiny rehefa zaraina amin'ny haben'ny cluster.

Tena ilaina izany rehefa te-hanana toerana misy angon-drakitra amin'ny singa tokana. Andeha hatao hoe 100 dia mpampiasa na vondrona ID, ary tianay ny angon-drakitra rehetra amin'ny sampana iray ho ao anaty shard iray ho an'ny fanontaniana sarotra.

Raha tsy miraharaha ny fomba fielezan'ny fangatahana manerana ny cluster izahay dia misy safidy hafa - hashing ny shard rehetra.

hash(photo100_500) => 3539886280 % N

Mahazo ihany koa ny hash, ny ambiny amin'ny fizarana ary ny isa shard.

Ireo safidy roa ireo dia tsy miasa afa-tsy raha miomana amin'ny zava-misy isika fa rehefa mampitombo ny haben'ny cluster isika dia hizara izany na hampitombo azy imbetsaka. Ohatra, nanana shards 16 izahay, tsy ampy izahay, mila bebe kokoa - afaka mahazo 32 tsy misy fiatoana izahay. Raha tiantsika ny hampitombo fa tsy ny maro, dia hisy ny fiatoana, satria tsy ho afaka hanasaraka tsara ny zava-drehetra tsy misy fatiantoka isika. Ireo safidy ireo dia mahasoa, fa tsy foana.

Raha mila manampy na manaisotra mpizara tsy misy dikany izahay dia mampiasa Hashing tsy tapaka amin'ny peratra a la Ketama. Saingy miaraka amin'izay koa, very tanteraka ny toerana misy ny angon-drakitra; tsy maintsy manambatra ny fangatahana amin'ny cluster isika mba hamerenan'ny ampahany tsirairay ny valin-teniny manokana, ary avy eo manambatra ny valiny amin'ny proxy.

Misy fangatahana super spécific. Toa izao: ny proxy RPC dia mandray ny fangatahana, mamaritra izay cluster haleha ary mamaritra ny shard. Avy eo dia misy ny tompon'ny fanoratana, na, raha manana fanohanana kopia ny cluster, dia alefany any amin'ny dika mitovy amin'ny fangatahana. Ny proxy no manao izany rehetra izany.

FAQ momba ny maritrano sy ny asan'ny VKontakte

hazo

Manoratra logs amin'ny fomba maro izahay. Ny tena mazava sy tsotra dia manorata logs amin'ny memcache.

ring-buffer: prefix.idx = line

Misy tovana fototra - ny anaran'ny log, tsipika, ary misy ny haben'ity log ity - ny isan'ny andalana. Maka isa kisendrasendra isika manomboka amin'ny 0 ka hatramin'ny isan'ny andalana minus 1. Ny lakile ao amin'ny memcache dia prefix mitambatra amin'io isa kisendrasendra io. Tehirizinay ny tsipika log sy ny fotoana ankehitriny amin'ny sandany.

Rehefa ilaina ny mamaky logs dia manatanteraka Multi Get ny fanalahidy rehetra, nalahatra araka ny fotoana, ary noho izany dia mahazo ny famokarana diary amin'ny fotoana tena izy. Ny tetika dia ampiasaina rehefa mila debug zavatra amin'ny famokarana amin'ny fotoana tena izy, tsy misy manimba na inona na inona, tsy mijanona na mamela ny fifamoivoizana amin'ny milina hafa, fa tsy maharitra ela io log io.

Ho an'ny fitahirizana hazo azo antoka dia manana motera izahay logs-motera. Izany indrindra no antony namoronana azy ary ampiasaina betsaka amin'ny clusters marobe. Ny cluster lehibe indrindra fantatro amin'ny fitehirizana 600 TB amin'ny vatan-kazo.

Efa antitra be ny maotera, misy cluster efa 6-7 taona. Misy olana amin'izany izay ezahinay hamahana, ohatra, nanomboka nazoto nampiasa ClickHouse izahay mba hitahiry logs.

Manangona logs ao amin'ny ClickHouse

Ity kisary ity dia mampiseho ny fomba fandehanantsika amin'ny moterantsika.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Misy kaody mandeha eo an-toerana amin'ny alàlan'ny RPC mankany amin'ny RPC-proxy, ary azony ny toerana haleha amin'ny motera. Raha te hanoratra logs ao amin'ny ClickHouse isika dia mila manova ampahany roa amin'ity rafitra ity:

  • manolo ny motera sasany amin'ny ClickHouse;
  • soloy ny proxy RPC, izay tsy afaka miditra amin'ny ClickHouse, miaraka amin'ny vahaolana azo atao, ary amin'ny alàlan'ny RPC.

Tsotra ny motera - soloina amin'ny mpizara na vondron'ny mpizara miaraka amin'ny ClickHouse.

Ary mba handeha amin'ny ClickHouse, dia nanao izany izahay KittenHouse. Raha mandeha mivantana avy ao amin'ny KittenHouse mankany ClickHouse isika, dia tsy hiatrika izany. Na dia tsy misy fangatahana aza dia manampy amin'ny fifandraisana HTTP amin'ny milina marobe. Mba hiasa ny tetika, amin'ny mpizara miaraka amin'ny ClickHouse atsangana ny proxy mivadika eo an-toerana, izay nosoratana tamin'ny fomba izay mahazaka ny habetsaky ny fifandraisana ilaina. Izy io ihany koa dia afaka manangana angon-drakitra ao anatin'ny tena azo antoka.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Indraindray isika dia tsy te hampihatra ny RPC drafitra amin'ny vahaolana tsy manara-penitra, ohatra, amin'ny nginx. Noho izany, ny KittenHouse dia manana fahafahana mandray logs amin'ny UDP.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Raha miasa amin'ny milina iray ihany ny mpandefa sy ny mpandray ny logs, dia kely ny mety ho very fonosana UDP ao anatin'ny mpampiantrano eo an-toerana. Amin'ny maha marimaritra iraisana eo amin'ny filàna fampiharana ny RPC amin'ny vahaolana amin'ny antoko fahatelo sy ny fahamendrehana, dia mampiasa UDP fotsiny izahay. Hiverina amin'ity tetika ity isika aoriana kely.

fanaraha-maso

Manana karazana log roa izahay: ireo nangonin'ny mpitantana ao amin'ny lohamiliny sy ireo nosoratan'ny mpamorona avy amin'ny code. Mifanaraka amin'ny karazana metrika roa izy ireo: rafitra sy vokatra.

Metrika rafitra

Izy io dia miasa amin'ny mpizara rehetra netdata, izay manangona antontan'isa ary mandefa azy ireo any Carbon Graphite. Noho izany, ClickHouse dia ampiasaina ho toy ny rafitra fitahirizana, fa tsy Whisper, ohatra. Raha ilaina, dia afaka mamaky mivantana avy amin'ny ClickHouse, na mampiasa grafana ho an'ny metrika, kisary ary tatitra. Amin'ny maha-mpamorona anay dia manana fahafahana miditra amin'ny Netdata sy Grafana izahay.

Metrika vokatra

Ho fanamorana dia nanoratra zavatra maro izahay. Ohatra, misy andiana fiasa mahazatra ahafahanao manoratra Counts, UniqueCounts soatoavina ho antontan'isa, izay alefa any amin'ny toerana lavitra kokoa.

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

$stats = statlogsStatData($params)

Aorian'izay, afaka mampiasa sivana fanasokajiana sy fanakambanana isika ary manao izay rehetra tadiavintsika amin'ny antontan'isa - manangana grafika, manamboatra Watchdogs.

Tena manoratra izahay metrika maro ny isan'ny hetsika dia avy amin'ny 600 lavitrisa ka hatramin'ny 1 trillion isan'andro. Na izany aza, tianay ny hitazona azy ireo farafahakeliny roa taonahahatakatra ny fironana amin'ny metrika. Olana lehibe tsy mbola voavaha ny fampifangaroana azy rehetra. Lazaiko aminao ny fandehany tao anatin'ny taona vitsivitsy izay.

Manana asa manoratra ireo metrika ireo izahay mankany memcache eo an-toeranahampihenana ny isan'ny fidirana. Indray mandeha tao anatin'ny fotoana fohy dia natomboka teny an-toerana stats-daemon manangona ny firaketana rehetra. Manaraka, manambatra ny metrika ho mpizara roa sosona ny demonia mpanangona hazo, izay manangona antontan'isa avy amin'ny andian'ny milinantsika mba tsy ho faty ny sosona ao ambadik'izy ireo.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Raha ilaina dia afaka manoratra mivantana amin'ny mpanangona hazo isika.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Fa ny fanoratana avy amin'ny kaody mivantana mankany amin'ny mpanangom-bokatra, miala amin'ny stas-daemom, dia vahaolana tsy azo esorina satria mampitombo ny enta-mavesatry ny mpanangona izany. Ny vahaolana dia mety raha tsy misy antony tsy afaka manangana ny memcache stats-daemon amin'ny milina, na nianjera ary nandeha mivantana izahay.

Manaraka, manambatra ny antontan'isa ny mpanangom-bokatra meowDB - ity no angonay, izay afaka mitahiry metrika ihany koa.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Avy eo isika dia afaka manao safidy binary "akaiky-SQL" avy amin'ny kaody.

FAQ momba ny maritrano sy ny asan'ny VKontakte

andrana

Tamin'ny fahavaratry ny taona 2018, nanao hackathon anatiny izahay, ary tonga ny hevitra hanandrana hanolo ny ampahany mena amin'ny kisary amin'ny zavatra afaka mitahiry metrika ao amin'ny ClickHouse. Manana logs ao amin'ny ClickHouse izahay - maninona raha manandrana izany?

FAQ momba ny maritrano sy ny asan'ny VKontakte

Nanana tetika izahay izay nanoratra logs tamin'ny alàlan'ny KittenHouse.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Nanapa-kevitra izahay ampio “*Trano” iray hafa amin'ny kisary, izay handray tsara ny metrika amin'ny endrika rehefa manoratra azy ireo amin'ny alalan'ny UDP ny kaodinay. Avy eo ity *Trano ity dia mamadika azy ireo ho insert, toy ny hazo, izay takatry ny KittenHouse. Afaka manatitra tsara ireo logs ireo amin'ny ClickHouse izy, izay tokony ho afaka mamaky azy ireo.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Ny rafitra misy memcache, stats-daemon ary logs-collectors database dia nosoloina ity iray ity.

FAQ momba ny maritrano sy ny asan'ny VKontakte

Ny rafitra misy memcache, stats-daemon ary logs-collectors database dia nosoloina ity iray ity.

  • Misy fandefasana avy amin'ny kaody eto, izay voasoratra eo an-toerana ao amin'ny StatsHouse.
  • StatsHouse dia manoratra metrika UDP, efa niova ho insert SQL, ho an'ny KittenHouse amin'ny andiany.
  • KittenHouse dia mandefa azy ireo any amin'ny ClickHouse.
  • Raha te hamaky azy ireo izahay dia mamaky azy ireo amin'ny alàlan'ny StatsHouse - mivantana avy amin'ny ClickHouse mampiasa SQL mahazatra.

Mbola izany ve andrana, fa tianay ny fandehany. Raha mamaha ny olana amin'ny drafitra isika, dia mety hivadika tanteraka amin'izany. Izaho manokana dia manantena izany.

Ny tetika tsy mahavonjy vy. Vitsy kokoa ny mpizara ilaina, tsy ilaina ny stats-daemons sy logs-collectors eo an-toerana, fa ny ClickHouse dia mila mpizara lehibe kokoa noho ireo ao amin'ny drafitra ankehitriny. Vitsy kokoa ny mpizara ilaina, saingy tsy maintsy lafo sy matanjaka kokoa izy ireo.

miisa

Voalohany, andeha hojerentsika ny fametrahana PHP. Mivoatra amin'ny Mandehana: fampiasana GitLab и TeamCity ho an'ny fametrahana. Ny sampana fampandrosoana dia mitambatra ao amin'ny sampana master, avy amin'ny master ho an'ny fitsapana dia mitambatra ho amin'ny sehatra, ary avy amin'ny sehatra ho amin'ny famokarana.

Alohan'ny fametrahana dia alaina ny sampana famokarana ankehitriny sy ny teo aloha, ary ny rakitra diff dia raisina ao aminy - fanovana: noforonina, nofafana, niova. Ity fanovana ity dia voarakitra ao amin'ny binlog an'ny motera copyfast manokana, izay afaka mamerina haingana ny fanovana amin'ny andian-tsambo mpizara manontolo. Ny ampiasaina eto dia tsy mandika mivantana, fa replication ny fosafosa, rehefa mandefa fanovana amin'ny mpifanolo-bodirindrina aminy ny mpizara iray, ny mpifanolo-bodirindrina aminy, sy ny sisa. Izany dia ahafahanao manavao ny kaody ao anatin'ny folo sy segondra segondra manerana ny fiaramanidina manontolo. Rehefa tonga any amin'ny kopia eo an-toerana ny fanovana dia ampihariny amin'ny azy ireo patch ireo rafitra rakitra eo an-toerana. Ny famerenana dia atao ihany koa araka ny drafitra mitovy.

Mametraka kPHP betsaka ihany koa izahay ary manana ny fivoarany manokana ihany koa Mandehana araka ny kisary etsy ambony. Hatramin'izao Binary mpizara HTTP, dia tsy afaka mamokatra diff isika - milanja MB an-jatony ny binary famoahana. Noho izany, misy safidy iray hafa eto - ny dikan-ny nanoratana binlog copyfast. Isaky ny fananganana dia mitombo izany, ary mandritra ny famerenana dia mitombo ihany koa. Malagasy Bible averina amin'ny mpizara. Ny copyfasts eo an-toerana dia mahita fa misy dikan-teny vaovao niditra tao amin'ny binlog, ary amin'ny alàlan'ny replication ny fifosana mitovy amin'izany dia alainy ho azy ireo ny dikan-teny farany farany amin'ny binary, tsy mandreraka ny mpizara tompony, fa manaparitaka tsara ny entana manerana ny tambajotra. Inona no manaraka famerenana indray ho an'ny dikan-teny vaovao.

Ho an'ny moteranay, izay tena binaries ihany koa, dia mitovy ny tetika:

  • git master branch;
  • binary in .deb;
  • ny dikan-teny dia nosoratana tamin'ny binlog copyfast;
  • averina amin'ny mpizara;
  • maka .dep vaovao ny mpizara;
  • dpkg -i;
  • mamelona indray amin'ny dikan-teny vaovao.

Ny mahasamihafa azy dia ny binary antsika dia voarakitra anaty arisiva .deb, ary rehefa mipoitra izy ireo dpkg -i dia apetraka amin'ny rafitra. Nahoana ny kPHP no apetraka ho binary, ary ny motera dia apetraka ho dpkg? Izany no nitranga. Miasa izany - aza kitihina.

Rohy mahasoa:

Alexey Akulovich dia iray amin'ireo izay, ao anatin'ny Komitin'ny Fandaharana, manampy PHP Rosia amin'ny 17 May no ho lasa hetsika lehibe indrindra ho an'ny mpamorona PHP tato ho ato. Jereo ny PC mahafinaritra ananantsika, inona miteny (Ny roa amin'izy ireo dia mampivelatra ny fototry ny PHP!) - toa zavatra tsy azonao atao raha manoratra PHP ianao.

Source: www.habr.com

Add a comment