成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

真實線上DB存儲架構升級實戰!

開發 架構
本文介紹了一個線上交易系統從單庫單表架構升級為多庫多表過程中,如何實現不停服平滑遷移的方案,同時在整個遷移過程中實現了可觀測、可回滾。

前言

交易系統1.0的存儲架構采用了單庫單表,隨著業務快速發展,訂單量從日單量十萬級別快速增長到日單量百萬級別,預計在未來兩三個月就存儲就會出現瓶頸,DB存儲架構升級迫在眉睫。

交易系統如何做到平滑遷移?

由于面對業務場景是交易系統,即使是業務低峰期,業務也無法接受臨時停服,基于此背景下,設計了如下一套不停服下的數據平滑遷移工具。

平滑遷移流程設計

由于面對的業務場景是交易系統,即使是業務低峰期,依舊有交易在不斷產生,所以對于線上DB停寫從業務角度是不能接受的,同時如何實現新舊數據源的靈活切換、切換前的充分驗證及觀測,以及切換后如果出現問題如何快速回滾,基于這些問題設計了一套雙寫雙讀流程。

切換前充分驗證和可觀測性: 在整個切換過程中的關鍵環節都增加監控數據埋點上報,從而實現整個操作過程的可觀測,也保證了在每一個環境切換前的充分驗證。

動態配置下發: 將切換過程中需要調整的參數全部寫入動態配置中心(比如Nacos),并為每個動態下發參數設計灰度放量的過程,比如基于用戶尾號放量、基于租戶維度放量等,保證在切換過程中的影響范圍做到可控。

具體操作流程如下:

a). 對業務代碼進行改造上線,使得具備雙寫讀舊數據源的能力,通過Grafana監控讀寫曲線及異常監控等指標。

b). 通過離線任務或者DBA提供的數據同步組件,將舊數據源的數據開始全量同步。

c). 待全量數據同步完成后,通過動態配置中心開始逐步放量,將雙寫讀舊數據源切換到雙寫讀新數據源,同時通過Grafana監控讀寫曲線及異常監控等指標.

d). 灰度一段時間后,若未發現異常時,在通過動態配置中心逐步灰度切換到單寫讀新數據源,最后下線舊數據源。在第3、4步驟切換過程中一旦發現問題立刻對動態配置進行回滾。

圖片圖片

切流組件實現

平滑切流組件的執行流程圖如下圖所示:

圖片圖片

對應的核心執行代碼如下:

public T call() {
    try {
        // 1. 灰度開關關閉,走老邏輯
        if (Objects.isNull(shardConfig)) {
            return oldCall.call();
        }
        
        Callable<T> mainCall = oldCall;
        Callable<T> subCall = newCall;
        // 2. 業務是否使用新數據源數據返回的結果
        if (shardConfig.isUseNewResult()) {
            mainCall = newCall;
            subCall = oldCall;
        }
        
        // 未命中灰度,則直接返回主邏輯結果
        if (!isGray()) {
            return result;
        }

        // 是否開啟異步數據對比旁路邏輯
        if (shardConfig.isAsync()) {
            Callable<T> finalSubCall = subCall;
            Thread thread = new Thread(() -> {
                process(finalSubCall, result);
            });
            EXECUTOR_SERVICE.submit(thread);
        } else {
            // 同步鏈路數據對比
            process(subCall, result);
        }

        return result;
    } catch (Exception e) {
        throw new RuntimeException("call error");
    }  
}

/**
 * 對新邏輯返回的結果和舊邏輯返回的數據進行對比
 * @param subCall 子邏輯結果
 * @param result 主邏輯結果
 */
private void process(Callable<T> subCall, T result){
    // TODO 對新邏輯返回的結果和舊邏輯返回的數據進行對比
    try {
        T subReuslt = subCall.call();
        boolean isSame = shardComparator.compare(result, subReuslt);
        if (!isSame) {
            // TODO 上報對比異常監控
            PerfHelper.report("methodName", methodName);
        }
    } catch (Exception e) {
        LOGGER.error("compare exception");
    }
}

private boolean isGray() {
    // TODO 業務灰度規則
    return true;
}

交易系統平滑遷移過程中的數據一致性如何保證?

圖片圖片

用戶下單后需要冗余三個視角維度的數據,對于C端用戶視角的數據一致性,采用雙寫+binlog補償+定時任務兜底;對于B端商家視角的數據一致性,使用雙寫+binlog補償+定時任務兜底+數據回源四種手段保證數據一致性。最后通過數據流對賬+可視化監控來實時觀測數據不一致的情況,并對異常數據進行手動修復。

遇到的一些坑

下單鏈路代碼不合理

從單庫單表切換到分庫分表后,通過監控發現讀新數據源數據對比錯誤量放大,原因是原來的下單鏈路存在:更新完DB后立馬查詢,由于主從數據同步還未完成導致無法查詢到最新數據。

解決思路: 調整業務邏輯

數據對比采用線程池進行異步對比導致監控異常

起初使用線程池進行異步對比,是為了盡量不影響主鏈路耗時,但由于線程池使用姿勢不太合理,導致實際發生比對時新舊數據源已經不一致,其根本原因是由于異步延遲執行導致。

解決思路: 1. 數據對比改為同步執行,主鏈路耗時無明顯劣化,業務可接受;2. 動態調整線程池參數,使得異步任務執行更快處理(該方法嘗試后,發現錯誤量有所下降,但未完全消除。

后續

本文介紹了一個線上交易系統從單庫單表架構升級為多庫多表過程中,如何實現不停服平滑遷移的方案,同時在整個遷移過程中實現了可觀測、可回滾。

隨著訂單量持續增長,后續B端商家側的數據逐漸出現了數據傾斜、大賬單等問題,后續有機會再介紹這些問題的解決思路和治理方案。

責任編輯:武曉燕 來源: 程序反思錄
相關推薦

2024-06-21 09:37:57

2012-11-09 10:48:49

VDIvSphere

2022-06-13 14:58:19

系統案例

2018-02-23 14:24:15

集群

2017-08-18 22:40:33

線上線程備份

2023-12-11 06:27:39

MySQL線上業務優化后臺上傳文件

2021-07-04 22:29:12

MySQL死鎖云日志

2018-05-09 10:59:55

軟件定義存儲

2010-06-18 15:43:21

Exchange 20

2025-03-10 00:45:00

2014-07-26 16:37:20

WOT2014

2018-08-21 09:22:46

58速運架構DB

2023-02-18 18:26:11

隨著信息大爆炸,企業

2009-02-12 10:06:14

XIV集群存儲IBM DS 8000SVC

2023-07-26 15:46:52

Docker管理容器

2010-11-03 10:35:45

DB2存儲過程

2023-12-08 13:23:00

大數據MySQL存儲

2017-08-19 23:21:14

線上CPU定位

2018-02-10 09:59:51

Java網絡IO模型

2018-06-22 09:00:29

軟件定義存儲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 婷婷五月色综合香五月 | 天天操天天插天天干 | 最新免费视频 | 欧美日韩国产一区二区 | 国产日韩精品久久 | 久久成人免费观看 | 日韩成人av在线 | 91在线一区二区 | 91 久久| www..com18午夜观看 | 国产视频欧美 | 精品一区在线 | 午夜精品一区二区三区在线视频 | 91精品国产91久久综合桃花 | www.色婷婷 | 国产在线精品一区二区 | 国产成人精品a视频一区www | 国产一区二区三区高清 | 欧美5区| 色网在线观看 | 国产精品久久久久久婷婷天堂 | 欧美性成人 | 久久久久国产精品 | 中文字幕亚洲视频 | 亚洲在线日韩 | 国产精品久久久久久久久污网站 | 精品国产乱码久久久久久闺蜜 | 亚洲精品久久嫩草网站秘色 | 偷拍第一页 | 日韩精品专区在线影院重磅 | 日本久久久久久 | 久久免费观看一级毛片 | 天天看天天干 | 久久久久久久一区 | 一区二区三区在线播放 | 超黄视频网站 | 99精品欧美一区二区三区综合在线 | 日韩在线资源 | 天天操夜夜操 | 亚洲视频一区在线 | 9191成人精品久久 |