www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]背景 在阿里巴巴內(nèi)部“大中臺(tái),小前臺(tái)”的組織和業(yè)務(wù)體制,使前線業(yè)務(wù)更加敏捷,賦能業(yè)務(wù)積極迎接未來(lái)挑戰(zhàn)和機(jī)遇,在阿里大中臺(tái)能力建設(shè)過(guò)程中,同質(zhì)化中臺(tái)服務(wù)將會(huì)合并,小前臺(tái)需要遷移原來(lái)依賴的中臺(tái)服務(wù)到新的中臺(tái)服務(wù)上。閑魚(yú)作為小前臺(tái),依賴阿里巴巴大

關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...

背景
在阿里巴巴內(nèi)部“大中臺(tái),小前臺(tái)”的組織和業(yè)務(wù)體制,使前線業(yè)務(wù)更加敏捷,賦能業(yè)務(wù)積極迎接未來(lái)挑戰(zhàn)和機(jī)遇,在阿里大中臺(tái)能力建設(shè)過(guò)程中,同質(zhì)化中臺(tái)服務(wù)將會(huì)合并,小前臺(tái)需要遷移原來(lái)依賴的中臺(tái)服務(wù)到新的中臺(tái)服務(wù)上。閑魚(yú)作為小前臺(tái),依賴阿里巴巴大中臺(tái)能力讓產(chǎn)品快速迭代,其中閑魚(yú)幣依賴的就是阿里巴巴積分中臺(tái)能力。在積分能力大中臺(tái)建設(shè)過(guò)程中,原有的積分服務(wù)都將合并到“半兩”積分平臺(tái),閑魚(yú)幣原來(lái)依賴的積分平臺(tái)是"KingTower"積分平臺(tái),目前"KingTower"即將下線,所以閑魚(yú)幣需要把數(shù)據(jù)和依賴的服務(wù)遷移到“半兩”積分平臺(tái)。
現(xiàn)狀
閑魚(yú)幣存量用戶過(guò)億,每日新增閑魚(yú)幣用戶萬(wàn)級(jí)別,閑魚(yú)幣操作次數(shù)過(guò)億。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法... 一般數(shù)據(jù)遷移是通過(guò)數(shù)據(jù)庫(kù)相關(guān)工具進(jìn)行操作,具體可以參考《21世紀(jì)了還愚公移山?數(shù)據(jù)庫(kù)這么遷移更快!》。但閑魚(yú)幣數(shù)據(jù)遷移卻不同,首先“KingTower”平臺(tái)的數(shù)據(jù)結(jié)構(gòu)和“半兩”平臺(tái)的數(shù)據(jù)結(jié)構(gòu)不同;其次出于對(duì)數(shù)據(jù)安全和穩(wěn)定性的考慮,兩個(gè)積分平臺(tái)只對(duì)外提供服務(wù)接口,不允許業(yè)務(wù)方直接操作平臺(tái)數(shù)據(jù)庫(kù)。這就意味著閑魚(yú)幣遷移無(wú)法利用數(shù)據(jù)庫(kù)工具,只能通過(guò)兩個(gè)平臺(tái)提供的服務(wù)接口完成遷移工作。本文將結(jié)合閑魚(yú)幣遷移過(guò)程,提供一種基于服務(wù)接口的數(shù)據(jù)遷移方案,在用戶無(wú)感知的情況下完成遷移目標(biāo)。
遷移方案
遷移方案主要分為四個(gè)步驟,如下圖所示,第一步是前期準(zhǔn)備,第二步是數(shù)據(jù)遷移,第三步是服務(wù)雙寫(xiě),第四步服務(wù)切換,下面將結(jié)合閑魚(yú)幣的遷移詳細(xì)介紹這四個(gè)步驟:
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...
前期準(zhǔn)備
平臺(tái)能力補(bǔ)齊
新舊平臺(tái)能力對(duì)齊是進(jìn)行遷移的大前提,如果新的平臺(tái)能力無(wú)法覆蓋老的平臺(tái)的能力,那么需要做的是1.推動(dòng)新平臺(tái)提供老平臺(tái)已有的能力。2.業(yè)務(wù)方利用新平臺(tái)提供的已有能力,從業(yè)務(wù)層實(shí)現(xiàn)老平臺(tái)特有的能力。
平臺(tái)接口補(bǔ)齊
新舊平臺(tái)接口在出參和入?yún)⑸蠒?huì)存在一定的差異,差異點(diǎn)尋找具體的操作如下:1.首先列出在使用的老服務(wù)接口入?yún)⒑统鰠ⅲ?.在新服務(wù)中找到對(duì)應(yīng)功能的接口,同樣列出入?yún)⒑统鰠⒌暮x以及數(shù)據(jù)類型;3.對(duì)齊相同含義的參數(shù),并梳理出新接口需要補(bǔ)齊的參數(shù)。梳理出接口的差異后需要由業(yè)務(wù)方補(bǔ)齊兩個(gè)接口的差異,也就是接下來(lái)的業(yè)務(wù)接口改造。
業(yè)務(wù)接口改造
業(yè)務(wù)接口改造目的是兼容新老服務(wù)接口,補(bǔ)齊新服務(wù)缺少的入?yún)㈨?xiàng),對(duì)齊新服務(wù)和老服務(wù)的出參,同時(shí)要注意的是新老服務(wù)對(duì)入?yún)⒌臋z測(cè),防止可接受參數(shù)取值范圍不同,業(yè)務(wù)接口改造完成后,對(duì)調(diào)用該業(yè)務(wù)接口的整個(gè)業(yè)務(wù)鏈路進(jìn)行改造和驗(yàn)證,保證對(duì)原有的業(yè)務(wù)和產(chǎn)品邏輯不造成影響。在閑魚(yú)幣遷移的場(chǎng)景中,平臺(tái)能力對(duì)齊上,新老積分服務(wù)都提供了積分的查詢、增加、扣除的能力,但是老積分平臺(tái)在這些基礎(chǔ)上封裝了一些通用的玩法,在閑魚(yú)幣中使用了其提供的簽到能力,所以需要在業(yè)務(wù)層利用新平臺(tái)的積分增加能力,實(shí)現(xiàn)閑魚(yú)幣簽到能力。在平臺(tái)接口對(duì)齊上,雖然老服務(wù)和新服務(wù)入?yún)⒌膮?shù)名不同,但老服務(wù)入?yún)⒖梢酝耆采w新服務(wù)入?yún)?,但是差異點(diǎn)在老服務(wù)不接受用戶賬戶扣除到負(fù)數(shù),但是新服務(wù)中支持。同時(shí)為了兼容上層的業(yè)務(wù),閑魚(yú)幣秦阿姨過(guò)程對(duì)兩個(gè)服務(wù)進(jìn)行了封裝,保證上層業(yè)務(wù)無(wú)感知。
數(shù)據(jù)遷移
在遷移過(guò)程中,分為兩種情況一種是用戶觸發(fā)式遷移稱為主動(dòng)遷移,一種是由系統(tǒng)發(fā)起的遷移稱為被動(dòng)遷移,兩種遷移方式對(duì)于用戶來(lái)講都是無(wú)感知遷移,具體數(shù)據(jù)遷移方案如下所示。
主動(dòng)遷移
主動(dòng)遷移是由用戶觸發(fā),當(dāng)用戶進(jìn)行積分增減操作的時(shí)候,將先觸發(fā)遷移流程,首先用戶讀取遷移標(biāo)志,如果完成遷移則無(wú)需再次遷移;然后獲取全局積分增減操作鎖,目的是防止在遷移過(guò)程中有其他增減操作造成數(shù)據(jù)不一致;接著讀取老積分,并把讀取的積分寫(xiě)入到新積分服務(wù),然后遷移完成的標(biāo)志位,至此一個(gè)用戶的賬戶遷移完成;最后釋放全局鎖。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...
被動(dòng)遷移
被動(dòng)遷移是由系統(tǒng)觸發(fā),系統(tǒng)首先計(jì)算出需要遷移的用戶列表,同時(shí)利用分布式任務(wù)系統(tǒng)把需要遷移的用戶分發(fā)到各個(gè)機(jī)器上,后續(xù)遷移流程與用戶主動(dòng)遷移一樣,讀取遷移標(biāo)識(shí)、獲取全局鎖、讀舊寫(xiě)新、寫(xiě)入遷移標(biāo)識(shí)、釋放鎖,完成整個(gè)遷移過(guò)程。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法... 主動(dòng)遷移和被動(dòng)遷移最終目的都是把用戶數(shù)據(jù)從老積分賬戶數(shù)據(jù)遷移到新積分上,兩種方式各有自己的應(yīng)用場(chǎng)景,主動(dòng)遷移主要適用于遷移活躍用戶和新增用戶,被動(dòng)遷移主要適用于遷移存量用戶。兩種遷移遇到的技術(shù)難點(diǎn)是一樣的。第一并發(fā)處理,在上面兩種方案只展示了遷移過(guò)程中要獲取全局分布式鎖,對(duì)于未遷移的用戶在進(jìn)行加減操作時(shí)候同樣也要獲取全局鎖,具體如下圖所示,這樣才能保證遷移過(guò)程中不產(chǎn)生臟數(shù)據(jù),本文中的全局鎖使用的是Redis實(shí)現(xiàn),這里不再贅述。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法... 第二操作事務(wù)性,本文的遷移方案中只有當(dāng)寫(xiě)入遷移完成標(biāo)記才算是遷移成功,在這一步前的其他每一步都有可能由于RPC調(diào)用產(chǎn)系統(tǒng)異常或超時(shí)錯(cuò)誤,所以為了保證操作事務(wù)性,對(duì)于任何一步出錯(cuò)本次遷移都算失敗,失敗的用戶將會(huì)進(jìn)行下面的遷移重試流程。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...
在閑魚(yú)幣遷移過(guò)程中采用了被動(dòng)遷移和主動(dòng)遷移兩種方式,被動(dòng)遷移用來(lái)解決遷移存量用戶,主動(dòng)遷移用來(lái)解決遷移新增用戶,在被動(dòng)遷移過(guò)程中通過(guò)控制計(jì)算離線人群來(lái)實(shí)現(xiàn)逐步遷移,在主動(dòng)遷移過(guò)程中通過(guò)白名單和控制用戶尾號(hào)逐步放量的方式控制遷移過(guò)程,逐步放量可以保證遷移出現(xiàn)的問(wèn)題早發(fā)現(xiàn)早解決。
服務(wù)雙寫(xiě)
雙寫(xiě)新舊平臺(tái)
當(dāng)用戶數(shù)據(jù)遷移完成后,需要即刻對(duì)新老服務(wù)進(jìn)行雙寫(xiě),雙寫(xiě)邏輯如下圖所示,首先驗(yàn)證用戶是否已是遷移的用戶,如果是遷移的用戶,那么先寫(xiě)老積分,寫(xiě)老積分成功后寫(xiě)新積分,完成雙寫(xiě)邏輯。在雙寫(xiě)過(guò)程中為了防止寫(xiě)老服務(wù)寫(xiě)入成功返回超時(shí)和寫(xiě)新積分失敗的情況,在老積分服務(wù)中定制了異步邏輯,即老積分系統(tǒng)中在用戶操作積分加減成功后會(huì)發(fā)出成功的消息,消息中會(huì)有冪等Key,業(yè)務(wù)方接收到消息后,根據(jù)冪等Key判斷新積分服務(wù)中是否已對(duì)該Key進(jìn)行過(guò)相關(guān)操作,如果沒(méi)有操作過(guò)那么將會(huì)在新積分服務(wù)中操作,實(shí)現(xiàn)數(shù)據(jù)的最終一致性。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...
對(duì)賬服務(wù)
對(duì)賬是遷移的重要一步,通過(guò)對(duì)賬可以驗(yàn)證出遷移數(shù)據(jù)在新老平臺(tái)上是否一致,對(duì)賬流程如下圖所示,通過(guò)定時(shí)任務(wù)輪詢執(zhí)行已經(jīng)完成遷移的用戶在新老平臺(tái)的數(shù)據(jù)一致性。需要注意的是由于讀取新老平臺(tái)有先后順序,所以產(chǎn)生瞬時(shí)的數(shù)據(jù)不一致,對(duì)于這種問(wèn)題可以采用對(duì)賬重試,只要保證最終一致即可。
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...
閑魚(yú)幣遷移過(guò)程中數(shù)據(jù)遷移和雙寫(xiě)是同步進(jìn)行的,遷移成功的標(biāo)志也是開(kāi)始雙寫(xiě)的標(biāo)志,按照正常的業(yè)務(wù)邏輯在對(duì)賬環(huán)節(jié)不會(huì)出現(xiàn)大面積對(duì)賬不一致情況,如果出現(xiàn)大面積對(duì)賬不一致并且對(duì)賬重試后無(wú)法解決,那么就是在數(shù)據(jù)遷移和雙寫(xiě)的過(guò)程出現(xiàn)了問(wèn)題,此時(shí)需要停止遷移排查問(wèn)題,同時(shí)整個(gè)遷移過(guò)程提供了可回滾能力能力,閑魚(yú)幣遷移中的遷移標(biāo)志和新積分平臺(tái)數(shù)據(jù)都是可以進(jìn)行重置的,重置后即可從頭開(kāi)始二次遷移,不會(huì)對(duì)用戶造成影響。
服務(wù)切換
完成以上三個(gè)步驟基本完成了數(shù)據(jù)的遷移工作,下面要做的就是停掉老服務(wù),切換到新的服務(wù)上去。具體方式如下圖所示:
關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法... 切換過(guò)程采用逐步放量的形式,灰度方式很多我們采用的是先白名單驗(yàn)證,然后用戶ID取模1000逐步放量的方式。值得注意的一點(diǎn)是讀灰度和灰度要分開(kāi)進(jìn)行,當(dāng)對(duì)賬沒(méi)有問(wèn)題的時(shí)候就可以開(kāi)啟讀灰度了,在讀灰度過(guò)程中仍舊保持雙寫(xiě),此時(shí)如果讀灰度發(fā)現(xiàn)問(wèn)題,仍舊可以回滾會(huì)老的服務(wù)。但是單寫(xiě)新服務(wù)開(kāi)始后就無(wú)法進(jìn)行回滾,所以在寫(xiě)灰度前需要充分白名單驗(yàn)證。
總結(jié)
本文介紹了閑魚(yú)幣從老積分平臺(tái)遷移到新積分平臺(tái)整個(gè)過(guò)程,總結(jié)了基于服務(wù)的數(shù)據(jù)遷移方案,同時(shí)在介紹了閑魚(yú)幣遷移時(shí)候遇到的問(wèn)題以及解決方案,整個(gè)遷移過(guò)程從方案制定到最終的遷移完成持續(xù)約一個(gè)月時(shí)間,最終在用戶沒(méi)有感知的情況下完成閑魚(yú)幣的遷移。
與數(shù)據(jù)庫(kù)遷移相比,從服務(wù)接口對(duì)數(shù)據(jù)遷移有如下優(yōu)勢(shì):
  • 無(wú)需關(guān)心底層數(shù)據(jù)存儲(chǔ),只需做好上層業(yè)務(wù)邏輯兼容即可。

  • 遷移過(guò)程可控,通過(guò)多維度的遷移監(jiān)控及早發(fā)現(xiàn)問(wèn)題。

但是也有如下的不足:
  • 遷移過(guò)程受到服務(wù)方QPS限制,遷移周期長(zhǎng)

  • 遷移過(guò)程都是RPC調(diào)用,需要處理多種異常情況。

無(wú)論是利用數(shù)據(jù)庫(kù)工具還是利用服務(wù)對(duì)數(shù)據(jù)進(jìn)行遷移,目標(biāo)都是一致的那就是數(shù)據(jù)無(wú)差異,用戶無(wú)感知,異??杀O(jiān)控,方案可回滾。

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒(méi)關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...

長(zhǎng)按訂閱更多精彩▼

關(guān)于億級(jí)賬戶數(shù)據(jù)遷移,你應(yīng)該試試這種方法...

如有收獲,點(diǎn)個(gè)在看,誠(chéng)摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉