TiDB Serverless Branching:通過數據庫分支簡化應用開發流程

2023 年 7 月 10 日,TiDB Serverless 正式商用。這是一個完全託管的數據庫服務平臺(DBaaS),提供靈活的集羣配置和基於用量的付費模式。緊隨其後,TiDB Serverless Branching 的測試版也發佈了。

TiDB Serverless Branching 功能使用戶能夠爲其 TiDB Serverless 集羣創建分支。這些分支可以實現並行開發,促進新功能快速迭代,排查故障,開發者無需中斷生產數據庫的運行。該功能不僅簡化了開發和部署過程,還保持了生產環境中數據庫的穩定性和可靠性。

分支是什麼?

對於集羣而言,分支是一個獨立的實例,其中包含一份原始集羣的數據快照。它建立了一個隔離的環境,以便在不影響原始集羣的情況下進行各種操作。

當爲集羣創建一個分支時,該分支中的數據與原始集羣開始分叉,這意味着在原始集羣或分支中進行的後續更改將不會被同步。

TiDB Serverless 採用了寫時複製 (copy-on-write )技術,以實現快速、平穩地創建分支。這種方法允許原始集羣與其分支之間共享數據。這個操作一般在幾分鐘內就能完成,對用戶來說是無感知的,對原始集羣的性能也不會有影響。

平衡軟件開發速度和質量

在軟件開發中,快速推出新功能和全面測試之間的微妙平衡是一個挑戰。找到正確的平衡可以實現敏捷開發、更快的迭代,並及時收到寶貴的客戶反饋,同時不會影響軟件的質量和可靠性。TiDB Serverless Branching 提供了一種方式來找到這個最佳平衡。

爲開發人員提供獨立環境

在日常開發和測試活動中使用數據庫時,開發人員經常面臨配額限制、高成本、資源限制和數據質量等挑戰。所以通常在團隊內共享數據庫更實際。但共享數據庫往往會導致環境的衝突,開發人員不得不花費額外的精力在應用中添加一些隔離的邏輯。

TiDB Serverless Branching 通過爲每個開發人員提供獨立的開發和測試環境來解決這些問題。通過消除資源共享和任務干擾,提高生產效率並促進高效的團隊協作。

 

動圖封面
 

 

通過類似生產的分支進行高效測試

爲了 消除資源共享和任務 間干擾帶來的煩惱 ,開發人員通常會在進行開發工作時使用單獨的數據庫環境,比如在服務器上設置自己的數據庫或在 Docker 上啓動數據庫容器。 然而,這些環境與生產環境存在顯著差異,很難模擬出實際的性能和延遲狀態。 對於功能測試,則總是需要大量的數據準備工作,可能卻仍然無法與實際的生產環境相匹配。 爲了確保數據質量,開發人員可以選擇生成生產數據庫的快照,並在測試環境中還原它,或者費力地構建模擬數據。 然而,這兩種方法都很繁瑣,會顯著降低開發效率。

通過 TiDB Serverless Branching,開發人員將能夠在幾分鐘內快速創建與生產環境相同的分支。這些分支有助於使用最新的生產數據進行測試,並快速檢測問題。此外,這些分支完全與生產集羣隔離,可以進行更安全的功能測試和故障排除。

 

動圖封面
 

 

與持續集成和持續部署(CICD)流程無縫集成

自動化場景需要先進的環境管理和質量控制。TiDB Serverless Branching 可以輕鬆集成到自動化的 CICD 工作流中,通過分支整合, 代碼質量的把控和測試流程都變得更加流暢 。這確保了產品的質量,同時遵循了高效的軟件開發實踐。

 

動圖封面
 

 

與 GitHub 集成的分支管理

結合 TiDB Serverless Branching 功能,我們推出了 TiDB Cloud 分支管理 GitHub App。如果開發人員使用 GitHub flow ( https://docs.github.com/en/get-started/quickstart/github-flow ),該應用能夠極大程度地簡化將分支集成到 CI 流水線中的工作。有關該 GitHub App 的更多詳細信息,請參閱我們的文檔 ( https://docs.pingcap.com/tidbcloud/branch-github-integration )。

 TiDB Serverless Branching 與 GitHub CI 流水線集成

我們將使用 tidbcloud-branch-gorm-example ( https://github.com/shiyuhang0/tidbcloud-branch-gorm-example ) 來演示集成過程。tidbcloud-branch-gorm-example ( https://github.com/go-gorm/playground )是一個適用於 TiDB Serverless Branching 的 gorm playground 項目的分支版本 。操作如下:

  1. 按照說明將您的 TiDB Serverless 集羣與 GitHub 倉庫連接起來。這將在您的 GitHub 帳戶上安裝 TiDB Cloud 分支管理 GitHub App。每次創建 pull request 時, 都會觸發創建一個新的對應 TiDB Serverless 分支。
  2. 調整 CI 流水線,使用新創建的 TiDB Serverless 分支來運行測試。
name: tests
​
on:
  pull_request:
    branches: [ master ]
​
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: tidbcloud/wait-for-tidbcloud-branch@v0
        id: wait-for-branch
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          public-key: ${{ secrets.TIDB_CLOUD_PUBLIC_KEY }}
          private-key: ${{ secrets.TIDB_CLOUD_PRIVATE_KEY }}
          timeout-seconds: 600
      
      - name: Set up Go 1.19
        uses: actions/setup-go@v2
        with:
          go-version: 1.19
​
      - name: go mod pakcage cache
        uses: actions/cache@v2
        with:
          path: ~/go/pkg/mod
          key: ubuntu-latest-go-1.19-${{ hashFiles('go.mod') }}
​
      - name: Tests
        run: |
          GORM_ENABLE_CACHE=true GORM_DIALECT=tidb GORM_DSN="${{ steps.wait-for-branch.outputs.username }}:${{ steps.wait-for-branch.outputs.password }}@tcp(${{ steps.wait-for-branch.outputs.host }}:${{ steps.wait-for-branch.outputs.port }})/test?parseTime=true&tls=tidb" ./test.sh

爲了簡化 CI 流水線,我們開發了 wait-for-tidbcloud-branch ( https://github.com/tidbcloud/wait-for-tidbcloud-branch ),這是一個輔助的 GitHub Action。它會等到 pull request 對應的 TiDB Serverless 分支就緒後,創建一個新的數據庫用戶供後續使用。

在完成設置後,每當創建 pull request 時,TiDB Cloud 分支管理 GitHub App 將爲拉取請求生成一個 TiDB Serverless 分支。然後,CI 流程將等待分支就緒並將其用於測試。這確保您使用這些分支執行的任何測試都可以映射到生產數據庫中的數據,從而更容易及時發現任何潛在問題。

 

 

一個具體的開發案例

比如你正在開發 一個 添加唯一索引的 功能 ,但生產數據庫中已經存在重複的行。 藉助 Ti DB Serverless Branching,CI 流水線可以迅速識別出這類問題。 這是因爲測試負載在與生產數據庫鏡像一致的分支中執行,可以在早期檢測到潛在問題。 然而,如果是在模擬數據上進行測試,這類問題很容易被忽視,甚至可能會遺漏到生產環境。

 

 

在上面的示例中,我們在數據庫中執行了一個簡單的 DDL 更改。TiDB 支持在線 DDL ( https://docs.pingcap.com/tidb/stable/ddl-introduction#execution-principles-and-best-practices-of-ddl-statements )變更,用戶無需擔心影響應用工作負載。然而,隨着應用的擴展和測試涉及到更多的業務邏輯,分支對於效率提高和質量保證變得越來越有益。

使用 TiDB Serverless Branching 定製 CI/CD 工作流

TiDB Cloud Branching 工作流專門設計成與流行的應用程序框架兼容,開發人員可以將其簡單地集成到現有的 CI 流水線中。 如 果 TiDB Serverless Branching GitHub App 不能完全滿足你的需求,在 TiDB Cloud CLI ( https://docs.pingcap.com/tidbcloud/get-started-with-cli )、setup-tidbcloud-cli ( https://github.com/tidbcloud/setup-tidbcloud-cli ) 和 GitHub Actions 的幫助下,你也可以定製分支的 CI/CD 工作流。

結論

藉助 TiDB Serverless Branching,開發人員可以並行工作,快速進行新功能的迭代而不影響生產數據庫的正常穩定運行。該功能簡化了開發和部署過程,同時確保了生產數據庫的穩定性和可靠性。

我們希望更多的開發人員能夠使用到 TiDB Serverless Branching,我們也將不斷改進和擴展這一功能,以滿足大家不斷變化的需求,敬請期待!

點擊鏈接,立即試用 TiDB Serverless Branching,獲取更簡化、快速的應用程序開發體驗!

https://tidbcloud.com/free-trial

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章