在DevOps中以API看待共享資料庫

2021-09-17 05:53:07 字數 1569 閱讀 5974

在winops 2017大會上,sabin.io首席顧問simon sabin做了乙個演講,介紹如何將資料庫更改加入到持續部署模型中。從資料庫所有者的角度看,要實現在多個服務或應用間共享資料庫,關鍵之一就是將這些共享資料庫看成是api。

\\ sabin建議考慮使用檢視、觸發器和儲存過程等機制。它們可以更改資料庫的內部結構,並同時保持向後相容的應用資料操作。他舉了乙個例子,乙個儲存信用卡號的資料庫表已經從純文字改為被加密的,但要保證應用依然以純文字方式檢索卡號。例子中是通過查詢檢視實現的,而實際的資料庫表通過觸發器實現資訊的加密和解密。處理結構如下圖所示:

\\ 資料庫向應用提供隱式的合約和介面,其中資料庫的內部更改(通常出於效能、安全和其它一些改進的需要)不應該影響到應用。這一原則可以模擬為api,突破性更改同樣遵循最小化原則,並應給出大量的通知資訊,保證應用在實際資料更改之前採納和部署前向相容更改。對資料庫應用消費者驅動合約,這樣的方法是可延展的。

\\ 按sabin的說法,需要這一方法去調和對共享資料庫的不同視角。應用開發人員總是將資料庫看成是「沉默的儲存」,而資料庫管理員(dba)則將資料庫看成是關鍵業務資料的倉儲之所。理想情況下,每個應用團隊會有自己的資料庫,團隊中也應具有dba角色,但這通常難以達到。

\\ 當應用本身就需要模式或其它更改時,sabin建議降低批處理的規模(因為在資料庫中實現可靠性和一致性是乙個複雜的任務),一次應用乙個小更改,並更改相應的應用**。選取何種遷移機制,是金模式(gold schema)還是遷移指令碼方式,依賴於更改的具體型別。在sabin看來,相比於對抗式的,這一機制更多是補充式的。對於模式更改,適用於金模式機制。金模式定義了目標模式(期望狀態),並使用類似於sqlcompare這類的工具做了當前狀態和期望狀態間的「差異比較」。遷移指令碼包括dbdeploy、flyway或readyroll等,該機制可能更適用於更複雜的修改。

\\ sabin還推薦了其它一些方法,包括:指定資料庫去適合自身工具而非其它方法,將部署資訊新增到資料庫自身中以便於追蹤和診斷問題,將資料庫更改作為交付流水線一部分看待以提公升可審校性和合規性。演講的最後,sabin建議使用區分在「私有」和「公開」的方法極大地改進資料安全(在持續發生關鍵資料洩漏時)。例如,讓乙個可訪問(「公開」)的小型資料庫中提供對較大規模的安全(「私有」)資料庫的檢視,而「私有」資料庫是不應被應用本身直接訪問的。

\\ 正如devsecops運動是經過一段時間後才得以確立,將資料庫更改加入到整合持續部署過程中的理念業已存在一段時間了,並被冠以各種稱法。sabin將其稱為「data devops」,也有人將其稱為「資料庫生命週期管理」(dlm,database lifecycle management)。另一位winops 2017大會演講者,eduardo piairo,指出:

\\

\

devops並非是要定義乙個處理資料庫更改的新過程,而是將資料庫更改和應用及架構**一併整合到服務生命週期中。

\

\\

檢視英文原文:treating shared databases like apis in a devops world

在非容器環境中實現DevOps

採用devops方式實現軟體交付的原因之一是為了消除生產部署過程中的瓶頸,對於伺服器端軟體,通常涉及以下部分 應用程式環境,如作業系統引數第三方元件,如應用程式伺服器,web伺服器和資料庫頂部執行的應用軟體 為了消除部署瓶頸,devops旨在打破開發人員和it運營人員之間的障礙 也是devops得名...

在Visual C 中運用API函式獲取系統資訊

api函式是構築windows應用程式的基石,是windows程式設計的必備利器。每一種windows應用程式開發工具都提供了間接或直接呼叫了windows api函式的方法,或者是呼叫windows api函式的介面,也就是說具備呼叫動態連線庫的能力。visual c 中如何呼叫各種返回值的api...

在C 中利用API編寫關機程式

程式介面如上 using system using system.collections.generic using system.componentmodel using system.data using system.runtime.interopservices using system.d...