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

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

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

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

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

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

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

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

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

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

長按訂閱更多精彩▼

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

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

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

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