什么是軟件架構(gòu) 維基百科定義: 軟件架構(gòu)是指有關(guān)軟件整體結(jié)構(gòu)與組件的抽象描述,用于指導大型軟件系統(tǒng)各個方面的設(shè)計 。 軟件架構(gòu)5大要素:
可以通過考察這5大要素來衡量一個軟件架構(gòu)設(shè)計的優(yōu)劣。 高性能 網(wǎng)站性能是客觀的指標,具體體現(xiàn)到 響應(yīng)時間 、 吞吐量 等技術(shù)指標。 性能優(yōu)化的最終目的: 改善用戶體驗 。 網(wǎng)站性能測試是性能優(yōu)化的前提和基礎(chǔ),也是性能優(yōu)化結(jié)果的檢查和度量標準。 下面從三個視角來看看網(wǎng)站性能的不同標準: 用戶視角 網(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ù)指標。 運維人員視角 關(guān)注基礎(chǔ)設(shè)施性能和資源利用率,如網(wǎng)絡(luò)運營商的帶寬能力、服務(wù)器硬件配置、數(shù)據(jù)中心網(wǎng)絡(luò)架構(gòu)、服務(wù)器和網(wǎng)路帶寬的資源利用率等。 性能測試指標 網(wǎng)站性能測試的主要指標主要有:
性能測試方法 性能測試是一個不斷對系統(tǒng)增加訪問壓力,以 獲得系統(tǒng)性能指標、最大負載能力、最大壓力承受能力的過程。性能測試主要包括以下幾種方法:
性能分析與優(yōu)化 排查網(wǎng)站的性能瓶頸的方法:檢查請求處理的各個環(huán)節(jié)的日志,分析哪個環(huán)節(jié)響應(yīng)時間不合理、超過預期;然后檢查監(jiān)控數(shù)據(jù),分析影響性能的主要因素是內(nèi)存、磁盤、網(wǎng)絡(luò)還是 CPU,時代嗎問題還是架構(gòu)設(shè)置不合理,或者系統(tǒng)資源確實不足。 定位到了性能具體問題后,然后根據(jù)性能產(chǎn)生的原因進行性能優(yōu)化。性能優(yōu)化主要從三個方面進行優(yōu)化:
性能優(yōu)化策略 Web前端優(yōu)化 1. 瀏覽器訪問優(yōu)化
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ù)器后面具體的真實服務(wù)器的存在。 反向代理的作用:
應(yīng)用服務(wù)器優(yōu)化 1. 分布式緩存 網(wǎng)站性能優(yōu)化第一定律: 優(yōu)先考慮使用緩存優(yōu)化性能 。 原理:將數(shù)據(jù)存儲在訪問速度較高的存儲介質(zhì)中,加快訪問速度。 緩存作用:
合理使用緩存:
2. 異步操作 使用消息隊列將調(diào)用異步化,以改善網(wǎng)站的性能。 使用消息隊列后,用戶請求的數(shù)據(jù)發(fā)送給消息隊列后就立即返回,再由消息隊列的消費者從消息隊列中獲取數(shù)據(jù),再進行邏輯處理(如寫入數(shù)據(jù)庫)。 3. 使用集群 使用負載均衡技術(shù)為應(yīng)用構(gòu)建一個由多臺服務(wù)器組成的服務(wù)器集群,將并發(fā)訪問請求分發(fā)到多臺服務(wù)器上處理,避免單一服務(wù)器因負載壓力過大而響應(yīng)緩存,降低用戶請求響應(yīng)延遲,提升用戶體驗。 4. 代碼優(yōu)化 代碼優(yōu)化主要關(guān)注以下幾個方面:
存儲性能優(yōu)化 磁盤是系統(tǒng)最嚴重的瓶頸。 1. 機械硬盤 & 固態(tài)硬盤 在網(wǎng)站應(yīng)用中,大部分應(yīng)用訪問數(shù)據(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é)點為單位存儲在磁盤中,從根開始查找所需數(shù)據(jù)所在的節(jié)點編號和磁盤位置,將其加載到內(nèi)存中然后繼續(xù)查找,直到找到所需的數(shù)據(jù)。 LSM樹是一個N階合并樹。數(shù)據(jù)的插入、修改和刪除都是在內(nèi)存中進行,并且都會創(chuàng)建一個新記錄,這些數(shù)據(jù)在內(nèi)存中以樹結(jié)構(gòu)排序,當數(shù)據(jù)量超過設(shè)定的閾值后,會和磁盤上最新的的排序樹合并。在合并的過程中,會用最新更新的數(shù)據(jù)覆蓋舊的數(shù)據(jù)。讀操作先從內(nèi)存中排序樹開始搜索,如未找到,再從磁盤上排序樹順序查找。 在LSM樹上進行一次數(shù)據(jù)更新不需要磁盤訪問,在內(nèi)存即可完成,速度遠快于B+樹。 對于寫多,集中讀最近寫入數(shù)據(jù)的場景,使用LSM樹可以極大的減少磁盤的訪問次數(shù),加快訪問速度。 3. RAID & HDFS RAID 廉價磁盤冗余陣列,主要是為了改善磁盤的訪問延遲,增強磁盤的可用性和容錯能力。 多塊磁盤通過使用RAID技術(shù),實現(xiàn)數(shù)據(jù)在多塊磁盤上的并發(fā)讀寫和數(shù)據(jù)備份。 常用RAID技術(shù):
HDFS 系統(tǒng)在整個存儲集群的多臺服務(wù)器上進行數(shù)據(jù)并發(fā)讀寫和備份。HDFS以塊(Block)為單位管理文件內(nèi)容,一個文件被切分成多個Block,當應(yīng)用程序?qū)懳募r,每寫完一個Block,HDFS會將其自動復制到另外兩臺機器上,保證3副本(默認)。在處理文件的時候(MapReduce),可以同時啟動多個任務(wù)并行讀取文件的不同Block,并發(fā)處理,提升讀取效率。 HDFS配置MapReduce等并行計算框架進行大數(shù)據(jù)處理時,可以在整個集群上并發(fā)讀寫訪問所有的磁盤安,無需RAID支持。 高可用 網(wǎng)站的可用性描述 網(wǎng)站可有效訪問 的特性。 可用性度量:服務(wù)7*24可用,可用性超過99.99%。 網(wǎng)站不可用時間(故障時間) = 故障修復時間點 - 故障發(fā)現(xiàn)(報告)時間點網(wǎng)站年度可用性指標=(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)用 應(yīng)用的顯著特點:無狀態(tài)性。 無狀態(tài)應(yīng)用是指應(yīng)用服務(wù)器不保存業(yè)務(wù)的上下文信息,僅根據(jù)每次請求提交的數(shù)據(jù)進行相應(yīng)的業(yè)務(wù)邏輯處理。多個服務(wù)器實力之間完全對等,請求提交到任意服務(wù)器,處理結(jié)果都是完全一樣的。 通過負載均衡進行無狀態(tài)服務(wù)的失效轉(zhuǎn)移 通過負載均衡手段,將流量和數(shù)據(jù)均勻分配到一個集群組成的多臺服務(wù)器上,以提高系統(tǒng)的整體負載處理能力。 應(yīng)用服務(wù)器集群的Session管理 Session管理手段: 1. Session復制應(yīng)用服務(wù)器開啟Web容器的Session復制功能,在集群中的幾臺服務(wù)器之間同步Session對象,使得每臺服務(wù)器上都保存所有用戶的Session信息,這樣任何一臺機器宕機都不會導致Session數(shù)據(jù)的丟失。適合小規(guī)模集群。當集群比較大時,集群服務(wù)器間需要大量的通信進行Session復制,會占用大量服務(wù)器和網(wǎng)絡(luò)資源。 2. Session綁定利用負載均衡的源地址Hash算法實現(xiàn),負載均衡服務(wù)器總是將來源于同一IP的請求分發(fā)到同一臺服務(wù)器上,也可以根據(jù)Cookie信息將同一個用戶的請求總是分發(fā)到同一臺機器上,這樣在整個會話期間沒用戶所有的請求都在同一臺服務(wù)器上處理,即Session綁定在某臺特定服務(wù)器上,又稱 會話黏滯 。 缺點:不符合對系統(tǒng)高可用的需求,某臺服務(wù)器宕機,那么該機器上的Session會丟失。很少使用。 3. 利用Cookie記錄Session 利用瀏覽器支持的Cookie記錄Session。每次請求的時候,將Session放在請求中發(fā)送到服務(wù)器,服務(wù)器處理完請求之后再將修改過的Session響應(yīng)給客戶端。 缺點:受Cookie大小限制,記錄信息有限;每次請求都需傳輸Cookie,影響性能;如用戶關(guān)閉Cookie,訪問就會異常。 4. Session服務(wù)器 利用獨立部署的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ù)器實現(xiàn):分布式緩存、數(shù)據(jù)庫等。 高可用的服務(wù) 高可用的服務(wù)模塊為業(yè)務(wù)產(chǎn)品提供 基礎(chǔ)公共服務(wù) ,一般是 獨立部署 。 高可用的服務(wù)策略: 1. 負載均衡 通過負載均衡的失效轉(zhuǎn)移策略實現(xiàn)高可用。 2. 分級管理 根據(jù)應(yīng)用和服務(wù)的重要程度進行分級管理,不同重要程序的服務(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ù)失敗導致整個應(yīng)用請求失敗。 5. 服務(wù)降級 網(wǎng)站訪問高峰期,服務(wù)可能因為大量的并發(fā)調(diào)用而性能下降,嚴重時可能會導致服務(wù)宕機。為了保證核心應(yīng)用和功能的正常運行,對服務(wù)進行降級。 降級手段:
6. 冪等性設(shè)計 服務(wù)層必須保證重復調(diào)用和調(diào)用一次產(chǎn)生的結(jié)果相同,即服務(wù)具有冪等性。 高可用的數(shù)據(jù) 1. CAP 為了保證數(shù)據(jù)的高可用,會犧牲 數(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張的,因此可伸縮即分區(qū)耐受性必不可少,規(guī)模變大以后,機器數(shù)量也會變得龐大,這是網(wǎng)路和服務(wù)器故障會頻繁吹安,要想保證應(yīng)用可用,就必須保證分布式處理系統(tǒng)的高可用。所以在大型網(wǎng)站中,通常會選擇強化分布式存儲系統(tǒng)的可用性(A)和伸縮性(P),而在某種程度上放棄一致性(C)。 數(shù)據(jù)不一致出現(xiàn)原因:系統(tǒng)高并發(fā)寫操作或者集群狀態(tài)不穩(wěn)定(故障恢復、集群擴容)。 數(shù)據(jù)一致性分為:
保證數(shù)據(jù)存儲高可用的手段: 2. 數(shù)據(jù)備份 保證數(shù)據(jù)有多個副本,任意副本的失效都不會導致數(shù)據(jù)的永久丟失,從而實現(xiàn)數(shù)據(jù)完全的持久化。 數(shù)據(jù)備份方式:
3. 失效轉(zhuǎn)移機制 保證當一個數(shù)據(jù)副本不可訪問時,可以快速切換訪問數(shù)據(jù)的其他副本,保證系統(tǒng)可用。 失效轉(zhuǎn)移操作組成:
高可用網(wǎng)站的軟件質(zhì)量保證 為了保證線上系統(tǒng)的可用性采取的一些質(zhì)量保證手段:
網(wǎng)站運行監(jiān)控 監(jiān)控數(shù)據(jù)采集
監(jiān)控管理 需要根據(jù)實時監(jiān)控數(shù)據(jù)進行風險預警,并對服務(wù)器進行失效轉(zhuǎn)移,自動負載調(diào)整,最大化利用集群所有機器資源。
可伸縮 伸縮性是指通過不斷向集群中加入服務(wù)器的手段來緩解不斷上升的用戶并發(fā)訪問壓力和不斷增長大數(shù)據(jù)存儲需求。 衡量架構(gòu)伸縮性標準:
網(wǎng)站的伸縮性設(shè)計分類 網(wǎng)站的伸縮性設(shè)計主要分成以下兩類: 1. 根據(jù)功能進行物理分離實現(xiàn)伸縮 通過物理上分離不同的網(wǎng)站功能,實現(xiàn)網(wǎng)站伸縮性的手段,可以在網(wǎng)站發(fā)展的任何階段使用。不同服務(wù)器部署不同的服務(wù),提供不同的功能。 分離主要分為兩種情況:
2. 單一功能通過集群實現(xiàn)伸縮 隨著網(wǎng)站訪問量的逐步增加,單一的服務(wù)器也不同滿足業(yè)務(wù)規(guī)模的要求,需要使用服務(wù)器集群,將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù)。 應(yīng)用服務(wù)器集群的伸縮性設(shè)計 負載均衡技術(shù) 1. HTTP重定向負載均衡 利用HTTP重定向協(xié)議實現(xiàn)負載均衡。 HTTP重定向服務(wù)器會根據(jù)用戶的HTTP請求計算一臺真實的Web服務(wù)器地址,并將該Web服務(wù)器地址寫入HTTP重定向響應(yīng)(響應(yīng)狀態(tài)碼302)中返回給用戶瀏覽器,瀏覽器自動重新請求實際物理服務(wù)器。 優(yōu)缺點:
HTTP重定向負載均衡在實際生產(chǎn)環(huán)境中很少使用。 2. DNS域名解析負載均衡 通過DNS處理域名解析請求的同時進行負載均衡處理的一種方案。 每次域名解析請求都會根據(jù)負載均衡算法計算一個不同的IP地址返回,可以將請求分布到多臺服務(wù)器上,實現(xiàn)負載均衡。 優(yōu)缺點:
DNS域名解析一般作為第一級負載均衡。 3. 反向代理負載均衡 利用反向代理服務(wù)器進行負載均衡。 優(yōu)缺點:
4. IP負載均衡 在網(wǎng)絡(luò)層通過修改請求目標地址進行負載均衡。在內(nèi)核進程中完成數(shù)據(jù)分發(fā),性能較好。集群的最大響應(yīng)數(shù)據(jù)吞吐量受制于負載均衡服務(wù)器網(wǎng)卡帶寬。 5. 數(shù)據(jù)鏈路層負載均衡 在通信協(xié)議的數(shù)據(jù)鏈路層修改mac地址進行負載均衡。Linux平臺最好的鏈路層負載均衡開源產(chǎn)品 LVS 。 負載均衡算法 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. 隨機(Random) 請求被隨機分配到各個應(yīng)用服務(wù)器。實現(xiàn)簡單。 4. 最少連接(Least Connections) 記錄每個應(yīng)用服務(wù)器正在處理的連接數(shù)(請求數(shù)),將新到的請求分發(fā)到最少連接的服務(wù)器上。最符合負載均衡定義的算法。 5. 源地址散列(Source Hashing) 根據(jù)請求來源IP地址進行Hash計算,得到應(yīng)用服務(wù)器,這樣來自同一個IP地址的請求總在同一個服務(wù)器上處理,該請求的上下文信息可以存儲在這臺服務(wù)器上,在一個會話內(nèi)重復使用,從而實現(xiàn)會話黏滯。 分布式緩存集群的伸縮性設(shè)計 分布式緩存服務(wù)器集群中不同服務(wù)器中緩存的數(shù)據(jù)各不相同,緩存訪問請求不可以在緩存服務(wù)器集群中的任意一臺處理,必須先找到緩存有需要數(shù)據(jù)的服務(wù)器,然后才能訪問。 緩存的目的: 加速數(shù)據(jù)讀取的速度 并 減輕數(shù)據(jù)存儲服務(wù)器的負載壓力 。 分布式緩存集群伸縮性設(shè)計的主要目標:新加入緩存服務(wù)器應(yīng)使整個緩存服務(wù)器集群中已經(jīng)緩存的數(shù)據(jù)盡可能還被訪問到。 一致性哈希算法 一致性Hash算法通過一致性Hash環(huán)的數(shù)據(jù)結(jié)構(gòu)實現(xiàn)Key到緩存服務(wù)器的Hash映射。 算法過程:先構(gòu)造一個長度為 0~的整數(shù)環(huán)(一致性Hash環(huán)),根據(jù)節(jié)點名稱的Hash值( 范圍0~)將緩存服務(wù)器節(jié)點放置在這個Hash環(huán)上。然后根據(jù)需要緩存的數(shù)據(jù)的Key值計算得到其Hash值,然后再Hash環(huán)上順時針找距離這個Key的Hash值(范圍 0~)最近的緩存服務(wù)節(jié)點,完成Key到服務(wù)器的Hash映射查找。 擴容的時候,將新加入的節(jié)點的Hash放入一致性Hash環(huán)中,由于Key是順時針查找距離最近的節(jié)點,因此新加入的節(jié)點只影響整個換中的一小段。 解決一致性Hash算法帶來的負載不均衡的問題 將每臺物理緩存服務(wù)器虛擬為一組虛擬緩存服務(wù)器,將虛擬服務(wù)器的Hash值放置在Hash環(huán)上,Key在換上先找到虛擬服務(wù)器節(jié)點,在得到物理服務(wù)器的信息。這樣新加入的物理服務(wù)器節(jié)點是一組虛擬節(jié)點,如果虛擬節(jié)點足夠多的,這組虛擬節(jié)點將會影響同樣多數(shù)目的已經(jīng)在環(huán)上存在的虛擬節(jié)點。 物理節(jié)點對應(yīng)的虛擬節(jié)點越多,各個物理節(jié)點之間的負載越均衡,新加入物理服務(wù)器對原有的物理服務(wù)器的影響越保持一致。 根據(jù)經(jīng)驗,一臺物理服務(wù)器虛擬為150個虛擬服務(wù)器節(jié)點。 數(shù)據(jù)存儲服務(wù)器集群的伸縮性設(shè)計 數(shù)據(jù)存儲層必須保證數(shù)據(jù)的可靠存儲,任何情況下都必須保證數(shù)據(jù)的 可用性 和 正確性 。 1. 關(guān)系數(shù)據(jù)庫集群的伸縮性設(shè)計 架構(gòu)設(shè)計:主從架構(gòu)、主從讀寫分離、主從復制、分庫 分庫:不同業(yè)務(wù)數(shù)據(jù)表部署在不同的數(shù)據(jù)庫集群上。缺點:夸庫不能Join。 2. NoSQL數(shù)據(jù)庫的伸縮性設(shè)計 NoSQL數(shù)據(jù)庫產(chǎn)品都放棄了關(guān)鍵數(shù)據(jù)庫的兩大重要基礎(chǔ):
NoSQL更關(guān)注: 高可用性 和 可伸縮性 可擴展 軟件設(shè)計的終極目標: 低耦合 系統(tǒng)。 低耦合系統(tǒng)更容易擴展,低耦合模塊更容易復用,低耦合的系統(tǒng)設(shè)計會讓開發(fā)過程和維護變得更加輕松和容易管理。 主要目的:網(wǎng)站的架構(gòu)能夠快速響應(yīng)需求變化。 可擴展架構(gòu)的核心思想: 模塊化,并在此基礎(chǔ)之上,降低模塊間的耦合性,提高模塊的復用性。 衡量標準:網(wǎng)站增加新的業(yè)務(wù)產(chǎn)品時,是否可以實現(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)者消費者模式。 常用的事件驅(qū)動架構(gòu):分布式消息隊列。 利用消息隊列,將用戶請求和其他業(yè)務(wù)事件構(gòu)造成消息發(fā)布到消息隊列,消息的處理者作為消費者從消息隊列中獲取消息進行處理。通過這種方式將消息產(chǎn)生和消息處理分離開來,可以透明地增加新的消息生產(chǎn)者任務(wù)或者新的消息消費者任務(wù)。 分布式消息隊列 消息 生產(chǎn)者 應(yīng)用程序通過遠程訪問接口將 消息 推送 給 消息隊列服務(wù)器 ,消息隊列服務(wù)器將消息寫入本地內(nèi)存隊列后即立即返回成功響應(yīng)給消息生產(chǎn)者。消息隊列服務(wù)器根據(jù)消息訂閱列表查找訂閱該消息的消息消費者應(yīng)用程序,將消息隊列中的消息按照 先進先出 的原則將 消息 通過遠程通信接口發(fā)送給消息 消費者 程序。 利用分布式服務(wù)打造可復用的業(yè)務(wù)平臺 將業(yè)務(wù)和可復用服務(wù)分離開來,通過分布式服務(wù)框架調(diào)用。 巨無霸應(yīng)用存在問題:
解決方案就是 拆分 ,將模塊獨立部署,降低系統(tǒng)耦合性。
大型網(wǎng)站分布式服務(wù)的需求和特點
利用開放平臺建設(shè)網(wǎng)站生態(tài)圈
安全性 安全性是指保護網(wǎng)站不受惡意訪問和攻擊,保護網(wǎng)站的重要數(shù)據(jù)不被竊取。 衡量標準:針對現(xiàn)存和潛在的各種攻擊與竊密手段,是否有可靠的應(yīng)對策略。 網(wǎng)站攻擊和防御 XSS攻擊 XSS攻擊即 跨站點腳本攻擊 (Cross Site Script),指黑客通過篡改網(wǎng)頁,注入惡意HTML腳本,在用戶瀏覽網(wǎng)頁時,控制用戶瀏覽器進行惡意操作的一種攻擊方式。常見攻擊類型有:
XSS防攻擊手段:
注入攻擊 注入攻擊主要由 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)信息手段:
防御 首先應(yīng)避免被攻擊者猜測到表名等數(shù)據(jù)庫表結(jié)構(gòu)信息。 除此之外還有以下兩種方式:
CSRF攻擊 CSRF(Cross Site Request Forgery, 跨站點請求偽造 ),指的是攻擊者通過跨站請求,以合法用戶的身份進行非法操作,如轉(zhuǎn)賬交易、發(fā)表評論等。 CSRF攻擊的主要手法:利用跨站請求,在用戶不知情的情況下,以用戶的身份偽造請求。 核心是利用了瀏覽器Cookie或服務(wù)器Session策略,盜取用戶身份。 CSRF攻擊防御主要手段是 識別請求者身份 。主要有下面幾種方法:
其他攻擊和漏洞 1. Error Code 錯誤回顯,指的是服務(wù)器端未處理異常堆棧信息直接輸出到客戶端瀏覽器。 防御:配置web服務(wù)器參數(shù),跳轉(zhuǎn)500頁面到指定的錯誤頁面,避免將異常堆棧信息直接返回給用戶。 2. HTML注釋 在瀏覽器中是可以看到HTML代碼中注釋的部分,這樣會給黑客造成攻擊便利。 防御:程序在最終發(fā)布前需要進行代碼review或自動掃描,避免HTML注釋漏洞。 3. 文件上傳 攻擊方式:上傳一個可執(zhí)行的程序,并通過該程序獲得服務(wù)器端命令執(zhí)行能力。 防御:設(shè)置上傳文件白名單,只允許上傳可靠的文件類型。此外還可以修改文件名、使用專門的存儲等手段,保護服務(wù)器免受上傳文件攻擊。 4. 路徑遍歷 攻擊方式:攻擊者在請求的URL中使用相對路徑,遍歷系統(tǒng)為開放的目錄和文件。 防御:將JS、CSS等資源文件部署在獨立服務(wù)器,使用獨立域名,其他文件不適用靜態(tài)URL訪問,動態(tài)參數(shù)不包含文件路徑信息。 信息加密技術(shù)及密鑰安全管理 為了保護網(wǎng)站的敏感數(shù)據(jù),需要對這些敏感數(shù)據(jù)進行加密處理,信息加密技術(shù)分為三類: 單向散列加密 通過對不同輸入長度的信息進行散列計算,得到固定長度的輸出,散列計算是單向的,即不能對固定長度的輸出進行計算從而獲得輸入信息。 使用場景:密碼加密保存,生成信息摘要,計算具有高離散程度的隨機數(shù)等。 常用單向散列算法:MD5、SHA等。 對稱加密 加密和解密使用的密鑰是同一密鑰(或者可以互相推算)。 使用場景:Cookie加密,通信加密等。 優(yōu)缺點:
常用對稱加密算法:DES、RC算法。 非對稱加密 加密和解密使用的密鑰不同,其中一個對外界公開,叫做 公鑰 ,另一個只有所有者知道,被稱為 私鑰 。用公鑰加密的信息必須用私鑰才能解開,反之,用私鑰加密的信息只有公鑰才能解開。理論上不可能通過公鑰計算獲得私鑰。 使用場景:信息安全傳輸,數(shù)字簽名等。 常用非對稱加密算法:RSA算法。 HTTPS傳輸中瀏覽器使用的數(shù)字證書就是經(jīng)過權(quán)威機構(gòu)認證的非對稱加密的公鑰。 信息過濾與反垃圾 常用的信息過濾與反垃圾手段有以下幾種: 文本匹配 主要用來解決敏感詞過濾問題。 快速判斷信息中是否包含敏感詞方法:
分類算法 算法原理:先將批量已經(jīng)分好類的樣本數(shù)據(jù)輸入分類算法進行訓練,可以得到一個分類模型,然后再利用分類算法結(jié)合分類模型對待處理郵件進行識別。 簡單實用的分類算法:貝葉斯分類 實用場景:反垃圾、信息自動分類等 黑名單 將需要過濾的內(nèi)容加入到黑名單中,然后從黑名單中進行查找,如果找到,就過濾掉。 常用數(shù)據(jù)結(jié)構(gòu):Hash表、BloomFilter。 電子商務(wù)風險控制 交易安全是電子商務(wù)網(wǎng)站的底線。 風險 主要風險:
風控 風控手段包括 自動 和 人工 兩種。 自動風控技術(shù):
關(guān)注作者:JAVA高級程序員 |
|