Thaum lub sij hawm no, kuv muaj ib txhais tes nyob rau hauv ntau yam ntawm lub site. Kuv xav qhia qhov kev paub no.
General architecture
Txhua yam, raws li ib txwm, pib nrog ib tus neeg rau zaub mov lossis pab pawg ntawm cov servers uas lees txais kev thov.
Pem hauv ntej server
Lub server pem hauv ntej lees txais kev thov ntawm HTTPS, RTMP thiab WSS.
HTTPS - cov no yog kev thov rau lub vev xaib tseem ceeb thiab lub vev xaib ntawm lub vev xaib: vk.com thiab m.vk.com, thiab lwm tus neeg ua haujlwm thiab tsis raug cai ntawm peb API: cov neeg siv xov tooj ntawm tes, cov tub txib. Peb muaj kev txais tos RTMP-traffic rau Live broadcasts nrog cais pem hauv ntej servers thiab WSS- Kev sib txuas rau Streaming API.
Rau HTTPS thiab WSS ntawm servers nws tsim nyog nginx. Rau RTMP tshaj tawm, peb nyuam qhuav hloov mus rau peb tus kheej kev daws teeb meem kiv, tab sis nws yog dhau ntawm qhov kev tshaj tawm. Rau kev ua txhaum cai, cov servers no tshaj tawm cov chaw nyob IP thiab ua hauv pab pawg kom yog tias muaj teeb meem ntawm ib qho ntawm cov servers, cov neeg siv thov tsis ploj. Rau HTTPS thiab WSS, tib cov servers no encrypt cov tsheb khiav mus los txhawm rau koom nrog CPU load rau lawv tus kheej.
Peb yuav tsis tham ntxiv txog WSS thiab RTMP, tab sis tsuas yog hais txog tus qauv HTTPS thov, uas feem ntau cuam tshuam nrog lub vev xaib project.
backend
Qab pem hauv ntej muaj feem ntau backend servers. Lawv txheej txheem thov kom cov neeg rau zaub mov pem hauv ntej tau txais los ntawm cov neeg siv khoom.
no kPHP servers, uas HTTP daemon tab tom khiav, vim HTTPS twb decrypted lawm. kPHP yog lub server uas khiav ntawm prefork qauv: pib tus txheej txheem tswv, ib pawg ntawm cov txheej txheem me nyuam, dhau qhov kev mloog rau lawv thiab lawv ua lawv cov lus thov. Hauv qhov no, cov txheej txheem tsis rov pib dua ntawm txhua qhov kev thov los ntawm tus neeg siv, tab sis tsuas yog rov pib dua lawv lub xeev mus rau qhov qub zero-tus nqi xeev - thov tom qab thov, tsis yog rov pib dua.
Thauj khoom faib khoom
Tag nrho peb cov backends tsis yog lub pas dej loj ntawm cov cav tov uas tuaj yeem ua cov lus thov. Peb lawv muab faib ua pawg: general, mobile, api, video, staging... Qhov teeb meem ntawm ib pawg ntawm cov tshuab yuav tsis cuam tshuam rau lwm tus. Nyob rau hauv cov ntaub ntawv ntawm teeb meem nrog video, tus neeg siv uas mloog suab paj nruag yuav tsis txawm paub txog cov teeb meem. Qhov twg backend xa qhov kev thov rau yog txiav txim siab los ntawm nginx nyob rau pem hauv ntej raws li config.
Metric sau thiab rebalancing
Yuav kom nkag siab tias peb yuav tsum muaj pes tsawg lub tsheb hauv txhua pab pawg, peb tsis txhob cia siab rau QPS. Cov backends txawv, lawv muaj kev thov sib txawv, txhua qhov kev thov muaj qhov sib txawv ntawm kev suav QPS. Yog vim li cas peb peb ua haujlwm nrog lub tswv yim ntawm kev thauj khoom ntawm lub server tag nrho - ntawm CPU thiab perf.
Peb muaj ntau txhiab tus servers zoo li no. Txhua lub cev neeg rau zaub mov khiav ib pab pawg kPHP kom rov ua dua tag nrho cov cores (vim tias kPHP yog ib qho threaded).
Cov ntsiab lus Server
CS lossis Content Server yog qhov chaw cia. CS yog tus neeg rau zaub mov uas khaws cov ntaub ntawv thiab tseem ua cov ntaub ntawv upload thiab txhua hom kev ua haujlwm tom qab synchronous uas lub vev xaib tseem ceeb hauv ntej muab rau nws.
Peb muaj kaum tawm txhiab tus neeg siv lub cev uas khaws cov ntaub ntawv. Cov neeg siv nyiam upload cov ntaub ntawv, thiab peb nyiam khaws thiab qhia lawv. Qee cov servers no raug kaw los ntawm cov servers tshwj xeeb pu/pp.
puv/p
Yog tias koj qhib lub network tab hauv VK, koj pom pu / pp.
Pu/pp yog dab tsi? Yog tias peb kaw ib tus neeg rau zaub mov tom qab lwm qhov, ces muaj ob txoj hauv kev rau uploading thiab rub tawm cov ntaub ntawv mus rau lub server uas raug kaw: ncaj qha los ntawm http://cs100500.userapi.com/path los yog ntawm intermediate server - http://pu.vk.com/c100500/path.
Pu yog lub npe keeb kwm rau kev yees duab upload, thiab pp yog photo proxy. Ntawd yog, ib lub server yog rau uploading duab, thiab lwm qhov yog rau uploading. Tam sim no tsis tsuas yog cov duab raug thauj khoom, tab sis lub npe tau khaws cia.
Cov servers no xaus HTTPS ntukom tshem tawm cov processor load los ntawm kev cia. Tsis tas li ntawd, txij li cov neeg siv cov ntaub ntawv tau ua tiav ntawm cov servers, cov ntaub ntawv tsis tshua muaj txiaj ntsig khaws cia hauv cov tshuab no, qhov zoo dua. Piv txwv li, HTTPS encryption keys.
Txij li thaum lub tshuab raug kaw los ntawm peb lwm lub tshuab, peb muaj peev xwm them taus tsis pub lawv "dawb" IPs sab nraud, thiab muab "grey". Txoj kev no peb tau txais kev cawmdim ntawm lub pas dej IP thiab tau lees paub los tiv thaiv cov tshuab los ntawm kev nkag mus rau sab nraud - tsuas yog tsis muaj tus IP nkag mus rau hauv nws.
Resiliency dhau IPs sib koom. Hais txog kev ua txhaum cai, lub tswv yim ua haujlwm zoo ib yam - ob peb lub cev servers muaj ib qho IP lub cev, thiab cov khoom siv nyob rau hauv pem hauv ntej ntawm lawv xaiv qhov twg xa daim ntawv thov. Kuv mam li tham txog lwm yam kev xaiv tom qab.
Lub ntsiab lus tsis sib haum xeeb yog qhov no tus neeg siv khoom khaws kev sib txuas tsawg dua. Yog tias muaj tib tus IP rau ntau lub tshuab - nrog tib tus tswv tsev: pu.vk.com lossis pp.vk.com, tus neeg siv khoom browser muaj qhov txwv ntawm tus naj npawb ntawm kev thov ib txhij rau ib tus tswv tsev. Tab sis nyob rau hauv lub sij hawm ntawm ubiquitous HTTP / 2, kuv ntseeg hais tias qhov no tsis yog li ntawd tseem ceeb.
Qhov pom tseeb qhov tsis zoo ntawm lub tswv yim yog tias nws yuav tsum twj tso kua mis tag nrho cov tsheb, uas mus rau qhov chaw cia, los ntawm lwm tus neeg rau zaub mov. Txij li thaum peb tso tsheb khiav los ntawm cov cav tov, peb tseem tsis tau tso tsheb khiav hnyav, piv txwv li, video, siv tib lub tswv yim. Peb xa nws ncaj qha - ib qho kev sib txuas ncaj qha rau kev sib cais tshwj xeeb rau kev yees duab. Peb xa cov ntsiab lus sib dua los ntawm lub npe.
Tsis ntev tas los no peb tau txais kev txhim kho version ntawm npe. Tam sim no kuv yuav qhia koj seb lawv txawv li cas ntawm cov tib neeg thiab vim li cas qhov no yog qhov tsim nyog.
Tshav
Thaum lub Cuaj Hlis 2017, Oracle, uas yav tas los yuav Sun, tshem tawm ntau tus neeg ua haujlwm Sun. Peb tuaj yeem hais tias lub sijhawm no lub tuam txhab tau tso tseg. Thaum xaiv lub npe rau lub kaw lus tshiab, peb cov thawj coj txiav txim siab them se rau lub cim xeeb ntawm lub tuam txhab no thiab muab lub npe tshiab rau Sun. Ntawm peb tus kheej peb tsuas yog hu nws "suns".
pp muaj ob peb teeb meem. Ib tus IP rau ib pab pawg - tsis muaj txiaj ntsig cache. Ob peb lub cev servers sib koom ib qho chaw nyob IP, thiab tsis muaj txoj hauv kev los tswj cov server uas qhov kev thov yuav mus rau. Yog li, yog tias cov neeg siv sib txawv tuaj rau tib cov ntaub ntawv, ces yog tias muaj cache ntawm cov servers no, cov ntaub ntawv xaus rau hauv cache ntawm txhua tus neeg rau zaub mov. Qhov no yog ib txoj kev ua tsis tau zoo, tab sis tsis muaj dab tsi ua tau.
Yog li ntawd - peb tsis tuaj yeem shard cov ntsiab lus, vim peb tsis tuaj yeem xaiv ib tus neeg rau zaub mov tshwj xeeb rau pab pawg no - lawv muaj tus IP sib xws. Kuj rau qee qhov laj thawj sab hauv peb muaj nws tsis tuaj yeem nruab cov servers hauv cheeb tsam. Lawv sawv hauv St. Petersburg xwb.
Nrog rau lub hnub, peb hloov cov txheej txheem xaiv. Tam sim no peb muaj anycast routing: dynamic routing, anycast, tus kheej-check daemon. Txhua tus neeg rau zaub mov muaj nws tus kheej tus IP, tab sis ib qho subnet. Txhua yam yog teeb tsa nyob rau hauv ib txoj kev uas yog tias ib tus neeg rau zaub mov tsis ua haujlwm, cov tsheb khiav mus thoob plaws lwm cov servers ntawm tib pab pawg tau txais. Tam sim no nws muaj peev xwm xaiv ib lub server tshwj xeeb, tsis redundant caching, thiab kev ntseeg tau tsis cuam tshuam.
Kev txhawb nqa hnyav. Tam sim no peb muaj peev xwm them taus rau nruab cov tshuab ntawm lub zog sib txawv raws li qhov xav tau, thiab tseem, yog tias muaj teeb meem ib ntus, hloov qhov hnyav ntawm kev ua haujlwm "hnub" los txo cov load ntawm lawv, kom lawv "so" thiab pib ua haujlwm dua.
Nyob rau tib lub sijhawm, dab - kev pabcuam hauv cheeb tsam - qee lub sijhawm tuaj rau API thiab hais tias: "Kuv zoo li thiab zoo li lub cache, muab cov npe ntawm cov ntaub ntawv nrov tshaj plaws hauv kuv cheeb tsam uas tseem tsis tau muaj rau kuv. β API xa ib pawg ntawm cov ntaub ntawv txheeb xyuas los ntawm kev ntaus nqi, daemon rub tawm lawv, coj lawv mus rau thaj tsam thiab xa cov ntaub ntawv los ntawm qhov ntawd. Qhov no yog qhov sib txawv ntawm pu / pp thiab Sun los ntawm caches: lawv muab cov ntaub ntawv los ntawm lawv tus kheej tam sim ntawd, txawm tias cov ntaub ntawv no tsis nyob hauv cache, thiab lub cache ua ntej rub tawm cov ntaub ntawv rau nws tus kheej, thiab tom qab ntawd pib muab nws rov qab.
Hauv qhov no peb tau txais cov ntsiab lus ze rau cov neeg siv thiab nthuav tawm lub network load. Piv txwv li, tsuas yog los ntawm Moscow cache peb faib ntau tshaj 1 Tbit / s thaum lub sij hawm ncov.
Tab sis muaj teeb meem - cache servers tsis yog roj hmab. Rau cov ntsiab lus nrov heev, qee zaum tsis muaj lub network txaus rau lub server cais. Peb cov cache servers yog 40-50 Gbit / s, tab sis muaj cov ntsiab lus uas cuam tshuam tag nrho cov channel. Peb tab tom txav mus rau kev siv cia ntau tshaj ib daim qauv ntawm cov ntaub ntawv nrov hauv cheeb tsam. Kuv vam tias peb yuav siv nws los ntawm qhov kawg ntawm lub xyoo.
Peb saib ntawm lub dav hlau architecture.
Pem hauv ntej servers uas txais kev thov.
Backends cov txheej txheem thov.
Cov chaw khaws cia uas raug kaw los ntawm ob hom proxies.
Regional caches.
Dab tsi yog ploj ntawm daim duab no? Tau kawg, cov databases uas peb khaws cov ntaub ntawv.
Databases los yog cav
Peb hu lawv tsis databases, tab sis cav - cav, vim hais tias peb xyaum tsis muaj databases nyob rau hauv lub feem ntau lees paub.
Qhov no yog ib qho kev ntsuas tsim nyog. Qhov no tshwm sim vim hais tias xyoo 2008-2009, thaum VK muaj kev loj hlob ntawm kev muaj koob meej, qhov project tau ua haujlwm tag nrho ntawm MySQL thiab Memcache thiab muaj teeb meem. MySQL nyiam ua cov ntaub ntawv tsis raug thiab tsis raug, tom qab ntawd nws yuav tsis rov qab los, thiab Memcache maj mam degraded hauv kev ua tau zoo thiab yuav tsum tau rov pib dua.
Nws hloov tawm hais tias qhov kev ua haujlwm nrov tau nce mus tas li, uas cuam tshuam cov ntaub ntawv, thiab lub cache, uas ua rau qeeb. Nyob rau hauv cov xwm txheej zoo li no, nws yog ib qho nyuaj rau kev tsim ib txoj haujlwm loj hlob. Nws tau txiav txim siab los sim rov sau dua qhov tseem ceeb uas qhov project tau tsom mus rau peb tus kheej lub tsheb kauj vab.
Kev daws tau tiav. Muaj lub sijhawm los ua qhov no, nrog rau qhov tsim nyog kawg, vim tias lwm txoj hauv kev ntawm kev ntsuas tsis muaj nyob rau lub sijhawm ntawd. Tsis muaj ib pawg ntawm cov databases, NoSQL tseem tsis tau muaj, tsuas muaj MySQL, Memcache, PostrgreSQL - thiab qhov ntawd yog nws.
Universal kev ua haujlwm. Txoj kev loj hlob tau coj los ntawm peb pab pawg C tsim tawm thiab txhua yam tau ua tiav zoo ib yam. Txawm hais tias ntawm lub cav, lawv txhua tus muaj kwv yees li tib cov ntaub ntawv sau rau disk, tib qhov kev tso tawm tsis tau, ua tiav cov teeb liab tib yam, thiab coj kwv yees li qub nyob rau hauv cov xwm txheej ntawm ntug thiab teeb meem. Nrog rau kev loj hlob ntawm cov cav, nws yog qhov yooj yim rau cov thawj coj ua haujlwm - tsis muaj lub vaj tsiaj uas yuav tsum tau khaws cia, thiab lawv yuav tsum tau rov kawm txog kev ua haujlwm ntawm txhua tus neeg thib peb cov ntaub ntawv tshiab, uas ua rau nws tuaj yeem ua tau sai thiab yooj yim nce. lawv tus lej.
Hom cav
Pab neeg tau sau ob peb lub cav. Nov yog qee qhov ntawm lawv: phooj ywg, lus qhia, duab, ipdb, ntawv, npe, teev, teev, memcached, meowdb, xov xwm, nostradamus, yees duab, playlists, pmemcached, sandbox, nrhiav, cia, nyiam, ua haujlwm, ...
Rau txhua txoj haujlwm uas yuav tsum muaj cov qauv ntaub ntawv tshwj xeeb lossis cov txheej txheem atypical thov, pab pawg C sau lub cav tshiab. Vim li cas ho tsis.
Peb muaj lub cav sib cais memcached, uas zoo ib yam li ib txwm, tab sis nrog ib pawg ntawm goodies, thiab uas tsis qeeb. Tsis ClickHouse, tab sis nws kuj ua haujlwm. Muaj cais pmemca ua Yog persistent memcached, uas tseem tuaj yeem khaws cov ntaub ntawv ntawm disk, ntxiv rau, dua li haum rau hauv RAM, kom tsis txhob poob cov ntaub ntawv thaum rov pib dua. Muaj ntau lub cav rau ib tus neeg ua haujlwm: queues, npe, teev - txhua yam uas peb xav tau.
Pawg
Los ntawm kev pom kev cai, tsis tas yuav xav txog cov cav lossis cov ntaub ntawv raws li cov txheej txheem, cov koom haum, lossis cov xwm txheej. Cov cai ua haujlwm tshwj xeeb nrog pawg, nrog cov pab pawg ntawm cov cav - ib hom rau ib pawg. Cia peb hais tias muaj ib pawg memcached - nws tsuas yog ib pawg ntawm cov tshuab.
Tus lej tsis tas yuav paub qhov chaw nyob ntawm lub cev, qhov loj me, lossis tus naj npawb ntawm cov servers txhua. Nws mus rau pawg siv ib qho kev txheeb xyuas.
Txhawm rau ua qhov no, koj yuav tsum tau ntxiv ib qho chaw ntxiv uas nyob nruab nrab ntawm cov cai thiab cov cav - npe.
RPC npe
Pov thawj txuas tsheb npav, uas yuav luag tag nrho lub xaib khiav. Tib lub sijhawm peb muaj tsis muaj kev pab nrhiav pom - Hloov chaw, muaj ib qho kev teeb tsa rau lub npe no, uas paub qhov chaw ntawm txhua pawg thiab tag nrho cov shards ntawm pawg no. Nov yog qhov admins ua.
Programmers tsis quav ntsej txhua qhov ntau npaum li cas, qhov twg thiab nws raug nqi dab tsi - lawv tsuas yog mus rau pawg. Qhov no tso cai rau peb ntau heev. Thaum tau txais ib daim ntawv thov, tus neeg sawv cev redirects qhov kev thov, paub qhov twg - nws txiav txim qhov no nws tus kheej.
Hauv qhov no, proxy yog qhov taw qhia ntawm kev tiv thaiv kev ua haujlwm tsis ua haujlwm. Yog tias qee lub cav qeeb lossis sib tsoo, tus neeg sawv cev nkag siab qhov no thiab teb raws li tus neeg siv khoom sab. Qhov no tso cai rau koj tshem tawm lub sijhawm - cov cai tsis tos lub cav teb, tab sis nkag siab tias nws tsis ua haujlwm thiab yuav tsum coj tus cwj pwm txawv. Cov cai yuav tsum tau npaj rau qhov tseeb tias cov databases tsis tas yuav ua haujlwm.
Kev siv tshwj xeeb
Qee lub sij hawm peb tseem xav kom muaj qee yam kev daws teeb meem tsis zoo raws li lub cav. Nyob rau tib lub sijhawm, nws tau txiav txim siab tsis siv peb cov rpc-proxy npaj, tsim tshwj xeeb rau peb lub cav, tab sis ua kom muaj npe cais rau txoj haujlwm.
Qhov no yog binary raws tu qauv, qhov ze tshaj analogue ntawm uas yog ua protobuf. Lub schema piav qhia txog kev xaiv teb, hom nyuaj - txuas ntxiv ntawm cov scalar built-in, thiab cov lus nug. Txhua yam ua haujlwm raws li txoj cai no.
RPC dhau TL dhau TCP/UDP⦠UDP?
Peb muaj RPC raws tu qauv rau kev ua raws li lub cav thov uas khiav saum TL lub tswv yim. Qhov no tag nrho ua haujlwm dhau TCP / UDP kev sib txuas. TCP yog to taub, tab sis vim li cas peb thiaj xav tau UDP ntau zaus?
UDP pab zam qhov teeb meem ntawm ntau qhov kev sib txuas ntawm cov servers. Yog tias txhua tus neeg rau zaub mov muaj lub npe RPC thiab, feem ntau, nws tuaj yeem mus rau txhua lub cav, ces muaj ntau txhiab tus TCP kev sib txuas rau ib lub server. Muaj ib qho load, tab sis nws tsis muaj txiaj ntsig. Nyob rau hauv rooj plaub ntawm UDP qhov teeb meem no tsis muaj nyob.
Tsis muaj kev sib koom tes TCP. Qhov no yog ib qho teeb meem tshwm sim: thaum lub cav tshiab lossis lub server tshiab tau pib, ntau qhov kev sib txuas TCP tau tsim ib zaug. Rau qhov kev thov me me, piv txwv li, UDP payload, txhua qhov kev sib txuas lus ntawm tus lej thiab lub cav yog ob pob ntawv UDP: ib tug yoov nyob rau hauv ib txoj kev, lub thib ob nyob rau hauv lwm yam. Ib qho kev ncig mus ncig - thiab cov cai tau txais cov lus teb los ntawm lub cav tsis muaj kev tuav tes.
Yog, nws tsuas yog ua haujlwm xwb nrog ib feem me me ntawm pob ntawv poob. Cov txheej txheem muaj kev txhawb nqa rau kev xa rov qab thiab ncua sijhawm, tab sis yog tias peb poob ntau, peb yuav tau txais yuav luag TCP, uas tsis muaj txiaj ntsig. Peb tsis tsav UDP hla dej hiav txwv.
Peb muaj ntau txhiab tus servers zoo li no, thiab cov tswv yim zoo ib yam: ib pob ntawm cov cav tov tau nruab rau ntawm txhua tus neeg rau zaub mov lub cev. Lawv feem ntau yog ib leeg-xov ua haujlwm kom sai li sai tau yam tsis muaj kev thaiv, thiab raug muab faib ua ib txoj xov zoo. Nyob rau tib lub sijhawm, peb tsis muaj dab tsi txhim khu kev qha ntau dua li cov cav no, thiab kev mloog ntau yog them rau cov ntaub ntawv tsis tu ncua.
Cov ntaub ntawv tsis tu ncua
Cav sau binlogs. Ib lub binlog yog cov ntaub ntawv kawg ntawm qhov kev tshwm sim rau kev hloov hauv xeev lossis cov ntaub ntawv ntxiv. Hauv cov kev daws teeb meem sib txawv nws yog hu ua txawv: binary cav, WAL, AOF, tab sis txoj ntsiab cai yog tib yam.
Txhawm rau tiv thaiv lub cav los ntawm kev rov nyeem tag nrho cov binlog rau ntau xyoo thaum rov pib dua, cov cav sau snapshots - lub xeev tam sim no. Yog tias tsim nyog, lawv nyeem los ntawm nws ua ntej, thiab tom qab ntawd ua tiav kev nyeem ntawv los ntawm binlog. Tag nrho cov binlogs tau sau rau hauv tib hom binary - raws li TL scheme, kom cov thawj coj tuaj yeem tswj hwm lawv sib npaug nrog lawv cov cuab yeej. Tsis muaj qhov xav tau rau snapshots. Muaj ib lub taub hau dav dav uas qhia tias nws qhov snapshot yog int, khawv koob ntawm lub cav, thiab lub cev twg tsis tseem ceeb rau leej twg. Qhov no yog ib qho teeb meem nrog lub cav uas kaw lub snapshot.
Kuv yuav piav qhia txog lub hauv paus ntsiab lus ntawm kev ua haujlwm sai. Muaj ib lub server uas lub cav khiav. Nws qhib ib lub binlog tshiab rau kev sau ntawv thiab sau ib qho kev tshwm sim rau kev hloov pauv rau nws.
Qee lub sij hawm, nws txiav txim siab los thaij duab rau nws tus kheej, lossis nws tau txais lub teeb liab. Tus neeg rau zaub mov tsim cov ntaub ntawv tshiab, sau nws tag nrho lub xeev rau hauv nws, ntxiv rau qhov tam sim no binlog loj - offset - mus rau qhov kawg ntawm cov ntaub ntawv, thiab tseem sau ntxiv. Lub binlog tshiab tsis tsim.
Qee lub sij hawm, thaum lub cav rov pib dua, yuav muaj ob qho tib si binlog thiab snapshot ntawm lub disk. Lub cav nyeem tag nrho snapshot thiab tsa nws lub xeev ntawm ib qho chaw.
Nyeem txoj hauj lwm uas yog thaum lub sij hawm lub snapshot raug tsim thiab qhov loj ntawm binlog.
Nyeem qhov kawg ntawm binlog kom tau txais lub xeev tam sim no thiab txuas ntxiv sau cov xwm txheej ntxiv. Qhov no yog ib txoj kev yooj yim; tag nrho peb lub cav ua haujlwm raws li nws.
Cov ntaub ntawv rov ua dua
Yog li ntawd, cov ntaub ntawv replication nyob rau hauv peb raws li nqe lus - peb sau rau hauv binlog tsis muaj nplooj hloov pauv, tab sis yog hloov kev thov. Zoo ib yam li dab tsi los ntawm lub network, tsuas yog hloov me ntsis.
Tib lub tswv yim yog siv tsis tau tsuas yog rau replication, tab sis kuj tsim backups. Peb muaj lub cav - tus kws sau ntawv uas sau rau hauv binlog. Hauv lwm qhov chaw uas cov thawj tswj hwm teeb tsa, qhov binlog no tau theej, thiab qhov ntawd yog nws - peb muaj thaub qab.
Yog xav tau nyeem ntawv replicaTxhawm rau txo CPU nyeem ntawv load, lub tshuab nyeem ntawv tsuas yog pib, uas nyeem qhov kawg ntawm binlog thiab ua tiav cov lus txib hauv zos.
Lub lag luam ntawm no yog me me, thiab nws muaj peev xwm nrhiav tau ntau npaum li cas tus replica lags qab tus tswv.
Cov ntaub ntawv sib faib hauv RPC npe
Sharding ua haujlwm li cas? Tus proxy nkag siab li cas pawg shard xa mus rau? Txoj cai tsis hais: "Xa rau 15 shards!" - Tsis yog, qhov no yog ua los ntawm tus neeg sawv cev.
Qhov no muaj txiaj ntsig thaum peb xav kom muaj cov ntaub ntawv hauv cheeb tsam ntawm ib qho chaw. Cia peb hais tias 100 yog tus neeg siv lossis pab pawg ID, thiab peb xav kom tag nrho cov ntaub ntawv ntawm ib lub koom haum nyob rau ntawm ib qho shard rau cov lus nug nyuaj.
Yog tias peb tsis quav ntsej li cas kev thov kis thoob plaws pawg, muaj lwm txoj kev xaiv - hashing tag nrho shard.
hash(photo100_500) => 3539886280 % N
Peb kuj tau txais cov hash, seem ntawm kev faib thiab tus lej shard.
Ob qho kev xaiv no tsuas yog ua haujlwm yog tias peb npaj rau qhov tseeb tias thaum peb nce qhov loj ntawm pawg, peb yuav faib nws los yog nce nws ntau zaus. Piv txwv li, peb muaj 16 shards, peb tsis muaj txaus, peb xav tau ntau dua - peb tuaj yeem nyab xeeb tau 32 yam tsis muaj sijhawm poob. Yog tias peb xav nce tsis ntau, yuav muaj lub sijhawm poob, vim tias peb yuav tsis tuaj yeem faib txhua yam kom tsis muaj kev poob. Cov kev xaiv no muaj txiaj ntsig, tab sis tsis tas li.
Yog tias peb xav tau ntxiv lossis tshem tawm tus naj npawb ntawm cov servers, peb siv Ib txwm hashing ntawm lub nplhaib a la Ketama. Tab sis tib lub sijhawm, peb poob tag nrho cov chaw ntawm cov ntaub ntawv; peb yuav tsum sib koom ua ke qhov kev thov mus rau pawg kom txhua daim rov qab nws cov lus teb me me, thiab tom qab ntawd muab cov lus teb rau lub npe.
Muaj kev thov tshwj xeeb tshwj xeeb. Nws zoo li qhov no: RPC proxy tau txais qhov kev thov, txiav txim siab seb pawg twg mus rau thiab txiav txim siab lub shard. Tom qab ntawd muaj ob qho kev sau ntawv masters, lossis, yog tias pawg muaj kev txhawb nqa replica, nws xa mus rau qhov hloov pauv ntawm qhov kev thov. Tus neeg sawv cev ua txhua yam no.
Muaj ib qho tseem ceeb ua ntej - lub npe ntawm lub cav, ib kab, thiab muaj qhov loj ntawm lub cav no - tus naj npawb ntawm kab. Peb coj tus lej random los ntawm 0 mus rau tus lej ntawm cov kab rho tawm 1. Tus yuam sij hauv memcache yog ib qho prefix concatenated nrog tus lej random. Peb txuag lub cav kab thiab lub sijhawm tam sim no rau tus nqi.
Thaum nws yuav tsum tau nyeem cov cav, peb nqa tawm Multi Tau txhua tus yuam sij, txheeb los ntawm lub sijhawm, thiab yog li tau txais cov ntawv teev ntau lawm hauv lub sijhawm. Lub tswv yim yog siv thaum koj xav tau debug ib yam dab tsi hauv kev tsim khoom hauv lub sijhawm tiag tiag, tsis muaj kev rhuav tshem ib yam dab tsi, tsis txwv lossis tso cai rau kev khiav mus rau lwm lub tshuab, tab sis lub cav no tsis kav ntev.
Rau txhim khu kev qha cia ntawm cav peb muaj lub cav cav-engine. Qhov no yog qhov tseeb vim li cas nws tau tsim thiab siv dav hauv ntau pawg pawg. Cov pawg loj tshaj plaws uas kuv paub ntawm cov khw muag khoom 600 TB ntawm cov ntawv ntim khoom.
Thiab mus rau ClickHouse, peb tau ua Kitten Tsev. Yog tias peb mus ncaj qha los ntawm KittenHouse mus rau ClickHouse, nws yuav tsis tiv. Txawm tias tsis muaj kev thov, nws ntxiv los ntawm HTTP kev sib txuas ntawm ntau lub tshuab. Rau lub tswv yim ua haujlwm, ntawm lub server nrog ClickHouse Local reverse proxy raug tsa, uas yog sau nyob rau hauv xws li ib txoj kev uas nws muaj peev xwm tiv taus qhov yuav tsum tau ntim ntawm kev sib txuas. Nws tseem tuaj yeem ua cov ntaub ntawv tsis nyob hauv nws tus kheej kuj muaj kev ntseeg siab.
Qee lub sij hawm peb tsis xav siv lub tswv yim RPC hauv cov kev daws teeb meem tsis zoo, piv txwv li, hauv nginx. Yog li ntawd, KittenHouse muaj peev xwm tau txais cov cav ntawm UDP.
Yog tias tus neeg xa khoom thiab tus neeg tau txais cov ntawv teev lus ua haujlwm ntawm tib lub tshuab, qhov tshwm sim ntawm kev poob ib pob ntawv UDP hauv tus tswv tsev hauv zos yog tsawg heev. Raws li kev cuam tshuam ntawm qhov xav tau los siv RPC hauv kev daws teeb meem thib peb thiab kev ntseeg siab, peb tsuas yog siv UDP xa. Peb yuav rov qab mus rau qhov txheej txheem no tom qab.
Saib xyuas
Peb muaj ob hom cav: cov uas sau los ntawm cov thawj coj ntawm lawv cov servers thiab cov uas sau los ntawm developers los ntawm code. Lawv sib raug rau ob hom kev ntsuas: system thiab cov khoom.
Kev ntsuas qhov system
Nws ua haujlwm ntawm tag nrho peb cov servers Cov ntaub ntawv, uas sau cov txheeb cais thiab xa lawv mus rau Graphite Carbon. Yog li ntawd, ClickHouse yog siv los ua lub kaw lus cia, thiab tsis Whisper, piv txwv li. Yog tias tsim nyog, koj tuaj yeem nyeem ncaj qha los ntawm ClickHouse, lossis siv ua grafana rau metrics, graphs thiab reports. Raws li cov tsim tawm, peb muaj txaus nkag mus rau Netdata thiab Grafana.
Cov khoom ntsuas
Kom yooj yim, peb tau sau ntau yam. Piv txwv li, muaj ib txheej ntawm cov haujlwm zoo tib yam uas tso cai rau koj los sau Counts, UniqueCounts qhov tseem ceeb rau hauv kev txheeb cais, uas raug xa mus rau lwm qhov.
Tom qab ntawd, peb tuaj yeem siv kev txheeb xyuas thiab pab pawg lim dej thiab ua txhua yam peb xav tau los ntawm kev txheeb cais - tsim cov duab, teeb tsa Watchdogs.
Peb sau heev ntau metrics tus naj npawb ntawm cov xwm txheej yog los ntawm 600 billion rau 1 trillion ib hnub. Txawm li cas los xij, peb xav khaws lawv tsawg kawg yog ob peb xyooskom nkag siab txog qhov sib txawv hauv metrics. Muab tag nrho ua ke yog ib qho teeb meem loj uas peb tseem tsis tau daws. Kuv yuav qhia koj tias nws tau ua haujlwm li cas rau ob peb xyoos dhau los.
Peb muaj cov haujlwm uas sau cov ntsuas no rau hauv zos memcachekom txo tau tus lej nkag. Ib zaug nyob rau hauv ib lub sij hawm luv luv hauv zos launched stats-daemon sau tag nrho cov ntaub ntawv. Tom ntej no, tus dab sib txuas cov metrics rau hauv ob txheej ntawm servers cov ntaub ntawv khaws tseg, uas aggregates txheeb cais los ntawm ib pawg ntawm peb cov tshuab kom cov txheej tom qab lawv tsis tuag.
Yog tias tsim nyog, peb tuaj yeem sau ncaj qha mus rau cov neeg sau ntawv.
Tab sis sau los ntawm cov lej ncaj qha mus rau cov neeg sau khoom, hla stas-daemom, yog ib qho kev daws teeb meem tsis zoo vim tias nws ua rau cov khoom thauj ntau ntxiv. Qhov kev daws teeb meem tsuas yog yog vim qee yam peb tsis tuaj yeem tsa cov memcache stats-daemon ntawm lub tshuab, lossis nws poob thiab peb mus ncaj qha.
Tom qab ntawd, cov ntaub ntawv sau npe sib koom ua ke rau hauv meowDB - qhov no yog peb cov ntaub ntawv, uas tuaj yeem khaws cov ntsuas ntsuas.
Tom qab ntawd peb tuaj yeem ua binary "ze-SQL" xaiv los ntawm cov cai.
Sim
Thaum lub caij ntuj sov xyoo 2018, peb muaj ib qho kev sib koom ua ke hauv hackathon, thiab lub tswv yim tau los sim hloov qhov liab ntawm daim duab kos nrog qee yam uas tuaj yeem khaws cov ntsuas hauv ClickHouse. Peb muaj cov ntawv teev npe ntawm ClickHouse - vim li cas ho tsis sim nws?
Peb muaj ib lub tswv yim uas sau cov cav los ntawm KittenHouse.
Peb txiav txim siab ntxiv lwm "* Tsev" rau daim duab, uas yuav tau txais raws nraim cov metrics hauv hom raws li peb cov cai sau lawv ntawm UDP. Tom qab ntawd * Lub Tsev no hloov lawv mus rau hauv cov ntawv ntxig, zoo li cov cav, uas KittenHouse nkag siab. Nws tuaj yeem xa cov cav no zoo kawg nkaus rau ClickHouse, uas yuav tsum tau nyeem lawv.
Lub tswv yim nrog memcache, stats-daemon thiab cov ntaub ntawv khaws cia yog hloov nrog qhov no.
Lub tswv yim nrog memcache, stats-daemon thiab cov ntaub ntawv khaws cia yog hloov nrog qhov no.
Muaj kev xa tawm los ntawm code ntawm no, uas tau sau hauv zos hauv StatsHouse.
StatsHouse sau UDP metrics, twb tau hloov dua siab tshiab rau hauv SQL inserts, mus rau KittenHouse hauv batch.
KittenHouse xa lawv mus rau ClickHouse.
Yog tias peb xav nyeem lawv, ces peb nyeem lawv dhau ntawm StatsHouse - ncaj qha los ntawm ClickHouse siv SQL li niaj zaus.
Puas yog tseem kev sim, tab sis peb nyiam li cas nws hloov tawm. Yog tias peb kho cov teeb meem nrog lub tswv yim, tej zaum peb yuav hloov mus rau nws tag nrho. Tus kheej, kuv vam tias.
Lub tswv yim tsis txuag hlau. Tsawg dua cov servers xav tau, cov stats-daemons hauv zos thiab cov neeg sau cov ntaub ntawv tsis xav tau, tab sis ClickHouse xav tau lub server loj dua li cov hauv cov txheej txheem tam sim no. Tsawg dua servers xav tau, tab sis lawv yuav tsum tau kim dua thiab muaj zog dua.
Muab tso rau
Ua ntej, cia peb saib PHP xa tawm. Peb tab tom txhim kho hauv git: siv GitLab ΠΈ TeamCity rau kev xa tawm. Kev loj hlob ceg yog merged rau hauv tus tswv ceg, los ntawm tus tswv rau kev sim lawv yog merged rau hauv staging, thiab los ntawm staging mus rau hauv ntau lawm.
Ua ntej kev xa tawm, cov ceg tsim khoom tam sim no thiab yav dhau los raug coj mus, thiab cov ntaub ntawv sib txawv tau txiav txim siab hauv lawv - kev hloov pauv: tsim, tshem tawm, hloov pauv. Qhov kev hloov pauv no tau sau tseg hauv binlog ntawm lub cav tshwj xeeb copyfast, uas tuaj yeem hloov pauv sai sai rau peb cov neeg rau zaub mov tag nrho. Dab tsi yog siv ntawm no tsis yog luam tawm ncaj qha, tab sis lus xaiv replication, thaum ib tus neeg rau zaub mov xa cov kev hloov pauv mus rau nws cov neeg nyob ze tshaj plaws, cov neeg rau lawv cov neeg nyob ze, thiab lwm yam. Qhov no tso cai rau koj hloov kho cov cai hauv kaum thiab units ntawm vib nas this hla tag nrho cov nkoj. Thaum qhov kev hloov pauv mus txog qhov hloov pauv hauv zos, nws siv cov thaj ua rau thaj rau nws local file system. Rollback kuj tau ua raws li tib lub tswv yim.
Peb kuj siv kPHP ntau heev thiab nws kuj muaj nws txoj kev loj hlob ntawm git raws li daim duab saum toj no. Txij li qhov no HTTP server binary, ces peb tsis tuaj yeem tsim qhov txawv - qhov kev tso tawm binary hnyav ntau pua MB. Yog li ntawd, muaj lwm txoj kev ntawm no - lub version yog sau rau binlog copyfast. Nrog rau txhua qhov tsim nws nce, thiab thaum lub sij hawm rollback nws kuj nce. Version replicated rau servers. Hauv zos copyfasts pom tias tus tshiab version tau nkag mus rau hauv binlog, thiab los ntawm tib txoj kev hais lus tsis txaus ntseeg lawv coj qhov tseeb version ntawm binary rau lawv tus kheej, tsis muaj kev nkees peb tus tswv server, tab sis ua tib zoo nthuav tawm cov khoom hla hauv lub network. Dab tsi ua raws li zoo nkauj relaunch rau qhov tshiab version.
Qhov txawv yog tias peb binary tau ntim rau hauv archives .deb, thiab thaum tso tawm lawv dpkg ua muab tso rau hauv qhov system. Vim li cas kPHP raug xa mus ua binary, thiab cov cav siv tau ua raws li dpkg? Nws tshwm sim li ntawd. Nws ua haujlwm - tsis txhob kov nws.
Alexey Akulovich yog ib tug ntawm cov uas, raws li ib feem ntawm lub Program Committee, pab PHP Russia nyob rau lub Tsib Hlis 17th yuav dhau los ua qhov kev tshwm sim loj tshaj plaws rau PHP developers nyob rau lub sijhawm tsis ntev los no. Saib dab tsi lub PC txias peb muaj, dab tsi hais lus (ob tug ntawm lawv tab tom tsim PHP core!) - zoo li ib yam dab tsi koj tsis tuaj yeem nco yog tias koj sau PHP.