大型網(wǎng)站技術(shù)架構(gòu)核心原理剖析,附知識圖譜下載
時間:2023-06-02 05:00:02 | 來源:網(wǎng)站運(yùn)營
時間:2023-06-02 05:00:02 來源:網(wǎng)站運(yùn)營
大型網(wǎng)站技術(shù)架構(gòu)核心原理剖析,附知識圖譜下載:
什么是軟件架構(gòu)
維基百科定義:
軟件架構(gòu)是指有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導(dǎo)大型軟件系統(tǒng)各個方面的設(shè)計。
軟件架構(gòu)5大要素:
可以通過考察這5大要素來衡量一個軟件架構(gòu)設(shè)計的優(yōu)劣。
高性能
網(wǎng)站性能是客觀的指標(biāo),具體體現(xiàn)到
響應(yīng)時間、
吞吐量 等技術(shù)指標(biāo)。
性能優(yōu)化的最終目的:
改善用戶體驗(yàn)。
網(wǎng)站性能測試是性能優(yōu)化的前提和基礎(chǔ),也是性能優(yōu)化結(jié)果的檢查和度量標(biāo)準(zhǔn)。
下面從三個視角來看看網(wǎng)站性能的不同標(biāo)準(zhǔn):
用戶視角 網(wǎng)站響應(yīng)速度快慢(通信時間,處理時間、解析響應(yīng)數(shù)據(jù)的時間)。
開發(fā)人員視角 關(guān)注程序本身及其相關(guān)子系統(tǒng)的性能,包括響應(yīng)延遲、系統(tǒng)吞吐量、并發(fā)處理能力、系統(tǒng)穩(wěn)定性等技術(shù)指標(biāo)。
運(yùn)維人員視角 關(guān)注基礎(chǔ)設(shè)施性能和資源利用率,如網(wǎng)絡(luò)運(yùn)營商的帶寬能力、服務(wù)器硬件配置、數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)、服務(wù)器和網(wǎng)路帶寬的資源利用率等。
性能測試指標(biāo)
網(wǎng)站性能測試的主要指標(biāo)主要有:
- 響應(yīng)時間:應(yīng)用執(zhí)行一個操作需要的時間(從發(fā)出請求開始到收到最后響應(yīng)數(shù)據(jù)所需要的時間)。
- 并發(fā)數(shù):系統(tǒng)能夠同時處理請求的數(shù)目,反映了系統(tǒng)的負(fù)載特性。。
- 吞吐量:單位時間內(nèi)系統(tǒng)處理的請求數(shù)量,體現(xiàn)系統(tǒng)的整體處理能力。存在一個極限值。
- TPS:每秒事務(wù)數(shù)
- HPS:每秒HTTP請求數(shù)
- QPS:每秒查詢數(shù)
- 性能計數(shù)器:描述服務(wù)器或操作系統(tǒng)的一些數(shù)據(jù)指標(biāo)。主要包括:
- System Load:系統(tǒng)負(fù)載,指當(dāng)前正在被CPU執(zhí)行和等待被CPU執(zhí)行的進(jìn)程數(shù)目總和(反映系統(tǒng)忙閑程度的重要指標(biāo))。
- 對象與線程數(shù)
- 內(nèi)存使用
- CPU使用
- 磁盤與網(wǎng)絡(luò)I/O
性能測試方法
性能測試是一個不斷對系統(tǒng)增加訪問壓力,以 獲得系統(tǒng)性能指標(biāo)、最大負(fù)載能力、最大壓力承受能力的過程。性能測試主要包括以下幾種方法:
- 性能測試:對系統(tǒng)不斷施壓,驗(yàn)證系統(tǒng)在資源可以接受范圍內(nèi),是否能達(dá)到預(yù)期。
- 負(fù)載測試:對系統(tǒng)不斷增加并發(fā)請求,直到系統(tǒng)的某項或多項性能指標(biāo)達(dá)到安全臨界值。
- 壓力測試:在超過安全負(fù)載的情況下,對系統(tǒng)繼續(xù)施壓,直到系統(tǒng)崩潰或不能再處理請求,已獲得系統(tǒng)最大承受能力。
- 穩(wěn)定性測試:系統(tǒng)在特定的硬件、軟件、網(wǎng)路環(huán)境條件下,給系統(tǒng)加載一定壓力,使系統(tǒng)運(yùn)行一段較長時間,以檢查系統(tǒng)是否穩(wěn)定。
性能分析與優(yōu)化
排查網(wǎng)站的性能瓶頸的方法:檢查請求處理的各個環(huán)節(jié)的日志,分析哪個環(huán)節(jié)響應(yīng)時間不合理、超過預(yù)期;然后檢查監(jiān)控數(shù)據(jù),分析影響性能的主要因素是內(nèi)存、磁盤、網(wǎng)絡(luò)還是 CPU,時代嗎問題還是架構(gòu)設(shè)置不合理,或者系統(tǒng)資源確實(shí)不足。
定位到了性能具體問題后,然后根據(jù)性能產(chǎn)生的原因進(jìn)行性能優(yōu)化。性能優(yōu)化主要從三個方面進(jìn)行優(yōu)化:
- Web前端性能優(yōu)化
- 應(yīng)用服務(wù)器性能優(yōu)化
- 存儲服務(wù)器性能優(yōu)化
性能優(yōu)化策略
Web前端優(yōu)化
1. 瀏覽器訪問優(yōu)化- 減少HTTP請求:分別合并CSS、JS、圖片等資源,減少瀏覽器的請求次數(shù)。
- 使用瀏覽器緩存:瀏覽器將CSS、JS、圖標(biāo)等靜態(tài)資源緩存在瀏覽器中,那樣就不用每次都去請求服務(wù)器,可以極好地改善性能。設(shè)置HTTP頭中
Cache-Control
和Expires
屬性。 - 啟用壓縮:在服務(wù)器端對文件進(jìn)行壓縮,在瀏覽器端對文件進(jìn)行解壓,可有效減少通信傳輸?shù)臄?shù)據(jù)量。壓縮比80%以上。壓縮和解壓縮會消耗服務(wù)器和瀏覽器所在的系統(tǒng)的CPU資源。
- CSS放在頁面最上面,JS放在頁面最下面:加載JS后會立即執(zhí)行,可能會阻塞頁面渲染。
- 減少Cookie傳輸:減少Cookie中傳輸?shù)臄?shù)據(jù)量,請求靜態(tài)資源沒有必要發(fā)送Cookie。
2. CDN加速CDN(Content Distribute Network,內(nèi)容分發(fā)網(wǎng)絡(luò)),是指將數(shù)據(jù)緩存在離用戶最近的地方,使用戶以最快的速度獲取數(shù)據(jù),提升網(wǎng)頁的打開速度。
CDN適合緩存
靜態(tài)資源,如圖片、文件、CSS、腳本、靜態(tài)文件等。
3. 反向代理反向代理 是指服務(wù)器根據(jù)客戶端的請求,從其關(guān)聯(lián)的一組或多組后端服務(wù)器上獲取資源,然后再將這些資源返回給客戶端,客戶端只會得知反向代理的IP地址,而不知道在代理服務(wù)器后面具體的真實(shí)服務(wù)器的存在。
反向代理的作用:
- 安全功能
- 通過緩存配置加速Web請求(靜態(tài)資源)
- 負(fù)載均衡,通過構(gòu)建集群,提高系統(tǒng)總體處理能力
應(yīng)用服務(wù)器優(yōu)化
1. 分布式緩存網(wǎng)站性能優(yōu)化第一定律:
優(yōu)先考慮使用緩存優(yōu)化性能。
原理:將數(shù)據(jù)存儲在訪問速度較高的存儲介質(zhì)中,加快訪問速度。
緩存作用:
- 緩存訪問速度快,減少數(shù)據(jù)訪問時間
- 緩存計算結(jié)果,節(jié)省計算的時間
合理使用緩存:
- 緩存讀寫比高,變化少的數(shù)據(jù)
- 盡量緩存熱點(diǎn)數(shù)據(jù)
- 確保數(shù)據(jù)有效性,根據(jù)業(yè)務(wù)場景,選擇是否能容忍數(shù)據(jù)一定時間內(nèi)不一致,還是及時更新
- 對緩存設(shè)置失效時間,緩存數(shù)據(jù)丟失或者不可用,會從數(shù)據(jù)庫直接獲取數(shù)據(jù)
- 緩存預(yù)熱:在緩存啟動的時候就把熱點(diǎn)數(shù)據(jù)加載好。
- 避免緩存穿透:將不存的數(shù)據(jù)也緩存起來。
2. 異步操作使用消息隊列將調(diào)用異步化,以改善網(wǎng)站的性能。
使用消息隊列后,用戶請求的數(shù)據(jù)發(fā)送給消息隊列后就立即返回,再由消息隊列的消費(fèi)者從消息隊列中獲取數(shù)據(jù),再進(jìn)行邏輯處理(如寫入數(shù)據(jù)庫)。
3. 使用集群使用負(fù)載均衡技術(shù)為應(yīng)用構(gòu)建一個由多臺服務(wù)器組成的服務(wù)器集群,將并發(fā)訪問請求分發(fā)到多臺服務(wù)器上處理,避免單一服務(wù)器因負(fù)載壓力過大而響應(yīng)緩存,降低用戶請求響應(yīng)延遲,提升用戶體驗(yàn)。
4. 代碼優(yōu)化代碼優(yōu)化主要關(guān)注以下幾個方面:
- 多線程:涉及線程安全問題,多線程并發(fā)對某個資源進(jìn)行修改,解決辦法:
- 將對象設(shè)計為無狀態(tài)對象
- 使用局部對象
- 并發(fā)訪問資源時使用鎖
- 資源復(fù)用:減少開銷較大的系統(tǒng)資源的創(chuàng)建和銷毀,如數(shù)據(jù)庫連接、網(wǎng)絡(luò)通信連接、線程、復(fù)雜對象等。
- 單例(Singleton)
- 對象池(Object Pool)
- 數(shù)據(jù)結(jié)構(gòu)
- 垃圾回收
存儲性能優(yōu)化
磁盤是系統(tǒng)最嚴(yán)重的瓶頸。
1. 機(jī)械硬盤 & 固態(tài)硬盤在網(wǎng)站應(yīng)用中,大部分應(yīng)用訪問數(shù)據(jù)都是隨機(jī)的,機(jī)械硬盤由于需要移動磁頭臂,所以性能較差。SSD具有更好的性能。
2. B+樹 & LSM樹為了改善數(shù)據(jù)訪問特性,文件系統(tǒng)或數(shù)據(jù)庫系統(tǒng)通常會對數(shù)據(jù)排序后存儲,以加快檢索速度,這樣就需要保證數(shù)據(jù)在不斷更新、插入、刪除后依然有序。
傳統(tǒng)關(guān)系數(shù)據(jù)庫使用B+樹,B+樹是一種專門針對磁盤而優(yōu)化的N叉排序樹,以樹節(jié)點(diǎn)為單位存儲在磁盤中,從根開始查找所需數(shù)據(jù)所在的節(jié)點(diǎn)編號和磁盤位置,將其加載到內(nèi)存中然后繼續(xù)查找,直到找到所需的數(shù)據(jù)。
LSM樹是一個N階合并樹。數(shù)據(jù)的插入、修改和刪除都是在內(nèi)存中進(jìn)行,并且都會創(chuàng)建一個新記錄,這些數(shù)據(jù)在內(nèi)存中以樹結(jié)構(gòu)排序,當(dāng)數(shù)據(jù)量超過設(shè)定的閾值后,會和磁盤上最新的的排序樹合并。在合并的過程中,會用最新更新的數(shù)據(jù)覆蓋舊的數(shù)據(jù)。讀操作先從內(nèi)存中排序樹開始搜索,如未找到,再從磁盤上排序樹順序查找。
在LSM樹上進(jìn)行一次數(shù)據(jù)更新不需要磁盤訪問,在內(nèi)存即可完成,速度遠(yuǎn)快于B+樹。
對于寫多,集中讀最近寫入數(shù)據(jù)的場景,使用LSM樹可以極大的減少磁盤的訪問次數(shù),加快訪問速度。
3. RAID & HDFSRAID
廉價磁盤冗余陣列,主要是為了改善磁盤的訪問延遲,增強(qiáng)磁盤的可用性和容錯能力。
多塊磁盤通過使用RAID技術(shù),實(shí)現(xiàn)數(shù)據(jù)在多塊磁盤上的并發(fā)讀寫和數(shù)據(jù)備份。
常用RAID技術(shù):
- RAID0:在寫的時候,根據(jù)磁盤數(shù)量將數(shù)據(jù)分成N份,并發(fā)寫入N塊磁盤。在讀的時候,從N塊磁盤上并發(fā)讀。RAID0具有極快的數(shù)據(jù)讀取速度,但是未做備份。
- RAID1:數(shù)據(jù)寫入的時候,將一份數(shù)據(jù)同時寫入兩塊磁盤,一塊磁盤損壞不會導(dǎo)致數(shù)據(jù)丟失,插入新磁盤可以通過復(fù)制數(shù)據(jù)方式自動修復(fù),可靠性高。
- RAID10:將所有磁盤平均分成兩份,數(shù)據(jù)同時在兩份磁盤寫入,結(jié)合RAID0和RAID1兩種方案,既提高了可靠性又改善了性能,但是RAID10的磁盤利用率較低,一般磁盤用來備份數(shù)據(jù)。
- RAID3:數(shù)據(jù)寫入的時候,將數(shù)據(jù)分成N-1份,并發(fā)寫入N-1塊磁盤,并在第N塊磁盤記錄校驗(yàn)數(shù)據(jù),任何一塊磁盤損壞(包括校驗(yàn)數(shù)據(jù)磁盤),都可以利用其它N-1塊磁盤的數(shù)據(jù)修復(fù)。在數(shù)據(jù)修改較多的場景,會導(dǎo)致第N塊磁盤頻繁重寫校驗(yàn)數(shù)據(jù),容易造成磁盤損壞,所以一般少在實(shí)踐中使用。
- RAID5:與RAID3類似,但是校驗(yàn)數(shù)據(jù)是螺旋寫入所有磁盤,避免頻繁寫一塊盤。
- RAID6:與RAID5類似,數(shù)據(jù)值寫入N-2塊磁盤,螺旋式地在兩塊磁盤中寫入校驗(yàn)信息(不同算法),數(shù)據(jù)可靠性最高。
HDFS
系統(tǒng)在整個存儲集群的多臺服務(wù)器上進(jìn)行數(shù)據(jù)并發(fā)讀寫和備份。HDFS以塊(Block)為單位管理文件內(nèi)容,一個文件被切分成多個Block,當(dāng)應(yīng)用程序?qū)懳募r,每寫完一個Block,HDFS會將其自動復(fù)制到另外兩臺機(jī)器上,保證3副本(默認(rèn))。在處理文件的時候(MapReduce),可以同時啟動多個任務(wù)并行讀取文件的不同Block,并發(fā)處理,提升讀取效率。
HDFS配置MapReduce等并行計算框架進(jìn)行大數(shù)據(jù)處理時,可以在整個集群上并發(fā)讀寫訪問所有的磁盤安,無需RAID支持。
高可用
網(wǎng)站的可用性描述
網(wǎng)站可有效訪問的特性。
可用性度量:服務(wù)7*24可用,可用性超過99.99%。
網(wǎng)站不可用時間(故障時間) = 故障修復(fù)時間點(diǎn) - 故障發(fā)現(xiàn)(報告)時間點(diǎn)網(wǎng)站年度可用性指標(biāo)=(1-網(wǎng)站不可用時間/年度總時間)*100%
硬件故障是常態(tài),網(wǎng)站的高可用架構(gòu)設(shè)計主要目的:
保證服務(wù)器硬件故障時服務(wù)依然可用、數(shù)據(jù)依然能保存并能被訪問。
高可用架構(gòu)的主要手段:數(shù)據(jù)和服務(wù)
冗余備份 及
失效轉(zhuǎn)移。
一個典型的網(wǎng)站設(shè)計通常遵循三層架構(gòu)模型:
- 應(yīng)用層:負(fù)責(zé)具體業(yè)務(wù)邏輯處理
- 服務(wù)層:負(fù)責(zé)提供可復(fù)用的服務(wù)
- 數(shù)據(jù)層:負(fù)責(zé)數(shù)據(jù)的存儲于訪問
高可用的應(yīng)用
應(yīng)用的顯著特點(diǎn):無狀態(tài)性。
無狀態(tài)應(yīng)用是指應(yīng)用服務(wù)器不保存業(yè)務(wù)的上下文信息,僅根據(jù)每次請求提交的數(shù)據(jù)進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理。多個服務(wù)器實(shí)力之間完全對等,請求提交到任意服務(wù)器,處理結(jié)果都是完全一樣的。
通過負(fù)載均衡進(jìn)行無狀態(tài)服務(wù)的失效轉(zhuǎn)移
通過負(fù)載均衡手段,將流量和數(shù)據(jù)均勻分配到一個集群組成的多臺服務(wù)器上,以提高系統(tǒng)的整體負(fù)載處理能力。
應(yīng)用服務(wù)器集群的Session管理
Session管理手段:
1. Session復(fù)制 應(yīng)用服務(wù)器開啟Web容器的Session復(fù)制功能,在集群中的幾臺服務(wù)器之間同步Session對象,使得每臺服務(wù)器上都保存所有用戶的Session信息,這樣任何一臺機(jī)器宕機(jī)都不會導(dǎo)致Session數(shù)據(jù)的丟失。 適合小規(guī)模集群。當(dāng)集群比較大時,集群服務(wù)器間需要大量的通信進(jìn)行Session復(fù)制,會占用大量服務(wù)器和網(wǎng)絡(luò)資源。
2. Session綁定 利用負(fù)載均衡的源地址Hash算法實(shí)現(xiàn),負(fù)載均衡服務(wù)器總是將來源于同一IP的請求分發(fā)到同一臺服務(wù)器上,也可以根據(jù)Cookie信息將同一個用戶的請求總是分發(fā)到同一臺機(jī)器上,這樣在整個會話期間沒用戶所有的請求都在同一臺服務(wù)器上處理,即Session綁定在某臺特定服務(wù)器上,又稱
會話黏滯。
缺點(diǎn):不符合對系統(tǒng)高可用的需求,某臺服務(wù)器宕機(jī),那么該機(jī)器上的Session會丟失。很少使用。
3. 利用Cookie記錄Session利用瀏覽器支持的Cookie記錄Session。每次請求的時候,將Session放在請求中發(fā)送到服務(wù)器,服務(wù)器處理完請求之后再將修改過的Session響應(yīng)給客戶端。
缺點(diǎn):受Cookie大小限制,記錄信息有限;每次請求都需傳輸Cookie,影響性能;如用戶關(guān)閉Cookie,訪問就會異常。
4. Session服務(wù)器利用獨(dú)立部署的Session服務(wù)器集群統(tǒng)一管理Session,應(yīng)用服務(wù)器每次讀寫Session時,都訪問Session服務(wù)器。
將應(yīng)用服務(wù)器的狀態(tài)分離,分為無狀態(tài)的應(yīng)用服務(wù)器和有狀態(tài)的Session服務(wù)器,針對這兩種服務(wù)器的不同特性分別設(shè)計其架構(gòu)。
Session服務(wù)器實(shí)現(xiàn):分布式緩存、數(shù)據(jù)庫等。
高可用的服務(wù)
高可用的服務(wù)模塊為業(yè)務(wù)產(chǎn)品提供
基礎(chǔ)公共服務(wù),一般是
獨(dú)立部署。
高可用的服務(wù)策略:
1. 負(fù)載均衡通過負(fù)載均衡的失效轉(zhuǎn)移策略實(shí)現(xiàn)高可用。
2. 分級管理根據(jù)應(yīng)用和服務(wù)的重要程度進(jìn)行分級管理,不同重要程序的服務(wù)使用不同的硬件資源,越重要的的服務(wù)使用越好的硬件資源。核心服務(wù)和數(shù)據(jù)部署在不同地域的數(shù)據(jù)中心。
3. 超時設(shè)置設(shè)置服務(wù)調(diào)用的超時時間,一旦超時,通信框架拋出異常,應(yīng)用程序根據(jù)服務(wù)調(diào)度策略,選擇繼續(xù)重試或?qū)⒄埱筠D(zhuǎn)移到相同服務(wù)的其他服務(wù)器上。
4. 異步調(diào)用應(yīng)用對服務(wù)的調(diào)用通過消息隊列等異步方式完成,避免一個服務(wù)失敗導(dǎo)致整個應(yīng)用請求失敗。
5. 服務(wù)降級網(wǎng)站訪問高峰期,服務(wù)可能因?yàn)榇罅康牟l(fā)調(diào)用而性能下降,嚴(yán)重時可能會導(dǎo)致服務(wù)宕機(jī)。為了保證核心應(yīng)用和功能的正常運(yùn)行,對服務(wù)進(jìn)行降級。
降級手段:
- 拒絕服務(wù) :拒絕低優(yōu)先級應(yīng)用的調(diào)用,減少服務(wù)調(diào)用并發(fā)數(shù),確保核心應(yīng)用正常使用;或隨機(jī)拒絕部分請求調(diào)用,節(jié)約資源。
- 關(guān)閉服務(wù):關(guān)閉部分不重要的服務(wù),或者服務(wù)內(nèi)部關(guān)閉部分不重要的功能,節(jié)約系統(tǒng)開銷,重要功能讓出資源。
6. 冪等性設(shè)計服務(wù)層必須保證重復(fù)調(diào)用和調(diào)用一次產(chǎn)生的結(jié)果相同,即服務(wù)具有冪等性。
高可用的數(shù)據(jù)
1. CAP為了保證數(shù)據(jù)的高可用,會犧牲
數(shù)據(jù)一致性。
高可用的數(shù)據(jù)含義:
- 數(shù)據(jù)持久性:保證數(shù)據(jù)持久存儲,不會出現(xiàn)數(shù)據(jù)丟失的問題。
- 數(shù)據(jù)可訪問性:在多份數(shù)據(jù)副本分別存放在不同存儲設(shè)備的情況下,一個數(shù)據(jù)存儲設(shè)備損壞需要將數(shù)據(jù)訪問切換到其他數(shù)據(jù)存儲設(shè)備上。
- 數(shù)據(jù)一致性:多副本之間數(shù)據(jù)一致。
CAP原理:一個提供數(shù)據(jù)服務(wù)的存儲系統(tǒng)無法同時滿足
數(shù)據(jù)一致性(Consistency)、
數(shù)據(jù)可用性(Availibility)、**分區(qū)耐受性(Partition Tolerance,系統(tǒng)具有跨網(wǎng)絡(luò)分區(qū)的伸縮性)**這三個條件。
在大型網(wǎng)站應(yīng)用中,數(shù)據(jù)規(guī)??偸强焖贁U(kuò)張的,因此可伸縮即分區(qū)耐受性必不可少,規(guī)模變大以后,機(jī)器數(shù)量也會變得龐大,這是網(wǎng)路和服務(wù)器故障會頻繁吹安,要想保證應(yīng)用可用,就必須保證分布式處理系統(tǒng)的高可用。所以在大型網(wǎng)站中,通常會選擇強(qiáng)化分布式存儲系統(tǒng)的可用性(A)和伸縮性(P),而在某種程度上放棄一致性(C)。
數(shù)據(jù)不一致出現(xiàn)原因:系統(tǒng)高并發(fā)寫操作或者集群狀態(tài)不穩(wěn)定(故障恢復(fù)、集群擴(kuò)容)。
數(shù)據(jù)一致性分為:
- 數(shù)據(jù)強(qiáng)一致:各副本的數(shù)據(jù)在物理存儲中總是一致的;數(shù)據(jù)更新操作結(jié)果和操作響應(yīng)總是一致的,即操作響應(yīng)通知更新失敗,那么數(shù)據(jù)一定沒有被更新,而不是出于不確定狀態(tài)。
- 用戶數(shù)據(jù)一致:數(shù)據(jù)在物理存儲中的各個副本的數(shù)據(jù)可能是不一致的,但終端用戶訪問時,通過糾錯和校驗(yàn)機(jī)制,可以確定一個一直的且正確的數(shù)據(jù)返回給用戶。
- 數(shù)據(jù)最終一致:物理存儲的數(shù)據(jù)可能不一致,終端用戶訪問到數(shù)據(jù)可能不一致,但系統(tǒng)經(jīng)過一段時間的自我恢復(fù)和修正,數(shù)據(jù)最終達(dá)到一直。
保證數(shù)據(jù)存儲高可用的手段:
2. 數(shù)據(jù)備份保證數(shù)據(jù)有多個副本,任意副本的失效都不會導(dǎo)致數(shù)據(jù)的永久丟失,從而實(shí)現(xiàn)數(shù)據(jù)完全的持久化。
數(shù)據(jù)備份方式:
- 冷備:簡單、廉價、成本和技術(shù)難度低。缺點(diǎn)不能保證數(shù)據(jù)最終一致。
- 熱備:
- 異步熱備:多份數(shù)據(jù)副本的寫入操作異步完成。
- 同步熱備:多份數(shù)據(jù)副本的下入操作同步完成。
3. 失效轉(zhuǎn)移機(jī)制保證當(dāng)一個數(shù)據(jù)副本不可訪問時,可以快速切換訪問數(shù)據(jù)的其他副本,保證系統(tǒng)可用。
失效轉(zhuǎn)移操作組成:
- 失效確認(rèn):通過 心跳檢測 和 應(yīng)用程序訪問失敗報告判斷服務(wù)器是否宕機(jī)
- 訪問轉(zhuǎn)移:將數(shù)據(jù)的讀寫訪問重新路由到其他服務(wù)器(不路由到宕機(jī)的服務(wù)器)
- 數(shù)據(jù)恢復(fù):從健康的服務(wù)器復(fù)制數(shù)據(jù),將數(shù)據(jù)副本數(shù)目恢復(fù)到設(shè)定值
高可用網(wǎng)站的軟件質(zhì)量保證
為了保證線上系統(tǒng)的可用性采取的一些質(zhì)量保證手段:
- 網(wǎng)站發(fā)布:每次關(guān)閉服務(wù)器中的一小部分,并在發(fā)布完成后立即可以訪問。
- 自動化測試:Selenium自動化測試工具。
- 預(yù)發(fā)布驗(yàn)證:先發(fā)布到預(yù)發(fā)布機(jī)器上,然后進(jìn)行預(yù)發(fā)布驗(yàn)證,驗(yàn)證典型的業(yè)務(wù)流程,確認(rèn)沒有問題后正式發(fā)布。
- 代碼控制:主干開發(fā)、分支發(fā)布;分支開發(fā),主干發(fā)布。工具:SVN,Git。
- 自動化發(fā)布:火車發(fā)布模型。
- 灰度發(fā)布:將集群服務(wù)器分成若干部分,每天只發(fā)布一部分服務(wù)器,觀察運(yùn)行是否穩(wěn)定,第二天繼續(xù)發(fā)布一部分服務(wù)器。
網(wǎng)站運(yùn)行監(jiān)控
監(jiān)控數(shù)據(jù)采集- 用戶行為日志收集
- 服務(wù)器性能監(jiān)控
- 系統(tǒng)Load
- 內(nèi)存占用
- 磁盤
- 網(wǎng)絡(luò)IO
- 運(yùn)行數(shù)據(jù)報告:監(jiān)控一些與具體業(yè)務(wù)場景相關(guān)的技術(shù)和業(yè)務(wù)指標(biāo)。
監(jiān)控管理需要根據(jù)實(shí)時監(jiān)控數(shù)據(jù)進(jìn)行風(fēng)險預(yù)警,并對服務(wù)器進(jìn)行失效轉(zhuǎn)移,自動負(fù)載調(diào)整,最大化利用集群所有機(jī)器資源。
- 系統(tǒng)報警:對超過閾值的指標(biāo)進(jìn)行報警,如郵件、短信、語音等。
- 失效轉(zhuǎn)移:發(fā)現(xiàn)故障主動通知應(yīng)用,進(jìn)行失效轉(zhuǎn)移。
- 自動優(yōu)雅降級:為應(yīng)對訪問高峰,主動關(guān)閉部分功能,釋放部分系統(tǒng)資源,保證網(wǎng)站核心功能正常訪問。
可伸縮
伸縮性 是指通過不斷向集群中加入服務(wù)器的手段來緩解不斷上升的用戶并發(fā)訪問壓力和不斷增長大數(shù)據(jù)存儲需求。
衡量架構(gòu)伸縮性標(biāo)準(zhǔn):
- 是否可以用多臺服務(wù)器構(gòu)建集群
- 是否容易向集群中添加新的服務(wù)器
- 加入新的服務(wù)器后是否可以提供和原來的服務(wù)無差別的服務(wù)
- 集群中可容納的服務(wù)器數(shù)量是否有限制
網(wǎng)站的伸縮性設(shè)計分類
網(wǎng)站的伸縮性設(shè)計主要分成以下兩類:
1. 根據(jù)功能進(jìn)行物理分離實(shí)現(xiàn)伸縮通過物理上分離不同的網(wǎng)站功能,實(shí)現(xiàn)網(wǎng)站伸縮性的手段,可以在網(wǎng)站發(fā)展的任何階段使用。不同服務(wù)器部署不同的服務(wù),提供不同的功能。
分離主要分為兩種情況:
- 縱向分離(分層后分離):將業(yè)務(wù)處理流程上的不同部分分離部署,實(shí)現(xiàn)系統(tǒng)伸縮性。
- 橫向分離(業(yè)務(wù)分割后分離):將不同的業(yè)務(wù)模塊分離部署,實(shí)現(xiàn)系統(tǒng)伸縮性。
2. 單一功能通過集群實(shí)現(xiàn)伸縮隨著網(wǎng)站訪問量的逐步增加,單一的服務(wù)器也不同滿足業(yè)務(wù)規(guī)模的要求,需要使用服務(wù)器集群,將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù)。
應(yīng)用服務(wù)器集群的伸縮性設(shè)計
負(fù)載均衡技術(shù)
1. HTTP重定向負(fù)載均衡利用HTTP重定向協(xié)議實(shí)現(xiàn)負(fù)載均衡。
HTTP重定向服務(wù)器會根據(jù)用戶的HTTP請求計算一臺真實(shí)的Web服務(wù)器地址,并將該Web服務(wù)器地址寫入HTTP重定向響應(yīng)(響應(yīng)狀態(tài)碼302)中返回給用戶瀏覽器,瀏覽器自動重新請求實(shí)際物理服務(wù)器。
優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):實(shí)現(xiàn)簡單
- 缺點(diǎn):瀏覽器需要兩次請求服務(wù)器才能完成一次訪問,性能較差;重定向服務(wù)器自身處理能力會成為瓶頸;使用302重定向,可能會讓搜索引擎判斷為SEO作弊,降低搜索排名。
HTTP重定向負(fù)載均衡在實(shí)際生產(chǎn)環(huán)境中很少使用。
2. DNS域名解析負(fù)載均衡通過DNS處理域名解析請求的同時進(jìn)行負(fù)載均衡處理的一種方案。
每次域名解析請求都會根據(jù)負(fù)載均衡算法計算一個不同的IP地址返回,可以將請求分布到多臺服務(wù)器上,實(shí)現(xiàn)負(fù)載均衡。
優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):將負(fù)載均衡的工作轉(zhuǎn)交給DNS,省去了網(wǎng)站管理維護(hù)負(fù)載服務(wù)器的麻煩;DNS還支持基于地理位置的域名解析,會將域名解析成距離用戶地理最近的一個服務(wù)器地址,從而加快用戶訪問速度,改善性能。
- 缺點(diǎn):DNS是多級解析,每級DNS都會緩存服務(wù)器配置,修改了DNS配置,需要較長時間才能生效。
DNS域名解析一般作為第一級負(fù)載均衡。
3. 反向代理負(fù)載均衡利用反向代理服務(wù)器進(jìn)行負(fù)載均衡。
優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):和代理服務(wù)器集成簡單
- 缺點(diǎn):反向代理服務(wù)器是所有請求和響應(yīng)的中轉(zhuǎn)站,其性能可能會成為瓶頸。
4. IP負(fù)載均衡在網(wǎng)絡(luò)層通過修改請求目標(biāo)地址進(jìn)行負(fù)載均衡。在內(nèi)核進(jìn)程中完成數(shù)據(jù)分發(fā),性能較好。集群的最大響應(yīng)數(shù)據(jù)吞吐量受制于負(fù)載均衡服務(wù)器網(wǎng)卡帶寬。
5. 數(shù)據(jù)鏈路層負(fù)載均衡在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址進(jìn)行負(fù)載均衡。Linux平臺最好的鏈路層負(fù)載均衡開源產(chǎn)品
LVS。
負(fù)載均衡算法
1. 輪詢(Round Robin,RR)所有請求被依次分發(fā)到每臺應(yīng)用服務(wù)器上,即每臺服務(wù)器需要處理的請求數(shù)目都相同,適合于所有服務(wù)器硬件都相同的場景。
2. 加權(quán)輪詢(Weight Round Robin,WRR)根據(jù)應(yīng)用服務(wù)器硬件性能的情況,在輪詢的基礎(chǔ)上,按照配置的權(quán)重將請求分發(fā)到每個服務(wù)器,性能高的服務(wù)器分配更多請求。
3. 隨機(jī)(Random)請求被隨機(jī)分配到各個應(yīng)用服務(wù)器。實(shí)現(xiàn)簡單。
4. 最少連接(Least Connections)記錄每個應(yīng)用服務(wù)器正在處理的連接數(shù)(請求數(shù)),將新到的請求分發(fā)到最少連接的服務(wù)器上。最符合負(fù)載均衡定義的算法。
5. 源地址散列(Source Hashing)根據(jù)請求來源IP地址進(jìn)行Hash計算,得到應(yīng)用服務(wù)器,這樣來自同一個IP地址的請求總在同一個服務(wù)器上處理,該請求的上下文信息可以存儲在這臺服務(wù)器上,在一個會話內(nèi)重復(fù)使用,從而實(shí)現(xiàn)會話黏滯。
分布式緩存集群的伸縮性設(shè)計
分布式緩存服務(wù)器集群中不同服務(wù)器中緩存的數(shù)據(jù)各不相同,緩存訪問請求不可以在緩存服務(wù)器集群中的任意一臺處理,必須先找到緩存有需要數(shù)據(jù)的服務(wù)器,然后才能訪問。
緩存的目的:
加速數(shù)據(jù)讀取的速度 并
減輕數(shù)據(jù)存儲服務(wù)器的負(fù)載壓力。
分布式緩存集群伸縮性設(shè)計的主要目標(biāo):新加入緩存服務(wù)器應(yīng)使整個緩存服務(wù)器集群中已經(jīng)緩存的數(shù)據(jù)盡可能還被訪問到。
一致性哈希算法
一致性Hash算法通過一致性Hash環(huán)的數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)Key到緩存服務(wù)器的Hash映射。
算法過程:先構(gòu)造一個長度為 0~2^32的整數(shù)環(huán)(一致性Hash環(huán)),根據(jù)節(jié)點(diǎn)名稱的Hash值( 范圍0~ 2^32)將緩存服務(wù)器節(jié)點(diǎn)放置在這個Hash環(huán)上。然后根據(jù)需要緩存的數(shù)據(jù)的Key值計算得到其Hash值,然后再Hash環(huán)上順時針找距離這個Key的Hash值(范圍 0~2^32)最近的緩存服務(wù)節(jié)點(diǎn),完成Key到服務(wù)器的Hash映射查找。
擴(kuò)容的時候,將新加入的節(jié)點(diǎn)的Hash放入一致性Hash環(huán)中,由于Key是順時針查找距離最近的節(jié)點(diǎn),因此新加入的節(jié)點(diǎn)只影響整個換中的一小段。
解決一致性Hash算法帶來的負(fù)載不均衡的問題
將每臺物理緩存服務(wù)器虛擬為一組虛擬緩存服務(wù)器,將虛擬服務(wù)器的Hash值放置在Hash環(huán)上,Key在換上先找到虛擬服務(wù)器節(jié)點(diǎn),在得到物理服務(wù)器的信息。這樣新加入的物理服務(wù)器節(jié)點(diǎn)是一組虛擬節(jié)點(diǎn),如果虛擬節(jié)點(diǎn)足夠多的,這組虛擬節(jié)點(diǎn)將會影響同樣多數(shù)目的已經(jīng)在環(huán)上存在的虛擬節(jié)點(diǎn)。
物理節(jié)點(diǎn)對應(yīng)的虛擬節(jié)點(diǎn)越多,各個物理節(jié)點(diǎn)之間的負(fù)載越均衡,新加入物理服務(wù)器對原有的物理服務(wù)器的影響越保持一致。
根據(jù)經(jīng)驗(yàn),一臺物理服務(wù)器虛擬為150個虛擬服務(wù)器節(jié)點(diǎn)。
數(shù)據(jù)存儲服務(wù)器集群的伸縮性設(shè)計
數(shù)據(jù)存儲層必須保證數(shù)據(jù)的可靠存儲,任何情況下都必須保證數(shù)據(jù)的
可用性 和
正確性。
1. 關(guān)系數(shù)據(jù)庫集群的伸縮性設(shè)計架構(gòu)設(shè)計:主從架構(gòu)、主從讀寫分離、主從復(fù)制、分庫
分庫:不同業(yè)務(wù)數(shù)據(jù)表部署在不同的數(shù)據(jù)庫集群上。缺點(diǎn):夸庫不能Join。
2. NoSQL數(shù)據(jù)庫的伸縮性設(shè)計NoSQL數(shù)據(jù)庫產(chǎn)品都放棄了關(guān)鍵數(shù)據(jù)庫的兩大重要基礎(chǔ):
- 以關(guān)系代數(shù)為基礎(chǔ)的結(jié)構(gòu)化查詢語言(SQL)
- 事務(wù)一致性保證(ACID)
NoSQL更關(guān)注:
高可用性 和
可伸縮性可擴(kuò)展
軟件設(shè)計的終極目標(biāo):
低耦合 系統(tǒng)。
低耦合系統(tǒng)更容易擴(kuò)展,低耦合模塊更容易復(fù)用,低耦合的系統(tǒng)設(shè)計會讓開發(fā)過程和維護(hù)變得更加輕松和容易管理。
主要目的:網(wǎng)站的架構(gòu)能夠快速響應(yīng)需求變化。
可擴(kuò)展架構(gòu)的核心思想:
模塊化,并在此基礎(chǔ)之上,降低模塊間的耦合性,提高模塊的復(fù)用性。
衡量標(biāo)準(zhǔn):網(wǎng)站增加新的業(yè)務(wù)產(chǎn)品時,是否可以實(shí)現(xiàn)對現(xiàn)有產(chǎn)品透明無影響,不需要任何改動或者很少鈣能既有業(yè)務(wù)功能就可以上線新產(chǎn)品。不同產(chǎn)品之間低耦合。
網(wǎng)站可伸縮架構(gòu)主要手段是
事件驅(qū)動架構(gòu)和
分布式服務(wù)。
利用分布消息隊列降低系統(tǒng)耦合性
事件驅(qū)動架構(gòu)事件驅(qū)動架構(gòu)(Event Driven Architecture):通過在低耦合的模塊之間傳輸事件消息,以保持模塊的松散耦合,并借助事件消息的通信完成模塊間合作。如生產(chǎn)者消費(fèi)者模式。
常用的事件驅(qū)動架構(gòu):分布式消息隊列。
利用消息隊列,將用戶請求和其他業(yè)務(wù)事件構(gòu)造成消息發(fā)布到消息隊列,消息的處理者作為消費(fèi)者從消息隊列中獲取消息進(jìn)行處理。通過這種方式將消息產(chǎn)生和消息處理分離開來,可以透明地增加新的消息生產(chǎn)者任務(wù)或者新的消息消費(fèi)者任務(wù)。
分布式消息隊列消息
生產(chǎn)者 應(yīng)用程序通過遠(yuǎn)程訪問接口將
消息 推送 給
消息隊列服務(wù)器,消息隊列服務(wù)器將消息寫入本地內(nèi)存隊列后即立即返回成功響應(yīng)給消息生產(chǎn)者。消息隊列服務(wù)器根據(jù)消息訂閱列表查找訂閱該消息的消息消費(fèi)者應(yīng)用程序,將消息隊列中的消息按照
先進(jìn)先出 的原則將
消息 通過遠(yuǎn)程通信接口發(fā)送給消息
消費(fèi)者 程序。
利用分布式服務(wù)打造可復(fù)用的業(yè)務(wù)平臺
將業(yè)務(wù)和可復(fù)用服務(wù)分離開來,通過分布式服務(wù)框架調(diào)用。
巨無霸應(yīng)用存在問題:
- 編譯、部署困難
- 代碼分支管理困難
- 數(shù)據(jù)庫連接耗盡
- 新增業(yè)務(wù)困難
解決方案就是
拆分,將模塊獨(dú)立部署,降低系統(tǒng)耦合性。
- 縱向拆分:將一個大應(yīng)用拆分為多個小應(yīng)用,如果新增業(yè)務(wù)比較獨(dú)立,那么就直接將其部署為一個獨(dú)立的應(yīng)用系統(tǒng)。
- 橫向拆分:將復(fù)用的業(yè)務(wù)拆分開來,獨(dú)立部署為分布式服務(wù),新增業(yè)務(wù)只需調(diào)用這些分布式服務(wù),不需要依賴具體的模塊代碼。
大型網(wǎng)站分布式服務(wù)的需求和特點(diǎn)
- 服務(wù)注冊與發(fā)現(xiàn)
- 服務(wù)調(diào)用
- 負(fù)載均衡
- 失效轉(zhuǎn)移
- 高效的遠(yuǎn)程通信
- 整合異構(gòu)系統(tǒng)
- 對應(yīng)用最少侵入
- 版本管理
- 實(shí)時監(jiān)控
利用開放平臺建設(shè)網(wǎng)站生態(tài)圈
- API接口:Restful、WebService、RPC等
- 協(xié)議轉(zhuǎn)換:將各種API輸入轉(zhuǎn)換成內(nèi)部服務(wù)可以識別的形式,并將內(nèi)部服務(wù)的返回封裝成API的格式。
- 安全:身份識別、權(quán)限控制、分級的訪問帶寬限制。
- 審計:記錄第三方應(yīng)用的訪問情況,并進(jìn)行監(jiān)控、計費(fèi)等。
- 路由:將開放平臺的耕種訪問路由映射到具體的內(nèi)部服務(wù)。
- 流程:將一組離散的服務(wù)組織成一個上下文相關(guān)的新服務(wù),隱藏服務(wù)細(xì)節(jié),提供統(tǒng)一接口供開發(fā)者調(diào)用。
安全性
安全性是指保護(hù)網(wǎng)站不受惡意訪問和攻擊,保護(hù)網(wǎng)站的重要數(shù)據(jù)不被竊取。
衡量標(biāo)準(zhǔn):針對現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應(yīng)對策略。
網(wǎng)站攻擊和防御
XSS攻擊
XSS攻擊即
跨站點(diǎn)腳本攻擊(Cross Site Script),指黑客通過篡改網(wǎng)頁,注入惡意HTML腳本,在用戶瀏覽網(wǎng)頁時,控制用戶瀏覽器進(jìn)行惡意操作的一種攻擊方式。常見攻擊類型有:
- 反射型:攻擊者誘使用戶點(diǎn)擊一個嵌入惡意腳本的連接,達(dá)到攻擊目的。
- 持久型:黑客提交含有惡意腳本的請求,保存在被攻擊的Web站點(diǎn)的數(shù)據(jù)庫中,用戶瀏覽網(wǎng)頁時,惡意腳本被包含在正常頁面中,達(dá)到攻擊的目的。
XSS防攻擊手段:
- 消毒:對html危險字符進(jìn)行轉(zhuǎn)義。消毒幾乎是所有網(wǎng)站最必備的XSS防攻擊手段。
- HttpOnly:瀏覽器進(jìn)制頁面JavaScript訪問帶有HttpOnly屬性的Cookie。HttpOnly主要是防止XSS攻擊者竊取Cookie。
注入攻擊
注入攻擊主要由
SQL注入攻擊 和
OS注入攻擊 兩種。
SQL注入攻擊攻擊者在HTTP請求中注入惡意SQL命令,服務(wù)器用請求參數(shù)構(gòu)造數(shù)據(jù)庫SQL命令(如刪除數(shù)據(jù)庫表)時,惡意SQL被一起構(gòu)造,并在數(shù)據(jù)庫中執(zhí)行。
SQL注入攻擊前提:攻擊者需要對要攻擊的數(shù)據(jù)庫結(jié)構(gòu)有所了解。
攻擊者獲取數(shù)據(jù)庫表結(jié)構(gòu)信息手段:
- 開源:開源軟件搭建的網(wǎng)站數(shù)據(jù)結(jié)構(gòu)是公開的。
- 錯誤回顯:攻擊者可以通過服務(wù)端返回的異常信息,猜測數(shù)據(jù)庫表結(jié)構(gòu)。
- 盲注:攻擊者根據(jù)頁面變化情況判斷SQL語句的執(zhí)行情況,猜測數(shù)據(jù)庫表結(jié)構(gòu)。
防御
首先應(yīng)避免被攻擊者猜測到表名等數(shù)據(jù)庫表結(jié)構(gòu)信息。
除此之外還有以下兩種方式:
- 消毒:通過正則匹配過濾請求數(shù)據(jù)中可能注入的SQL。請求參數(shù)消毒是一種比較簡單粗暴又有效的手段。
- 參數(shù)綁定:使用預(yù)編譯手段,綁定參數(shù)是最好的防SQL注入方法。
CSRF攻擊
CSRF(Cross Site Request Forgery,
跨站點(diǎn)請求偽造),指的是攻擊者通過跨站請求,以合法用戶的身份進(jìn)行非法操作,如轉(zhuǎn)賬交易、發(fā)表評論等。
CSRF攻擊的主要手法:利用跨站請求,在用戶不知情的情況下,以用戶的身份偽造請求。
核心是
利用了瀏覽器Cookie或服務(wù)器Session策略,盜取用戶身份。
CSRF攻擊防御主要手段是
識別請求者身份。主要有下面幾種方法:
- 表單Token:通過在請求參數(shù)中增加隨機(jī)數(shù)的方法來阻止攻擊者獲得所有請求參數(shù)。正常請求會包含token隨機(jī)數(shù),每次請求都不一樣,偽造請求無法獲得該值,服務(wù)器檢查請求參數(shù)中token的值是否存在并且正確以確定請求提交者是否合法。
- 驗(yàn)證碼:在請求提交時,需要用戶輸入驗(yàn)證碼,以避免在用戶不知情的情況下被攻擊者偽造請求。但是輸入驗(yàn)證碼是一個很糟糕的用戶體驗(yàn)。
- Referer Check:通過檢查HTTP請求的Referer域中記錄的請求來源,驗(yàn)證其是否合法。常見場景如:圖片防盜鏈。
其他攻擊和漏洞
1. Error Code錯誤回顯,指的是服務(wù)器端未處理異常堆棧信息直接輸出到客戶端瀏覽器。
防御:配置web服務(wù)器參數(shù),跳轉(zhuǎn)500頁面到指定的錯誤頁面,避免將異常堆棧信息直接返回給用戶。
2. HTML注釋在瀏覽器中是可以看到HTML代碼中注釋的部分,這樣會給黑客造成攻擊便利。
防御:程序在最終發(fā)布前需要進(jìn)行代碼review或自動掃描,避免HTML注釋漏洞。
3. 文件上傳攻擊方式:上傳一個可執(zhí)行的程序,并通過該程序獲得服務(wù)器端命令執(zhí)行能力。
防御:設(shè)置上傳文件白名單,只允許上傳可靠的文件類型。此外還可以修改文件名、使用專門的存儲等手段,保護(hù)服務(wù)器免受上傳文件攻擊。
4. 路徑遍歷攻擊方式:攻擊者在請求的URL中使用相對路徑,遍歷系統(tǒng)為開放的目錄和文件。
防御:將JS、CSS等資源文件部署在獨(dú)立服務(wù)器,使用獨(dú)立域名,其他文件不適用靜態(tài)URL訪問,動態(tài)參數(shù)不包含文件路徑信息。
信息加密技術(shù)及密鑰安全管理
為了保護(hù)網(wǎng)站的敏感數(shù)據(jù),需要對這些敏感數(shù)據(jù)進(jìn)行加密處理,信息加密技術(shù)分為三類:
單向散列加密
通過對不同輸入長度的信息進(jìn)行散列計算,得到固定長度的輸出,散列計算是單向的,即不能對固定長度的輸出進(jìn)行計算從而獲得輸入信息。
使用場景:密碼加密保存,生成信息摘要,計算具有高離散程度的隨機(jī)數(shù)等。
常用單向散列算法:MD5、SHA等。
對稱加密
加密和解密使用的密鑰是同一密鑰(或者可以互相推算)。
使用場景:Cookie加密,通信加密等。
優(yōu)缺點(diǎn):
- 優(yōu)點(diǎn):算法簡單,加密效率高,系統(tǒng)開銷小,適合對大量數(shù)據(jù)加密。
- 缺點(diǎn):加解密使用同一個密鑰。
常用對稱加密算法:DES、RC算法。
非對稱加密
加密和解密使用的密鑰不同,其中一個對外界公開,叫做
公鑰
,另一個只有所有者知道,被稱為
私鑰
。用公鑰加密的信息必須用私鑰才能解開,反之,用私鑰加密的信息只有公鑰才能解開。理論上不可能通過公鑰計算獲得私鑰。
使用場景:信息安全傳輸,數(shù)字簽名等。
常用非對稱加密算法:RSA算法。
HTTPS傳輸中瀏覽器使用的數(shù)字證書就是經(jīng)過權(quán)威機(jī)構(gòu)認(rèn)證的非對稱加密的公鑰。
信息過濾與反垃圾
常用的信息過濾與反垃圾手段有以下幾種:
文本匹配主要用來解決敏感詞過濾問題。
快速判斷信息中是否包含敏感詞方法:
- 正則匹配:適用于敏感詞較少,信息文本較短場景。正則表達(dá)式的效率一般較差。
- Trie樹及變種:算法本質(zhì)是確定一個有限狀態(tài)的自動機(jī),根據(jù)輸入數(shù)據(jù)進(jìn)行狀態(tài)轉(zhuǎn)移。
分類算法算法原理:先將批量已經(jīng)分好類的樣本數(shù)據(jù)輸入分類算法進(jìn)行訓(xùn)練,可以得到一個分類模型,然后再利用分類算法結(jié)合分類模型對待處理郵件進(jìn)行識別。
簡單實(shí)用的分類算法:貝葉斯分類
實(shí)用場景:反垃圾、信息自動分類等
黑名單將需要過濾的內(nèi)容加入到黑名單中,然后從黑名單中進(jìn)行查找,如果找到,就過濾掉。
常用數(shù)據(jù)結(jié)構(gòu):Hash表、BloomFilter。
電子商務(wù)風(fēng)險控制
交易安全是電子商務(wù)網(wǎng)站的底線。
風(fēng)險主要風(fēng)險:
- 賬戶風(fēng)險:如賬戶被黑客盜用、惡意注冊賬號等。
- 買家風(fēng)險:買家惡意下單占用庫存進(jìn)行不正當(dāng)競爭;黃牛利用促銷搶購低價商品。
- 賣家風(fēng)險:不良賣家進(jìn)行惡意欺詐。
- 交易風(fēng)險:信用卡盜刷、支付欺詐、洗錢套現(xiàn)等。
風(fēng)控風(fēng)控手段包括
自動 和
人工 兩種。
自動風(fēng)控技術(shù):
- 規(guī)則引擎:將 業(yè)務(wù)規(guī)則 和 規(guī)則處理邏輯 分離的技術(shù)。缺點(diǎn):規(guī)則沖突,難以維護(hù),規(guī)則越多性能越差。
- 統(tǒng)計模型:使用統(tǒng)計模型進(jìn)行風(fēng)險控制。分類算法或者更復(fù)雜的機(jī)器學(xué)習(xí)算法。
分享一張
大型網(wǎng)站技術(shù)架構(gòu)知識圖譜,只有對每一個知識點(diǎn)仔細(xì)梳理并深入理解,才能打造出一個高可用、高性能、以擴(kuò)展、可伸縮且安全的網(wǎng)站。
獲取方式: 在公眾號內(nèi)回復(fù)關(guān)鍵字『
架構(gòu)』。
好文推薦:- 一篇文章帶你快速搞懂HBase RowKey設(shè)計
- 帶你快速上手HBase | HBase讀寫性能優(yōu)化
- 福利!入門HBase的正確姿勢
- Spark快速入門 | Spark任務(wù)調(diào)度
- Spark快速入門 | Spark執(zhí)行過程
- Spark快速入門 | RDD操作手冊
- Spark快速入門 | RDD介紹
關(guān)鍵詞:剖析,知識,圖譜,原理,核心,技術(shù),大型