DevOps 核心能力:技術篇——資料庫變更管理

2021-01-15 艾拓先鋒

DevOps 技術:資料庫變更管理

資料庫變更通常是執行部署時風險和延遲的主要來源。DevOps 研究和評估 (DORA) 調查了在實現持續交付過程中與資料庫相關的最佳做法,同時提高了軟體交付性能和可用性。

DORA 的研究發現,將資料庫工作集成到軟體交付流程中有助於持續交付。但是,作為實現持續交付的一部分,您的團隊如何改進資料庫交付?一些做法可以預測性能結果。

DORA 發現包含資料庫訴訟或調查的良好通信和綜合配置管理。在持續交付方面表現出色的團隊將資料庫變更作為腳本存儲在版本控制中,並以與管理生產應用變更相同的方式來管理這些變更。此外,當對應用的變更需要變更資料庫時,這些團隊會與負責生產資料庫的人員討論這些變更,並確保工程團隊能夠清楚了解待處理的資料庫變更進度。

如果團隊遵循這些做法,資料庫變更不會拖慢它們的速度,或在執行代碼部署時出現問題。

如何實現資料庫變更管理

實現高效的資料庫變更管理有兩個方面:文化和技術。本部分將討論這兩種方法。

建立有效的資料庫變更通信

研究顯示,當團隊與負責管理生產資料庫的人員討論變更,並且當團隊每個人了解待處理的資料庫變更進度時,團隊表現最佳。

由於幾個原因,與生產資料庫管理員 (DBA) 討論建議的變更很重要。首先,這些專家可以就如何取得最佳結果提出建議,並指出諸如性能問題之類的潛在問題。(與開發者工作站相比,生產系統中的許多操作具有非常不同的性能特徵)。通過這次討論,DBA 可以深入了解上遊正在發生的事情,從而幫助他們更好地為即將發生的變更帶來的影響做準備。

確保每個人都了解變更進度也很重要,因此包括 DBA 在內的團隊可以了解即將發生的變更、其測試狀態,以及各種生產資料庫和非生產共享資料庫發生了哪些架構變更。您可以通過以下方式提高可見性:

將所有資料庫架構變更以及架構所屬的應用代碼一起保留在版本控制中;使用工具記錄對環境進行了哪些變更及其結果。這些做法還可確保所有變更具有規範真實來源,使變更歷史記錄易於訪問以用於審核。

將所有資料庫架構變更視為遷移

版本控制資料庫變更的廣泛模式是捕獲所有變更作為遷移腳本保留在版本控制中,如下圖所示。每個遷移腳本都有唯一的序列號,以便您知道應用遷移的順序。

然後確保每個資料庫實例都有一個表,記錄針對該特定實例運行的遷移。通過這種方式,您可以對資料庫架構進行版本控制,因此,您可以使用工具來應用遷移腳本,將資料庫轉換為您想要的架構版本。工具示例包括:

遷移 (Go)alembic (Python)Active Record Migrations (Ruby on Rails)dbup (.NET)Entity Framework Migrations (.NET)Laravel Migrations (PHP)Flyway (platform-independent)Liquibase (platform-independent)您還可以使用遷移來創建空資料庫架構以進行開發和測試。

如下圖所示,每個資料庫實例都有一個表,記錄您針對該實例運行的遷移。然後,您可以使用工具或腳本自動執行更新,該工具或腳本會執行尚未應用到資料庫實例的遷移,並在每個遷移成功完成後更新遷移表。

您可以用與管理應用變更相同的方式來管理資料庫變更:通過使用版本控制作為其真實來源的自動化過程。

零停機時間資料庫變更

許多組織會在資料庫架構變更時安排服務停機時間,因為需要與應用部署協調,或在執行此類變更的過程中資料庫表鎖定。持續交付旨在消除部署的停機時間,因此以下是在不停機的情況下進行資料庫架構變更的一些策略:

使用在線架構遷移框架,例如 gh-ost 或 pt-online-schema-change。這些工具會為您要變更的每個表創建一個「ghost」副本,遷移空副本,然後從原始表中逐步複製數據,包括遷移期間發生的任何更新。此過程完成後,它們會用「ghost」替換原始表。某些資料庫,例如 Cloud Spanner,可以在零停機時間的情況下執行架構更新。使用並行更改模式分離資料庫變更和應用變更。在此模式中,您永遠不會更改現有資料庫對象。相反,您可以在舊結構的基礎上添加新的結構。例如,考慮將「地址」列變更為兩列:address_1 和 address_2。您可以添加新列,但保留舊列,而不用刪除舊列並添加新列,並同時發布應用的新版本。您可以在部署應用之前執行此操作。然後,該應用的新版本可以查找新列並從中讀取(如果存在且不為 null),否則從舊列中讀取。然後,應用可以寫入新列和舊列、延遲遷移數據,並允許應用回滾,而無需資料庫回滾。通過這種方式,應用部署與資料庫變更分離,資料庫變更通常可以在不引起停機的情況下進行,因為它不涉及遷移數據。為了降低部署難度,我們在應用中權衡了一些額外的複雜性。或者,您可以使用資料庫觸發器來使新列和舊列中的數據保持同步。設計和實現數據分區和歸檔策略。遷移時間長的一個主要原因是具有大量行的資料庫表。請確保您的應用設計為允許對數據進行分區和歸檔,以避免表變得太大。其中一個例子是為每個季度創建一個表的多個實例,例如,如果沒有 survey_answers表,您可能有 survey_answers_2020Q1、survey_answers_2020Q2,依此類推。確保應用的設計和架構審核包括驗證應用的數據分區/歸檔策略。使用事件溯源架構。在事件溯源架構中,不是讓資料庫存儲應用的當前狀態,而是以事件日誌的形式將其變更存儲其狀態,稱為命令。因此,當客戶更改其地址時,該應用會發出一個存儲在資料庫中的地址變更命令,而不是在表中更新客戶詳情。這就是資料庫事務日誌和版本控制的工作方式,也是分布式系統中的常見模式。在事件溯源架構中,事件可排入隊列,從而允許在事件排隊時進行資料庫遷移。遷移完成後,隊列中的事件可以刷新到資料庫中。有些資料庫能夠在架構遷移運行時對查詢進行排隊,如果遷移完成得足夠快,這會很有效。使用 NoSQL 解決方案。有些 NoSQL 資料庫(例如 Firestore 和 Cloud BigTable)不受架構變更造成的停機時間問題的影響。Firestore 等文檔資料庫具有隱式架構,這意味著架構在應用層(而不是資料庫層)進行管理。但是,使用 NoSQL 資料庫時也存在與其相關的權衡:它並非適用於每個應用。除了消除計劃停機時間之外,您還需要避免計劃外停機時間。請確保針對類似生產的數據集(已清理任何個人信息或機密信息)測試每個架構變更,以確保應用在遷移期間和遷移後的行為符合預期。一些組織每天都會創建生產資料庫的清理版本以用於此目的。如果您使用的資料庫管理系統在生產環境中具有多個節點,請確保您正在針對具有至少兩個節點的實例進行測試,以捕獲分布式系統問題。

實施資料庫變更管理的常見誤區

在實現本文所述的關鍵做法時,需要注意一些常見問題。

許多組織都處於非常孤立的狀態。DBA 通常在自己的單獨團隊中工作,該團隊使用自己的流程來管理變更。當軟體交付團隊在沒有諮詢 DBA 團隊的情況下實現管理資料庫變更的新流程時,他們可能會在使用新流程對 DBA 團隊管理的資料庫進行變更時遇到阻力。這樣可以顯著減少遷移到新流程的優勢。

第一步是與他們一起討論如何實現本文所述的目標。讓他們接受任何建議的流程和技術變更是很重要的。為此,最好的辦法是詢問他們所遇到的問題,了解本文介紹的建議如何幫助他們解決這些問題,並提供解決方案。理想情況下,交付團隊和 DBA 可以找到一個互相接受的解決方案。

另一個問題通常會加劇這種障礙:多個應用共用同一資料庫架構的情況。這意味著在一個應用上工作的團隊不能在不影響其他應用的情況下變更架構。這要求採用一個解決方案來管理共享資料庫架構的所有應用的資料庫變更。在這種情況下,實現版本控制的自助服務機制部署資料庫變更是可行的,甚至更加有益。不過,這需要仔細規劃和發布。

最後,同時實現基於遷移的資料庫變更管理和零停機時間部署可能涉及重大架構變更。在估算實現這些做法所需的工作量時,應考慮這一點。

如何衡量資料庫變更管理

有效的資料庫變更管理系統的目標是,資料庫變更不會減慢部署的速度或造成問題。值得衡量的是,資料庫變更中失敗變更的百分比是一個促成因素,以及與資料庫變更相關的工作在多大程度上有助於從版本控制到發布的整個交貨期。

如果資料庫變更需要計劃停機時間,這也是一個重要的考慮因素。要衡量計劃停機時間的經濟影響,請考慮停機時間所產生的潛在經濟損失,以及為執行部署而支付員工在非正常工作時間工作的工資成本。在工作時間以外進行部署也可能會導致團隊倦怠。這些影響可用於證明實現本文檔中討論的零停機時間部署解決方案所需的工作。

在衡量自動化水平時,請考慮使用完全自動化流程以按鈕式進行資料庫變更的比例。目標是以這種方式完成 100% 的資料庫變更。(轉自DevOps

相關焦點

  • 2020 Gdevops全球敏捷運維峰會在北京圓滿落幕
    12月11日,2020 Gdevops全球敏捷運維峰會在北京成功舉辦。一主場四分場,攜手三十多位資深技術專家凝練全年運維、資料庫、架構、Fintech金融科技等實戰精華,讓大家在年終之際收穫行業技術成果,以更前沿的視角展望即將到來的2021。
  • DevOps 核心能力:技術篇——代碼可維護性
    DevOps 技術:代碼可維護性運行我們構建的系統需要大量代碼:Android 作業系統運行 1200 到 1500 萬行代碼,Google 的單一代碼庫包含超過 10 億行代碼,典型的智慧型手機應用包含 50,000 行代碼。
  • 自適應變更管理:DevOps變更管理方法
    但是,幾乎沒有理由認為跟蹤技術環境中的更改可能具有很高的價值。尤其是在同時發生許多不同更改的大型環境中,至關重要的是要了解更改的內容以及這些更改可能相互影響以及最終影響最終客戶的方式。通過將DevOps原則用於變更管理,我們可以確保在保持速度和敏捷性的同時跟蹤和管理變更。
  • DevOps 核心能力:技術篇——雲基礎架構
    DevOps 技術:雲基礎架構許多組織都採用雲計算。但在雲技術方面,它提供的遠不止從雲服務商那裡購買的基礎架構。美國國家標準與技術研究院 (NIST) 定義了雲計算的五個基本特徵:按需自助:使用方可以根據需要預配計算資源,而無需與提供商進行人工互動。廣泛的網絡訪問:可以通過各種平臺(如手機、平板電腦、筆記本電腦和工作站)訪問各種功能。
  • 對話巨杉資料庫核心研發:分布式資料庫修煉之路
    同時,應用端,由於都是銀行、政府這些30年前已經使用的用戶,因為無法承擔全盤遷移的風險,因此在業務技術架構上難免保持了各個時代的遺留(舉例子,北美部分銀行IT還保留了資料庫之前的技術作為核心,至今沒有替換)。這也要求企業級ready的資料庫基礎軟體是要有很強的兼容能力的,既保證舊業務運行,又可以有創新。
  • 我們需要DevOps,破局傳統IT企業效率低下的問題
    我們需要DevOps,破局傳統IT企業效率低下的問題傳統IT技術團隊中通常都有多個獨立的組織-開發團隊、測試團隊和運維團隊。開發團隊進行軟體開發、測試團隊進行軟體測試,運維團隊致力於部署,負載平衡和發布管理。 他們之間的職能有時重疊、有時依賴、有時候會衝突。
  • 【招聘】交通銀行金融科技子公司招DevOps研發、資料庫工程師等
    銀行核心系統開發工程師職位描述:(1)承擔計算機應用系統的設計、開發、單元測試等工作;(2)參與業務需求分析、架構方案設計、應用系統軟體開發、測試和運行維護等工作;(3)跟蹤國內外銀行業務計算機應用系統軟體和計算機技術發展趨勢,推動新技術應用。
  • DevOps教程:DevOps 架構
    【注】本文譯自:https://www.javatpoint.com/devops-architecture 運營包括軟體的管理流程,服務和支持。當開發和運營結合在一起進行協作時,DevOps 架構就是解決部署和運營術語之間差距的解決方案。因此,交付可以更快。 DevOps 架構用於託管在雲平臺上的應用和大型分布式應用。 DevOps 架構中使用了敏捷開發,因此集成和交付可以是持續的。
  • 技術中臺之DevOps自動化測試實踐
    又考慮到測試人員技術水平,相對而言,rf簡單易上手,所以rf突出重圍,成為此次自動化工具角逐的「冠首」。二、什麼是RobotFramework?掌握各關鍵字含義以及用法,是利用RF做自動化測試的核心。在.robot文件中,滑鼠懸浮在關鍵字上,會顯示該關鍵字用法,或者按住CTRL鍵,滑鼠點擊可進入到py文件中,直接查看該關鍵字的實現和描述,RF接口測試主要用到以下紅框關鍵字,還有其他語法例如FOR循環、json數據格式轉換等需要掌握。
  • 金融企業選擇與應用分布式資料庫的7個核心問題
    接手騰訊分布式資料庫以來,主要負責騰訊雲分布式資料庫功能策劃、市場能力建設、服務支撐能力建設和團隊建設等。 大家好,我是來自騰訊雲的蘇強。從騰訊雲分布式資料庫商用那天起,我就在分布式資料庫團隊裡,所以可以很自豪地說,我是最了解騰訊雲分布式資料庫的人之一。今天我將和大家分享近兩年來分布式資料庫在金融行業裡真實應用的細節與核心。
  • 阿里雲發布「自動駕駛」級資料庫平臺DAS 全球首創技術讓管理成本...
    4月23日,阿里雲發布全新資料庫產品DAS,該平臺由阿里雲及達摩院聯合研發,可提供自感知、自修復、自優化、自安全的全鏈路資料庫管控能力,無需人工幹預,讓企業像體驗「自動駕駛」一樣使用資料庫,資料庫管理成本降低90%。資料庫上雲已成業界共識。
  • 魚和熊掌可以兼得 雲原生開啟「資料庫大數據一體化」新時代
    隨著雲計算的發展,計算存儲解耦、資源池化、Serverless、流批一體等核心基礎技術正在加速數據分析系統向「資料庫大數據一體化」演進。「資料庫大數據一體化」的雲原生數據分析系統能夠很好得提供彈性擴展、海量存儲、多種計算及低成本等能力,有效解決海量數據深度計算分析的業務分析和創新訴求。
  • BIM技術對工程造價管理的影響
    BIM技術目前已經在全世界工程領域範圍內得到了普遍應用,並且隨著應用實踐不斷發展升級,是我國「十二五」計劃的重點工程項目。BIM技術應用關鍵在於利用計算機技術建立三維模型資料庫,在建築工程管理中實時變化調整,準確調用各類相關數據,以提升決策質量,加快決策進度,從而降低項目管控成本、保障項目質量,達到提升效益的目的。
  • 星環科技同時獲得大數據與資料庫服務能力評估最高等級
    2020年12月18日,在中國信息通信研究院、中國通信標準化協會主辦的「2020數據資產管理大會」上,星環科技獲得了中國信息通信研究院頒發的「大數據服務能力評估-數據工程專項-量化管理級(四級)」和「資料庫服務能力評估-實施部署專項-量化管理級(四級)」,成為了首批通過評估且在數據工程專項的參評企業中獲得最高評估等級的公司,體現了星環科技在數據平臺的實施建設和部署運營上共同處於領導者地位
  • 2020Gdevops北京站 中郵消費金融李遠鑫解讀敏捷運維背後的深度...
    Gdevops全球敏捷運維峰會是與政府、企業攜手打造的敏捷運維領域標杆盛會,匯聚dbaplus社群數百專家資源,全面覆蓋從DBA、運維工程師到CXO等所有技術圈層及網際網路、電信、金融、交通、物流等重點行業。
  • 作為資料庫核心成員,如何讓淘寶不卡頓?
    本文以2007年TDDL初誕生時的視角,介紹TDDL是如何一步步設計成型的,希望能幫助同學們簡單收穫:常規資料庫效率問題解決思路、TDDL框架設計基本思路以及分布式資料庫設計思路等。文末福利:《MySQL實操》技術公開課。
  • 什麼是 DevOps,酷拉諾給你解惑
    透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。它是一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化、運動或慣例。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。可以總結一下,DevOps是一種方法或理念,它涵蓋開發、測試、運維的整個過程。
  • 唯一同時獲得大數據與資料庫服務能力評估最高等級
    2020年12月18日,在中國信息通信研究院、中國通信標準化協會主辦的「2020數據資產管理大會」上,星環科技獲得了中國信息通信研究院頒發的「大數據服務能力評估-數據工程專項-量化管理級(四級)」和「資料庫服務能力評估-實施部署專項-量化管理級(四級)」,成為了首批通過評估且在數據工程專項的參評企業中獲得最高評估等級的公司,體現了星環科技在數據平臺的實施建設和部署運營上共同處於領導者地位
  • 德恩精工:全資子公司經營範圍變更並完成工商變更登記
    原經營範圍:從事數字科技、智能科技、軟體科技、網際網路科技、農業科技領域內的技術開發、技術諮詢、技術轉讓、技術服務,工業產品研發及其工藝設計服務;設備技改、數據採集與運維服務,工業機器人集成應用服務,弱電工程,電子商務,企業管理服務,會展服務。
  • 巨杉資料庫入選Gartner資料庫報告,中國首家入選廠商
    SequoiaDB巨杉資料庫入選Gartner資料庫報告,成為國內首批入選Gartner報告的資料庫廠商。「SequoiaDB, 總部位於中國廣州,是一款分布式、多模型(Multimodel)、高可用的SQL資料庫。SequoiaDB具有跨地域分布式部署和靈活擴展的能力,同時還支持針對內容和文件的塊存儲引擎。