3.15

Tazama kwa Kiingereza

3.15 Kache na usambazaji wa maudhui

Muhtasari na msukumo

Kache ni nakala ya data iliyohifadhiwa mahali penye kasi zaidi au karibu zaidi kuliko asili, ili uweze kujibu ombi bila kufanya tena kazi nzima, ghali. Karibu kila mfumo unaohisi wa haraka ni wa haraka kwa sababu ya kache. Hoja ya hifadhidata ambayo ingechukua milisekunde 40 hurudi chini ya moja matokeo yake yanapokaa kwenye kumbukumbu tayari. Picha ambayo ingevuka bahari inahudumiwa kutoka mashine iliyo katika jiji lilelile. Kache ndiyo mbinu moja yenye kiegemeo cha juu zaidi ya utendaji ulio nayo, na pia ile inayoelekea zaidi kukupa hitilafu fiche, ya kukasirisha.

Sura hii inaingia kwa kina katika mkakati wa kache. Sura ya 3.4 (usanifu wa data na uhifadhi) inaleta kache na mitandao ya usambazaji wa maudhui kama suala moja la uhifadhi kati ya mengi, na sura ya 3.13 (mitandao na muunganisho) inashughulikia njia ya mtandao wanayopanda. Hapa unapata maamuzi: mahali pa kuweka kache, jinsi ya kuifungua kwa ufunguo, lini kuibatilisha, jinsi ya kuilinda chini ya mzigo, na jinsi ya kufikiri kuhusu kupitwa na wakati unaobadilishana kwa kasi. Kache inagusa uhandisi wa utendaji (sura ya 2.16), ukubwa na ustahimilivu (sura ya 3.5), hali halisi za kushindwa kwa sehemu za mifumo iliyosambazwa (sura ya 3.3), na, kwa sababu kache iliyotiwa sumu inaweza kuhudumia shambulio kwa maelfu ya watumiaji, usalama wa programu (sura ya 4.2).

Msukumo unatokana na viegemeo vitatu. Kache hupunguza ucheleweshaji, kwa hiyo watumiaji wanasubiri kidogo. Hupunguza mzigo, kwa hiyo asili yako inahudumia trafiki zaidi kwenye vifaa vilevile. Na hupunguza gharama, kwa sababu ombi lililojibiwa ukingoni haligusi kamwe hifadhidata yako, kokotoo yako, wala bili yako ya kutoka. Kwa timu kubwa, mkakati wa pamoja wa kache ndio tofauti kati ya jukwaa linalopanuka kwa kutabirika na lile ambalo kila huduma inavumbua upya kubatilisha na kukosea. Katika mifumo ya mashirika makubwa na serikali, ambapo trafiki hupanda kwenye tarehe za mwisho za kuwasilisha na siku za uzinduzi, kache iliyobuniwa vizuri mara nyingi ndiyo inayosimama kati ya lango linalofanya kazi na kushindwa kwa umma.

Kanuni kuu

  • Hifadhi kwenye kache kupunguza ucheleweshaji, mzigo, na gharama, na ujue kipi unanunua.
  • Weka kache kwenye safu sahihi ya daraja, karibu na mahali zinapasaidia zaidi.
  • Chukulia kubatilisha kama sehemu ngumu; buni funguo na vipindi vya maisha kabla ya kuhifadhi.
  • Linda kache chini ya mzigo kwa kuunganisha, mtetemo, na ulinzi dhidi ya mikanyagano.
  • Chagua mfumo wa uandishi kwa makusudi: uthabiti na kasi huvutana.
  • Pima kiwango cha mafanikio, kupitwa na wakati, na mzigo wa asili; kache isiyopimwa ni dhima.
  • Chukulia maudhui yaliyohifadhiwa kwenye kache kama uso wa shambulio; kache iliyotiwa sumu inahudumia kila mtu.

Mapendekezo

Elewa daraja la kache

Kache si kitu kimoja mahali pamoja. Ni daraja la nakala, kila moja karibu zaidi na mtumiaji kuliko iliyotangulia, na unabuni kuvuka yote. Karibu zaidi na mtumiaji ni kache ya mteja: kache ya HTTP ya kivinjari, hifadhi ya ndani ya programu ya simu, kache ya kumbukumbu ndani ya mchakato. Inayofuata ni mtandao wa usambazaji wa maudhui (CDN), kundi la seva zilizosambazwa duniani zinazoshikilia nakala za maudhui yako ukingoni mwa mtandao, karibu na watumiaji. Nyuma ya hiyo kuna kache ya wakala wa kinyume au lango, kache ya pamoja mbele ya seva zako. Kisha kache ya programu: hifadhi ya haraka ya ufunguo-thamani kama gridi ya data ya kumbukumbu inayoshikilia matokeo yaliyokokotolewa, vikao, na vipande vilivyotolewa. Mwishowe kache ya hoja na bafa ya hifadhidata yenyewe, inayoweka kurasa moto kwenye kumbukumbu ili diski iguswe kidogo.

Kila safu ina kazi tofauti: kache ya mteja huondoa ombi kabisa, CDN hufyonza trafiki ya kusoma ya kimataifa, wakala wa kinyume hulinda asili yako dhidi ya kazi ileile inayojirudia, kache ya programu huokoa kokotoo upya, na kache ya hifadhidata huweka hifadhi ikiitikia. Ombi linalokosa kila safu na kufika hifadhidata ndiyo njia ya polepole na ghali zaidi uliyo nayo, kwa hiyo hoja ya daraja ni kujibu juu na nje kadiri unavyoweza kwa usalama. Libuni kama mfumo, kwa sababu kipande kilichohifadhiwa kwenye safu ya programu na nakala ya CDN iliyopitwa na wakati juu yake vinaweza kutofautiana kwa njia zinazowachanganya watumiaji.

Chukulia kubatilisha kama tatizo gumu

Kuna utani wa zamani kwamba matatizo mawili magumu zaidi katika sayansi ya kompyuta ni kutaja vitu, kubatilisha kache, na makosa ya kuzidi-kwa-moja. Utani unadumu kwa sababu kubatilisha kweli ni kugumu: kache ni nakala, na mara asili inapobadilika, kila nakala ni uongo unaowezekana. Una mikakati mitatu mipana. Kuisha kwa muda kwa muda-wa-kuishi (TTL), muda ambao ingizo linabaki halali kabla ya kuchukuliwa kama lililopitwa na wakati, ndio rahisi zaidi: unakubali kupitwa na wakati kwa mipaka na kuacha maingizo yazeeke. Kubatilisha wazi hufuta au kusasisha maingizo data ya msingi inapobadilika, jambo sahihi lakini linalokuhitaji kujua kila mahali nakala inapoishi. Kubatilisha kunakoendeshwa na matukio huandikisha kache kwa matukio ya mabadiliko ili zijisasishe zenyewe, jambo linalopanuka vizuri kuvuka kache nyingi lakini linaongeza utegemezi wa ujumbe.

Mifumo halisi mingi huchanganya hizi: TTL fupi kwa data inayobadilika mara kwa mara na kuvumilia sekunde za kupitwa na wakati, TTL ndefu pamoja na kufuta wazi kwa data inayobadilika mara chache lakini lazima iwe sahihi inapobadilika, na funguo zenye matoleo kwa maudhui yasiyobadilika mara yanapochapishwa. Ujanja wa ufunguo wenye toleo unastahili kuuingiza ndani: badala ya kubatilisha, unabadilisha ufunguo. Karatasi ya mtindo inayohudumiwa kama app.v187.css haihitaji kufutwa kamwe, kwa sababu toleo jipya ni ufunguo mpya na la zamani linaacha tu kuombwa. Kila unapoweza kugeuza tatizo la kubatilisha kuwa tatizo la kutaja, fanya hivyo.

Buni funguo za kache na TTL kwa makusudi

Kache ni nzuri tu kama ufunguo wake. Ufunguo wa kache ni kitambulisho ambacho thamani huhifadhiwa na kutafutwa chini yake, na kukosea husababisha kushindwa kwa kinyume kwa aina mbili. Mbaya sana kwa ukali mdogo, na unahudumia data ya mtumiaji mmoja kwa mwingine: ukurasa wa kibinafsi uliohifadhiwa chini ya URL isiyojali utambulisho wa mtumiaji ni uvujaji wa data. Mbaya sana kwa undani, na kiwango chako cha mafanikio kinaporomoka kwa sababu hakuna maombi mawili yanayoshiriki ufunguo. Amua kwa makusudi nini kinastahili kuwa kwenye ufunguo: utambulisho wa rasilimali pamoja na chochote kinachobadilisha jibu kihalali (lugha, sarafu, darasa la kifaa) na kisichobadilisha hapana. Sawazisha funguo ili tofauti ndogo kama mpangilio wa vigezo vya hoja zisigawanye kache.

TTL zinastahili fikira ileile. TTL ni ahadi kuhusu upeo wa kupitwa na wakati utakaohudumia, kwa hiyo iweke kutoka uvumilivu halisi wa data, si namba ya mviringo ambayo mtu alibahatisha: kionyeshi cha hisa kinavumilia sekunde, katalogi ya bidhaa dakika, kanuni iliyochapishwa saa au ufunguo wenye toleo bila kuisha kabisa. Ongeza msambao mdogo wa nasibu, unaoitwa mtetemo, ili kundi la maingizo yaliyoandikwa pamoja lisiishe lote kwa wakati mmoja na kukanyaga asili. Andika uchaguzi huu, kwa sababu TTL isiyo na sababu ni namba ambayo mhandisi anayefuata ataogopa kuibadilisha.

Linda dhidi ya mikanyagano na unganisha maombi

Ingizo maarufu lililohifadhiwa linapoisha, kila ombi lililolitaka hukosa mara moja na kukimbilia asili pamoja. Hii ni mkanyagano wa kache, pia huitwa kundi la wanyama wanaokimbia, na unaweza kuangusha hifadhidata ileile ambayo kache ilikuwa ikilinda. Jenga ulinzi mara moja na uutumie kila mahali. Kuunganisha maombi (single-flight) huruhusu ombi la kwanza tu kwa ufunguo unaokosekana kukokotoa upya thamani huku mengine yakisubiri matokeo yake, kwa hiyo makosa elfu ya wakati mmoja husababisha wito mmoja wa asili. Kukokotoa upya mapema kwa uwezekano husasisha ingizo moto kwa nasibu kidogo kabla halijaisha, ili ombi moja la nyuma liliboreshe kabla umati haujaona kukosa. Sera ya stale-while-revalidate hutumikia nakala iliyopitwa kidogo mara moja na kuisasisha bila kuwa papo hapo, kwa hiyo watumiaji hawasubiri kamwe kukosa.

Mifumo hii ni muhimu zaidi hasa unapohitaji kache zaidi, chini ya mzigo wa kilele, kwa hiyo ithibitishe kwa ukubwa halisi: ulinzi unaofanya kazi kwa watumiaji kumi bado unaweza kushindwa kwa elfu kumi. Uoanishe na mifumo ya ustahimilivu ya sura ya 3.5, hasa muda wa kuisha na vivunja mzunguko, ili asili inapokuwa polepole kweli safu yako ya kache iilinde badala ya kurundika. Lengo ni kache inayotenda vizuri zaidi chini ya shinikizo, si ile inayokuza kilele kuwa kukatika.

Chagua mfumo wa uandishi kwa makusudi

Jinsi unavyoshughulikia uandishi huamua kache inabaki mbichi kiasi gani na hatari kiasi gani unachukua wakati wa kushindwa. Kuna mifumo minne ya kawaida. Katika cache-aside (kupakia kwa uvivu), programu inakagua kache, na ikikosa inasoma asili, inajaza kache, na kurudisha thamani; uandishi huenda asili na kubatilisha ingizo. Ndiyo chaguo-msingi kwa sababu nzuri: rahisi, na kache inashikilia kinachoombwa tu. Katika write-through, kila uandishi huenda kache na asili pamoja, kwa hiyo kache daima ni ya sasa, kwa gharama ya ucheleweshaji wa uandishi na kuhifadhi data ambayo huenda isisomwe kamwe. Katika write-back (write-behind), uandishi hugonga kache kwanza na kumwagwa asili bila kuwa papo hapo, ikifanya uandishi kuwa wa haraka lakini ikihatarisha upotevu kache ikifa kabla ya kumwaga. Katika write-around, uandishi huenda moja kwa moja asili na kuruka kache, ukiepuka msukosuko kutokana na data nzito ya uandishi inayosomwa mara chache, kwa gharama ya kukosa kwa uhakika kwenye usomaji wa kwanza.

Chagua kwa kila mzigo wa kazi, si mara moja kwa mfumo mzima. Katalogi nzito ya kusoma inafaa cache-aside au write-through. Mkondo wa kumbukumbu au vipimo vizito vya uandishi unafaa write-around, ili kache isisukwe na data ambayo hakuna anayesoma tena. Write-back inafaa uandishi wa uwezo wa juu ambapo hatari ndogo, inayoeleweka ya upotevu inakubalika na uimara unashughulikiwa kwingine. Taja mfumo kwa kila kache waziwazi, kwa sababu msomaji anayedhani cache-aside wakati msimbo unafanya write-back atakosea hukumu ya ubichi na tabia ya kushindwa.

Linganisha sera ya kuondoa na mfumo wako wa ufikiaji

Kache ina ukubwa uliowekwa, kwa hiyo inapojaa, kitu lazima kiende. Sera ya kuondoa huamua kipi. Isiyotumika hivi karibuni zaidi (LRU) huondoa ingizo lililobaki bila kuguswa kwa muda mrefu zaidi, ikibet kwamba matumizi ya hivi karibuni yanatabiri matumizi ya baadaye, na ni chaguo-msingi la busara. Isiyotumika mara chache zaidi (LFU) huondoa ingizo lenye mafanikio machache zaidi, inayofaa seti moto thabiti ambapo vipengee vichache ni maarufu daima lakini inaweza kung’ang’ania maingizo yaliyokuwa moto mara moja na isijirekebishe kamwe. Tofauti kama LRU iliyogawanywa na sera zinazojirekebisha huchanganya hivi karibuni na marudio; kwanza-ndani-kwanza-nje na kuisha rahisi kwa muda ni vya bei nafuu lakini butu zaidi.

Linganisha sera na jinsi data yako inavyofikiwa: LFU au sera inayofahamu marudio kwa seti moto ndogo isiyobadilika mara chache, LRU pale umaarufu unasonga kwa muda kama habari au maudhui yanayovuma. Chochote utakachochagua, panga ukubwa wa kache ili seti moto itoshee, kwa sababu kache ndogo mno kushikilia seti ya kazi hukwama, ikiondoa maingizo kabla tu hayajahitajika tena. Tazama kiwango cha kuondoa kama kipimo cha daraja la kwanza, kwa kuwa kupanda kwa ghafla kwa kawaida kunamaanisha kache ni ndogo mno au mlipuko wa funguo unaigawanya.

Tumia semantiki za kache za HTTP kwa usahihi

Wavuti ina mfano uliokomaa, uliosanifishwa wa kache uliojengwa ndani ya HTTP, na kuutumia vizuri kunakupa kache ya mteja na CDN bure. Kichwa cha Cache-Control ni uso wa udhibiti: max-age huweka maisha ya ubichi, public na private husema kama kache za pamoja zinaweza kuhifadhi jibu, no-store hukataza kuhifadhi, na stale-while-revalidate huruhusu kutumikia nakala iliyopitwa huku ikisasishwa. Uthibitishaji huruhusu kache kukagua ubichi kwa bei nafuu bila kuchukua tena mwili. ETag (lebo ya chombo) ni kitambulisho cha toleo kisicho wazi ambacho seva huambatisha kwenye jibu; mteja huirudisha kwenye kichwa cha If-None-Match, na seva hujibu 304 Not Modified bila mwili ikiwa hakuna kilichobadilika. Last-Modified na If-Modified-Since hufanya hivyo kwa mihuri ya muda.

Nidhamu ya kiutendaji ni kuwa wazi. Weka Cache-Control kwenye kila jibu badala ya kuziacha kache zibashiri kwa heuristiki. Weka alama majibu ya kibinafsi, ya kila mtumiaji private au no-store ili wakala wa pamoja asiyahifadhi kamwe, kosa la kawaida na hatari. Tumia URL zenye matoleo na max-age ndefu na agizo la immutable kwa mali tuli, na uthibitishaji kwa ETag kwa maudhui yanayobadilika bila kutabirika. Kupata vichwa hivi sawa kunageuza ngazi nzima ya mteja na CDN kuwa kache sahihi, inayotegemea viwango ambayo hukulazimika kuijenga.

Sukuma kazi ukingoni kwa CDN na kokotoo ya ukingo

CDN ilianza kama njia ya kuhifadhi faili tuli karibu na watumiaji, na bado inafanya hivyo kwa ustadi: picha, hati, video, na vipakuliwa vinavyohudumiwa kutoka eneo la ukingo milisekunde mbali badala ya asili ya mbali. CDN za kisasa huenda mbali zaidi. Huhifadhi maudhui ya kidinamiki na ya kibinafsi kwa funguo za kina, hukomesha TLS ukingoni, hufyonza vilele vya trafiki na mashambulizi ya kunyima huduma yaliyosambazwa, na zaidi na zaidi huendesha msimbo wako. Kokotoo ya ukingo hutekeleza mantiki kwenye maeneo ya ukingo yenyewe, kwa hiyo unaweza kubinafsisha jibu, kukagua uidhinishaji, au kukusanya kipande cha ukurasa bila safari ya kwenda-na-kurudi hadi kanda ya kati.

Tegemea hili kwa usomaji unaotawala mifumo mingi. Weka mali tuli nyuma ya CDN yenye URL zenye matoleo za maisha marefu, hifadhi majibu ya API ukingoni pale ubichi unaporuhusu (yakifunguliwa kwa uangalifu ili ubinafsishaji usivuje), na utumie kokotoo ya ukingo kwa mantiki nyepesi inayojali ucheleweshaji karibu na watumiaji. Biashara ni ufikiaji dhidi ya udhibiti: ukingo ni wa haraka na wa karibu lakini mbali na data yako na mgumu zaidi kutatua, kwa hiyo weka chochote kinachohitaji uthabiti mkali au hali mbichi yenye mamlaka kwenye asili na uache ukingo ushughulikie trafiki kubwa ya kusoma inayoweza kuhifadhiwa.

Chukulia kache kama uso wa shambulio

Kache hutumikia jibu lilelile lililohifadhiwa kwa watumiaji wengi, jambo linalofanya iwe lengo. Kutia sumu kache ni shambulio ambapo ombi linatengenezwa ili kache ihifadhi jibu hatari au linalodhibitiwa na mshambulizi kisha kulihudumia kwa kila anayefuata. Kwa kawaida hutumia ingizo lisilofunguliwa: kichwa ambacho programu inakiakisi kwenye jibu lakini kache inakipuuza inapojenga ufunguo. Shambulio linalohusiana la kudanganya kache ya wavuti hudanganya kache kuhifadhi jibu la faragha la mwathirika chini ya URL ya umma. Yote mawili ni kushindwa kwa kufungua na kuamini ingizo, vinavyoshughulikiwa kwa upana zaidi katika sura ya 4.2.

Jilinde kwa makusudi. Jumuisha kwenye ufunguo wa kache kila ingizo linaloweza kubadilisha jibu, na ukatae kuakisi vichwa visivyofunguliwa kwenye miili iliyohifadhiwa. Kamwe usiruhusu kache ya pamoja kuhifadhi majibu yaliyothibitishwa ya kila mtumiaji chini ya ufunguo wa pamoja. Sawazisha na uthibitishe njia na vigezo vya ombi kabla ya kuhifadhi. Weka Vary kwa usahihi ili kache zigawanye majibu kwa vichwa vinavyojalisha kweli, kama usimbaji wa maudhui au lugha. Kwa sababu ingizo moja lililotiwa sumu linaumiza kila mtumiaji wa chini ya mkondo, chukulia usanidi wa kache kama msimbo nyeti kwa usalama na uupitie hivyo.

Fanya tabia ya kache ionekane

Huwezi kusimamia kache usiyoweza kuiona. Kipimo kikuu ni kiwango cha mafanikio: sehemu ya maombi yanayohudumiwa kutoka kache badala ya asili. Kiwango cha mafanikio kinachoshuka kimyakimya kutoka asilimia 95 hadi 70 kinaweza kuzidisha mzigo wa asili mara kadhaa na kutangulia kukatika, na utakinasa mapema tu ukikitazama. Weka vifaa vya kupima kwa kila safu tofauti, kwa kuwa kiwango cha afya cha mafanikio cha CDN kinaweza kuficha kiwango kinachoporomoka cha kache ya programu chini yake. Hii ni sura mahususi ya kache ya mazoea ya uonekanaji katika sura ya 9.2.

Fuatilia zaidi ya mafanikio: kiwango cha kuondoa na shinikizo la kumbukumbu kunasa ukubwa mdogo, ucheleweshaji kwenye kila safu kuthibitisha kache ni ya haraka kweli, kiwango cha maombi ya asili kuona mzigo kiasi gani kache inafyonza, na kupitwa na wakati (maingizo yanayohudumiwa ni ya zamani kiasi gani) kuthibitisha unaheshimu ahadi zako za ubichi. Toa tahadhari juu ya uwiano unaotabiri matatizo, hasa kiwango cha mafanikio kinachoshuka au kiwango cha kuondoa kinachopanda, ili ujue kuhusu kache inayodhoofika kutoka dashibodi badala ya watumiaji. Kache inayoonekana ni mali unayoweza kurekebisha; isiyoonekana ni utegemezi uliofichika unaosubiri kukushangaza.

Mabadilishano: faida na hasara

Kache hununua kasi na ukubwa kwa sarafu ya ubichi na ugumu. Kila kache ni dau kwamba iliyopitwa-lakini-ya-haraka inashinda mbichi-lakini-polepole kwa data hii mahususi, na ufundi ni kuweka dau hilo kwa ufahamu badala ya kwa chaguo-msingi. Jedwali hapa chini linafupisha uchaguzi mkuu.

ChaguoFaidaHasara
Cache-asideRahisi; huhifadhi tu inachosomwaUsomaji wa kwanza daima hukosa; hatari ya kupitwa na wakati kwa muda mfupi baada ya uandishi
Write-throughKache daima ya sasa kwenye uandishiUandishi polepole; huhifadhi data ambayo huenda isisomwe kamwe
Write-backUandishi wa haraka sana; hufyonza milipukoHatari ya kupoteza data kache ikishindwa kabla ya kumwaga
Write-aroundHuepuka kusukuma kache na data nzito ya uandishiKukosa kwa uhakika kwenye usomaji wa kwanza
TTL fupiKupitwa na wakati kwa mipaka, kidogoKiwango cha chini cha mafanikio; mzigo zaidi wa asili
TTL ndefu / funguo zenye matoleoKiwango cha juu cha mafanikio; mzigo mdogo wa asiliKupitwa na wakati isipobatilishwa; inahitaji funguo zenye nidhamu
CDN na ukingoUcheleweshaji mdogo wa kimataifa; hufyonza vileleMbali na data; ngumu zaidi kutatua na kubatilisha
Kuondoa kwa LRUHujirekebisha na umaarufu unaobadilikaInaweza kuondoa seti moto thabiti chini ya mzigo mzito wa uchanganuzi
Kuondoa kwa LFUHulinda seti moto thabitiPolepole kujirekebisha; hung’ang’ania maingizo yaliyokuwa moto

Mvutano unaojirudia ni uthabiti dhidi ya utendaji. Kache yenye TTL ndefu na kiwango cha juu cha mafanikio ni ya haraka na nafuu na inaweza kuhudumia data iliyopitwa na wakati; kache yenye TTL fupi na kubatilisha kwa ukali ni mbichi na sahihi na inafanyisha asili kazi zaidi. Hakuna jibu moja sahihi kwa wote, ni jibu sahihi kwa kila kipande cha data tu, lililowekwa na uvumilivu wake halisi wa kupitwa na wakati. Mvutano wa pili ni urahisi dhidi ya ufikiaji: kache ya programu iko karibu na data yako na rahisi kufikiria, wakati ukingo uko mbali, wa haraka, na mgumu kubatilisha. Suluhisha yote mawili kwa kuainisha data yako kwa mahitaji ya ubichi na ujazo wa kusoma, kisha kuweka na kusanidi kila daraja kwa makusudi.

Maswali ya kujadili na timu yako

  1. Uvumilivu halisi wa kupitwa na wakati wa kila aina ya data tunayohifadhi kwenye kache ni upi, na je, tumeweka TTL na kubatilisha kutoka uvumilivu huo badala ya mazoea? Timu nyingi huhifadhi kwa TTL ambayo mtu aliichagua mara moja na kamwe hakuipitia, kwa hiyo data fulani inahudumiwa ikiwa imepitwa kuliko biashara inavyoweza kukubali huku nyingine ikiisha kwa ukali sana kiasi kwamba kache haisaidii karibu kabisa. Leta rasilimali zenu kumi kuu zilizohifadhiwa na, kwa kila moja, waulize watu wanaomiliki data hiyo inaweza kupitwa na wakati kwa usalama kiasi gani: sekunde, dakika, saa, au kamwe mara inapochapishwa. Kwa kawaida utagundua majibu yanatofautiana sana na TTL zenu za sasa hazilingani nayo. Matokeo unayoyataka ni uainishaji mfupi wa ubichi, kila daraja likioanishwa na mbinu (TTL fupi, TTL ndefu pamoja na kufuta, au funguo zisizobadilika zenye matoleo), ili maamuzi ya kache yafuate semantiki za data badala ya kubahatisha.

  2. Ingizo letu maarufu zaidi la kache likiisha sasa hivi chini ya trafiki ya kilele, nini kingetokea kwa asili? Swali hili hufichua kama mna ulinzi halisi dhidi ya mikanyagano au matumaini tu. Mifumo mingi huendesha vizuri hadi ufunguo moto uishe wakati wa kilele cha trafiki na kila ombi likanyage hifadhidata mara moja, ikigeuza kache kutoka ngao kuwa kichocheo. Pitia njia hiyo kwa uhalisia kwa kituo chenu chenye shughuli nyingi zaidi: kuna kuunganisha maombi ili kukosa moja tu kufike asili, kuna mtetemo ili maingizo yasiishe kwa wakati mmoja, kuna sera ya stale-while-revalidate ili watumiaji wasisubiri kujaza upya? Leta ushahidi wa jaribio la mzigo, si hisia, kwa sababu ulinzi dhidi ya mikanyagano unaoshikilia kwa watumiaji kumi bado unaweza kuporomoka kwa elfu kumi. Kama huwezi kujibu kwa kujiamini, uwekezaji wako wa ustahimilivu unaofuata umejipata.

  3. Tuna uhakika hakuna kache ya pamoja inayohifadhi data ya faragha ya mtumiaji mmoja chini ya ufunguo ambao mtumiaji mwingine anaweza kuufikia? Hili ndilo kosa la kache linalogeuka tukio la usalama na kichwa cha habari. Hutokea jibu la kibinafsi au lililothibitishwa linapohifadhiwa chini ya ufunguo usiojumuisha utambulisho wa mtumiaji, au kichwa cha Cache-Control kilichokusudiwa kuweka jibu la faragha kikikosekana, kwa hiyo wakala wa pamoja au CDN huhifadhi na kumhudumia mtu anayefuata. Kagua majibu yapi yanaweza kuhifadhiwa kwenye safu za pamoja, thibitisha kila jibu la kila mtumiaji limewekwa alama private au no-store, na thibitisha kila ufunguo wa kache unajumuisha kila ingizo linalobadilisha jibu. Chukulia hili kama mapitio ya usalama, kwa sababu eneo la mlipuko ni kila mtumiaji wa chini ya mkondo, na uunganishe na mazoea katika sura ya 4.2.

  4. Kila kache yetu inatumia mfumo gani wa uandishi kweli, na je, yeyote aliuchagua kwa makusudi? Cache-aside, write-through, write-back, na write-around hutoa ahadi kinyume kuhusu ubichi na kuhusu kile unachopoteza kache inaposhindwa, hata hivyo katika misimbo mingi mfumo ni chochote mwandishi wa kwanza alichonakili. Kwa timu kubwa hili ni muhimu kwa sababu huduma moja inayodhani ubichi wa cache-aside huku nyingine ikiendesha kimyakimya write-back inaweza kuzalisha data inayoonekana kuharibika lakini ni iliyopitwa tu, na mhandisi wa zamu anapoteza saa akifukuza kivuli. Leta orodha ya kila kache: mfumo wa uandishi, ubichi unaohakikisha, na nini kinatokea kwa uandishi ambao haujamwagwa mchakato ukifa. Pale kache yoyote inatumia write-back, leta hadithi ya uimara inayoiunga mkono. Katika mifumo ya mashirika makubwa na serikali inayoshughulikia data ya kifedha au ya rekodi, kache ya write-back isiyo na hakikisho la msingi ni matokeo ya ukaguzi yanayosubiri, kwa hiyo mjadala unapaswa kuishia na mfumo wa kila kache kutajwa, kuhalalishwa, na kuandikwa.

  5. Tunaposambaza au kubadilisha data, kila safu ya kache husika inabatilisha kwa usahihi, au tunategemea mtu kukumbuka kufuta? Kubatilisha ni sehemu ngumu, na hali ya kushindwa ni ya kimya: thamani iliyorekebishwa inayobaki kosa kwa saa kwa sababu safu moja ya daraja, CDN, wakala wa kinyume, au kache ya programu, haikupata ujumbe kamwe. Shirika kubwa huzidisha hatari hii, kwa sababu badiliko moja la kimantiki linaweza kuhitaji kuenea kuvuka kache nyingi katika kanda nyingi zinazomilikiwa na timu tofauti. Leta ufuatiliaji madhubuti wa badiliko moja la data la hivi karibuni na ulifuate kupitia kila safu ya kache, ukiuliza kwa kila moja: nini kilichochochea kubatilisha hapa, na ilichukua muda gani? Pendelea miundo inayogeuza kubatilisha kuwa kutaja (funguo zenye matoleo) au kuwa matukio (badiliko huchapisha kufuta) kuliko vitabu vya uendeshaji vya mkono. Katika mifumo ya sekta ya umma ambapo takwimu iliyochapishwa kimakosa, kiwango cha kodi au kiasi cha manufaa, inaweza kubeba uzito wa kisheria, pengo la kubatilisha si usumbufu bali mfiduo wa uzingatiaji, kwa hiyo matokeo yanapaswa kuwa njia ya kubatilisha iliyochorwa kwa kila darasa la data iliyohifadhiwa.

  6. Tunachukulia kache kama miundombinu ya jukwaa la pamoja, au kila timu inavumbua upya funguo, kubatilisha, na ulinzi dhidi ya mikanyagano yenyewe? Kache iliyofanywa vizuri ni seti ndogo ya matatizo magumu yaliyotatuliwa mara moja: funguo zilizosawazishwa, kubatilisha kunakoendeshwa na matukio, kuunganisha maombi, semantiki sahihi za HTTP, na uonekanaji wa kila safu. Kila timu inapoboresha haya papo hapo, shirika kubwa hulipia makosa yaleyale mara kwa mara, na hitilafu ya kutia sumu au uvujaji wa data ya faragha uliorekebishwa kwenye huduma moja unaendelea kimyakimya kwenye kumi nyingine. Leta ramani ya uaminifu ya nani anamiliki kanuni za kache leo na msimbo wa kache uliorudiwa kiasi gani kuvuka huduma. Mazingatio yanayoshindana ni uhuru: timu hupinga maktaba ya pamoja iliyoamriwa, kwa hiyo pima chaguo-msingi la njia iliyopakwa lami linalokuwa rahisi kupokea dhidi ya kiwango kigumu kinachotekelezwa. Kwa kikundi cha jukwaa cha shirika kubwa au serikali, uwezo wa kache wa pamoja, uliojaribiwa vizuri pia ndiyo njia ya bei nafuu zaidi ya kufanya mahitaji ya usalama na ukaguzi yashikilie kwa usawa, kwa hiyo mjadala unapaswa kuamua nini kinakuwa miundombinu ya pamoja na nani anafadhili.

Mtazamo wa sekta

Kampuni changa. Kache ndiyo njia yako ya bei nafuu zaidi ya kunusurika kilele cha trafiki ambacho bado huwezi kumudu kupanua kwa ajili yake, kwa hiyo tumia muda mdogo ulio nao kwenye uwekaji wachache wenye kiegemeo cha juu: CDN yenye URL zenye matoleo kwa mali tuli, na safu moja ya cache-aside yenye TTL fupi na mtetemo mbele ya hoja yako moto zaidi. Egemea huduma za CDN na kache zinazosimamiwa badala ya kuziendesha mwenyewe, na ongeza kuunganisha maombi mapema, kwa sababu mkanyagano wa siku ya uzinduzi dhidi ya hifadhidata ndogo ndio kushindwa kunakoelekea zaidi kumaliza siku nzuri vibaya. Ruka mipango ya kina ya kubatilisha hadi uwe na data inayosema ni muhimu.

Biashara ndogo. Bila mtaalamu wa kache na bajeti finyu, pendelea kununua kache unayopata bure ndani ya zana unazoendesha tayari: CDN iliyojumuishwa na mwenyeji wako, vichwa vya HTTP vya Cache-Control kwenye majibu ya mfumo wako wa kazi wa wavuti, na kache ya hoja iliyojengwa ndani ya hifadhidata yako. Uamuzi wa kujenga-dhidi-ya-kununua karibu daima unapendelea kununua hapa, kwa kuwa kache iliyofunguliwa vibaya inayovujisha data ya mteja mmoja kwa mwingine inagharimu zaidi sana kuliko huduma inayosimamiwa uliyoiepuka. Pata ushindi mbili za bei nafuu sawa, vichwa sahihi vya HTTP na kutohifadhi kurasa zilizothibitishwa kwenye safu za pamoja, na uache mifumo ya kigeni.

Biashara kubwa. Kwa ukubwa kuvuka timu nyingi hatari inahama kutoka kache yoyote moja hadi kutokuwa na uthabiti kati yake: miundo tofauti ya funguo, kubatilisha kusiko sawa, na uvujaji wa data ya faragha unaoonekana kwenye huduma moja na si nyingine. Toa kache kama miundombinu ya jukwaa la pamoja yenye chaguo-msingi za njia iliyopakwa lami kwa funguo, kubatilisha, ulinzi dhidi ya mikanyagano, na uonekanaji wa kila safu, ili kiwango cha mafanikio, kuondoa, na kupitwa na wakati vionekane mahali pamoja na kutawaliwa kwa usawa. Fanya usanidi wa kache uweze kupitiwa kama msimbo nyeti kwa usalama, na uchukulie kubatilisha kuvuka kanda kama tatizo la usanifu la daraja la kwanza badala ya kitabu cha uendeshaji cha kila timu.

Serikali. Vikwazo vya ununuzi na uwazi huumba nini unaweza kuhifadhi kwenye kache na jinsi ya kuthibitisha ni salama. Hifadhi maudhui ya umma kwa nguvu, miongozo, fomu, na majedwali ya viwango nyuma ya CDN yenye TTL ndefu, ili kilele cha tarehe ya mwisho ya kuwasilisha kifyonzwe mbali na asili, na uandike usanidi huo kwa ukaguzi. Kurasa zilizothibitishwa zinazoonyesha rekodi za raia mwenyewe lazima zisiguse kamwe kache ya pamoja, na kanuni hiyo inapaswa kuthibitishika, si kudaiwa tu. Pale CDN au huduma ya kache inanunuliwa kutoka kwa muuzaji, hitaji mkataba ufichue vidhibiti unavyohitaji (kufungua, kufuta, na kumbukumbu) na uepuke kufungwa kungenasa data ya umma nyuma ya miundo ya umiliki ya kache.

Mifano

Kampuni changa. Programu ndogo ya watumiaji inapitisha katalogi ya bidhaa kupitia safu ya cache-aside iliyoungwa mkono na hifadhi ya kumbukumbu, yenye TTL ya sekunde 60 na mtetemo ili maingizo yasiishe pamoja. Mali tuli huenda kwa CDN yenye majina ya faili yenye matoleo na max-age ya mwaka mmoja, kwa hiyo usambazaji unaobadilisha karatasi ya mtindo unahudumia URL mpya na haihitaji kufuta. Uzinduzi kwenye podikasti maarufu unapotuma kilele cha trafiki, kuunganisha kwa single-flight kunamaanisha kukosa maelfu ya wakati mmoja kwa ukurasa wa nyumbani husababisha usomaji mmoja wa hifadhidata, si maelfu. Waanzilishi wanatumia karibu hakuna kwenye kache lakini wanashughulikia kilele ambacho kingeyeyusha hifadhidata yao ndogo, kwa sababu waliweka kache chache zilizochaguliwa vizuri kwa makusudi.

Biashara kubwa. Muuzaji wa rejareja wa kimataifa anahudumia mamilioni ya wanunuzi kupitia kache ya tabaka: CDN kwa picha na majibu ya API yanayoweza kuhifadhiwa, kache ya wakala wa kinyume ya pamoja katika kila kanda, na kache ya programu kwa vipande vya bei na hesabu vilivyokokotolewa. Funguo za kache zimesawazishwa na kujumuisha sarafu, lugha, na darasa la kifaa, kwa hiyo ubinafsishaji haujavuja kamwe na viwango vya mafanikio vinabaki juu. Data ya bidhaa inatumia TTL fupi na kubatilisha kunakoendeshwa na matukio, kwa hiyo badiliko la bei linachapisha kwa basi la ujumbe linalofuta funguo zilizoathirika kuvuka kanda ndani ya sekunde. Kila safu inaripoti kiwango cha mafanikio, kiwango cha kuondoa, na kupitwa na wakati kwa jukwaa la uonekanaji la sura ya 9.2, na tahadhari juu ya kiwango cha mafanikio kinachoshuka mara moja ilinasa kache ndogo mno kabla haijawa kukatika kwa malipo.

Serikali. Mamlaka ya kitaifa ya kodi inaendesha lango la kuwasilisha ambalo ni tulivu mwaka mwingi na kulemewa karibu na tarehe ya mwisho. Timu inahifadhi kwa nguvu pale ni salama na kamwe pale si salama. Maudhui ya umma (kurasa za miongozo, fomu, majedwali ya viwango) yanahudumiwa kutoka CDN yenye TTL ndefu na URL zenye matoleo, yakifyonza kilele cha usomaji wa siku ya mwisho mbali na asili. Kurasa zilizothibitishwa zinazoonyesha uwasilishaji wa raia mwenyewe zimewekwa alama no-store na hazigusi kamwe kache ya pamoja, kwa hiyo hakuna mlipa kodi anayehudumiwa data ya mwingine. Usanidi wa kache unapitiwa kama msimbo nyeti kwa usalama dhidi ya mazoea ya sura ya 4.2, na ulinzi dhidi ya mikanyagano unajaribiwa kwa mzigo wa ukubwa wa siku ya mwisho miezi mapema, kwa hiyo lango lililokuwa likipinda siku yenye shughuli nyingi zaidi mwakani sasa linashikilia.

Kesi ya biashara: sababu, ROI, na TCO

Malipo ya kache ni ya moja kwa moja isivyo kawaida na rahisi kupima. Kache inayoinua kiwango cha mafanikio kutoka asilimia 80 hadi 95 inapunguza trafiki ya asili kwa robo tatu, jambo linaloweza kumaanisha kuahirisha uboreshaji wa hifadhidata, kuendesha seva chache za programu, au kunusurika kilele cha trafiki ambacho vinginevyo kingehitaji kupanua kwa dharura. Maboresho ya ucheleweshaji hubadilika kuwa mapato katika biashara na kuridhika na viwango vya kukamilisha katika huduma za umma, ambapo utafiti umehusisha kwa muda mrefu kurasa za haraka na ubadilishaji wa juu na kuacha kwa chini. Gharama za kutoka na kokotoo hushuka kwa sababu ombi linalohudumiwa kutoka ukingoni halilipii kamwe upana wa bendi wa asili wala uchakataji. Kwa mifumo nzito ya kusoma, ambayo ni mingi, kache mara nyingi ndiyo utendaji wa bei nafuu zaidi unaoweza kununua.

Pima jumla ya gharama ya umiliki kwa uaminifu. Gharama za moja kwa moja ni za wastani: miundombinu ya CDN na kache ni nafuu ikilinganishwa na uwezo wa asili inaoakiba. Gharama halisi ni nidhamu ya kihandisi, kwa sababu kache isiyo sahihi ni mbaya kuliko kutokuwa na kache. Hitilafu za kupitwa na wakati, makosa ya kubatilisha, na udhaifu wa kutia sumu kache zote hubeba gharama halisi, na hukua kache zinapoboreshwa kwa kila timu badala ya kutolewa kama uwezo wa pamoja, uliojaribiwa vizuri. Kesi yenye nguvu zaidi hufadhili kiasi kidogo cha miundombinu na kanuni za pamoja za kache (funguo za kawaida, kubatilisha, ulinzi dhidi ya mikanyagano, na uonekanaji) ili kila timu ipate faida bila kurudia makosa. Ikiwekwa kwa uongozi, kache inaunganishwa na vipimo wanavyofuatilia tayari: gharama ya miundombinu, ucheleweshaji wa ukurasa, viwango vya ubadilishaji na kukamilisha, na marudio ya matukio wakati wa matukio ya kilele.

Mifumo mibaya na mitego

  • Kuhifadhi bila kubatilisha: kuweka TTL ndefu bila njia ya kufuta, kwa hiyo thamani iliyorekebishwa inabaki kosa kwa saa.
  • Funguo zenye ukali mdogo: kuhifadhi majibu ya kibinafsi chini ya ufunguo wa pamoja, kuvujisha data ya mtumiaji mmoja kwa mwingine.
  • Funguo zenye undani mwingi: kujumuisha ingizo tete kwenye ufunguo ili hakuna maombi mawili yanayolingana na kiwango cha mafanikio kinaporomoka.
  • Hakuna ulinzi dhidi ya mikanyagano: ufunguo moto unaisha chini ya mzigo na kila ombi linakimbilia asili mara moja.
  • Kuisha kwa wakati mmoja: kundi la maingizo yaliyoandikwa pamoja yote yanaisha kwa papo hapo bila mtetemo, kusababisha kundi la wanyama wanaokimbia la mara kwa mara.
  • Kuhifadhi data ya faragha kwenye safu za pamoja: Cache-Control: private au no-store inayokosekana, kwa hiyo wakala au CDN inahifadhi majibu yaliyothibitishwa.
  • Kupuuza ingizo lisilofunguliwa: kuakisi kichwa kwenye mwili wa jibu lakini kukiacha nje ya ufunguo, kufungua mlango wa kutia sumu kache.
  • Kache ndogo mno: kache ndogo mno kushikilia seti ya kazi hukwama na kuondoa maingizo kabla tu hayajahitajika.
  • Kache isiyopimwa: hakuna kipimo cha mafanikio wala kuondoa, kwa hiyo kache inayodhoofika haionekani hadi iwe kukatika.
  • Write-back bila uimara: uandishi wa haraka unaotoweka kache inapokufa kabla ya kumwaga, bila hakikisho la msingi.

Kielelezo cha ukomavu

  • Ngazi ya 1, Kuanzisha: Kache ni ya papo hapo na ya kila msanidi, inaongezwa kwa kuitikia kitu kinapohisi polepole. TTL zimebashiriwa, funguo hazina uthabiti, kubatilisha ni kwa mkono au hakupo, na data iliyopitwa na wakati na hitilafu za ajabu ni za kawaida. Hakuna anayefuatilia kiwango cha mafanikio, na kilele cha trafiki ambacho kache ilipaswa kufyonza badala yake husababisha kukatika.
  • Ngazi ya 2, Kuendeleza: Timu zinahifadhi mahali dhahiri na kutumia CDN kwa mali tuli. TTL za msingi na cache-aside zinaonekana, lakini kanuni hutofautiana huduma hadi huduma, kubatilisha hakuna uthabiti, ulinzi dhidi ya mikanyagano haupo, kanuni za kache ya faragha dhidi ya ya pamoja si rasmi, na uonekanaji unakomea kwenye ukaguzi wa mara kwa mara.
  • Ngazi ya 3, Kusawazisha: Mkakati wa kache umeandikwa na kutekelezwa shirika zima. Funguo za kache zimesawazishwa, TTL zinafuata uainishaji wa pamoja wa ubichi, kubatilisha kunaendeshwa na matukio pale kunapojalisha, ulinzi dhidi ya mikanyagano na semantiki sahihi za HTTP ni vya kawaida, data ya faragha haihifadhiwi kamwe kwenye safu za pamoja, na kila safu inaripoti kiwango cha mafanikio na kuondoa kwa bomba la pamoja la uonekanaji.
  • Ngazi ya 4, Kusimamia: Kache inapimwa na kudhibitiwa dhidi ya vipimo vya msingi. Kila safu ina viwango lengwa vya mafanikio, bajeti za kupitwa na wakati, na vizingiti vya kuondoa, na dashibodi zinatoa tahadhari kiwango cha mafanikio kinaposhuka au kiwango cha kuondoa kinapopanda zaidi ya kipimo cha msingi. Ulinzi dhidi ya mikanyagano unajaribiwa kwa mzigo wa ukubwa wa kilele, upunguzaji wa mzigo wa asili unapimwa kwa kila kache, TTL na sera za kuondoa zinarekebishwa kutoka mifumo ya ufikiaji iliyopimwa, na usanidi wa kache unapitiwa kama msimbo nyeti kwa usalama kabla ya toleo.
  • Ngazi ya 5, Kuratibu: Kache inaboreshwa kila wakati na kuunganishwa kuvuka shirika. Uwekaji, funguo, na TTL hujirekebisha na trafiki inayobadilika, kokotoo ya ukingo inatumika pale inastahili nafasi yake, upangaji wa uwezo na vielelezo vya gharama vinatumia vipimo vya kache, na mafunzo kutoka matukio ya timu moja yanalisha kanuni za pamoja. Shirika linachukulia kache kama uwezo uliobuniwa, unaopimwa, unaojirekebisha badala ya mkusanyiko wa mbinu za mahali.

Mawazo ya kujadili

  1. Kache ipi moja katika mfumo wenu, ikiwa baridi sasa hivi, ingehatarisha asili yenu zaidi, na nini kinaikinga?
  2. Kwa kila safu ya daraja lenu la kache, mnaweza kutaja kiwango chake cha sasa cha mafanikio kutoka kumbukumbu, na kama sivyo, hilo linaambia nini?
  3. Wapi mmegeuza tatizo la kubatilisha kuwa tatizo la kutaja kwa funguo zenye matoleo, na wapi bado mngeweza kufanya hivyo?
  4. Ni njia zipi zenu za uandishi zinatumia cache-aside, write-through, write-back, au write-around, na je, kila moja ilichaguliwa kwa makusudi?
  5. Mshambulizi akidhibiti kichwa kimoja cha ombi, angeweza kutia sumu jibu lolote lililohifadhiwa ambalo watumiaji wenu wanashiriki?
  6. Mngejuaje, ndani ya dakika, kwamba kiwango chenu cha mafanikio kimeshuka kimyakimya kwa pointi ishirini?

Mambo muhimu ya kukumbuka

  • Kache hupunguza ucheleweshaji, mzigo, na gharama, na daraja la kache (mteja, CDN na ukingo, wakala wa kinyume, programu, hifadhidata) hukuruhusu kujibu juu na nje kadiri unavyoweza kwa usalama.
  • Kubatilisha ni sehemu ngumu; buni funguo za kache na TTL kwa makusudi, na ugeuze matatizo ya kubatilisha kuwa matatizo ya kutaja kwa funguo zenye matoleo popote uwezapo.
  • Linda kache chini ya mzigo kwa kuunganisha maombi, mtetemo, na stale-while-revalidate, kwa sababu kache inahitajika zaidi hasa mkanyagano unapoweza kuivunja.
  • Chagua mifumo ya uandishi na sera za kuondoa kwa kila mzigo wa kazi, na utumie semantiki za kache za HTTP (Cache-Control, ETag, uthibitishaji) waziwazi badala ya kuziacha kache zibashiri.
  • Chukulia maudhui yaliyohifadhiwa kwenye kache kama uso wa shambulio na upime kiwango cha mafanikio, kuondoa, na kupitwa na wakati, kwa sababu kache isiyoonekana au iliyofunguliwa vibaya ni dhima iliyofichika, si mali.

Marejeo na usomaji zaidi

  • Martin Kleppmann, Designing Data-Intensive Applications
  • Andrew S. Tanenbaum and Herbert Bos, Modern Operating Systems
  • John L. Hennessy and David A. Patterson, Computer Architecture: A Quantitative Approach
  • Roy T. Fielding and Julian Reschke, “Hypertext Transfer Protocol (HTTP/1.1): Caching,” RFC 7234, IETF
  • Mark Nottingham, “Caching Tutorial for Web Authors and Webmasters”
  • James Kettle, “Practical Web Cache Poisoning,” PortSwigger Research
  • Betsy Beyer, Chris Jones, Jennifer Petoff, and Niall Richard Murphy (eds.), Site Reliability Engineering: How Google Runs Production Systems
  • Michael T. Nygard, Release It! Design and Deploy Production-Ready Software