《大型網站技術架構》筆記:架構之高可用


網站的可用就是指網站可以進行有效訪問,不可用就是服務器掛了,無法訪問了,稱為網站故障。
通常用多少個9來衡量網站的可用性。
如QQ的可用性為4個9,即99.99%,那么QQ一年之中不可用時間為:365×24×60×(1-99.99%)≈ 53分鐘。

不可用的主要原因:
a.服務器硬件故障;
b.網站升級發布引起的宕機;

一個典型的網站設計基本分層架構:
應用層:不同業務產品,主要處理網站應用的業務邏輯;
服務層:共同的復用業務,如登錄服務、賬戶管理等;
數據層:數據庫服務、文件服務、緩存服務、搜索服務等

構建高可用架構的網站,主要從以上三個方面進行。


一、高可用的應用

分兩種情況:應用無狀態和應用有狀態

1.1 應用無狀態

所謂無狀態的應用是指應用服務器不保存業務的上下文信息,而僅根據每次請求提交的數據進行相應的業務邏輯處理,多個服務實例(服務器)之間完全對等 ,請求提交到任意服務器,處理結果都是完全一樣的。

使用負載均衡進行無狀態服務的失效轉移

負載均衡是指將流量和數據分攤到一個集群組成的多臺服務器上,提高整體的負載處理能力。當任意一臺服務器宕機時,負載均衡服務器通過心跳監測機制發現該服務失去響應,就會把它從服務器列表中刪除,而將請求發送到其他服務器上。為了保證系統的高可用,即使流量很小的應用,也應該至少部署兩臺應用服務器,使用負載均衡技術構建一個小型的集群。

負載均衡可以通過開源的免費軟件或負載均衡硬件實現,都提供失效轉移功能。

1.2 應用有狀態

由于業務總是有狀態的,常常將這些狀態(上下文對象)保存在會話(Session)中。此時面臨的主要問題就是應用服務器集群的Session管理。
集群環境下,Session管理主要有以下幾種方案:

  • Session復制
    定義:應用服務器開啟Web容器的Session復制功能,集群中的幾臺服務器之間進行同步Session對象,使得每臺服務器上都保存所有用戶的Session信息。
    優點:任何一臺服務器宕機都不會導致Session的丟失,而服務器使用Session時,只需要從本機獲取即可。
    缺點:Session復制時的同步操作,會占用服務器和網絡資源;每個服務器上都保存所有Session,在大量用戶訪問時,Session會占用大量內存,甚至超出服務器內存。

  • Session綁定
    定義:負載均衡服務器利用源地址Hash算法,將來自同一IP的請求分發到同一臺服務器上,這種方法又叫會話黏滯。
    缺點:不符合高可用的要求,一旦某臺應用服務器宕機,那么該機上的Session就會丟失,用戶請求切換到其他服務器上就會因為沒有Session而無法完成業務。很少采用該方式。

  • 利用Cookie記錄Session
    定義:將Session通過Cookie保存在瀏覽器,每次請求時,將Session放在請求中發送給服務器,服務器處理完請求后,再將修改過的Session通過Cookie響應給瀏覽器。
    缺點:每次都傳輸Cookie,影響性能;如果用戶關閉Cookie,訪問就會不正常;Cookie大小有限制,能記錄的信息有限。
    優點:簡單易用,支持應用服務器的線性伸縮,許多網站或多或少都會使用Cookie記錄Session。

  • Session服務器
    定義:獨立部署Session服務器,統一管理Session,應用服務器每次讀寫Session時,都訪問Session服務器。
    實現:一種簡單的方法是利用分布式緩存、數據庫等,在這些產品的基礎上進行包裝,使其符合Session的存儲和訪問要求。如果業務場景對Session管理有比較高的要求,比如利用Session服務集成單點登錄(SSO)、用戶服務等,則需要開發專門的Session服務管理平臺。


二、高可用的服務

可復用的服務模塊為業務產品提供基礎公共服務,大型網站中這些服務通常都獨立分布式部署,被具體應用遠程調用。是一種無狀態的服務,可以使用類似負載均衡的失效轉移策略實現高可用。
此外,具體實踐中,還有以下幾點高可用的服務策略:

  • 分級管理
    核心應用和服務、優先級低的服務區別分配不同的資源
  • 超時設置
    在應用程序中設置服務調用的超時時間,一旦超時,通信框架就拋出異常,應用程序根據服務調度策略,可選擇繼續重試或者將請求轉移到提供相同服務的其他服務器上。
  • 異步調用
    應用服務通過消息隊列等異步方式進行調用,避免一個服務失敗導致整個請求失敗的情況。但對于必須確認服務調用成功才能進行下一步操作的應用不適合使用異步調用。
  • 服務降級
    在訪問高峰期,為保證核心應用和功能的正常,對服務降級
  • 拒絕服務:拒絕低優先級應用的調用,減少服務調用的并發數或隨機拒絕部分調用請求
  • 關閉功能:關閉部分不重要的服務或非核心服務
  • 冪等級設計
    在服務層必須保證服務重復調用和一次調用產生的結果相同,即服務具有冪等性。

三、高可用的數據

主要是指數據存儲的高可用(不包含緩存數據的高可用),主要手段是數據備份和失效轉移。

CAP原理
CAP原理認為,一個提供數據服務的存儲系統無法同時滿足數據一致性(Consistency)、數據可用性(Avalibaility)、分區耐受性(Partition Tolerance,系統具有跨網絡分區的伸縮性)這三個條件。大型網站通常選擇選擇強化可用性和伸縮性,而在一定程度上犧牲一致性。
</br>數據一致性分類

  • 數據強一致:各個副本的數據在物理存儲中總是一致的;數據更新操作和操作響應總是一致的。

  • 數據用戶一致:數據在物理存儲的各個副本的數據可能是不一致的,但是終端用戶訪問時,通過糾錯和校驗機制,可以確定一個一致的且正確的數據返回給用戶。網站通常達到這一級別的一致性。

  • 數據最終一致性:一致性最弱的一種,即物理存儲的數據可能是不一致的,不同用戶同時訪問的結果返回也可能不一致,但系統經過一段時間的自我恢復和修正,數據會達到最終一致。

  • 數據備份
    主要分為數據冷備份和熱備份。冷備份是指定期將數據復制到某種存儲介質。這種方式不能保證數據最終一致和數據可用,只是作為一種傳統數據保護手段使用。熱備份則是指對數據實時備份,分為異步熱備和同步熱備。

  • 異步熱備份
    將服務器分為主、從服務器,數據寫入時,由主服務器的寫操作代理模塊將數據寫入本機存儲系統后立即返回寫操作成功的響應,然后通過異步線程將寫操作同步到從服務器。

  • 同步熱備份
    在應用程序客戶端并發向多個存儲服務器同時寫入數據,然后等待所有存儲服務器都返回操作成功的響應后,再通知應用程序寫操作成功。這種情況下,沒有主從之分,完全對等,便于管理和維護。由于并發寫,所以性能和異步熱備份差不多。

關系型數據庫的Master-Slave同步機制不但解決了數據備份問題,還改善了性能:使用讀寫分離方式,寫在Master,讀在Slaver。
NoSQL都提供完備的實時備份機制。

  • 失效轉移
    某臺服務器宕機后,將讀寫操作轉移到其他服務器上。失效轉移操作主要由三部分組成:失效確認、訪問轉移、數據恢復
  • 失效確認:心跳監測和應用程序的訪問失敗報告
  • 訪問轉移:對于完全對等的服務器,直接切換到對等的服務器上即可。如果存儲不對等,就要重新計算路由,選擇存儲服務器。
  • 數據恢復:將數據副本數目恢復到設定值

四、軟件質量保證

  • 網站發布:使用發布腳本完成,逐步更新
  • 自動化測試
  • 預發布驗證:先把代碼發到預發布服務器上進行驗證,預發布服務器與正式服務器所有環境均一致,只是外部無法訪問。
  • 代碼控制:一般采用分支開發,主干發布
  • 自動化發布
  • 灰度發布

五、網站運行監控

  • 監控數據采集
  • 用戶行為日志收集:主要有①服務器端收集②客戶端瀏覽器通過嵌入專門的JavaScript收集;由于日志數據量巨大,很多網站逐步開發基于實時計算框架Storm的日志統計與分析工具。
  • 服務器性能監控:如系統Load、內存占用、硬盤IO、網絡IO等,使用較多的工具是Ganglia
  • 運行數據報告:監控一些與具體業務相關的技術和業務指標,比如緩沖命中率、平均響應延時時間等
  • 監控管理
  • 系統報警
  • 失效轉移
  • 自動降級
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,739評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,634評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,653評論 0 377
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,063評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,835評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,235評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,315評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,459評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,000評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,819評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,004評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,560評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,257評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,676評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,937評論 1 288
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,717評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,003評論 2 374

推薦閱讀更多精彩內容

  • 網站的可用性強調的是對最終用戶的使用價值。它牽動著人們的神經,直接影響著公司的形象和利益,許多互聯網公司都將網站的...
    deniro閱讀 3,671評論 0 18
  • 概述 1 架構演化大型網站的關注指標高可用 高性能 易擴展 可伸縮 安全 大型網站的特點高并發,大流量 高可用 海...
    西西老師閱讀 2,827評論 0 12
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,786評論 18 139
  • 大型網站架構 網站架構包括:前端架構+應用層架構+服務層架構+存儲層架構+后臺架構+數據中心機房架構+安全架構+數...
    運維開發筆記閱讀 1,125評論 0 7
  • 大型網站架構演化 大型網站的關注指標 高可用 高性能 易擴展 可伸縮 安全 大型網站的特點 高并發,大流量 高可用...
    技術修行者閱讀 2,571評論 1 13