我們都熟悉 DevOps 的原則:構建小而經過良好測試的增量,頻繁部署,並自動化流程以消除手動步驟的需要。 我們密切監控應用程序,設置警報,回滾有問題的更改,並在出現問題時收到通知。
然而,當涉及到數據庫時,我們往往缺乏相同程度的控制和可見性。 調試性能問題可能是具有挑戰性的,我們可能會掙扎於理解為什麼數據庫會變慢。 架構遷移和修改可能失控,導致重大的挑戰。
克服這些障礙需要策略來簡化架構遷移和適應,從而以最小的停機時間或性能影響實現高效的數據庫結構更改。 在整個流程中測試所有更改是至關重要的。 讓我們來探討如何實現這一目標。
自動化您的測試
數據庫容易出現多種故障,但它們通常不會受到與應用程序相同的嚴格測試。 雖然開發人員通常測試應用程序是否能夠正確讀取和寫入數據,但他們往往忽視了這是如何實現的。 確保正確使用索引、避免不必要的延遲加載或驗證查詢效率等關鍵方面往往未受到檢查。
例如,我們專注於數據庫返回了多少行,但卻忽略了分析它必須讀取了多少行。同樣,回滾程序也很少被測試,這使我們在每次更改時都容易遭受潛在的數據丟失。為了解決這些問題,我們需要全面的自動化測試來主動檢測問題,最小化手動干預的需求。
我們經常依賴負載測試來識別性能問題,雖然它們可以揭示我們的查詢是否足夠快速以應對生產環境,但也有顯著的缺點。首先,負載測試的構建和維護成本高,並且需要仔細處理GDPR合規性、數據匿名化和有狀態應用程序。此外,它們發生在開發流程的後期。當負載測試發現問題時,變更已經被實施、審核並合併,迫使我們重新開始,可能需要從頭做起。最後,負載測試耗時,通常需要幾小時來填充緩存和驗證應用程序的可靠性,這使得它們在及早捕捉問題方面的實用性降低。
模式遷移通常不在我們測試的範疇內。通常,我們只在遷移完成後運行測試套件,這意味著我們不會評估它們花費了多長時間,是否觸發了表重寫,或是否導致性能瓶頸。這些問題在測試期間往往被忽視,只有在部署到生產環境時才會變得明顯。
另一个挑战是我们使用的数据库太小,无法及早发现性能问题。对不足的测试的依赖可能导致在负载测试上浪费时间,并使关键方面(如模式迁移)完全未经测试。这种覆盖范围的不足会降低我们的开发速度,引入破坏应用程序的问题,并阻碍敏捷性。
应对这些挑战的解决方案在于实施数据库防护措施。数据库防护措施评估我们编写代码时的查询、模式迁移、配置和数据库设计。与依赖管道运行或冗长的负载测试不同,这些检查可以直接在集成开发环境或开发人员环境中执行。通过利用生产数据库的可观察性和预测,防护措施评估执行计划、统计数据和配置,确保一切在部署后能够平稳运行。
围绕数据库构建可观察性
当我们部署到生产环境时,系统动态可能随时间改变。CPU负载可能会飙升,内存使用量可能增长,数据量可能扩大,数据分布模式可能发生变化。快速识别这些问题至关重要,但这还不够。当前的监控工具用原始信号淹没我们,让我们自己拼凑推理。例如,它们可能会指示CPU负载增加,但未能解释为什么会发生。调查和确定根本原因的负担完全落在我们身上。这种方法已过时且低效。
要真正快速前進,我們需要從傳統監控轉為全面的可觀測性。我們需要的不是淹沒在原始數據中,而是能幫助我們理解問題根本原因的可行洞察。數據庫護欄提供了這種轉變。它們將各種因素如何相互關聯串連起來,指出問題所在,並提出解決方案。與其僅僅觀察 CPU 使用率的飆升,護欄幫助我們理解最近的部署改變了一個查詢,導致索引被繞過,進而導致 CPU 負載增加。有了這種清晰度,我們可以果斷行動,修復查詢或索引以解決問題。從“看到”轉變為“理解”對於保持速度和可靠性至關重要。
數據庫管理的下一個演進是從自動問題調查轉向自動解決。許多問題可以通過良好整合的系統自動修復。可觀測性工具可以分析性能和可靠性問題,並生成必要的代碼或配置更改以解決它們。這些修復可以自動應用,也可以需要明確批准,確保問題立即得到解決,而您的努力最少。
除了快速解決問題外,最終目標是預防問題首次發生。頻繁的回滾或失敗會阻礙進展和敏捷性。真正的敏捷性不是通過快速解決問題來實現,而是通過設計系統,使問題很少發生。儘管這個願景可能需要分步驟才能實現,但它代表了創新的最終方向。
Metis 賦予您克服這些挑戰的能力。它在提交到存儲庫之前就評估您的更改,分析查詢、模式遷移、執行計劃、性能和管道中的正確性。Metis 與 CI/CD 工作流無縫集成,防止有瑕疵的更改進入生產環境。但它更進一步 — 通過分析指標和追踪部署、擴展和配置,提供對生產數據庫的深入可視性。它會在可能時自動修復問題,並在需要手動干預時提醒您。有了 Metis,您可以更快地移動,自動化 CI/CD 管道的每個方面,確保更順暢、更可靠的數據庫管理。
每個人都需要參與
數據庫可視性是關於積極預防問題,向自動化理解和解決進展,並在開發過程中整合數據庫特定的檢查。依賴過時的工具和工作流已不再足夠;我們需要適應當今複雜性的現代解決方案。數據庫護欄提供了這種支持。它們幫助開發人員避免創建低效代碼,分析模式和配置,並驗證我們管道中軟件開發生命周期的每一步驟。
護欄還將原始監控數據轉換為可行的見解,不僅解釋了問題出在哪裡,還提供了修復的方法。這一能力在各行各業中都是至關重要的,因為系統的複雜性只會不斷增加。為了保持領先,我們必須接受創新的工具和流程,讓我們能夠更快、更高效地行動。
Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases