大型網(wǎng)站的演化

前言


  • 本文是對《大型網(wǎng)站架構(gòu)設(shè)計》(李智慧 著)一書的梳理芍耘,類似文字版的“思維導(dǎo)圖”
  • 全文主要圍繞“性能,可用性戴涝,伸縮性滋戳,擴展性,安全”這五個要素
  • 性能啥刻,可用性奸鸯,伸縮性這幾個要素基本都涉及到應(yīng)用服務(wù)器,緩存服務(wù)器可帽,存儲服務(wù)器這幾個方面

概述


  • 三個緯度:演化娄涩、模式、要素
  • 五個要素: 性能映跟,可用性蓄拣,伸縮性,擴展性努隙,安全

演化歷程

  1. 初始階段的網(wǎng)站架構(gòu):一臺服務(wù)器球恤,上面同時擁有應(yīng)用程序、數(shù)據(jù)庫荸镊、文件等所有資源咽斧。
  2. 應(yīng)用和數(shù)據(jù)服務(wù)分離:三臺服務(wù)器(硬件資源各不相同),分表是應(yīng)用服務(wù)器躬存、數(shù)據(jù)庫服務(wù)器收厨。和文件服務(wù)器。
  3. 使用緩存改善網(wǎng)站性能:分為兩種优构,緩存在應(yīng)用服務(wù)器上的本地緩存和緩存在專門的分布式緩存服務(wù)器的遠程緩存。
  4. 使用應(yīng)用服務(wù)器集群改善網(wǎng)站并發(fā)處理能力:通過負載均衡調(diào)度服務(wù)器來將訪問請求分發(fā)到應(yīng)用服務(wù)器集群中的任何一臺機器雁竞。
  5. 數(shù)據(jù)庫讀寫分離:數(shù)據(jù)庫采用主從熱備钦椭,應(yīng)用服務(wù)器在寫數(shù)據(jù)時訪問主數(shù)據(jù)庫拧额,主數(shù)據(jù)庫通過主從復(fù)制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫。應(yīng)用服務(wù)器使用專門的數(shù)據(jù)訪問模塊從而對應(yīng)用透明彪腔。
  6. 使用反向代理和CDN加速網(wǎng)站響應(yīng):這兩者基本原理都是緩存侥锦。反向代理部署在網(wǎng)站的中心機房,CDN部署在網(wǎng)絡(luò)提供商的機房德挣。
  7. 使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng):數(shù)據(jù)庫拆分的最后手段恭垦,更常用的是業(yè)務(wù)分庫。
  8. 使用NoSQL和搜索引擎:對可伸縮的分布式有更好的支持格嗅。
  9. 業(yè)務(wù)拆分:將整個網(wǎng)站業(yè)務(wù)拆分成不同的應(yīng)用番挺,每個應(yīng)用獨立部署維護,應(yīng)用之間通過超鏈接建立聯(lián)系屯掖、消息隊列進行數(shù)據(jù)分發(fā)玄柏、訪問同一數(shù)據(jù)存儲系統(tǒng)。
  10. 分布式服務(wù):公共業(yè)務(wù)提取出來獨立部署贴铜。
架構(gòu)圖
架構(gòu)圖

演化的價值觀

  • 大型網(wǎng)站架構(gòu)的核心價值是隨網(wǎng)站所需靈活應(yīng)對
  • 驅(qū)動大型網(wǎng)站技術(shù)發(fā)展的主要力量是網(wǎng)站的業(yè)務(wù)發(fā)展

誤區(qū)

  • 一味追隨大公司的解決方案
  • 為了技術(shù)而技術(shù)
  • 企圖用技術(shù)解決所有問題

架構(gòu)模式

模式的關(guān)鍵在于模式的可復(fù)用性

  • 分層:橫向切分
  • 分割:縱向切分
  • 分布式:分層和分割的主要目的是為了切分后的模塊便于分布式部署粪摘。常用方案:
    • 分布式應(yīng)用和服務(wù)
    • 分布式靜態(tài)資源
    • 分布式數(shù)據(jù)和存儲
    • 分布式計算
    • 分布式配置,分布式鎖绍坝,分布式文件徘意,等等
  • 集群:多臺服務(wù)器部署相同的應(yīng)用構(gòu)成一個集群,通過負載均衡設(shè)備共同對外提供服務(wù)

  • 緩存:將數(shù)據(jù)放距離計算最近的位置加快處理速度轩褐,改善性能第一手段椎咧,可以加快訪問速度,減小后端負載壓力灾挨。使用緩存 兩個前提條件 :1.數(shù)據(jù)訪問熱點不均衡邑退;2.數(shù)據(jù)某時段內(nèi)有效,不會很快過期

    • CDN
    • 反向代理
    • 本地緩存
    • 分布式緩存
  • 異步:旨在系統(tǒng)解耦劳澄。異步架構(gòu)是典型的消費者生產(chǎn)者模式地技,特性如下:

    • 提高系統(tǒng)可用性
    • 加快網(wǎng)站訪問速度
    • 消除并發(fā)訪問高峰
  • 冗余:實現(xiàn)高可用。數(shù)據(jù)庫的冷備份和熱備份

  • 自動化:包括發(fā)布過程自動化秒拔,自動化代碼管理莫矗,自動化測試,自動化安全檢測砂缩,自動化部署作谚,自動化監(jiān)控,自動化報警庵芭,自動化失效轉(zhuǎn)移妹懒,自動化失效恢復(fù),自動化降級双吆,自動化分配資源

  • 安全:密碼眨唬,手機校驗碼会前,加密,驗證碼匾竿,過濾瓦宜,風(fēng)險控制

核心要素

架構(gòu)是“最高層次的規(guī)劃,難以改變的規(guī)定”岭妖。主要關(guān)注五個要素:

  • 性能
  • 可用性(Availability)
  • 伸縮性(Scalability)
  • 擴展性(Extensibility)
  • 安全性

架構(gòu)


下面依次對這五個要素進行歸納

高性能

性能的測試指標(biāo)主要有:

  • 響應(yīng)時間:指應(yīng)用執(zhí)行一個操作需要的時間
  • 并發(fā)數(shù):指系統(tǒng)能夠同時處理請求的數(shù)目
  • 吞吐量:指單位時間內(nèi)系統(tǒng)處理的請求數(shù)量
  • 性能計數(shù)器:描述服務(wù)器或者操作系統(tǒng)性能的一些數(shù)據(jù)指標(biāo)

性能測試方法:

  • 性能測試
  • 負載測試
  • 壓力測試
  • 穩(wěn)定性測試

性能優(yōu)化,根據(jù)網(wǎng)站分層架構(gòu)临庇,可以分為三大類:

  • Web 前端性能優(yōu)化

    • 瀏覽器訪問優(yōu)化
      • 減少 http 請求
      • 使用瀏覽器緩存
      • 啟用壓縮
      • CSS 放在頁面最上面,JavaScript 放在頁面最下面
      • 減少 Cookie 傳輸
    • CDN 加速:本質(zhì)是一個緩存昵慌,一般緩存靜態(tài)資源
    • 反向代理
      • 保護網(wǎng)站安全
      • 通過配置緩存功能加速 Web 請求
      • 實現(xiàn)負載均衡
  • 應(yīng)用服務(wù)器性能優(yōu)化:主要手段有 緩存假夺、集群、異步

    • 分布式緩存(網(wǎng)站性能優(yōu)化第一定律:優(yōu)化考慮使用緩存優(yōu)化性能)
    • 異步操作(消息隊列废离,削峰作用)
    • 使用集群
    • 代碼優(yōu)化
      • 多線程(設(shè)計為無狀態(tài)侄泽,使用局部對象,并發(fā)訪問資源使用鎖)
      • 資源復(fù)用(單例蜻韭,對象池)
      • 數(shù)據(jù)結(jié)構(gòu)
      • 垃圾回收
  • 存儲服務(wù)器性能優(yōu)化

    • 機械硬盤 vs. 固態(tài)硬盤
    • B+ 樹 vs. LSM 樹
    • RAID vs. HDFS

高可用

  • 高可用的網(wǎng)站架構(gòu):目的是保證服務(wù)器硬件故障時服務(wù)依然可用悼尾、數(shù)據(jù)依然保存并能夠被訪問,主要手段數(shù)據(jù)和服務(wù)的冗余備份及失效轉(zhuǎn)移

  • 高可用的應(yīng)用:顯著特點是應(yīng)用的無狀態(tài)性

    • 通過負載均衡進行無狀態(tài)服務(wù)的失效轉(zhuǎn)移
    • 應(yīng)用服務(wù)器集群的 Session 管理
      • Session 復(fù)制
      • Session 綁定
      • 利用 Cookie 記錄 Session
      • Session 服務(wù)器
  • 高可用的服務(wù):無狀態(tài)的服務(wù)肖方,可使用類似負載均衡的失效轉(zhuǎn)移策略闺魏,此外還有如下策略

    • 分級管理
    • 超時設(shè)置
    • 異步調(diào)用
    • 服務(wù)降級
    • 冪等性設(shè)計
  • 高可用的數(shù)據(jù):主要手段是數(shù)據(jù)備份和失效轉(zhuǎn)移機制

    • CAP 原理
      • 數(shù)據(jù)一致性(Consisitency)
      • 數(shù)據(jù)可用性(Availibility)
      • 分區(qū)耐受性(Partition Tolerance)
    • 數(shù)據(jù)備份
      • 冷備:缺點是不能保證數(shù)據(jù)最終一致和數(shù)據(jù)可用性
      • 熱備:分為異步熱備和同步熱備
    • 失效轉(zhuǎn)移:由以下三部分組成
      • 失效確認
      • 訪問轉(zhuǎn)移
      • 數(shù)據(jù)恢復(fù)
  • 高可用網(wǎng)站的軟件質(zhì)量保證

    • 網(wǎng)站發(fā)布
    • 自動化測試
    • 預(yù)發(fā)布驗證
    • 代碼控制
      • 主干開發(fā)、分支發(fā)布
      • 分支開發(fā)俯画、主干發(fā)布
    • 自動化發(fā)布
    • 灰度發(fā)布
  • 網(wǎng)站運行監(jiān)控

    • 監(jiān)控數(shù)據(jù)采集
      • 用戶行為日志采集(服務(wù)器端和客戶端)
      • 服務(wù)器性能監(jiān)控
      • 運行數(shù)據(jù)報告
    • 監(jiān)控管理
      • 警報系統(tǒng)
      • 失效轉(zhuǎn)移
      • 自動優(yōu)雅降級

伸縮性

大型網(wǎng)站的“大型”是指:

  • 用戶層面:大量用戶及大量訪問
  • 功能方面:功能龐雜析桥,產(chǎn)品眾多
  • 技術(shù)層面:網(wǎng)站需要部署大量的服務(wù)器

伸縮性的分為如下幾個方面

  • 網(wǎng)站架構(gòu)的伸縮性設(shè)計

    • 不同功能進行物理分離實現(xiàn)伸縮
      • 縱向分離(分層后分離)
      • 橫向分離(業(yè)務(wù)分割后分離)
    • 單一功能通過集群規(guī)模實現(xiàn)伸縮
  • 應(yīng)用服務(wù)器集群的伸縮性設(shè)計

    • HTTP 重定向負載均衡
    • DNS 域名解析負載均衡
    • 反向代理負載均衡(在 HTTP 協(xié)議層面,應(yīng)用層負載均衡)
    • IP 負載均衡(在內(nèi)核進程完成數(shù)據(jù)分發(fā))
    • 數(shù)據(jù)鏈路層負載均衡(數(shù)據(jù)鏈路層修改 mac 地址艰垂,三角傳輸模式泡仗,LVS)
    • 負載均衡算法
      • 輪詢(Round Robin, RR)
      • 加權(quán)輪詢(Weighted Round Robin, WRR)
      • 隨機(Random)
      • 最少鏈接(Least Connections)
      • 源地址散列(Source Hashing)
  • 分布式緩存集群的伸縮性設(shè)計

    • Memcached 分布式緩存集群的訪問模型
      • Memcached 客戶端(包括 API,路由算法猜憎,服務(wù)器列表娩怎,通信模塊)
      • Memcached 服務(wù)器集群
    • Memcached 分布式緩存集群的伸縮性挑戰(zhàn)
    • 分布式緩存的一致性 Hash 算法(一致性 Hash 環(huán),虛擬層)
  • 數(shù)據(jù)存儲服務(wù)集群的伸縮性設(shè)計
    • 關(guān)系數(shù)據(jù)庫集群的伸縮性設(shè)計
    • NoSQL 數(shù)據(jù)庫的伸縮性設(shè)計

可擴展

系統(tǒng)架構(gòu)設(shè)計層面的“開閉原則”

  • 構(gòu)建可擴展的網(wǎng)站架構(gòu)
  • 利用分布式消息隊列降低耦合性
    • 事件驅(qū)動架構(gòu)(Event Driven Architecture)
    • 分布式消息隊列
  • 利用分布式服務(wù)打造可復(fù)用的業(yè)務(wù)平臺
    • Web Service 與企業(yè)級分布式服務(wù)
    • 大型網(wǎng)站分布式服務(wù)的特點
    • 分布式服務(wù)框架設(shè)計(Thrift, Dubbo)
  • 可擴展的數(shù)據(jù)結(jié)構(gòu)(如 ColumnFamily 設(shè)計)
  • 利用開放平臺建設(shè)網(wǎng)站生態(tài)圈

安全

XSS 攻擊和 SQL 注入攻擊是構(gòu)成網(wǎng)站應(yīng)用攻擊最主要的兩種手段胰柑,此外還包括 CSRF,Session 劫持等手段截亦。

  • 攻擊與防御

    • XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
      • 反射型
      • 持久型
    • XSS 防御手段
      • 消毒(即對某些 html 危險字符轉(zhuǎn)義)
      • HttpOnly
    • 注入攻擊
      • SQL 注入攻擊
      • OS 注入攻擊
    • 注入防御
      • 避免被猜到數(shù)據(jù)庫表結(jié)構(gòu)信息
      • 消毒
      • 參數(shù)綁定
    • CSRF 攻擊:跨站點請求偽造(Cross Site Request Forgery)
    • CSRF 防御:主要手段是識別請求者身份
      • 表單 Token
      • 驗證碼
      • Referer Check
    • 其他攻擊和漏洞
      • Error Code
      • HTML 注釋
      • 文件上傳
      • 路徑遍歷
    • Web 應(yīng)用防火墻(ModSecurity)
    • 網(wǎng)站安全漏洞掃描
  • 信息加密技術(shù)及密鑰安全管理

    • 單向散列加密:不同輸入長度的信息通過散列計算得到固定長度的輸出
      • 不可逆,非明文
      • 可加鹽(salt)增加安全性
      • 輸入的微小變化會導(dǎo)致輸出完全不同
    • 對稱加密:加密和解密使用同一個密鑰
    • 非對稱加密
      • 信息傳輸:公鑰加密柬讨,私鑰解密
      • 數(shù)字簽名:私鑰加密崩瓤,公鑰解密
    • 密鑰安全管理:信息安全傳輸是靠密鑰保證的,改善手段有:
      • 把密鑰和算法放在一個獨立的服務(wù)器上
      • 將加解密算法放在應(yīng)用系統(tǒng)中踩官,密鑰放在獨立服務(wù)器
  • 信息過濾與反垃圾

    • 文本匹配
    • 分類算法
    • 黑名單
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末却桶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蔗牡,更是在濱河造成了極大的恐慌肾扰,老刑警劉巖畴嘶,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡辽剧,警方通過查閱死者的電腦和手機柳击,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來养匈,“玉大人,你說我怎么就攤上這事×拢” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵姑丑,是天一觀的道長蛤签。 經(jīng)常有香客問我,道長栅哀,這世上最難降的妖魔是什么震肮? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮留拾,結(jié)果婚禮上戳晌,老公的妹妹穿的比我還像新娘。我一直安慰自己痴柔,他們只是感情好沦偎,可當(dāng)我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著咳蔚,像睡著了一般豪嚎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谈火,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天侈询,我揣著相機與錄音,去河邊找鬼堆巧。 笑死妄荔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谍肤。 我是一名探鬼主播啦租,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荒揣!你這毒婦竟也來了篷角?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤系任,失蹤者是張志新(化名)和其女友劉穎恳蹲,沒想到半個月后虐块,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡嘉蕾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年贺奠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错忱。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡率,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出以清,到底是詐尸還是另有隱情儿普,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布掷倔,位于F島的核電站眉孩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勒葱。R本人自食惡果不足惜浪汪,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望错森。 院中可真熱鬧吟宦,春花似錦、人聲如沸涩维。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓦阐。三九已至蜗侈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間睡蟋,已是汗流浹背踏幻。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戳杀,地道東北人该面。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像信卡,于是被迫代替她去往敵國和親隔缀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,455評論 2 359

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