[轉]企業級PAAS平臺-資料庫資源池
阿新 • • 發佈:2018-11-04
對PAAS平臺層的能力,比較核心的有兩個,一個是資料庫資源池,一個是中介軟體資源池,其達到的目標是相同的,即讓資料庫資源和中介軟體資源對應用系統來說變化為黑盒,實現集中化的資源分配和管理監控,實現資料庫和中介軟體資源的彈性擴充套件。在這裡DAAS個人有兩個方面的理解,一個是資料庫即服務,一個是資料即服務,前者的重點是資料庫各種管理操作轉化為服務提供,後面一種則更加強調的資料的訪問和儲存操作以服務的方式提供。
對於資料庫即服務,可以看做是資料庫管理即服務,比如使用者提出申請,最終可以返回一個可用的資料庫例項SID給使用者,至於資料庫建立在哪裡,資源是如何分配的使用者不用關係。那到資料庫SID後,可以很方便的進行後續的資料即服務操作。而對於資料即服務可以看做是對資料訪問和資料CRUD操作的進一步封裝,類似於傳統構建應用系統時候的DAL資料訪問層的封裝。所有的業務系統開發都遵循相同的資料訪問和操作介面。
在IAAS層的時候我們實現了物理資源的集中化,但是物理資源最終還是承載的應用,這就要求我們更多的去考慮承載應用的邏輯資源的集中化。而資料庫資源池可以講重點是解決資料庫的集中和統一的問題。而對於資料庫的集中化本身有包括了兩個方面的重要內容。其一是訪問集中,其二是資料集中。
訪問集中重點是構建統一的資料庫訪問層和標準的資料訪問API框架,但是底層仍然可能有多個數據庫,資料庫本身也可能是異構的多種資料庫。對於資料集中即對於關係型和非關係型各自採用一個完全集中化的資料庫。不再存在以往業務系統構建過程中出現了跨資料庫的資料交換和資料整合。對於訪問集中可以看到通過對底層資料庫的封裝和適配是比較容易實現的。對於資料集中關係型資料庫和非關係型資料庫各自又有不同的實現。
關係型資料庫的集中必然帶來資料庫本身的水平擴充套件能力的要求,對於Oracle資料庫我們看到有RAC叢集方面的支援。對於MySQL資料庫現在也有Cluster的方案,而對於MySQL資料庫的叢集本身又包括了兩種實現模式,一種是基於NDB的儲存引擎的完全雙向同步和資料表的分片,而對於innodb引擎通過單向複製實現的讀寫分離仍然可以實現資料庫的擴充套件性要求。下面對資料分片和讀寫分離兩種模式再做一個說明:
資料分片包括了對資料表資料的水平切分和縱向切分,但是一般較難以實現同時存在兩個切分。資料切片類似於hash區分,通過應用架構來解決資料路由和資料合併的問題。資料分片有很強的水平擴充套件性而且基本可以保持線性擴充套件,而且由於採用多副本技術,完全可以解決單節點故障的問題。但是資料分片模式下往往是降低了資料庫查詢的效能,特別是對於一些複雜的多表查詢往往都需要跨多個物理資料庫節點進行路由和合並。而對於NDB的MySQL叢集基於記憶體資料庫,對於資料庫記憶體要求很大,大資料量的查詢往往是重要瓶頸。
讀寫分離是另外一種現在常用的資料庫叢集和擴充套件性的解決方案。讀寫分離分為master和slave節點,在master寫入資料後通過資料複製技術實現快速的資料複製操作到slave節點。對於多個slave節點完全保持和master節點的準實時一致性,於多個slave節點可以形成資料庫的讀叢集,也可以架構在四層交換機之上實現負載均衡。
對於資料庫即服務,可以看做是資料庫管理即服務,比如使用者提出申請,最終可以返回一個可用的資料庫例項SID給使用者,至於資料庫建立在哪裡,資源是如何分配的使用者不用關係。那到資料庫SID後,可以很方便的進行後續的資料即服務操作。而對於資料即服務可以看做是對資料訪問和資料CRUD操作的進一步封裝,類似於傳統構建應用系統時候的DAL資料訪問層的封裝。所有的業務系統開發都遵循相同的資料訪問和操作介面。
在IAAS層的時候我們實現了物理資源的集中化,但是物理資源最終還是承載的應用,這就要求我們更多的去考慮承載應用的邏輯資源的集中化。而資料庫資源池可以講重點是解決資料庫的集中和統一的問題。而對於資料庫的集中化本身有包括了兩個方面的重要內容。其一是訪問集中,其二是資料集中。
訪問集中重點是構建統一的資料庫訪問層和標準的資料訪問API框架,但是底層仍然可能有多個數據庫,資料庫本身也可能是異構的多種資料庫。對於資料集中即對於關係型和非關係型各自採用一個完全集中化的資料庫。不再存在以往業務系統構建過程中出現了跨資料庫的資料交換和資料整合。對於訪問集中可以看到通過對底層資料庫的封裝和適配是比較容易實現的。對於資料集中關係型資料庫和非關係型資料庫各自又有不同的實現。
關係型資料庫的集中必然帶來資料庫本身的水平擴充套件能力的要求,對於Oracle資料庫我們看到有RAC叢集方面的支援。對於MySQL資料庫現在也有Cluster的方案,而對於MySQL資料庫的叢集本身又包括了兩種實現模式,一種是基於NDB的儲存引擎的完全雙向同步和資料表的分片,而對於innodb引擎通過單向複製實現的讀寫分離仍然可以實現資料庫的擴充套件性要求。下面對資料分片和讀寫分離兩種模式再做一個說明:
資料分片包括了對資料表資料的水平切分和縱向切分,但是一般較難以實現同時存在兩個切分。資料切片類似於hash區分,通過應用架構來解決資料路由和資料合併的問題。資料分片有很強的水平擴充套件性而且基本可以保持線性擴充套件,而且由於採用多副本技術,完全可以解決單節點故障的問題。但是資料分片模式下往往是降低了資料庫查詢的效能,特別是對於一些複雜的多表查詢往往都需要跨多個物理資料庫節點進行路由和合並。而對於NDB的MySQL叢集基於記憶體資料庫,對於資料庫記憶體要求很大,大資料量的查詢往往是重要瓶頸。
讀寫分離是另外一種現在常用的資料庫叢集和擴充套件性的解決方案。讀寫分離分為master和slave節點,在master寫入資料後通過資料複製技術實現快速的資料複製操作到slave節點。對於多個slave節點完全保持和master節點的準實時一致性,於多個slave節點可以形成資料庫的讀叢集,也可以架構在四層交換機之上實現負載均衡。
對於NoSQL資料庫本身就有很強的水平擴充套件能力,但是現在企業資訊化應用中能夠採用NoSQL資料庫的場景並不是很多,特別是對於有很強的資料關係和事務要求的場景,往往很難通過NoSQL資料庫來實現。我一直在考慮的一個問題是基於NoSQL資料庫的系統分析和設計和原有的基於關係型資料庫的分析和設計有很大的區別。基於NoSQL資料庫分析和設計更加要求有面向物件分析和設計意識,包括最近分析的對於DDD領域驅動設計的分析設計思路更加適合基於NoSQL資料庫的系統構建。