Kev tsim cov phiaj xwm loj hauv ib hom lus yuav tsum muaj txoj hauv kev tshwj xeeb thiab siv cov cuab yeej tshwj xeeb, tab sis thaum nws los txog rau cov ntawv thov hauv PHP, qhov xwm txheej tuaj yeem ua rau hnyav heev uas koj yuav tsum tau tsim, piv txwv li, tus kheej daim ntawv thov server. Hauv daim ntawv no peb yuav tham txog qhov mob uas paub nrog kev sib tham sib faib thiab cov ntaub ntawv caching hauv memcached thiab seb peb daws cov teeb meem no li cas hauv ib txoj haujlwm "ward".
Tus phab ej ntawm lub sijhawm yog PHP daim ntawv thov raws li symfony 2.3 lub moj khaum, uas tsis yog tag nrho suav nrog hauv cov phiaj xwm kev lag luam los hloov kho. Ntxiv nrog rau qhov kev sib tham zoo heev, qhov project no tau siv tag nrho "caching txhua yam" txoj cai hauv memcached: cov lus teb rau kev thov rau cov ntaub ntawv thiab API servers, ntau yam chij, xauv rau synchronizing code ua thiab ntau ntxiv. Hauv qhov xwm txheej zoo li no, kev tawg ntawm memcached ua rau tuag taus rau kev ua haujlwm ntawm daim ntawv thov. Tsis tas li ntawd, kev poob cache ua rau muaj qhov tshwm sim loj: DBMS pib tawg ntawm cov seams, API cov kev pabcuam pib txwv tsis pub thov, thiab lwm yam. Kev ruaj khov ntawm qhov xwm txheej yuav siv sijhawm kaum feeb, thiab lub sijhawm no cov kev pabcuam yuav qeeb heev lossis tsis muaj tiav.
Peb yuav tsum tau muab muaj peev xwm mus rau kab rov tav scale daim ntawv thov nrog me ntsis kev rau siab, i.e. nrog tsawg kawg kev hloov pauv rau qhov chaws code thiab tag nrho functionality khaws cia. Ua kom lub cache tsis tsuas yog tiv taus qhov ua tsis tiav, tab sis kuj sim txo cov ntaub ntawv poob los ntawm nws.
Dab tsi tsis ncaj ncees lawm nrog memcached nws tus kheej?
Feem ntau, cov memcached txuas ntxiv rau PHP txhawb nqa cov ntaub ntawv faib tawm thiab kev sib tham cia tawm ntawm lub thawv. Lub mechanism ntawm qhov tseem ceeb sib xws hashing tso cai rau koj kom sib npaug ntawm cov ntaub ntawv ntawm ntau lub servers, tshwj xeeb hais txog txhua tus yuam sij tshwj xeeb rau ib tus neeg rau zaub mov tshwj xeeb los ntawm pab pawg, thiab cov cuab yeej ua tsis tau zoo ua kom muaj cov kev pabcuam caching siab (tab sis, hmoov tsis, tsis muaj ntaub ntawv).
Tej yam me ntsis zoo dua nrog kev sib tham cia: koj tuaj yeem teeb tsa memcached.sess_number_of_replicas, raws li qhov tshwm sim ntawm cov ntaub ntawv yuav muab khaws cia rau ntau lub servers ib zaug, thiab nyob rau hauv qhov kev tshwm sim ntawm ib qho kev ua tsis tiav ntawm ib qho memcached, cov ntaub ntawv yuav raug xa los ntawm lwm tus. Txawm li cas los xij, yog tias tus neeg rau zaub mov rov qab los hauv online yam tsis muaj cov ntaub ntawv (raws li feem ntau tshwm sim tom qab rov pib dua), qee cov yuam sij yuav raug xa rov qab rau nws qhov kev pom zoo. Qhov tseeb qhov no yuav txhais tau tias poob ntawm kev sib tham cov ntaub ntawv, vim tsis muaj txoj hauv kev "mus" mus rau lwm qhov kev hloov pauv thaum tsis nco qab.
Cov cuab yeej tsev qiv ntawv Standard yog tsom feem ntau ntawm kab rov tav scaling: lawv tso cai rau koj nce lub cache rau qhov loj me thiab muab kev nkag mus rau nws los ntawm cov cai tuav ntawm cov servers sib txawv. Txawm li cas los xij, hauv peb qhov xwm txheej, qhov ntim ntawm cov ntaub ntawv khaws cia tsis pub dhau ob peb gigabytes, thiab kev ua haujlwm ntawm ib lossis ob lub nodes yog txaus txaus. Raws li, tsuas yog cov cuab yeej siv tau zoo tuaj yeem ua kom ntseeg tau tias muaj memcached thaum tuav tsawg kawg ib qho cache hauv kev ua haujlwm. Txawm li cas los xij, nws tsis muaj peev xwm coj kom zoo dua txawm tias lub sijhawm no ... Ntawm no nws tsim nyog rov qab nco txog lub sijhawm qub ntawm lub moj khaum siv hauv qhov project, uas yog vim li cas nws thiaj li tsis tuaj yeem tau txais daim ntawv thov ua haujlwm nrog lub pas dej ntawm cov servers. Cia peb tseem tsis txhob hnov qab txog qhov poob ntawm kev sib tham cov ntaub ntawv: tus neeg siv khoom lub qhov muag twitched los ntawm qhov loj heev logout ntawm cov neeg siv.
Qhov zoo tshaj plaws nws yuav tsum tau replication ntawm cov ntaub ntawv nyob rau hauv memcached thiab bypassing replicas thaum ua yuam kev los yog yuam kev. Pab peb siv lub tswv yim no mcrouter.
mcrouter
Qhov no yog memcached router tsim los ntawm Facebook los daws nws cov teeb meem. Nws txhawb cov memcached ntawv raws tu qauv, uas tso cai scale memcached installations rau insane proportions. Cov lus piav qhia ntxaws ntawm mcrouter tuaj yeem pom hauv tsab ntawv tshaj tawm no. Ntawm lwm yam dav functionality nws tuaj yeem ua raws li peb xav tau:
replicate cov ntaub ntawv;
ua fallback rau lwm cov servers hauv pab pawg yog tias muaj teeb meem tshwm sim.
Vim li cas peb lub pas dej? Vim li cas cov servers rov ua dua? Cia peb kawm seb nws ua haujlwm li cas.
Hauv qhov kev teeb tsa no, mcrouter xaiv txoj hauv kev uas qhov kev thov yuav raug xa raws li cov lus thov. Tus txiv neej qhia nws li no OperationSelectorRoute.
Tau txais kev thov mus rau tus tuav RandomRouteuas randomly xaiv ib pas dej ua ke los yog txoj kev ntawm array khoom children. Txhua yam ntawm cov array no yog nyob rau hauv lem ib tug handler MissFailoverRoute, uas yuav dhau los ntawm txhua tus neeg rau zaub mov hauv lub pas dej kom txog thaum nws tau txais cov lus teb nrog cov ntaub ntawv, uas yuav xa rov qab rau tus neeg siv khoom.
Yog peb siv xwb MissFailoverRoute nrog lub pas dej ua ke ntawm peb lub servers, tom qab ntawd txhua qhov kev thov yuav tuaj rau thawj zaug memcached, thiab tus so yuav tau txais kev thov ntawm qhov seem thaum tsis muaj ntaub ntawv. Txoj kev zoo li no yuav ua rau load ntau dhau ntawm thawj tus neeg rau zaub mov hauv daim ntawv teev npe, yog li nws tau txiav txim siab los tsim peb lub pas dej nrog qhov chaw nyob hauv cov kab sib txawv thiab xaiv lawv random.
Tag nrho lwm yam kev thov (thiab qhov no yog cov ntaub ntawv) raug ua tiav siv AllMajorityRoute. Tus neeg saib xyuas no xa cov lus thov rau txhua tus servers hauv lub pas dej thiab tos cov lus teb los ntawm tsawg kawg N / 2 + 1 ntawm lawv. Los ntawm kev siv AllSyncRoute rau kev sau ntawv yuav tsum tau muab tso tseg, vim hais tias txoj kev no yuav tsum muaj lus teb zoo los ntawm ntawm txhua tus servers hauv pab pawg - txwv tsis pub nws yuav rov qab los SERVER_ERROR. Txawm hais tias mcrouter yuav ntxiv cov ntaub ntawv rau cov caches muaj, hu rau PHP muaj nuj nqi yuav rov qab ua yuam kev thiab yuav tsim kev ceeb toom. AllMajorityRoute tsis yog nruj heev thiab tso cai rau ib nrab ntawm cov chav nyob kom raug tshem tawm ntawm kev pabcuam yam tsis muaj teeb meem tau piav qhia saum toj no.
Lub ntsiab tsis zoo Cov tswv yim no yog tias yog tias tsis muaj cov ntaub ntawv hauv lub cache tiag tiag, tom qab ntawd rau txhua qhov kev thov los ntawm tus neeg thov N thov rau memcached tiag tiag yuav raug tua - rau rau txhua tus servers nyob rau hauv lub pas dej ua ke. Peb tuaj yeem txo tus naj npawb ntawm cov servers hauv cov pas dej, piv txwv li, rau ob: kev tso siab rau kev cia siab, peb tau txaisоceev dua thiab tsawg load los ntawm kev thov mus rau cov yuam sij uas ploj lawm.
NB: Koj kuj tuaj yeem pom cov txuas txuas rau kev kawm mcrouter cov ntaub ntawv ntawm wiki и qhov project teeb meem (nrog rau cov kaw), sawv cev rau tag nrho lub tsev khaws khoom ntawm ntau yam kev teeb tsa.
Tsim thiab khiav mcrouter
Peb daim ntawv thov (thiab memcached nws tus kheej) khiav hauv Kubernetes - raws li, mcrouter kuj nyob ntawd. Rau thawv sib dhos peb siv werf, lub config uas yuav zoo li no:
NB: Cov npe tau muab rau hauv tsab xov xwm tau tshaj tawm hauv lub chaw khaws cia flant/mcrouter.