容災設計學習筆記
一:邏輯層容災:
邏輯層服務一般都設計從無狀態服務,客戶端當前請求和下次請求在邏輯層沒有任何的關聯,因此客戶端可以在在多次請求中分別到不同的機器上,而返回的結果和一直在同一臺機器上一樣。由於這種特性的存在使得邏輯層可以通過多級備份來實現容災。
備份可以有 :主備(1+1), 一主多備(1+n),多主一備(n+1), 無備(1+0),互相備份(n)
切換的策略可以為:
冷切:即主完全承擔所有業務,當主不可服務時再啟用備,該方式由於備機一直處於不服務狀態,會出現當要切換到備的時候,備也不可服務,可信度低。
熱切:主和備一起分擔所有請求,主備只承擔部分業務請求(總和為100%)。這樣可以解決之前的冷切遇到的信任度低的問題。同時業務由主備共同分擔,節約成本。但是在主完全不可服務時,備有過載的風險。這裡可以沒有主備之分,在我們的實踐中常用多台機器組成的集群來實現互為備份。
二:資料層容災:
相對於邏輯層是無狀態的服務,資料層服務需要儲存和使用者相關的資料,使用者的多次請求之間的資料是有關聯的。因此如何在多機容災備份的情況下保證資料一致性成為乙個關鍵問題。
資料一致性的問題:
最終一致性:這個是弱一致性的一種,不保證在任意時刻同乙份資料在所有節點上都是一致 的,但是在一段時間之後時間會最終一致。對於我們網際網路的應用來說大多數是採用這種策略。
強一致性:在任意時刻同乙份資料在所有節點上都是一致 的。對於銀行、金融行業來說基本採用這種策略。
中心化備份策略:
在傳統的資料庫、資料伺服器設計中往往採用中心化的的模型。每台機器中儲存全量的資料,其中有只有一台可寫的主機,有一台或多台機器可讀的備機去同步主機的資料。當主機不可服務時,其中一台備機公升級為主機。
資料全量同步: 每次都全量同步主機的資料。一般會一段時間內做一次,是增量同步的乙個補充。可以一塊一資料計算md5值進行比較,只同步md5值不相等的數 據快。
問題:只有一台可寫容易出現單點問題(雖然可以切換,但是還是會在一定時間內不可服務)、由於網路問題可能出現多主。
去中心化備份策略:
相對於中心化只有乙個主可寫,其他備機都只是同步主機的資料,去中心化沒有主備之分, 所有的機器都可讀可寫,這樣寫的效能會有很大的提高,但是要做到資料的一致性比較複雜。目前主要的設計方案有: rnw協議、2pc、3pc協議、paxos協議等,有興趣的同學可以用自己去了解。
三:容災判定:
我們有了容災的可行性方案,現在看一下如何去判斷是否出現了問題。
**判斷
中心主動探測:該方法是中心主動和其他子系統或服務定時傳送訊息(可用私有協議或ping訊息等),根據回包來判定服務是否可用。
等待服務上報:該方法是子系統或者服務,又或者是專門agent主動的將服務的執行狀態上報給中心系統,中心系統通過上報訊息來判定服務是否執行正常。
上述兩種策略相結合的方式。
請求者判定:
即服務的使用方將根據請求的服務狀態(延遲、是否成功等資訊)來判定服務是否正常,請求者在本地記錄這些資訊,只將請求傳送到那些正常的服務。這種方式相對於**判定可以防止中心和其他子服務之間由於網路問題而導致誤判。
四:異地部署:
某些重要的服務為了在區域性的網路不可用、自然災害等問題時也能保證服務的可用性,需要將服務部署在不同的城市、機房。這樣一方面可以保證服務的可靠性,也可以讓不同地區的使用者就近訪,提高服務質量。
五、負載均衡:
接入負載:通過**服務將服務分發到不同的機器上,這個可以通過單獨部署負載均衡伺服器、lvs、dns、http重定向、nginx方向**、nat等實現。
號段負載:通過請求自身的特殊性將不同的請求分發到固定的服務上進行處理。如通過一致性hash將hash值相關的請求路由到固定的服務,也可以將固定號段的qq號路由到固定的服務。如何分配不夠離散化,可能會導致某些熱點請求都集中在同一臺服務,從而導致負載不均衡。
使用者自助負載:這種類似於遊戲伺服器中使用者選擇不同的服來分配不同的機器,達到將不同的請求分配到不同的機器的目的。
六:過載保護:
當負載達到系統處理能力的上限時,系統的處理能力將隨著負載的增加急劇下降,俗稱滾雪球。在系統設計的時候做好過載保護是一項很重要的工作。過載保護的方法有:
1:輕重分離、隔離部署:將系統、業務、功能隔離部署(可以分不同的set),確保系統過載狀態不會擴散到其他業務系統,對其他業務系統造成影響,使得影響最小化。
2:頻率控制:控制單位時間內的請求量(可以是總的請求量也可以是單個使用者的請求量),這樣可以保證系統在過載的時候不會被壓垮,保證部分使用者的請求可以被處理。
3:設定請求的有效時間: 使用者的請求都期望在一定時間範圍內返回結果。如果沒有返回則會當做超時出錯處理。如果服務端一直在處理這樣的請求,那麼其實是在無用功,對使用者沒有如何意義。因此我們需要對每個請求做超時限制,在一定的時間內沒有處理完則丟棄該請求,理想的狀態是從收到請求開始計時,這樣可以防止資料報在佇列中已經超時。
4:有損服務:服務做好有損處理,當系統過載時,可以將某些非關鍵性的服務下掉,從而保證關鍵業務可以正常服務。如果是底層非關鍵性的服務過載,則可以不去請求該服務的資料而直接反回給前端。同時前端也可以做相應的有損策略,防止後台服務過載時給使用者不好的體驗。
七:常見的網際網路事故及解決策略
伺服器硬體故障宕機:集群部署、多機備份、自動檢測並切換
網路丟包、光釺斷:異地部署、自動檢測故障並切換
伺服器雪崩:負載均衡、過載保護、容量告警
外部依賴故障:柔性邏輯、降級服務、限制重試
dns故障 :自搭建類dns服務、使用ip列表替代dns
程式core:自動拉起、實時告警
操作失望:灰度、保護邏輯、人員備份確認
mysql容災方案 mysql 架構 異地容災
一 簡介 我們來 下多機房下的mysql架構 二 目的 首先要清楚你的目的 1 實現異地機房的容災備份 2 實現異地機房的雙活 三 敘說 1 實現異地機房的容災備份 目的 只是將資料備份到異地,當第一機房發生故障時,能最大可能的保留資料.實現冗餘效果 業務 核心業務在第一機房,第二機房和第一機房都共...
mysql 容災 災備 備份
1 使用mysqldump命令備份 mysqldump命令將資料庫中的資料備份成乙個文字檔案。表的結構和表中的資料將儲存在生成的文字檔案中。mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文字檔案中生成乙個create語句。然後,將表中的所有記錄轉換成一條insert語句。然...
容災系統簡介
一 什麼是容災?廣義上,我們可以把所有與業務連續性相關的內容都納入容災。容災是乙個系統工程,它包括支援使用者業務的方方面面。而容災對於it 而言,就是提供乙個能防止使用者業務系統遭受各種災難影響破壞的計算機系統。容災還表現為一種未雨綢繆的主動性,而不是在災難發生後的 亡羊補牢 從狹義的角度,為了達到...