#第三章 大型網站核心架構要素算法
軟件架構:有關軟件總體結構與組件的抽象描述,用於指導大型軟件系統各個方面的設計數據庫
軟件架構須要關注的幾個方面:緩存
- 系統功能需求(最基本的)
- 性能
- 可用性
- 伸縮性
- 擴展性
- 安全性
##3.1 性能 ##3.2 可用性 對於大型知名網站,可用性要達到99.99%。安全
網站高可用架構的前提是:必然會出現服務器宕機,而高可用設計的目標就是當服務器宕機的時候,服務或應用依然可用。服務器
高可用的主要手段是冗餘
,應用部署到多臺服務器上同時提供訪問,數據存儲到多臺服務器上互相備份。架構
其餘:軟件開發過程保證質量,自動化測試,自動化發佈,灰度發佈等。併發
如何衡量一個系統架構設計是否知足高可用的目標? 就是假設系統中任何一臺或多臺服務器宕機時,已經出現各類不可預期的問題時,系統總體是否依然可用。負載均衡
伸縮性:經過不斷向集羣中加入服務器的手段來緩解不斷上升的用戶併發訪問壓力和不斷增加的數據存儲需求。框架
衡量伸縮性的主要指標:是否能夠用多臺服務器構建集羣,是否容易向集羣中添加新的服務器。加入新的服務器以後是否能夠提供和原來的服務器無差異的服務。集羣中可容納的總的服務器數量是否有限制。分佈式
對於 應用服務器集羣,只要服務器上不存數據,全部服務器都是對等的,經過使用合適的負載均衡設備就能夠向集羣中不斷加入服務器。
對於 緩存服務器集羣,新加入的服務器會致使緩存路由失效,進而致使集羣中大部分緩存數據沒法訪問。雖然緩存數據能夠從新加載,可是若是應用嚴重依賴緩存,可能會致使整個網站崩潰。 須要改進緩存路由算法保證緩存數據的可訪問性。
關係數據庫,雖然支持數據複製,主從熱備等機制,可是很難作到大規模集羣的但是伸縮性。 關係數據庫的集羣伸縮方案須要在數據庫以外實現,經過路由分區等手段將部署有多個數據庫的服務器組成一個集羣。
對於NoSQL來說,天生就是爲了海量數據而生,對於伸縮性的支持都很好。
如何設計網站的架構使其可以 快速響應需求變化,是網站可擴展架構的主要目的。
主要實現手段是:事件驅動架構和分佈式服務。
事件驅動架構一般使用消息隊列實現,將用戶請求和其餘業務事件形成的消息發佈到消息隊列,消息的處理者做爲消費者從消息隊列中獲取消息進行處理。經過這種方式將消息的產生和消息處理分離開,能夠透明的增長新的消息生產者任務和新的消費者任務。
分佈式服務:將業務和可複用服務分離開,經過分佈式服務框架調用。新增產品能夠經過調用可複用的服務實現自身的業務邏輯,而對現有產品沒有影響。可複用服務升級或變動的時候,能夠經過提供多版本服務隊應用實現透明升級。
安全架構,主要是保護網站不受惡意訪問和攻擊,保護網站的重要數據不被 竊取。 衡量標準:針對現存和潛在的各類攻擊與竊密手段,是否有可靠的應對策略。