您的位置: 首頁(yè)>>關(guān)于我們>>行業(yè)動(dòng)態(tài) |
大型網(wǎng)站 的特點(diǎn) :
高并發(fā) 、大流量:需要 面對(duì) 高并發(fā) 用戶 ,大流量訪問 。
高可用 :需要 7x24 小時(shí) 不間斷 服務(wù) 。
海量數(shù)據(jù) :數(shù)據(jù) 需要 存儲(chǔ) 、管理 ,需要 大量 服務(wù)器 。
用戶 分步 廣泛 、網(wǎng)絡(luò) 情況 復(fù)雜 :全球 網(wǎng)絡(luò) 復(fù)雜 ,像國(guó)內(nèi) 還有 各個(gè) 運(yùn)營(yíng)商網(wǎng)絡(luò)互通 難的問題 。
安全 環(huán)境惡劣 :互聯(lián)網(wǎng) 開放性 ,使得 網(wǎng)站 易受到 攻擊 。
需求 快速 變更 ,發(fā)布 頻繁 :快速迭代。
漸進(jìn)式 發(fā)展 :從小 網(wǎng)站 開始 ,逐漸 發(fā)展 成大 站點(diǎn) 。
大型網(wǎng)站 的主要 技術(shù) 挑戰(zhàn)
龐大 的用戶 ,高并發(fā) 的訪問 和海量數(shù)據(jù) 。
任何 簡(jiǎn)單 業(yè)務(wù) 在處理 PB級(jí)數(shù)據(jù) 或數(shù)以億計(jì)的用戶 時(shí),問題 就會(huì) 變得 棘手 。
大型 網(wǎng)站架構(gòu) 的演化過(guò)程
初始 階段 的網(wǎng)站架構(gòu)
大多數(shù) 小項(xiàng)目 的初期 架構(gòu) 都是 這樣 。
隨著 網(wǎng)站 業(yè)務(wù)發(fā)展 ,1臺(tái)服務(wù)器 無(wú)法 滿足需求:用戶 越來(lái)越多 ,網(wǎng)站 性能 越來(lái)越 差,越來(lái)越多 的數(shù)據(jù) 導(dǎo)致 存儲(chǔ)空間 不足 。
應(yīng)用 、數(shù)據(jù)庫(kù) 、文件 分離
應(yīng)用服務(wù) 與數(shù)據(jù)服務(wù) 分離 :提高 性能 ,解決 存儲(chǔ) 問題 。
【服務(wù)器 專用化】
應(yīng)用服務(wù)器 :處理 業(yè)務(wù) ,要求 CPU 強(qiáng)
文件服務(wù)器 :存儲(chǔ) 文件 ,要求 存儲(chǔ)容量 大
數(shù)據(jù)庫(kù) 服務(wù)器 :存儲(chǔ) 數(shù)據(jù) 、緩存 、磁盤 檢索 ,要求 內(nèi)存 、硬盤速度快
隨著 用戶量 增多 ,數(shù)據(jù)庫(kù) 壓力大 ,會(huì)成為 系統(tǒng) 瓶頸 。
用緩存 改善 網(wǎng)站 性能
二八定律 :80 %的業(yè)務(wù) 訪問 20 %的數(shù)據(jù) 。
所以 常用 數(shù)據(jù) 放入 緩存 ,可以 減少 數(shù)據(jù)庫(kù) 的壓力 。
緩存 分為 兩種 :
本地 緩存 :訪問 更快,但受應(yīng)用服務(wù)器 內(nèi)存 限制 ,且會(huì)出現(xiàn) 和應(yīng)用程序 爭(zhēng)用內(nèi)存 的情況 。
分布式緩存:集群 方式 ,專用 服務(wù)器 作為 緩存服務(wù)器 ,理論上不受 內(nèi)存容量 限制 。
目前 只有 單個(gè) 應(yīng)用服務(wù)器 ,且只部署 了一個(gè) 實(shí)例 ,其能夠 處理 的連接數(shù) 有限 ,在網(wǎng)站訪問 高峰期 時(shí),應(yīng)用服務(wù)器 會(huì)變成 瓶頸 。
使用 應(yīng)用 集群 改善 網(wǎng)站 的并發(fā) 能力
一臺(tái) 服務(wù)器 的處理 能力不足時(shí),不要 考慮 去換更強(qiáng)大 的服務(wù)器 ,對(duì)于 大型網(wǎng)站 而言 ,不管 多么 強(qiáng)大 的服務(wù)器 ,都滿足 不了 網(wǎng)站 持續(xù)增長(zhǎng) 的業(yè)務(wù) 需求 。
最好 的方式 是添加 更多 的服務(wù)器 來(lái)分擔(dān) 原有 服務(wù)器 的訪問 。
數(shù)據(jù)庫(kù) 讀寫分離
數(shù)據(jù)庫(kù) 還存在 的的問題 :使用 緩存 后,依然 會(huì)有 部分 讀操作 (緩存 沒有 命中 ,緩存 過(guò)期 等)和所有 的寫操作 需要 訪問 數(shù)據(jù)庫(kù) 。
在網(wǎng)站 用戶 達(dá)到 一定 規(guī)模 后,數(shù)據(jù)庫(kù) 依然 會(huì)因?yàn)?/span> 負(fù)載 較高成為 系統(tǒng) 瓶頸 。
解決辦法 :采用 數(shù)據(jù)庫(kù) 讀寫分離,兩臺(tái) 數(shù)據(jù)庫(kù) 配置 主從關(guān)系 ,從主庫(kù) 寫數(shù)據(jù) ,從從 庫(kù)讀數(shù)據(jù) ,主庫(kù) 的數(shù)據(jù) 會(huì)同步 到從庫(kù)中。
為了 便于 應(yīng)用程序 能夠 透明 地訪問 讀寫分離的數(shù)據(jù)庫(kù) ,所以 在應(yīng)用程序 中使用 專門 的數(shù)據(jù) 訪問 模塊 。
使用 反向代理 緩存 和CDN 加速 網(wǎng)站 響應(yīng) :網(wǎng)絡(luò)環(huán)境 復(fù)雜 ,緩存 前端 靜態(tài) 資源
請(qǐng)求 訪問 存在的問題 :隨著 網(wǎng)站 持續(xù) 的發(fā)展 ,發(fā)現(xiàn) 不同 網(wǎng)絡(luò)環(huán)境 的用戶 訪問速度 不同 。
解決辦法 :使用 反向代理 緩存 和CDN 加速 網(wǎng)站 響應(yīng) 。
CDN 和反向代理 的基本原理 :都是 緩存 ,區(qū)別 在于 CDN 部署 在網(wǎng)絡(luò) 提供商 的機(jī)房 ,使用戶 在請(qǐng)求 網(wǎng)站服務(wù) 時(shí),可以 從距離 自己 最近 的網(wǎng)絡(luò) 提供商 機(jī)房 獲取數(shù)據(jù) ;而反向代理 則部署 在網(wǎng)站 的中心 機(jī)房 中,從用戶 請(qǐng)求 達(dá)到 中心 機(jī)房 后,首先 訪問 的服務(wù)器 是反向代理 服務(wù)器 ,如果 反向代理 服務(wù)器 中緩存 著用戶 請(qǐng)求 的資源 ,就將其直接 返回 給用戶 。
CDN 和反向代理 的目的 :盡早 返回 數(shù)據(jù) 給用戶 ,一方面 加快 用戶 訪問速度 ,另一方面 減輕 應(yīng)用服務(wù)器 的負(fù)載 壓力 。
使用 分布式文件系統(tǒng) 和分布式 數(shù)據(jù)庫(kù)系統(tǒng)
隨著 網(wǎng)站 業(yè)務(wù)發(fā)展 ,原有 讀寫分離的數(shù)據(jù)庫(kù) 也不能 支撐 。
另外 ,原有 的文件服務(wù)器 也無(wú)法 滿足需求了。
這時(shí) ,需要 使用 分布式 數(shù)據(jù)庫(kù) 和分布式文件系統(tǒng) 。
分布式 數(shù)據(jù)庫(kù) 是網(wǎng)站 數(shù)據(jù)庫(kù) 拆分 的最后 手段 ,只有 在單表 數(shù)據(jù) 規(guī)模 非常 龐大 時(shí)才使用 。
網(wǎng)站 更常用 的數(shù)據(jù)庫(kù) 拆分 手段 是業(yè)務(wù) 分庫(kù) ,將不同 的業(yè)務(wù) 數(shù)據(jù) 部署 在不同 的物理服務(wù)器上。
使用 NoSQL和搜索引擎
隨著 業(yè)務(wù) 越來(lái)越 復(fù)雜 ,對(duì)數(shù)據(jù)存儲(chǔ) 和檢索 的需求 也越來(lái)越 復(fù)雜 ,網(wǎng)站 需要 采用 NoSQL和非數(shù)據(jù)庫(kù)查詢 技術(shù) 比如 搜索引擎 。
業(yè)務(wù) 拆分 (分治 )
網(wǎng)站 過(guò)于 復(fù)雜 ,將業(yè)務(wù) 拆分 。
比如 商城 拆分為 首頁(yè) 、店鋪 、訂單 、買家 、賣家 等產(chǎn)品線 ,歸不同 的業(yè)務(wù) 團(tuán)隊(duì) 負(fù)責(zé) 。
具體 到技術(shù) ,也會(huì)根據(jù) 產(chǎn)品線 劃分 ,將一個(gè)網(wǎng)站 拆分為 多個(gè) 應(yīng)用 ,每個(gè) 應(yīng)用 獨(dú)立 部署 維護(hù) 。
應(yīng)用 之間 可以 通過(guò) 一個(gè) 超鏈接 建立 關(guān)系 (在首頁(yè) 的導(dǎo)航 鏈接 指向 不同 的應(yīng)用 地址 ),也可以 通過(guò) 消息隊(duì)列 進(jìn)行 數(shù)據(jù) 分發(fā) ,當(dāng)然 最多 的還是 通過(guò) 訪問 同一個(gè) 數(shù)據(jù) 存儲(chǔ)系統(tǒng) 來(lái)構(gòu)成 一個(gè) 關(guān)聯(lián) 的完整 系統(tǒng) 。
分布式服務(wù)
業(yè)務(wù) 拆分 越來(lái)越 小,存儲(chǔ)系統(tǒng) 越來(lái)越大,應(yīng)用系統(tǒng) 整體 復(fù)雜度 呈指數(shù)型增加 ,部署 維護(hù) 越來(lái)越 困難 。
由于 所有 應(yīng)用 都需要 連接數(shù)據(jù)庫(kù) ,在數(shù)萬(wàn) 臺(tái)服務(wù)器 的情況 下,數(shù)據(jù)庫(kù)連接 會(huì)資源 不足 。
既然 每個(gè) 應(yīng)用系統(tǒng) 都需要 相同 的業(yè)務(wù) 操作 ,比如 用戶管理 、商品管理 等,可以 把這些 共用 業(yè)務(wù) 抽取 出來(lái) ,獨(dú)立 部署 。