国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移

這篇具有很好參考價值的文章主要介紹了使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

場景描述

很多企業(yè)會遇到數(shù)據(jù)庫升級、或數(shù)據(jù)庫遷移的情況,尤其是在自建數(shù)據(jù)庫服務向云數(shù)據(jù)庫服務、自建機房向云機房、舊數(shù)據(jù)庫向新數(shù)據(jù)庫遷移等場景。
然而,我們需要在整個移植過程中保證其穩(wěn)定性、避免數(shù)據(jù)遺失、服務宕機等情況,最常見的移植方法之一就是數(shù)據(jù)庫雙寫移植操作。

解決方案

如下圖所示,這個雙寫移植的過程為:

  1. 原始階段,程序只對一個舊數(shù)據(jù)庫進行讀寫。
  2. 在現(xiàn)有的讀寫舊數(shù)據(jù)庫的代碼程序基礎上,需要添加讀寫新數(shù)據(jù)庫的代碼。例如,在某個表中插入一條數(shù)據(jù)時,我們需要把這條數(shù)據(jù)同時插入到新舊兩個數(shù)據(jù)庫中。通常情況下,我們會并行執(zhí)行這兩個插入操作,以盡可能保持服務的原有調用處理時間。
  3. 當一個寫數(shù)據(jù)庫請求進來,我們將其寫入舊數(shù)據(jù)庫的同時,將一個很少的百分比流量寫入新的數(shù)據(jù)庫。
  4. 將寫入新數(shù)據(jù)庫的流量比緩慢提高,直到 100% 為止。在這個過程中如果出現(xiàn)問題,可以及時回滾,并在不影響生產環(huán)境服務的情況下進行修復。
  5. 寫移植完成后,開始逐步放量從新的數(shù)據(jù)庫中讀取數(shù)據(jù)返回給服務,如先允許 10% 的流量在新數(shù)據(jù)庫做讀操作。在這個過程中測量性能的同時對比結果,如果在讀操作中遇到問題,可以馬上回滾新數(shù)據(jù)庫的讀流量,并在不影響生產環(huán)境服務的情況下進行修復。
  6. 直到在新數(shù)據(jù)庫實現(xiàn) 100% 的讀寫操作一段時間沒有問題后,就可以停止與舊數(shù)據(jù)庫相關的代碼服務了。

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

在實際操作過程中,不止新舊數(shù)據(jù)庫的操作流量要逐漸開放,實際上新的數(shù)據(jù)庫的讀寫代碼也需要逐步的更新到生產環(huán)境服務中,以確保可迭代的穩(wěn)定平滑移植。

實踐方法與工具

整個過程中,除了自身系統(tǒng)架構的設計外,有兩個特別的工具在其中起到重要環(huán)節(jié):

  1. 負責可靈活、實時、穩(wěn)定放量、回滾的 Feature Flags 服務 (FeatBit)。
  2. 在整個過程中全方位(支持無侵入和針對性埋點模式)的監(jiān)測服務異常與及時報警的可觀測服務 (觀測云)。

使用 FeatBit 實現(xiàn)實時的數(shù)據(jù)庫移植請求流量控制

如下代碼所示,為某一個服務的數(shù)據(jù)庫讀取操作分流的示例偽代碼:

  • 第 6 行代碼,調用?_fbService.BoolVariation("read-sport-olddb")?方法獲得流量控制返回值,如果為?true,則將讀取舊數(shù)據(jù)庫的 Query 函數(shù)添加到并行任務執(zhí)行隊列中。
  • 第 9 行代碼,調用?_fbService.BoolVariation("read-sport-newdb")方法獲得流量控制返回值,如果為?true,則將讀取新數(shù)據(jù)庫的 Query 函數(shù)添加到并行任務執(zhí)行隊列中。
  • 第 19 行代碼,為使用 FeatBit Feature Flags SDK 同時運行兩個數(shù)據(jù)庫讀取操作,并將結果進行對比驗證,根據(jù)執(zhí)行情況返回正確值,并向觀測云發(fā)送相關異常數(shù)據(jù)。
public async Task<List<Sport>> GetSportsByCityAsync(int cityId, int pageIndex, int pageSize)
{
    var tasks = new List<Task<List<Sport>>>();

    // 當讀取 Sport 相關業(yè)務的舊數(shù)據(jù)庫開關返回 true 時,則添加讀取任務到執(zhí)行任務隊列
    if (_fbService.BoolVariation("read-sport-olddb"))
    {
        tasks.Add(GetSportsByCityQueryAsync(_oldDbContext, cityId, pageIndex, pageSize));
    }

    // 當讀取 Sport 相關業(yè)務的新數(shù)據(jù)庫開關返回 true 時,則添加讀取任務到執(zhí)行任務隊列
    if (_fbService.BoolVariation("read-sport-newdb"))
    {
        tasks.Add(GetSportsByCityQueryAsync(_newDbContext, cityId, pageIndex, pageSize));
    }

    // 同時執(zhí)行兩個讀操作(為了避免新增數(shù)據(jù)讀取增加請求時間),并將結果進行對比并返回
    // 如果結果不一致,則返回舊數(shù)據(jù)庫讀取結果,并進行記錄
    return await _fbService.RunAndCompareDbTasksAsync(
                    tasks,
                    timeoutDelayForNewDB: 3000, // 設定新數(shù)據(jù)庫的最長等待時間,避免不良體感
                    (timeoutInfo) => { }, // 當新數(shù)據(jù)庫調用超時,發(fā)信息至觀測云
                    (unMatchInfo) => { }, // 當返回結果不一致時,發(fā)信息至觀測云
                    (exception) => { } // 當出現(xiàn)異常時,發(fā)信息至觀測云
                );
}

在把類似于上述的代碼逐步的集成到我們的項目中之后,就可以通過 FeatBit 提供的 Feature Flags 控制中心來控制每一個對應的數(shù)據(jù)庫移植的雙寫雙讀放量工作了。例如我們先將 feature flag?read-sport-from-newdb?放量調整到 5%,若在一段時間未在觀測云中觀察到異常狀況,增大放量百分比至 10% (如下圖)。

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

使用觀測云觀測移植全過程,及時發(fā)現(xiàn)潛在問題

在整個的數(shù)據(jù)遷移過程中,自動化的、及時發(fā)現(xiàn)錯誤問題并回滾,是極為重要的。他可以最有效的幫我們避免諸多問題,如:

  • 新數(shù)據(jù)庫操作帶來巨大的系統(tǒng)資源消耗時,我們需要第一時間知道并通過 Feature Flags 系統(tǒng)立刻回滾。
  • 當某個寫操作或讀操出現(xiàn)時間操作超時數(shù)量超過預估閾值時,我們可以快速定位問題,回滾的同時進行快速的修復,提高移植的速度。
  • 當某個寫操作或讀操作出現(xiàn)信息錯誤時(如結果不一致、請求時間過長、程序異常等),我們可以根據(jù)觀測系統(tǒng)具體定位錯誤信息,從而加速 debug 的速度。
  • 等等

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

實現(xiàn)這些,我們只需要:

  1. 根據(jù)《觀測云文檔:快速入門》,選擇與自己業(yè)務相符的技術棧,進行小白式的在 15 分鐘內完成配置和安裝。
  2. 運行你已有的服務程序,開始你的數(shù)據(jù)庫系統(tǒng)移植。
  3. 打開觀測云控制臺的「應用性能檢測」頁面,定位到鏈路,你將看到所有服務的運行情況。

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

通過「鏈路」與「錯誤追蹤」快速定位移植錯誤

通過「鏈路」頁面,我們發(fā)現(xiàn)在移植過程中,出現(xiàn)了一些紅色項(即 Error),通過資源列可以輕松的看到我們在對新數(shù)據(jù)庫的讀取操作中出現(xiàn)了錯誤異常,如下所示:

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

點擊對應的 Error,我們可以快速查看其對應的調用鏈路火焰圖。如下圖所示,根據(jù)火焰圖的解釋:

  1. 如下圖?位置的 Span 所提示,在這個地方出現(xiàn)了數(shù)據(jù)庫移植的 Timeout 錯誤,即新數(shù)據(jù)庫的讀取時間超出了我們可以接受的請求響應時間閾值。
  2. 如下圖?位置中,指出錯誤發(fā)生在 Feature flag?read-sport-newdb?為?true?的情況下面。也就是說我們可以快速定位可能需要回滾或關掉的 Feature Flags,從而避免移植風險。
  3. 而根據(jù)?位置 Span 可以快速定位出現(xiàn)超時現(xiàn)象的服務端 API 服務,并且根據(jù)捕捉到的 API 的參數(shù)與 Header,可以幫助我們后面去更好的調試解決問題。

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

通過 Feature Flags 實時將讀操作回滾至無超時狀態(tài)

根據(jù)上面的「鏈路」查找方式,我們快速定位到了出現(xiàn)異常的數(shù)據(jù)庫讀操作。那么,我們只需要回到 FeatBit 的后臺界面,找到上面發(fā)現(xiàn)的開關?read-sport-newdb,并將其放量為 true 的百分比向后回滾即可。如下圖所示,將 true 的百分比從 10% 回滾到之前未出現(xiàn)讀數(shù)據(jù)異常的 5%的流量分配。

使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移,數(shù)據(jù)庫,oracle

回滾后,下面代碼所示的?_fbService.BoolVariation("read-sport-newdb")?返回值,只會將有 5% 的比率為?true。

// 當讀取Sport相關業(yè)務的新數(shù)據(jù)庫開關返回 true 時,則添加讀取任務到執(zhí)行任務隊列
if (_fbService.BoolVariation("read-sport-newdb"))
{
    tasks.Add(GetSportsByCityQueryAsync(_newDbContext, cityId, pageIndex, pageSize));
}

總結與后續(xù)

這篇文章介紹了使用觀測云與 FeatBit 通過雙寫雙讀的操作方式實現(xiàn)了降低數(shù)據(jù)庫移植風險的基礎方法。
在實際運行中,我們可能有大量的業(yè)務需要處理,人為的介入和操作會因為各種原因造成反應不及時的問題。在后續(xù)的文章中,我們將介紹更多的內容,如:文章來源地址http://www.zghlxwxcb.cn/news/detail-664099.html

  • 使用觀測云的指標服務與 FeatBit 的?Trigger 服務,實現(xiàn)移植時自動化實時回滾避災與報警方案。
  • 使用觀測云的指標服務與 FeatBit 的?Scheduler 服務?,實現(xiàn)自動化的放量與回滾方案。

到了這里,關于使用 Feature Flags 與可觀測工具實現(xiàn)數(shù)據(jù)庫灰度遷移的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【go-zero】(1):嘗試使用go-zero的工具goctl進行model,controller代碼生成,配置數(shù)據(jù)庫,實現(xiàn)FindAll方法,查詢數(shù)據(jù)庫全部數(shù)據(jù)

    【go-zero】(1):嘗試使用go-zero的工具goctl進行model,controller代碼生成,配置數(shù)據(jù)庫,實現(xiàn)FindAll方法,查詢數(shù)據(jù)庫全部數(shù)據(jù)

    本文的原文連接是: https://blog.csdn.net/freewebsys/article/details/128707849 未經博主允許不得轉載。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址是:https://juejin.cn/user/585379920479288 博主知乎地址是:https://www.zhihu.com/people/freewebsystem 項目地址: https://go-zero.dev/cn/ go-zero 是一個集

    2023年04月24日
    瀏覽(25)
  • 【數(shù)據(jù)庫工具】 圖文版介紹Xampp工具的使用實戰(zhàn)

    【數(shù)據(jù)庫工具】 圖文版介紹Xampp工具的使用實戰(zhàn)

    有時候懶得安裝數(shù)據(jù)庫,就可以使用一些集成工具,比如XAMPP就是一個流行的軟件包,便于搭建本地web環(huán)境,使用里面的mysql也是相當方便,今天我們就一起來看一下。 ??個人主頁:我是沐風曉月 ??個人簡介:大家好,我是沐風曉月,阿里云社區(qū)專家博主???? ?? 座右銘:

    2024年02月11日
    瀏覽(10)
  • dbeaver 數(shù)據(jù)庫連接工具使用教程

    dbeaver 數(shù)據(jù)庫連接工具使用教程

    dbeaver是一款很強大的數(shù)據(jù)庫連接工具,本人之前使用的是navicat,挺好用的,只不過每次激活都要整半天,然后看到了dbeaver這款工具,本著嘗試的心態(tài),體驗了下,真香。 下面來配置dbeaver 1.下載安裝 在官網(https://dbeaver.io/download/)進行下載。 Releases · dbeaver/dbeaver · GitHub

    2024年03月12日
    瀏覽(27)
  • 【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫

    【SpringBoot】自定義工具類實現(xiàn)Excel數(shù)據(jù)新建表存入MySQL數(shù)據(jù)庫

    ??浩澤學編程 :個人主頁 ??? 推薦專欄 :《深入淺出SpringBoot》《java對AI的調用開發(fā)》 ??????????????《RabbitMQ》《Spring》《SpringMVC》《項目實戰(zhàn)》 ??學無止境,不驕不躁,知行合一 本文主要介紹使用EasyExcel讀取Excel內數(shù)據(jù)并轉換為csv格式數(shù)據(jù)(String字符串),然后

    2024年03月15日
    瀏覽(21)
  • 【手寫數(shù)據(jù)庫toadb】02 開發(fā)數(shù)據(jù)庫內核準備階段-git工具使用

    ? 專欄內容 : 手寫數(shù)據(jù)庫toadb 本專欄主要介紹如何從零開發(fā),開發(fā)的步驟,以及開發(fā)過程中的涉及的原理,遇到的問題等,讓大家能跟上并且可以一起開發(fā),讓每個需要的人成為參與者。 本專欄會定期更新,對應的代碼也會定期更新,每個階段的代碼會打上tag,方便階段學

    2024年01月24日
    瀏覽(34)
  • 【MySQL】使用DBeaver數(shù)據(jù)庫管理工具進行MySQL數(shù)據(jù)庫連接

    【MySQL】使用DBeaver數(shù)據(jù)庫管理工具進行MySQL數(shù)據(jù)庫連接

    一、數(shù)據(jù)庫連接信息填寫 1、服務器地址:填寫服務器部署的地址,以及端口號 2、數(shù)據(jù)庫:sys 3、用戶名:root 4、密碼:服務器上面設置的具體密碼 以上信息填寫錯誤的報錯提示 :Access denied for user ‘XXX’@’%’ to database ‘10.42.67.22’ 二、數(shù)據(jù)庫說明 1、數(shù)據(jù)庫連接時選擇的

    2024年02月09日
    瀏覽(109)
  • 使用SQL sever SSMS工具向數(shù)據(jù)庫特定表中導入數(shù)據(jù)

    使用SQL sever SSMS工具向數(shù)據(jù)庫特定表中導入數(shù)據(jù)

    1、打開SQL sever,點擊連接 ?2、把要導入的xls文件存放在一個文件夾中 ?3、找到要導入的表對應的數(shù)據(jù)庫 ?4、選中數(shù)據(jù)庫,右鍵選擇任務——導入數(shù)據(jù) 5、彈出導入和導出向導,數(shù)據(jù)源選擇Microsoft Excel,點擊瀏覽選擇文件途徑,之后點擊下一步 ?6、目標一定要選擇Microsoft OLE

    2024年02月07日
    瀏覽(18)
  • 開源模型應用落地-工具使用篇-向量數(shù)據(jù)庫(三)

    開源模型應用落地-工具使用篇-向量數(shù)據(jù)庫(三)

    一、前言 ? ? 通過學習\\\"開源模型應用落地\\\"系列文章,我們成功地建立了一個完整可實施的AI交付流程。現(xiàn)在,我們要引入向量數(shù)據(jù)庫,作為我們AI服務的二級緩存。本文將詳細介紹如何使用Milvus Lite來為我們的AI服務部署一個前置緩存。 二、術語 2.1、向量數(shù)據(jù)庫 ? ? 向量數(shù)

    2024年02月19日
    瀏覽(89)
  • postgresql|數(shù)據(jù)庫|MySQL數(shù)據(jù)庫向postgresql數(shù)據(jù)庫遷移的工具pgloader的部署和初步使用

    postgresql|數(shù)據(jù)庫|MySQL數(shù)據(jù)庫向postgresql數(shù)據(jù)庫遷移的工具pgloader的部署和初步使用

    MySQL數(shù)據(jù)庫和postgresql數(shù)據(jù)庫之間的差異并不多,這里的差異指的是對SQL語言的支持兩者并不大,但底層的東西差異是非常多的,例如,MySQL的innodb引擎概念,數(shù)據(jù)庫用戶管理,這些和postgresql相比是完全不同的(MySQL用戶就是用戶,沒有角色,postgresql有用戶,有角色,但差異不

    2024年02月14日
    瀏覽(36)
  • 公網環(huán)境使用navicat圖形化工具遠程連接本地MariaDB數(shù)據(jù)庫

    公網環(huán)境使用navicat圖形化工具遠程連接本地MariaDB數(shù)據(jù)庫

    本篇教程將使用cpolar內網穿透本地MariaDB數(shù)據(jù)庫,并實現(xiàn)在外公網環(huán)境下使用navicat圖形化工具遠程連接本地內網的MariaDB數(shù)據(jù)庫。 1. 配置MariaDB數(shù)據(jù)庫 1.1 安裝MariaDB數(shù)據(jù)庫 進入MariaDB數(shù)據(jù)庫官網https://mariadb.com/downloads/community/,然后下載相應的windows版本 下載好后點擊安裝,出現(xiàn)設置

    2024年02月04日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包