核心系統(tǒng)存儲(chǔ)雙活必會(huì)遭遇哪三大難點(diǎn)?
核心系統(tǒng)是企業(yè)最為重要的系統(tǒng),尤其是金融行業(yè),它是金融企業(yè)的生命線, 一旦信息科技風(fēng)險(xiǎn)越過了這條底線,企業(yè)的整個(gè)金融信息系統(tǒng)將全面癱瘓,后果不堪設(shè)想。所以為了牢牢守護(hù)住這條命脈,企業(yè)一直在不斷的尋求更好的技術(shù)和更優(yōu)的解決方案,來(lái)對(duì)核心系統(tǒng)的優(yōu)化之路進(jìn)行探索,這其中之一便是核心系統(tǒng)存儲(chǔ)雙活優(yōu)化。
傳統(tǒng)的核心系統(tǒng)存儲(chǔ)都是采用集中式存儲(chǔ),通過搭建兩地三中心的存儲(chǔ)架構(gòu)來(lái)防范核心系統(tǒng)數(shù)據(jù)的物理性錯(cuò)誤,并通過數(shù)據(jù)備份來(lái)防范數(shù)據(jù)的邏輯錯(cuò)誤。然而目前的兩地三中心存儲(chǔ)架構(gòu)為主備架構(gòu),一來(lái)如果主存儲(chǔ)發(fā)生故障,必然需要進(jìn)行存儲(chǔ)主備切換,由于核心系統(tǒng)數(shù)據(jù)量巨大,切換時(shí)間漫長(zhǎng),即使成 功切換之后 RPO=0,RTO 也不少于 10 分鐘;二來(lái)雖然備存儲(chǔ)實(shí)時(shí)存在一份和主存儲(chǔ)一樣的數(shù)據(jù)副本,但是這份副本長(zhǎng)時(shí)間不對(duì)外提供讀寫服務(wù),資源使用率低倒也無(wú)所謂,這份副本能否在切換之后正常使用,是需要打一個(gè)大大的問號(hào)。所以企業(yè)每年都會(huì)定期進(jìn)行災(zāi)難演練,也可能是出于對(duì)這份備副本的“不放心”。
基于上述兩點(diǎn),核心系統(tǒng)是有需要進(jìn)行分布式雙活架構(gòu)的轉(zhuǎn)型,來(lái)盡量降低故障帶來(lái)的影響,滿足 RPO=0,RTO小于 1 分鐘的要求,而轉(zhuǎn)型的最關(guān)鍵一步便是存儲(chǔ)雙活。
雖然存儲(chǔ)雙活技術(shù)方案層出不窮,幾乎所有主流的存儲(chǔ)廠商都有一套甚至多套存儲(chǔ)雙活技術(shù)解決方案,但基于核心系統(tǒng)的重要地位和獨(dú)特的特征,存儲(chǔ)雙活技術(shù)的真正落地實(shí)現(xiàn)還是存在著諸多難點(diǎn),下面就是其中的三個(gè)核心難點(diǎn)。
1.首先最“突出”的難點(diǎn)就是性能影響問題。
傳統(tǒng)的集中式主備存儲(chǔ)架構(gòu),在主存儲(chǔ)寫入數(shù)據(jù)時(shí),需要將數(shù)據(jù)同步一份至備存儲(chǔ),完成后算是一次完整的寫周期;而雙活存儲(chǔ)架構(gòu)則不一樣,兩個(gè)存儲(chǔ)雖然都同時(shí)受理寫請(qǐng)求,也會(huì)將寫入的數(shù)據(jù)同步一份至另一端,但關(guān)鍵點(diǎn)在于兩個(gè)存儲(chǔ)并不同時(shí)對(duì)同一個(gè)存儲(chǔ)塊寫操作,也就是說(shuō)寫同一個(gè)數(shù)據(jù)塊時(shí),搶占成功的存儲(chǔ)會(huì)對(duì)該存儲(chǔ)塊加一道“鎖”,防止被另一端寫,另一端想要讀該數(shù)據(jù)塊,也得乖乖等數(shù)據(jù)同步完成之后才能進(jìn)行,所以這樣看來(lái),雙活存儲(chǔ)雖然物理上實(shí)現(xiàn)了雙活讀寫,但實(shí)際的讀寫性能上,由于存在著大量的“等待鎖釋放”和“數(shù)據(jù)同步完成”兩個(gè)動(dòng)作,造成了性能的影響。
這個(gè)影響面跟什么有關(guān)系呢?
***個(gè)動(dòng)作取決于寫操作的頻繁度,也就是寫IOPS,寫 IOPS 越高,鎖競(jìng)爭(zhēng)現(xiàn)象越嚴(yán)重;第二個(gè)動(dòng)作取決于兩個(gè)存儲(chǔ)間的距離和存儲(chǔ)緩存的大小,距離越遠(yuǎn),寫同步往返延時(shí)越高,存儲(chǔ)緩存越小,寫緩存延遲現(xiàn)象的比例越高。
然而核心系統(tǒng)正是由于業(yè)務(wù)集中度和并發(fā)度高,對(duì)讀寫響應(yīng)時(shí)間也特別嚴(yán)格,特別是對(duì)流水表的寫入操作,如果兩個(gè)存儲(chǔ)都同時(shí)承擔(dān)著高并發(fā)地對(duì)這些集中式的數(shù)據(jù)表讀寫的任務(wù),那造成的鎖競(jìng)爭(zhēng)現(xiàn)象將更加嚴(yán)重,再加上本身兩個(gè)存儲(chǔ)間距離原因?qū)е碌难訒r(shí),性能影響將成倍放大,輕者業(yè)務(wù)處理緩慢,重則核心系統(tǒng)直接癱瘓,核心系統(tǒng)如果難以破解該難點(diǎn),也將無(wú)法使用存儲(chǔ)雙活技術(shù)。
2.其次***“風(fēng)險(xiǎn)”的難點(diǎn)就是腦裂與鏈路隱患問題。
一方面,在傳統(tǒng)主備存儲(chǔ)架構(gòu)中,由于兩個(gè)存儲(chǔ)間的關(guān)聯(lián)是松耦合的關(guān)系,存儲(chǔ)與存儲(chǔ)間心跳探測(cè)也只是為了保證數(shù)據(jù)同步,心跳鏈路中斷也只是數(shù)據(jù)復(fù)制中斷而已,并不會(huì)造成實(shí)質(zhì)的存儲(chǔ)切換等動(dòng)作,最多會(huì)因?yàn)橹袛啵斐芍鞔鎯?chǔ)的 IO 短暫HANG住,對(duì)業(yè)務(wù)也幾乎無(wú)感知。然而倘若升級(jí)為存儲(chǔ)雙活架構(gòu),由于整個(gè)架構(gòu)呈現(xiàn)的是一種對(duì)稱式的架構(gòu),兩個(gè)存儲(chǔ)都是作為主存儲(chǔ),必然需要一個(gè)第三方的仲裁設(shè)備,在存儲(chǔ)間鏈路中斷時(shí),來(lái)投票選舉出存活的主存儲(chǔ),不至于因兩個(gè)存儲(chǔ)互相爭(zhēng)搶主動(dòng)權(quán),而造成兩敗俱傷的慘烈局面。
然而問題就在于此,當(dāng)發(fā)生腦裂現(xiàn)象時(shí),仲裁之后存儲(chǔ)恢復(fù)時(shí)間需要多久?
這個(gè)時(shí)間取決于投票表決的時(shí)間和競(jìng)選失敗的存儲(chǔ)前一刻的 IO 吞吐量,因?yàn)楦?jìng)選成功的存儲(chǔ)需要將這部分 IO 回退來(lái)保證業(yè)務(wù)數(shù)據(jù)的一致性,而核心系統(tǒng)存儲(chǔ)的 IO 吞吐量無(wú)疑是非常大的,尤其是在晚間批量時(shí),這也將意味著當(dāng)發(fā)生鏈路中斷,為了防范腦裂,需要將整個(gè)存儲(chǔ) IO HANG 住,并且這個(gè) HANG 住的時(shí)間也因?yàn)槭呛诵南到y(tǒng)變得更長(zhǎng)。
而矛盾點(diǎn)卻在于,核心系統(tǒng)是最重要的系統(tǒng),對(duì)業(yè)務(wù)連續(xù)性的要求比任何業(yè)務(wù)系統(tǒng)都要高上一大截,鏈路中斷造成的 RTO 太長(zhǎng)將無(wú)法接受,更令人恐怖的是,如果此時(shí)正處晚間核心系統(tǒng)批量,那第二天白天還能否開業(yè)就真的是一個(gè)問號(hào)了,所以換句話說(shuō),建設(shè)核心系統(tǒng)存儲(chǔ)雙活需要保證高可靠的鏈路,無(wú)論這個(gè)鏈路是本地還是跨中心的,只有這個(gè)最重要的前提條件具備了,才能開始著手存儲(chǔ)雙活。
另一方面,如果雙活存儲(chǔ)間的鏈路是跨中心的,還需要考慮鏈路的穩(wěn)定性問題。由于這個(gè)鏈路通常是租用運(yùn)營(yíng)商的裸光纖,光衰問題和抖動(dòng)問題也是目前無(wú)法解決的難點(diǎn),一旦發(fā)生于核心系統(tǒng),性能受影響不說(shuō),如果因此觸發(fā)腦裂仲裁,造成 IO HANG 住,又是一場(chǎng)全局性的災(zāi)難,所以核心系統(tǒng)上跨中心的存儲(chǔ)雙活更是難上加難。
3.******“考驗(yàn)”的難點(diǎn)就是存儲(chǔ)架構(gòu)轉(zhuǎn)型過程問題。
如果前面兩道鬼門關(guān)要么因自身企業(yè)核心系統(tǒng) IO 壓力不大,業(yè)務(wù)連續(xù)性要求不高而“ 不太在乎”,可以靠著軟硬件技術(shù)而“化險(xiǎn)為夷”,那在將傳統(tǒng)存儲(chǔ)高可用架構(gòu)轉(zhuǎn)型為雙活存儲(chǔ)架構(gòu)時(shí),依舊存在些許技術(shù)難點(diǎn)的考驗(yàn)。
表現(xiàn)為:在存儲(chǔ)雙活技術(shù)選型時(shí),該技術(shù)是否為真正的存儲(chǔ)雙活?而不是備存儲(chǔ)將 IO 轉(zhuǎn)發(fā)至主存儲(chǔ)的模式,該技術(shù)的成熟度和穩(wěn)定性如何?是否能夠保護(hù)原有存儲(chǔ)投資?能否支持兩地三中心擴(kuò)展?等等;在存儲(chǔ)雙活實(shí)施過程中,巨量的核心系統(tǒng)數(shù)據(jù)如何快速同步到另一份存儲(chǔ)副本?完成同步之后的兩個(gè)存儲(chǔ)副本以怎樣的方式掛載給多臺(tái)核心系統(tǒng)主機(jī)?是兩個(gè)副本再虛擬成一個(gè)卷共享給主機(jī)還是分別掛給不同的主機(jī)?實(shí)施時(shí),是否需要停止核心系統(tǒng),停機(jī)窗口如何安排等等;在存儲(chǔ)雙活運(yùn)維時(shí),如何實(shí)時(shí)監(jiān)控存儲(chǔ)雙活的性能狀況,遇到緊急存儲(chǔ)故障或者鏈路波動(dòng)時(shí),應(yīng)急措施是怎樣的,是否需要人工干預(yù),需要人工干預(yù)時(shí),采取哪些應(yīng)急解決辦法等等。
以上問題一個(gè)個(gè)接踵而至,都是在轉(zhuǎn)型存儲(chǔ)雙活架構(gòu)時(shí),需要事先進(jìn)行周全縝密的考慮, 只有通過了這層“考驗(yàn)”,方能大膽放心的著手核心系統(tǒng)存儲(chǔ)雙活優(yōu)化。