成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

究竟啥才是互聯網架構“高可用”

開發 開發工具 架構
高可用HA(High Availability)是分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。

最近留言問“高可用”的朋友頗多,找歷史文章又找不到,故重新優化發布,希望大家有收獲。

[[259682]]

一、什么是高可用

高可用HA(High Availability)是分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。

假設系統一直能夠提供服務,我們說系統的可用性是100%。如果系統每運行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%。

很多公司的高可用目標是4個9,也就是99.99%,這就意味著,系統的年停機時間為8.76個小時。

百度的搜索首頁,是業內公認高可用保障非常出色的系統,甚至人們會通過 www.baidu.com 能不能訪問來判斷“網絡的連通性”,百度高可用的服務讓人留下啦“網絡通暢,百度就能訪問”,“百度打不開,應該是網絡連不上”的印象,這其實是對百度HA***的褒獎。

二、如何保障系統的高可用

我們都知道,單點是系統高可用的大敵,單點往往是系統高可用***的風險和敵人,應該盡量在系統設計的過程中避免單點。方法論上,高可用保證的原則是“集群化”,或者叫“冗余”:只有一個單點,掛了服務會受影響;如果有冗余備份,掛了還有其他backup能夠頂上。

保證系統高可用,架構設計的核心準則是:冗余。

有了冗余之后,還不夠,每次出現故障需要人工介入恢復勢必會增加系統的不可服務實踐。所以,又往往是通過“自動故障轉移”來實現系統的高可用。

接下來我們看下典型互聯網架構中,如何通過冗余+自動故障轉移來保證系統的高可用特性。

三、常見的互聯網分層架構

互聯網架構“高可用”

常見互聯網分布式架構如上,分為:

  • 客戶端層:典型調用方是瀏覽器browser或者手機應用APP;
  • 反向代理層:系統入口,反向代理;
  • 站點應用層:實現核心應用邏輯,返回html或者json;
  • 服務層:如果實現了服務化,就有這一層;
  • 數據-緩存層:緩存加速訪問存儲;
  • 數據-數據庫層:數據庫固化數據存儲;

整個系統的高可用,又是通過每一層的冗余+自動故障轉移來綜合實現的。

四、分層高可用架構實踐

1. 【客戶端層->反向代理層】的高可用

互聯網架構“高可用”

【客戶端層】到【反向代理層】的高可用,是通過反向代理層的冗余來實現的。以nginx為例:有兩臺nginx,一臺對線上提供服務,另一臺冗余以保證高可用,常見的實踐是keepalived存活探測,相同virtual IP提供服務。

互聯網架構“高可用”

自動故障轉移:當nginx掛了的時候,keepalived能夠探測到,會自動的進行故障轉移,將流量自動遷移到shadow-nginx,由于使用的是相同的virtual IP,這個切換過程對調用方是透明的。

2. 【反向代理層->站點層】的高可用

互聯網架構“高可用”

【反向代理層】到【站點層】的高可用,是通過站點層的冗余來實現的。假設反向代理層是nginx,nginx.conf里能夠配置多個web后端,并且nginx能夠探測到多個后端的存活性。

互聯網架構“高可用”

自動故障轉移:當web-server掛了的時候,nginx能夠探測到,會自動的進行故障轉移,將流量自動遷移到其他的web-server,整個過程由nginx自動完成,對調用方是透明的。

3. 【站點層->服務層】的高可用

互聯網架構“高可用”

【站點層】到【服務層】的高可用,是通過服務層的冗余來實現的。“服務連接池”會建立與下游服務多個連接,每次請求會“隨機”選取連接來訪問下游服務。

互聯網架構“高可用”

自動故障轉移:當service掛了的時候,service-connection-pool能夠探測到,會自動的進行故障轉移,將流量自動遷移到其他的service,整個過程由連接池自動完成,對調用方是透明的(所以說RPC-client中的服務連接池是很重要的基礎組件)。

4. 【服務層>緩存層】的高可用

互聯網架構“高可用”

【服務層】到【緩存層】的高可用,是通過緩存數據的冗余來實現的。

緩存層的數據冗余又有幾種方式:***種是利用客戶端的封裝,service對cache進行雙讀或者雙寫。

互聯網架構“高可用”

緩存層也可以通過支持主從同步的緩存集群來解決緩存層的高可用問題。

以redis為例,redis天然支持主從同步,redis官方也有sentinel哨兵機制,來做redis的存活性檢測。

互聯網架構“高可用”

自動故障轉移:當redis主掛了的時候,sentinel能夠探測到,會通知調用方訪問新的redis,整個過程由sentinel和redis集群配合完成,對調用方是透明的。

說完緩存的高可用,這里要多說一句,業務對緩存并不一定有“高可用”要求,更多的對緩存的使用場景,是用來“加速數據訪問”:把一部分數據放到緩存里,如果緩存掛了或者緩存沒有***,是可以去后端的數據庫中再取數據的。

這類允許“cache miss”的業務場景,緩存架構的建議是:

互聯網架構“高可用”

將kv緩存封裝成服務集群,上游設置一個代理(代理可以用集群冗余的方式保證高可用),代理的后端根據緩存訪問的key水平切分成若干個實例,每個實例的訪問并不做高可用。

互聯網架構“高可用”

緩存實例掛了屏蔽:當有水平切分的實例掛掉時,代理層直接返回cache miss,此時緩存掛掉對調用方也是透明的。key水平切分實例減少,不建議做re-hash,這樣容易引發緩存數據的不一致。

5. 【服務層>數據庫層】的高可用

大部分互聯網技術,數據庫層都用了“主從同步,讀寫分離”架構,所以數據庫層的高可用,又分為“讀庫高可用”與“寫庫高可用”兩類。

6. 【服務層>數據庫層“讀”】的高可用

互聯網架構“高可用”

【服務層】到【數據庫讀】的高可用,是通過讀庫的冗余來實現的。

既然冗余了讀庫,一般來說就至少有2個從庫,“數據庫連接池”會建立與讀庫多個連接,每次請求會路由到這些讀庫。

互聯網架構“高可用”

自動故障轉移:當讀庫掛了的時候,db-connection-pool能夠探測到,會自動的進行故障轉移,將流量自動遷移到其他的讀庫,整個過程由連接池自動完成,對調用方是透明的(所以說DAO中的數據庫連接池是很重要的基礎組件)。

7. 【服務層>數據庫層“寫”】的高可用

互聯網架構“高可用”

【服務層】到【數據庫寫】的高可用,是通過寫庫的冗余來實現的。

以mysql為例,可以設置兩個mysql雙主同步,一臺對線上提供服務,另一臺冗余以保證高可用,常見的實踐是keepalived存活探測,相同virtual IP提供服務。

互聯網架構“高可用”

自動故障轉移:當寫庫掛了的時候,keepalived能夠探測到,會自動的進行故障轉移,將流量自動遷移到shadow-db-master,由于使用的是相同的virtual IP,這個切換過程對調用方是透明的。

五、總結

高可用HA(High Availability)是分布式系統架構設計中必須考慮的因素之一,它通常是指,通過設計減少系統不能提供服務的時間。

方法論上,高可用是通過冗余+自動故障轉移來實現的。

整個互聯網分層系統架構的高可用,又是通過每一層的冗余+自動故障轉移來綜合實現的,具體的:

  • 【客戶端層】到【反向代理層】的高可用,是通過反向代理層的冗余實現的,常見實踐是keepalived + virtual IP自動故障轉移;
  • 【反向代理層】到【站點層】的高可用,是通過站點層的冗余實現的,常見實踐是nginx與web-server之間的存活性探測與自動故障轉移;
  • 【站點層】到【服務層】的高可用,是通過服務層的冗余實現的,常見實踐是通過service-connection-pool來保證自動故障轉移;
  • 【服務層】到【緩存層】的高可用,是通過緩存數據的冗余實現的,常見實踐是緩存客戶端雙讀雙寫,或者利用緩存集群的主從數據同步與sentinel保活與自動故障轉移;更多的業務場景,對緩存沒有高可用要求,可以使用緩存服務化來對調用方屏蔽底層復雜性;
  • 【服務層】到【數據庫“讀”】的高可用,是通過讀庫的冗余實現的,常見實踐是通過db-connection-pool來保證自動故障轉移;
  • 【服務層】到【數據庫“寫”】的高可用,是通過寫庫的冗余實現的,常見實踐是keepalived + virtual IP自動故障轉移;

末了,希望文章的思路是清晰的,希望大家對高可用的概念和實踐有個系統的認識,感謝大家。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2016-12-06 11:56:13

互聯網架構高可用

2017-01-11 21:40:03

互聯網架構高并發

2018-11-07 06:35:50

互聯網服務化高可用架構

2017-10-27 14:52:31

互聯網高可用架構高可用

2019-12-26 07:39:36

互聯網架構ip

2019-04-10 14:10:02

高并發分布式系統架構

2017-12-26 15:52:31

MQ互聯網耦合

2019-05-13 10:30:34

互聯網架構容量

2016-09-22 15:55:39

互聯網架構容量設計

2017-09-25 12:11:14

高可用微服務架構

2018-01-01 06:41:44

耦合互聯網架構配置中心

2019-11-28 16:09:29

架構模板存儲

2022-06-09 08:01:43

秒殺系統互聯網架構

2016-09-22 15:01:59

微服務互聯網架構

2023-08-25 15:11:00

2015-07-22 09:39:27

企商象云互聯網

2012-09-19 15:43:21

云時代

2018-11-23 10:05:27

互聯網金融行業互聯網金融

2021-02-19 20:38:01

互聯網衛星系統

2024-05-13 11:43:26

開發層服務層ActiveMQ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品黄 | 午夜激情影院 | 91亚洲欧美| 91视频免费| 可以在线观看av的网站 | 午夜电影网址 | 日日摸天天添天天添破 | 日本一区二区不卡 | 不卡视频一区 | 亚洲成av人影片在线观看 | 视频一区在线观看 | 人人插人人 | 欧美久久天堂 | 色婷婷久久久亚洲一区二区三区 | 亚洲香蕉在线视频 | 一区二区免费 | 天天操夜夜操 | 日韩一区二区在线播放 | 在线看91| 国产精品国产 | 国产日韩一区二区三免费高清 | 欧美日一区 | 久久91| 国产成人福利在线观看 | 国产欧美日韩 | 午夜视频网 | 久久综合一区 | 九色视频网 | 久久99精品久久久久子伦 | 久久精品国产免费 | 狠狠综合网 | 亚洲欧美一区二区三区国产精品 | 国产精品美女久久久久久久网站 | 国产一二区免费视频 | 欧美日韩精品免费 | 欧美日韩在线精品 | 日韩欧美国产一区二区 | 在线欧美亚洲 | 韩国av电影网 | 精品久久久久久亚洲精品 | 视频在线一区二区 |