大型網站技術架構 核心原理與案例分析 閱讀筆記 html
架構: 最高層次的規劃,難以改變的決定前端
3.2. 萬無一失:網站的高可用架構(可用性)算法
網站不可用時間(故障時間) = 故障修復時間點 - 故障發現(報告)時間點
網站年度可用性指標 = (1 - 網站不可用時間/年度總時間) * 100%數據庫
網站應用中一個處理錯誤的理念:快速失敗(fast failed),即若是系統在啓動時發現問題就馬上拋出異常,中止啓動排查錯誤,而不是啓動後執行錯誤操做。後端
網站運行監控設計模式
不容許沒有監控的系統上線瀏覽器
監控數據採集緩存
3.3. 永無止境:網站的伸縮性架構(伸縮性)安全
應用服務器集羣的伸縮性設計性能優化
Http請求分發裝置能夠感知或者能夠配置集羣的服務器數量,能夠及時發現集羣中新上線或新下線的服務器,並能向新上線的服務器分發請求,中止向已下線的服務器分發請求,實現應用服務器集羣的伸縮性
HTTP重定向負載均衡: 利用HTTP重定向協議實現負載均衡。
數據鏈路層負載均衡: 在通訊協議的數據鏈路層修改mac地址進行負載均衡。
Linux平臺最好的鏈路層負載均衡開源產品是LVS(Linux Virtual Server)
分佈式緩存集羣的伸縮性設計
計算機的任何問題均可以經過增長一個虛擬層來解決。
分佈式緩存的一致性hash算法 : hash環 + 虛擬層
擴展性(Extensibility): 對現有系統影響最小的狀況下,系統功能可持續擴展或提高的能力。表如今系統基礎設施穩定不須要常常變動,應用之間較少依賴和耦合,對需求變動能夠敏捷響應。是系統架構設計層面的開閉原則(擴展開放,修改關閉),架構設計考慮將來功能擴展,當系統增長新功能時,不須要對現有系統的結構和代碼進行修改。
伸縮性(Scalability): 系統可以經過增長(減小)自身資源規模的方式加強(減小)本身計算處理事務的能力。若是這種增減是成比例的,即做線性伸縮性。網站架構中,一般指利用集羣方式增長服務器數量,提升系統的總體事務吞吐能力。
3.4. 隨需應變:網站的可擴展架構(擴展性)
構建可擴展的網站架構
低耦合是軟件設計的終極目標之一,低耦合的系統更容易擴展,低耦合的模塊更容易複用,低耦合的設計讓開發過程和維護變得更輕鬆和容易管理。
設計網站可擴展架構的核心思想是模塊化,並在此基礎之上,下降模塊間的耦合性,提升模塊的複用性。
模塊分佈式部署之後具體聚合方式主要有分佈式消息隊列和分佈式服務 。
利用分佈式消息隊列下降系統耦合性
分佈式消息隊列
分佈式消息隊列經過消息對象分解系統耦合性,不一樣子系統處理同一個消息;
分佈式服務則經過接口分解系統耦合性,不一樣子系統經過相同的接口描述進行服務調用。
利用分佈式服務打造可複用的業務平臺
WebService與企業級分佈式服務
WebService缺點:
- 臃腫的註冊與發現機制
- 低效的XML序列化手段
- 開銷相對較高的HTTP遠程通訊
- 複雜的部署與維護手段
難以知足大型網站對系統高性能、高可用、易部署、易維護的要求。