1、大型網站架構的目標與挑戰
網站結構有哪些、(1)、高可用性:負載均衡、數據備份、異地容災......
(2)、高性能:高速緩存、并行計算、異地鏡像....
(3)、可伸縮性:開發框架、多層設計、業務分割....
網站如何架構。
2、網站架構演變和技術脈絡
頁面架構?(1)、web動靜態資源分離,與數據庫物理分離
img、doc、js、css等靜態資源使用單獨的web http server 處理請求 (使用Apache/Nginx 等配置)
動態頁面靜態化處理?
大型網站架構設計。
(2)、采取緩存處理
減少對網站、Web應用服務器、文件系統IO、數據庫的訪問。
大型互聯網架構、主要有客戶端緩存、前端頁面緩存、頁面片段緩存、本地數據緩存、數據庫緩存。
客戶端緩存技術有:
網站架構。(a)、修改HTTP協議的Header參數, 如Cache-Control、Expires、Pragma、LastModified、Etag等參數,讓瀏覽器緩存。
(b)、使用HTTP協議,能夠使用GET盡量不使用POST
(c)、壓縮js、js合并、壓縮圖片
網站信息架構。(d)、會話狀態采用Cookie替代傳統的Session
(e)、采用Ajax實現頁面局部刷新
(f)、采用Flex、HTML5等技術,將服務器端的運算遷移到瀏覽器端
總之,能讓瀏覽器端緩存的數據一定要緩存,瀏覽器端能處理的運算絕對不放到服務器端處理。
前端頁面緩存技術:
(a)、采用具備緩存跟你的HTTP反向代理服務器作為前端緩存器。
(Varnish\Squid\Ncache等)
頁面片段緩存:
采用apache mod_esi、WebLogic、JSP標簽庫等。
本地數據緩存:
(1)、Oracle 不要拼SQL,使用PreparedStatement,Query Cache根據數據庫具體情況合理設置
(2)、Oracle 的Data Buffer 設置
(3)、應用服務器Cache:緩存更新頻率的數據,如基表數據、配置信息,使用線程池、連接池等
(4)、Java采用 map \EHCache等
(3)、增加機器作為HA,數據庫讀寫分離
?
負載均衡技術:
(1)、DNS負載均衡
(2)、反向代理軟件:Apache、Nginx等
(3)、其他硬件產品
數據庫讀寫分離:
讀寫分離邏輯分配、負載均衡、失效轉移、數據庫分區透明支持
CDN(Content Delivery Network) 內容分發網絡:
將網站的內容分發到最接近用戶的網絡邊緣,使用戶可以可以就近獲取,從而解決互聯網網絡擁擠的狀況,提高相應速度。適合于靜態內容很多、頁面內容實時性要求不高的網站。
分布式緩存:
使用memcached、redis等NoSQL作為分布式緩存
分庫:
讀寫分離、垂直分區
分區:
分片key識別劃分檢索依據
用NoSQL數據庫部分替換關系數據庫
多個數據中心:
使用分布式文件系統、MapReduce、NoSQL 存儲
3、網站架構設計理論和原則
(1)、 互聯網的BASE 原則
關系數據庫的 ACID :原子性 Atomic、一致性 Consistency、隔離性 Isolation、持久性 Durability
ACID原則不太適用互聯網,可用性比一致性重要。
BASE 原則:犧牲強一致性,以獲得更好的可用性和可靠性。
基本可用 (Basically Available):數據能保證80%一致性就行了,參考二八定律
軟狀態 (Soft state):在不過分追求數據一致性 (強一致性)前提下可考慮狀態策略。如將數據緩存在客戶端一段時候后,過后若無請求,則清除緩存。
最終一致性(Eventually consistent):在某一段短時間內允許數據不一致,三經過較長時間,等所有節點數據都整合在一起后,數據最終達到完全一致。
(2)、分布式的CAP 理論
一致性(Consistency):保證不同節點對數據操作的原子性
可用性(Availability): ?確保用戶訪問可得到相應。不強調不同節點的一致性。
分區容忍性(Partition Tolerance): 數據分區儲存后,即使部分分區組件不可用,其實施操作也能完成。
CAP理論指出:一個分布式系統不肯同事滿足一致性、可用性和分區容忍性這3項請求。最多只能同時滿足2項。
?