? ? 網站的可用性(Avaliability)描述網站可有效訪問的特性。
### 1、網站可用性的度量與考核
??? ?網站不可用時間(故障時間)=故障修復時間點-故障發現(報告)時間點
???? 網站年度不可用時間=(1-網站不可用時間/年度時間)× 100%
???? 可用性指標時網站架構設計的重要指標,對外是服務承諾,對內是考核指標,具體到每個工程師,更多的是使用故障分。
???? 所謂**故障分**是指對網站故障進行分類加權計算故障責任的方法。如下是個案例:
<table border="1" cellspacing="0" cellpadding="0"><tbody><tr><td valign="top"><p><span style="font-size:14px">分類</span></p></td><td valign="top"><p><span style="font-size:14px">描述</span></p></td><td valign="top"><p><span style="font-size:14px">權重</span></p></td></tr><tr><td valign="top"><p><span style="font-size:14px">事故級故障</span></p></td><td valign="top"><p><span style="font-size:14px">嚴重故障,網站整體不可用</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">100</span></p></td></tr><tr><td valign="top"><p><span style="font-family:Calibri; font-size:14px">A</span>類故障</p></td><td valign="top"><p><span style="font-size:14px">網站訪問不順暢或核心功能不可用</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">20</span></p></td></tr><tr><td valign="top"><p><span style="font-family:Calibri; font-size:14px">B</span>類故障</p></td><td valign="top"><p><span style="font-size:14px">非核心功能不可用,或核心功能少數用戶不能訪問</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">5</span></p></td></tr><tr><td valign="top"><p><span style="font-family:Calibri; font-size:14px">C</span>類故障</p></td><td valign="top"><p><span style="font-size:14px">其他故障</span></p></td><td valign="top"><p><span style="font-family:Calibri; font-size:14px">1</span></p></td></tr></tbody></table>
????故障分的計算公式為:
?? 故障分=故障時間(分鐘)* 故障權重
### 2、網站的高可用架構
一個典型的網站設計通常遵循如下圖所示的基本分層模型。

在負載的大型網站架構中,劃分的粒度會更小,更詳細,但通常還是能夠把這些服務器劃分到這三層中。

??????? ? 對于應用層的服務器通常為了應對高并發的訪問請求,會通過負載均衡設備將一組服務器組成一個集群共同?對外提供服務,當負載均衡設備通過心跳檢測到某臺服務器不可用時,就將其從集群列表中提出,并將請求分發到集群中其他?可用的服務器上,是整個集群保存可用,從而實現應用高可用。
???????位于服務層的服務器情況和應用層類似,也是通過集群方式實現高可用,只是這些服務器被應用層通過分布式服務調用框架訪問,?分布式服務調度框架會在應用層客戶端中實現負載均衡功能。
?????? 位于數據層的服務器情況比較特殊,數據服務器上存儲著數據,為了保證數據不丟失,數據訪問服務不中斷,需要在數據寫入時進行數據同步復制,將數據寫入多臺服務器上,實現數據冗余備份。
?????? 網站升級的頻率一般都非常高,每次網站發布都需要關閉服務,重新啟動系統,相當于服務器宕機。因此網站的可用性架構還需要考慮到網站升級?發布引起的宕機。
### 3、高可用的應用
??????? 應用層主要處理網站應用的業務邏輯,也稱為業務邏輯層,應用的一個顯著特點就是應用的無狀態行,因此實現負載均衡相對簡單一點。
??????? Web應用中將這些多次請求的上下文稱為回話(Session),在單機情況下,session可部署在服務器上的Web容器上管理。在使用負載均衡?的集群環境中,由于負載均衡服務器可能會將請求分發到集群任何一臺應用服務器上,所以保證每次請求依然能夠獲得正確的session比單機?時要復雜的多。在集群環境下,session管理主要有 ?以下手段。
? ? ? ? 1、Session復制
Session復制是早期企業應用系統使用較多的一種服務器集群Session管理機制。應用服務器開啟Web容器的Session復制功能,在集群中幾臺服務器之間同步Session對象,是每臺服務器上都保存所有用戶的Session信息。
? ? ? 這種方案雖然簡單,從本機讀取Session信息也很快,但當集群規模比較大的時候會占用服務器和網站的大量資源,在大量用戶訪問的情況下,甚至會出現內存不夠Session使用的情況。
? ? ? ?2、Session綁定
? ? ? Session綁定可以利用負載均衡的源地址Hash算法實現,負載均衡服務器總是將來源于同一IP的請求分發到同一臺服務器上。這樣在整個回話期間,用戶所有的請求都在同一天服務器上處理,即Session綁定到某臺特定的服務器上,保證Session總能在這臺服務器上獲取,這種方法有成為回話粘滯。
? ? ? 3、利用Cookie記錄Session
? ? ? 一種管理Session的方式是將Session記錄在客戶端,每次請求服務器的時候,將Session放在請求中發送給服務器,服務器處理完請求后再將修改后的Session響應給客戶端。
? ? ?**4、Session服務器**
? ? ? Session服務器,即把session的管理獨立部署在某一臺機器上,Web服務器不保存用戶Session信息,每次都去Session服務器取數據。
? ? ? 這種解決方案事實上是將應用服務器的狀態分離,分為無狀態的應用服務器和有狀態的Session服務器。對于有狀態的Session服務器,一種比較簡單的方式是利用分布式緩存、數據庫等。
### 4、高可用的服務
? ? 可復用的服務模塊為業務產品提供基礎公共服務,大型網站中這些服務通常都獨立分布式部署,被具體應用遠程調用。可復用的服務和應用一樣,是無狀態的,因此可以使用類似**負載均衡的失效轉移策略**實效高可用的服務。
? ? 除此之外,在實踐中,還有一些幾點高可用的服務策略。
? ? 1、分級管理
? ? 2、超時設置
? ? 3、異步調用
? ? 4、服務降級,網站高峰期間,可以關閉一些不重要的服務,如評論。
### 5、高可用的數據
? ? 保證數據存儲高可用的手段主要是數據備份和失效轉移機制。
? ? CAP原理:即數據持久性、數據可訪問性、數據一致性。
### 6、高可用的網站質量保證
? ?這里主要說下網站發布流程吧。看圖即可:

### ?7、網站運行監控
? ?“**不允許沒有監控的系統上線”**。網站運行監控對于網站運維和架構設計優化至關重要,運維沒有監控的網站,猶如駕駛沒有儀表的飛機。
? ?具體到監控哪些數據,主要有:
? 1、用戶行為日志收集(服務器端和瀏覽器端)
? 2、服務器性能監控(CPU、內存等)
? 3、運行數據監控(緩存命中率、平均響應延遲時間、每分鐘發送郵件數目、待處理的任務總數等)
? 監控數據采集后,除了用作系統性能評估、集群規模伸縮性預測等,還可以根據實時監控數據進行風險預警,并對服務器進行失效轉移,自動負載調整,最大化利用集群所有機器的資源。