阿里多中心容災(zāi)實踐:蹩腳的異地多活技術(shù)一鍋端了!_IT技術(shù)周刊第673期
在異地多活的實現(xiàn)上,數(shù)據(jù)能夠在三個及以上中心間進(jìn)行雙向同步,才是解決真正異地多活的核心技術(shù)所在。本文基于三中心且跨海外的場景,分享一種多中心容災(zāi)架構(gòu)及實現(xiàn)方式,介紹幾種分布式ID生成算法,以及在數(shù)據(jù)同步上最終一致性的實現(xiàn)過程。
一、背景
為什么稱之為真正的異地多活?異地多活已經(jīng)不是什么新鮮詞,但似乎一直都沒有實現(xiàn)真正意義上的異地多活。一般有兩種形式:一種是應(yīng)用部署在同城兩地或多地,數(shù)據(jù)庫一寫多讀(主要是為了保證數(shù)據(jù)一致性),當(dāng)主寫庫掛掉,再切換到備庫上;另一種是單元化服務(wù),各個單元的數(shù)據(jù)并不是全量數(shù)據(jù),一個單元掛掉,并不能切換到其他單元。目前還能看到雙中心的形式,兩個中心都是全量數(shù)據(jù),但雙跟多還是有很大差距的,這里其實主要受限于數(shù)據(jù)同步能力,數(shù)據(jù)能夠在3個及以上中心間進(jìn)行雙向同步,才是解決真正異地多活的核心技術(shù)所在。
提到數(shù)據(jù)同步,這里不得不提一下DTS(Data Transmission Service),最初阿里的DTS并沒有雙向同步的能力,后來有了云上版本后,也只限于兩個數(shù)據(jù)庫之間的雙向同步,做不到A-B-C這種形式,所以我們自研了數(shù)據(jù)同步組件,雖然不想重復(fù)造輪子,但也是沒辦法,后面會介紹一些實現(xiàn)細(xì)節(jié)。
再談?wù)劄槭裁匆龆嘀行娜轂?zāi),以我所在的CDN&視頻云團(tuán)隊為例,首先是海外業(yè)務(wù)的需要,為了能夠讓海外用戶就近訪問我們的服務(wù),我們需要提供一個海外中心。但大多數(shù)業(yè)務(wù)還都是以國內(nèi)為主的,所以國內(nèi)要建雙中心,防止核心庫掛掉整個管控就都掛掉了。同時海外的環(huán)境比較復(fù)雜,一旦海外中心掛掉了,還可以用國內(nèi)中心頂上。國內(nèi)的雙中心還有個非常大的好處是可以通過一些路由策略,分散單中心系統(tǒng)的壓力。這種三個中心且跨海外的場景,應(yīng)該是目前異地多活最難實現(xiàn)的了。
二、系統(tǒng)CAP
面對這種全球性跨地域的分布式系統(tǒng),我們不得不談到CAP理論,為了能夠多中心全量數(shù)據(jù)提供服務(wù),Partition tolerance(分區(qū)容錯性)是必須要解決的,但是根據(jù)CAP的理論,Consistency(一致性)和Availability(可用性)就只能滿足一個。對于線上應(yīng)用,可用性自不用說了,那面對這樣一個問題,最終一致性是最好的選擇。