大型网站技术架构小结
前言
-
本文是對《大型網(wǎng)站架構設計》(李智慧 著)一書的梳理,類似文字版的“思維導圖”
-
全文主要圍繞“性能,可用性,伸縮性,擴展性,安全”這五個要素
-
性能,可用性,伸縮性這幾個要素基本都涉及到應用服務器,緩存服務器,存儲服務器這幾個方面
概述
-
三個緯度:演化、模式、要素
-
五個要素: 性能,可用性,伸縮性,擴展性,安全
演化歷程
圖例可參考?大型網(wǎng)站架構演化歷程:
初始階段的網(wǎng)站架構:一臺服務器,上面同時擁有應用程序,數(shù)據(jù)庫,文件,等所有資源。例如 LAMP 架構
應用和數(shù)據(jù)服務分離:三臺服務器(硬件資源各不相同),分別是應用服務器,文件服務器和數(shù)據(jù)庫服務器
使用緩存改善網(wǎng)站性能:分為兩種,緩存在應用服務器上的本地緩存和緩存在專門的分布式緩存服務器的遠程緩存
使用應用服務器集群改善網(wǎng)站并發(fā)處理能力:通過負載均衡調度服務器來將訪問請求分發(fā)到應用服務器集群中的任何一臺機器
數(shù)據(jù)庫讀寫分離:數(shù)據(jù)庫采用主從熱備,應用服務器在寫數(shù)據(jù)時訪問主數(shù)據(jù)庫,主數(shù)據(jù)庫通過主從復制機制將數(shù)據(jù)更新同步到從數(shù)據(jù)庫。應用服務器使用專門的數(shù)據(jù)訪問模塊從而對應用透明
使用反向代理和 CDN 加速網(wǎng)站響應:這兩者基本原理都是緩存。反向代理部署在網(wǎng)站的中心機房,CDN 部署在網(wǎng)絡提供商的機房
使用分布式文件系統(tǒng)和分布式數(shù)據(jù)庫系統(tǒng):數(shù)據(jù)庫拆分的最后手段,更常用的是業(yè)務分庫
使用 NoSQL 和搜索引擎:對可伸縮的分布式有更好的支持
業(yè)務拆分:將整個網(wǎng)站業(yè)務拆分成不同的應用,每個應用獨立部署維護,應用之間通過超鏈接建立聯(lián)系/消息隊列進行數(shù)據(jù)分發(fā)/訪問同一數(shù)據(jù)存儲系統(tǒng)
分布式服務:公共業(yè)務提取出來獨立部署
演化的價值觀
-
大型網(wǎng)站架構的核心價值是隨網(wǎng)站所需靈活應對
-
驅動大型網(wǎng)站技術發(fā)展的主要力量是網(wǎng)站的業(yè)務發(fā)展
誤區(qū)
-
一味追隨大公司的解決方案
-
為了技術而技術
-
企圖用技術解決所有問題
架構模式
模式的關鍵在于模式的可重復性
-
分層:橫向切分
-
分割:縱向切分
-
分布式:分層和分割的主要目的是為了切分后的模塊便于分布式部署。常用方案:
-
分布式應用和服務
-
分布式靜態(tài)資源
-
分布式數(shù)據(jù)和存儲
-
分布式計算
-
分布式配置,分布式鎖,分布式文件,等等
-
-
集群:多臺服務器部署相同的應用構成一個集群,通過負載均衡設備共同對外提供服務
-
緩存:將數(shù)據(jù)放距離計算最近的位置加快處理速度,改善性能第一手段,可以加快訪問速度,減小后端負載壓力。使用緩存?兩個前提條件?:1.數(shù)據(jù)訪問熱點不均衡;2.數(shù)據(jù)某時段內有效,不會很快過期
-
CDN
-
反向代理
-
本地緩存
-
分布式緩存
-
-
異步:旨在系統(tǒng)解耦。異步架構是典型的消費者生產者模式,特性如下:
-
提高系統(tǒng)可用性
-
加快網(wǎng)站訪問速度
-
消除并發(fā)訪問高峰
-
-
冗余:實現(xiàn)高可用。數(shù)據(jù)庫的冷備份和熱備份
-
自動化:包括發(fā)布過程自動化,自動化代碼管理,自動化測試,自動化安全檢測,自動化部署,自動化監(jiān)控,自動化報警,自動化失效轉移,自動化失效恢復,自動化降級,自動化分配資源
-
安全:密碼,手機校驗碼,加密,驗證碼,過濾,風險控制
核心要素
架構是“最高層次的規(guī)劃,難以改變的規(guī)定”。主要關注五個要素:
-
性能
-
可用性(Availability)
-
伸縮性(Scalability)
-
擴展性(Extensibility)
-
安全性
架構
下面依次對這五個要素進行歸納
高性能
性能的測試指標主要有:
-
響應時間:指應用執(zhí)行一個操作需要的時間
-
并發(fā)數(shù):指系統(tǒng)能夠同時處理請求的數(shù)目
-
吞吐量:指單位時間內系統(tǒng)處理的請求數(shù)量
-
性能計數(shù)器:描述服務器或者操作系統(tǒng)性能的一些數(shù)據(jù)指標
性能測試方法:
-
性能測試
-
負載測試
-
壓力測試
-
穩(wěn)定性測試
性能優(yōu)化,根據(jù)網(wǎng)站分層架構,可以分為三大類:
-
Web 前端性能優(yōu)化
-
保護網(wǎng)站安全
-
通過配置緩存功能加速 Web 請求
-
實現(xiàn)負載均衡
-
減少 http 請求
-
使用瀏覽器緩存
-
啟用壓縮
-
CSS 放在頁面最上面,JavaScript 放在頁面最下面
-
減少 Cookie 傳輸
-
瀏覽器訪問優(yōu)化
-
CDN 加速:本質是一個緩存,一般緩存靜態(tài)資源
-
反向代理
-
-
應用服務器性能優(yōu)化:主要手段有 緩存、集群、異步
-
多線程(設計為無狀態(tài),使用局部對象,并發(fā)訪問資源使用鎖)
-
資源復用(單例,對象池)
-
數(shù)據(jù)結構
-
垃圾回收
-
分布式緩存(網(wǎng)站性能優(yōu)化第一定律:優(yōu)化考慮使用緩存優(yōu)化性能)
-
異步操作(消息隊列,削峰作用)
-
使用集群
-
代碼優(yōu)化
-
-
存儲服務器性能優(yōu)化
-
機械硬盤 vs. 固態(tài)硬盤
-
B+ 樹 vs. LSM 樹
-
RAID vs. HDFS
-
高可用
-
高可用的網(wǎng)站架構:目的是保證服務器硬件故障時服務依然可用、數(shù)據(jù)依然保存并能夠被訪問,主要手段數(shù)據(jù)和服務的冗余備份及失效轉移
-
高可用的應用:顯著特點是應用的無狀態(tài)性
-
Session 復制
-
Session 綁定
-
利用 Cookie 記錄 Session
-
Session 服務器
-
通過負載均衡進行無狀態(tài)服務的失效轉移
-
應用服務器集群的 Session 管理
-
-
高可用的服務:無狀態(tài)的服務,可使用類似負載均衡的失效轉移策略,此外還有如下策略
-
分級管理
-
超時設置
-
異步調用
-
服務降級
-
冪等性設計
-
-
高可用的數(shù)據(jù):主要手段是數(shù)據(jù)備份和失效轉移機制
-
失效確認
-
訪問轉移
-
數(shù)據(jù)恢復
-
冷備:缺點是不能保證數(shù)據(jù)最終一致和數(shù)據(jù)可用性
-
熱備:分為異步熱備和同步熱備
-
數(shù)據(jù)一致性(Consisitency)
-
數(shù)據(jù)可用性(Availibility)
-
分區(qū)耐受性(Partition Tolerance)
-
CAP 原理
-
數(shù)據(jù)備份
-
失效轉移:由以下三部分組成
-
-
高可用網(wǎng)站的軟件質量保證
-
主干開發(fā)、分支發(fā)布
-
分支開發(fā)、主干發(fā)布
-
網(wǎng)站發(fā)布
-
自動化測試
-
預發(fā)布驗證
-
代碼控制
-
自動化發(fā)布
-
灰度發(fā)布
-
-
網(wǎng)站運行監(jiān)控
-
警報系統(tǒng)
-
失效轉移
-
自動優(yōu)雅降級
-
用戶行為日志采集(服務器端和客戶端)
-
服務器性能監(jiān)控
-
運行數(shù)據(jù)報告
-
監(jiān)控數(shù)據(jù)采集
-
監(jiān)控管理
-
伸縮性
大型網(wǎng)站的“大型”是指:
-
用戶層面:大量用戶及大量訪問
-
功能方面:功能龐雜,產品眾多
-
技術層面:網(wǎng)站需要部署大量的服務器
伸縮性的分為如下幾個方面
-
網(wǎng)站架構的伸縮性設計
-
縱向分離(分層后分離)
-
橫向分離(業(yè)務分割后分離)
-
不同功能進行物理分離實現(xiàn)伸縮
-
單一功能通過集群規(guī)模實現(xiàn)伸縮
-
-
應用服務器集群的伸縮性設計
-
輪詢(Round Robin, RR)
-
加權輪詢(Weighted Round Robin, WRR)
-
隨機(Random)
-
最少鏈接(Least Connections)
-
源地址散列(Source Hashing)
-
HTTP 重定向負載均衡
-
DNS 域名解析負載均衡
-
反向代理負載均衡(在 HTTP 協(xié)議層面,應用層負載均衡)
-
IP 負載均衡(在內核進程完成數(shù)據(jù)分發(fā))
-
數(shù)據(jù)鏈路層負載均衡(數(shù)據(jù)鏈路層修改 mac 地址,三角傳輸模式,LVS)
-
負載均衡算法
-
-
分布式緩存集群的伸縮性設計
-
Memcached 客戶端(包括 API,路由算法,服務器列表,通信模塊)
-
Memcached 服務器集群
-
Memcached 分布式緩存集群的訪問模型
-
Memcached 分布式緩存集群的伸縮性挑戰(zhàn)
-
分布式緩存的一致性 Hash 算法(一致性 Hash 環(huán),虛擬層)
-
-
數(shù)據(jù)存儲服務集群的伸縮性設計
-
關系數(shù)據(jù)庫集群的伸縮性設計
-
NoSQL 數(shù)據(jù)庫的伸縮性設計
-
可擴展
系統(tǒng)架構設計層面的“開閉原則”
-
構建可擴展的網(wǎng)站架構
-
利用分布式消息隊列降低耦合性
-
事件驅動架構(Event Driven Architecture)
-
分布式消息隊列
-
-
利用分布式服務打造可復用的業(yè)務平臺
-
Web Service 與企業(yè)級分布式服務
-
大型網(wǎng)站分布式服務的特點
-
分布式服務框架設計(Thrift, Dubbo)
-
-
可擴展的數(shù)據(jù)結構(如 ColumnFamily 設計)
-
利用開放平臺建設網(wǎng)站生態(tài)圈
安全
XSS 攻擊和 SQL 注入攻擊是構成網(wǎng)站應用攻擊最主要的兩種手段,此外還包括 CSRF,Session 劫持等手段。
-
攻擊與防御
-
Error Code
-
HTML 注釋
-
文件上傳
-
路徑遍歷
-
表單 Token
-
驗證碼
-
Referer Check
-
避免被猜到數(shù)據(jù)庫表結構信息
-
消毒
-
參數(shù)綁定
-
SQL 注入攻擊
-
OS 注入攻擊
-
消毒(即對某些 html 危險字符轉義)
-
HttpOnly
-
反射型
-
持久型
-
XSS 攻擊:跨站點腳本攻擊(Cross Site Script)
-
XSS 防御手段
-
注入攻擊
-
注入防御
-
CSRF 攻擊:跨站點請求偽造(Cross Site ?Request Forgery)
-
CSRF 防御:主要手段是識別請求者身份
-
其他攻擊和漏洞
-
Web 應用防火墻(ModSecurity)
-
網(wǎng)站安全漏洞掃描
-
-
信息加密技術及密鑰安全管理
-
把密鑰和算法放在一個獨立的服務器上
-
將加解密算法放在應用系統(tǒng)中,密鑰放在獨立服務器
-
信息傳輸:公鑰加密,私鑰解密
-
數(shù)字簽名:私鑰加密,公鑰解密
-
不可逆,非明文
-
可加鹽(salt)增加安全性
-
輸入的微小變化會導致輸出完全不同
-
單向散列加密:不同輸入長度的信息通過散列計算得到固定長度的輸出
-
對稱加密:加密和解密使用同一個密鑰
-
非對稱加密
-
密鑰安全管理:信息安全傳輸是靠密鑰保證的,改善手段有:
-
-
信息過濾與反垃圾
-
文本匹配
-
分類算法
-
黑名單
-
來源:http://mp.weixin.qq.com/s?__biz=MzI4OTU3ODk3NQ==&mid=2247483943&idx=1&sn=f4d8475dea00b397ef4e46013a58a05b&chksm=ec2c4897db5bc1811f20fb9dbd4c7cd5fbade58a6c8d92f0d180691fe552e119e5897c28a7df&mpshare=1&scene=23&srcid=0228wAlT8dnrwW9QI6NDugfV#rd
總結
以上是生活随笔為你收集整理的大型网站技术架构小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 肉麻是什么意思(肉麻)
- 下一篇: git 使用方法