系統(tǒng)分流

簡介

現(xiàn)代的企業(yè)級或互聯(lián)網(wǎng)系統(tǒng)窟蓝,“分流”是必須要考慮的設計,分流所使用手段數(shù)量之多窖铡、涉及場景之廣疗锐,可能連它的開發(fā)者都未能完全意識到坊谁,常見的分流手段有:客戶端緩存、域名解析滑臊、傳輸鏈路口芍、內(nèi)容分發(fā)網(wǎng)絡、負載均衡雇卷、服務端緩存等

客戶端緩存

常見的緩存方式有兩種鬓椭,強制緩存協(xié)商緩存,無論是強制緩存還是協(xié)商緩存关划,它們的原理都是在服務器對客戶端請求的響應中附帶一些條件小染,要求客戶端在遇到相同的請求時,先判斷一下是否滿足贮折,如果滿足裤翩,就直接用上一次服務器給予的響應來代替,不必重新訪問

強制緩存

HTTP的強制緩存對一致性問題的處理策略就如它的名字一樣调榄,十分直接踊赠,它會在指定的時間范圍內(nèi)假設資源的內(nèi)容和狀態(tài)一定不會被改變,在這個時間范圍內(nèi)每庆,會一直持有和使用該資源的本地緩存副本筐带,Http協(xié)議中有一下兩類Header實現(xiàn)強制緩存

  • Expires
    Expires: Mon,11 Nov 2019 08:36:00 GMT
    
  • Cache-Control
    如果Expires和Cache-Control同時存在,并且語義存在沖突缤灵,則會以Cache-Control為準
    主要參數(shù)為s-maxage伦籍,max-agepublice腮出,private帖鸦,publicno-cache利诺,no-store
協(xié)商緩存

強制緩存是基于時效性的富蓄,而協(xié)商緩存是一種基于變化監(jiān)測的緩存機制剩燥,在一致性上會有比強制緩存有更好的表現(xiàn).
協(xié)商緩存有兩種變動檢查機制慢逾,分別是根據(jù)資源的修改時間進行檢查,以及根據(jù)資源唯一標識是否變化進行檢查灭红,它們都是靠一組成對出現(xiàn)的請求頭侣滩、響應頭來實現(xiàn)的

  • Last-Modified和If-Modified-Since
    Last-Modified是服務端的響應頭,用于告訴客戶端這個資源的最后修改時間变擒。對于帶有這個響應頭的資源君珠,當客戶端需要再一次請求時,會通過If-Modified-Since把之前收到的資源最后修改時間發(fā)送會服務端
    如果此時服務端發(fā)現(xiàn)資源在該時間后沒有被修改過娇斑,就只要返回一個 304/Not Modified 的響應即可策添,無須附帶消息體材部,達到節(jié)省流量的目的,如下所示:
    HTTP/1.1 304 Not Modified
    Cache-Control: public, max-age=600
    Last-Modified: Wed, 8 Apr 2020 15:31:30 GMT
    
    如果此時服務端發(fā)現(xiàn)資源在該時間之后有變動唯竹,就會返回 200/OK 的完整響應乐导,在消息體中包含最新的資源,如下所示:
    HTTP/1.1 200 OK
    Cache-Control: public, max-age=600
    Last-Modified: Wed, 8 Apr 2020 15:31:30 GMT
    
    Content
    
  • ETag和If-None-Match
    HTTP 響應頭是資源的特定版本的標識符浸颓。這可以讓緩存更高效物臂,并節(jié)省帶寬,因為如果內(nèi)容沒有改變产上,Web 服務器不需要發(fā)送完整的響應棵磷。而如果內(nèi)容發(fā)生了變化,使用 ETag 有助于防止資源的同時更新相互覆蓋(“空中碰撞”)
    ETag是HTTP中一致性最強的緩存機制晋涣,但是同時它也是性能最差的緩存機制仪媒,在每一次請求時,服務端都必須對資源進行哈希計算谢鹊,相比之下要比只是簡單獲取修改時間的方式规丽,開銷要大很多

域名解析

當在一個域名下配置多條不同的記錄時,權威域名服務器可以根據(jù)自己的策略來進行選擇撇贺,典型的應用是智能路線:根據(jù)訪問者所處的不同地區(qū)(譬如華北赌莺、華南、東北)松嘶、不同服務商(譬如電信艘狭、聯(lián)通、移動)等因素來確定返回最合適的記錄翠订,將訪問者路由到最合適的數(shù)據(jù)中心巢音,達到智能加速的目的

傳輸鏈路

  • 減少請求數(shù)量
    請求每次都需要建立鏈路進行數(shù)據(jù)傳輸,這些開銷很昂貴尽超,減少請求的數(shù)量可有效提高訪問性能官撼。常見的手段包括
    • 雪碧圖
    • CSS、JS文件合并/內(nèi)聯(lián)
    • 文段文檔
    • 媒體(圖片似谁、音頻)內(nèi)聯(lián)
    • 合并Ajax請求
    • 擴大并發(fā)請求數(shù)
  • 擴大并發(fā)請求
    如果希望更快地加載大量圖片或其他資源傲绣,需要進行域名分片(Domain Sharding),將圖片同步到不同主機或者同一主機的不同域名上
  • 啟用壓縮傳輸
    啟用壓縮能夠大幅度減少需要在網(wǎng)絡上傳輸?shù)膬?nèi)容大小巩踏,節(jié)省網(wǎng)絡流量
  • 按重要性調(diào)節(jié)資源優(yōu)先級
    將最重要的秃诵、馬上就要使用的、對客戶端展示影響大的資源塞琼,放在HTML的頭部坯墨,以便優(yōu)先下載

內(nèi)容分發(fā)網(wǎng)絡(CDN)

內(nèi)容分發(fā)網(wǎng)絡(CDN)是一個互連服務器網(wǎng)絡胰蝠,可加快數(shù)據(jù)密集型應用程序的網(wǎng)頁加載速度男娄。CDN 可以表示內(nèi)容分發(fā)網(wǎng)絡或內(nèi)容分配網(wǎng)絡。當用戶訪問某個網(wǎng)站時牵咙,來自該網(wǎng)站服務器的數(shù)據(jù)必須通過互聯(lián)網(wǎng)傳輸?shù)接脩舻挠嬎銠C。如果用戶距離該服務器較遠攀唯,則加載大文件(例如視頻或網(wǎng)站圖像)將需要很長時間霜大。相反,如果網(wǎng)站內(nèi)容存儲在距離用戶較近的 CDN 服務器上革答,就可以更快到達他們的計算機战坤。

CDN 優(yōu)勢
  • 加快頁面加載速度
    如果您的頁面加載速度太慢,網(wǎng)站流量可能會減少残拐。CDN 可以降低跳出率并增加用戶在您網(wǎng)站上停留的時間
  • 降低帶寬成本
    帶寬成本是一筆巨大的開支途茫,因為每個傳入的網(wǎng)站請求都會消耗網(wǎng)絡帶寬。通過緩存和其他優(yōu)化溪食,CDN 可以減少原始服務器必須提供的數(shù)據(jù)量囊卜,從而降低網(wǎng)站所有者的托管成本
  • 提高內(nèi)容可用性
    同一時間的訪客過多或網(wǎng)絡硬件故障可能會導致網(wǎng)站崩潰。CDN 服務可以處理更多 Web 流量并降低 Web 服務器的負載错沃。此外栅组,如果一臺或多臺 CDN 服務器離線,其他運營服務器可以替換它們枢析,以確保服務不中斷
  • 提高網(wǎng)站安全性
    分布式拒絕服務(DDoS)攻擊試圖通過向網(wǎng)站發(fā)送大量虛假流量來關閉應用程序玉掸。CDN 可以通過在多個中間服務器之間分配負載來處理此類流量峰值,從而降低對原始服務器的影響
分發(fā)方式
  • 主動分發(fā)(Push)
    分發(fā)由源站主動發(fā)起醒叁,將內(nèi)容從源站或者其他資源庫推送到用戶邊緣的各個CDN緩存節(jié)點上
  • 被動回源(Pull)
    被動回源由用戶訪問觸發(fā)司浪,是全自動、雙向透明的資源緩存過程把沼。這種分發(fā)方式是小型站點使用CDN服務的主流選擇啊易,如果不是自建CDN,而是采用云廠商的CDN服務饮睬,則多數(shù)采用的就是這種方式
CDN的工作原理

內(nèi)容分發(fā)網(wǎng)絡(CDN)通過在多個地理位置建立一個入網(wǎng)點(PoP)或一組 CDN 邊緣服務器來工作租谈。這個分布在不同地理位置的網(wǎng)絡基于緩存、動態(tài)加速和邊緣邏輯計算的原則工作

負載均衡

負載均衡是在支持應用程序的資源池中平均分配網(wǎng)絡流量的一種方法捆愁。負載均衡器是位于用戶與服務器組之間的設備割去,充當不可見的協(xié)調(diào)者,確保均等使用所有資源服務器

均衡策略與實現(xiàn)
  • 輪循均衡(Round Robin)
  • 權重輪循均衡(Weighted Round Robin)
  • 隨機均衡(Random)
  • 權重隨機均衡(Weighted Random)
  • 一致性哈希均衡(Consistency Hash)
  • 響應速度均衡(Response Time)
  • 最少連接數(shù)均衡(Least Connection)

服務端緩存

缺點
  • 開發(fā)
    引入緩存會提高系統(tǒng)復雜度牙瓢,因為要考慮緩存的失效劫拗、更新间校、一致性等問題
  • 運維
    緩存會掩蓋一些缺陷矾克,讓問題在更遠的時間以后,出現(xiàn)在距離發(fā)生現(xiàn)場更遠的位置上
  • 安全
    緩存可能會泄漏某些保密數(shù)據(jù)憔足,也是容易受到攻擊的薄弱點
優(yōu)點
  • 緩解CPU壓力
    把方法運行結果存儲起來胁附、把原本要實時計算的內(nèi)容提前算好酒繁、把一些公用的數(shù)據(jù)進行復用,這可以節(jié)省 CPU 算力控妻,順帶提升響應性能
  • 緩解I/O壓力
    把原本對網(wǎng)絡州袒、磁盤等較慢介質(zhì)的讀寫訪問變?yōu)閷?nèi)存等較快介質(zhì)的訪問,將原本對單點部件(如數(shù)據(jù)庫)的讀寫訪問變?yōu)榈娇蓴U縮部件(如緩存中間件)的訪問弓候,順帶提升響應性能
緩存屬性
  • 吞吐量
    緩存的吞吐量使用 OPS 值(每秒操作數(shù)郎哭,Operations per Second,ops/s)來衡量菇存,反映了對緩存進行并發(fā)讀夸研、寫操作的效率,即緩存本身的工作效率高低
  • 命中率
    緩存的命中率即成功從緩存中返回結果次數(shù)與總請求次數(shù)的比值依鸥,反映了引入緩存的價值高低亥至,命中率越低,引入緩存的收益越小贱迟,價值越低
  • 擴展功能
    緩存除了基本讀寫功能外姐扮,還提供哪些額外的管理功能,譬如最大容量衣吠、失效時間茶敏、失效事件、命中率統(tǒng)計缚俏,等等
  • 分布式支持
    緩存可分為“進程內(nèi)緩存”和“分布式緩存”兩大類睡榆,前者只為節(jié)點本身提供服務,無網(wǎng)絡訪問操作袍榆,速度快但緩存的數(shù)據(jù)不能在各個服務節(jié)點中共享胀屿,后者則相反
緩存風險
  • 緩存穿透
    如果查詢的數(shù)據(jù)在數(shù)據(jù)庫中根本不存在,緩存里自然也不會有包雀,這類請求的流量每次都不會命中宿崭,且每次都會觸及末端的數(shù)據(jù)庫,緩存就起不到緩解壓力的作用了才写,這種現(xiàn)象稱為緩存穿透
  • 緩存擊穿
    如果緩存中某些熱點數(shù)據(jù)忽然因某種原因失效了葡兑,譬如典型地由于超期而失效,此時又有多個針對該數(shù)據(jù)的請求同時發(fā)送過來赞草,這些請求將全部未能命中緩存讹堤,都到達真實數(shù)據(jù)源中去,導致其壓力劇增厨疙,這種現(xiàn)象被稱為緩存擊穿
  • 緩存雪崩
    在緩存中大批不同的數(shù)據(jù)在短時間內(nèi)一起失效洲守,導致這些數(shù)據(jù)的請求都擊穿緩存到達數(shù)據(jù)源,同樣令數(shù)據(jù)源在短時間內(nèi)壓力劇增
  • 緩存污染
    緩存污染是指緩存中的數(shù)據(jù)與真實數(shù)據(jù)源的數(shù)據(jù)不一致的現(xiàn)象
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市梗醇,隨后出現(xiàn)的幾起案子知允,更是在濱河造成了極大的恐慌,老刑警劉巖叙谨,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件温鸽,死亡現(xiàn)場離奇詭異,居然都是意外死亡手负,警方通過查閱死者的電腦和手機涤垫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竟终,“玉大人雹姊,你說我怎么就攤上這事『饫悖” “怎么了吱雏?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘾境。 經(jīng)常有香客問我歧杏,道長,這世上最難降的妖魔是什么迷守? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任犬绒,我火速辦了婚禮,結果婚禮上兑凿,老公的妹妹穿的比我還像新娘凯力。我一直安慰自己,他們只是感情好礼华,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布咐鹤。 她就那樣靜靜地躺著,像睡著了一般圣絮。 火紅的嫁衣襯著肌膚如雪祈惶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天扮匠,我揣著相機與錄音捧请,去河邊找鬼。 笑死棒搜,一個胖子當著我的面吹牛疹蛉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播力麸,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼可款,長吁一口氣:“原來是場噩夢啊……” “哼育韩!你這毒婦竟也來了?” 一聲冷哼從身側響起筑舅,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤座慰,失蹤者是張志新(化名)和其女友劉穎陨舱,沒想到半個月后翠拣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡游盲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年误墓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片益缎。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡谜慌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莺奔,到底是詐尸還是另有隱情欣范,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布令哟,位于F島的核電站恼琼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏屏富。R本人自食惡果不足惜晴竞,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望狠半。 院中可真熱鬧噩死,春花似錦、人聲如沸神年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽已日。三九已至衣摩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捂敌,已是汗流浹背艾扮。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留占婉,地道東北人泡嘴。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像逆济,于是被迫代替她去往敵國和親酌予。 傳聞我的和親對象是個殘疾皇子磺箕,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容