過去幾年來,「微服務架構」這個術語持續火熱,它描述了一種將軟體應用程式設計為可獨立部署的服務套件的特定方式。儘管這種架構風格沒有確切的定義,但圍繞業務能力,自動化部署,網點智慧型以及語言和資料的分散控制等方面存在著某些共同特徵。
簡而言之,微服務架構是一種將單應用程式作為一套小型服務開發的方法,每種應用程式都在其自己的程序中執行,並與輕量級機制(通常是http資源的api)進行通訊。這些服務是圍繞業務功能構建的,可以通過全自動部署機制進行獨立部署。這些微服務的將集中化管理部分降到最少,同時,微服務還可以用不同的程式語言編寫,並使用不同的資料儲存技術。
而涉及到資料儲存技術,就不得不談到資料庫,而實際上,微服務和資料庫有著微妙的關係,微服務對於資料庫也有著和傳統架構不盡相同的需求,那麼,微服務和資料庫究竟有著什麼樣的關係?資料庫又對微服務有何影響?如何選擇適合微服務的資料庫?巨杉資料庫聯合創始人兼cto王濤向csdn的記者分享了他的觀點。
微服務架構催生分布式資料庫
王濤認為,談論資料庫一定脫離不了應用。從應用程式開發來看,現在很多企業內部的應用開發都在從傳統中介軟體加資料庫的「煙囪式」開發,向微服務架構轉型。而在微服務體系架構中,幾乎每個微服務都需要提供資料持久化的能力,而使用者也希望每個微服務所承載的資料量能夠無限的彈性擴張。但是,在採用微服務架構的過程中,每個微服務使用自身獨立的資料庫儲存又會使過去集中在乙個地方的資料分散到很多不同的裝置中,造成整個it架構的資料嚴重碎片化。舉例來說,一些網際網路公司僅僅在生產系統中就維護著兩、三萬個mysql資料庫,這樣的話,想要進行企業內部的資料整合是極為困難的。
實際上,此前,當企業使用者採用微服務體系架構的時候,從資料管理的角度,業界有兩種做法。
第一種做法,就是對應用程式進行微服務改造,底層資料庫使用傳統集中式資料庫進行儲存。這種做法對於應用程式的改造相對較小,對於dba運維人員來說學習成本也較低,但是相應的,其存在資料緊耦合,無法彈性擴張,以及可能存在單點故障等問題。
第二種做法,可能也是現在業界使用比較多的方式,就是每一組微服務對應乙個獨立的小資料庫,往往使用mysql或postgresql。這種機制能夠解決集中式儲存的問題,但是也帶來了新的挑戰,包括資料極度碎片化,在微服務之間無法共享,運維成本極其高昂。
因此,兩種辦法都不能很好的解決微服務下資料儲存管理的問題,因此分布式資料庫就是要解決上述的兩個問題。第一就是針對每個微服務做到資料彈性擴張,第二就是對整個企業it做到資料的統一治理從而避免碎片化儲存。
打造適合微服務的分布式資料庫
要打造適合微服務架構的資料庫,巨杉資料庫採用了計算儲存分離的架構。其中儲存層採用自研的原生分布式資料庫引擎,上層計算層則可以建立成百上千個資料庫例項,同時每個資料庫例項對應用完全透明,不需感知。
因此,在這種系統架構下,從單個應用來看,和傳統標準資料庫完全一致,不需關注資料被切分在哪些不同物理裝置上,做到彈性伸縮。同時,所有的物理裝置從邏輯上進行統一管理,甚至不同例項裡面的資料可以在可配置的許可權下進行共享。
那麼,適合微服務的分布式資料庫都應該具有哪些特性呢?王濤認為這主要應該從兩大維度、五個方面來看。
兩大維度一是對傳統技術的相容,二是技術和架構的創新。
在對傳統技術的相容方面來看,首先,必須支援acid。因為從資料庫來看,儘管很多人說cap不可兼得因此要犧牲一致性,但巨杉認為這是不可取的。對於大部分公司來說,資料都是核心生命線,絕對不能為了上分布式犧牲資料的一致性和安全性,需要對使用者的財產和資訊負責。因此,新型面向聯機交易的分布式資料庫必須對傳統acid有完美的支援,與傳統oracle db2的資料安全性一致性保持相容。
其次,sql的完整性。這個主要是從對傳統應用的相容與開發人員能力重用的角度看。一般來說,sql語法相容的完整性,以及對已有標準的相容必須具備,例如對mysql、oracle、db2、postgresql這種主流協議的相容。
而從新技術的前瞻性來看,首先,未來是私有雲和微服務應用的時代,那麼作為分布式資料庫,就不僅僅簡單的將其定位成過去某乙個資料庫的替代。分布式資料庫的核心價值在於,能夠從資料庫的層面以服務資源池的形式,向上層被從煙囪式架構向微服務架構拆散的成百上千個小服務提供資料庫訪問能力的平台。在這個定位下,資料庫資源池在保證與傳統資料庫100%相容的基礎上,必須滿足分布式彈性擴張,當資源池裡面空間和計算能力不足時,需要通過動態增加計算儲存節點的方式進行擴容。
其次,過去的資料庫由於僅針對某乙個特定應用,採用中介軟體和資料庫一對一繫結的方式,因此只需要提供自身一種模式的訪問就夠了。但是當進行資料庫資源池化的時候,上層應用自然面對來自不同開發商、不同業務型別、不同sla級別的服務,大家採用的開發流程、sql標準、以及安全策略各不相同,因此分布式資料庫必須能夠支援多種模式的訪問介面。
最後,htap,即交易分析混合處理能力。譬如一些賬務資料,可能最核心的關鍵應用來自於聯機交易業務實時使用這些資料,但是同時一些後台的實時報表,或者安全審計機構需要進行統計分析的時候,來自不同微服務的業務可能需要對同乙份資料同時以交易和分析的方式進行訪問。這種情況下,能不能在資源池內對交易與分析業務進行物理資源隔離,及時對同乙份資料同時訪問並可以做到互不干擾尤為關鍵,因此,適合微服務的資料庫必須具有較強的交易分析混合處理能力。
巨杉資料庫,適合微服務的分布式資料庫
正如同巨杉對於分布式資料庫的技術定位和目標,巨杉資料庫sequoiadb本身就是以分布式儲存底座與上層的資料庫例項兩層來進行構建的。底層的分布式儲存作為資源池,自身負責資料的儲存、分布式事務控制、記錄和表鎖等,都在底層原生分布式儲存實現。
資料庫例項層則提供對上層應用程式的sql服務,使用者可以建立mysql、postgresql、spark sql等結構化例項,也可以建立json或s3檔案系統的非結構化例項。每個例項中的資料對上層應用來說完全透明。因此,在sequoiadb中,乙個mysql表可以輕易儲存十億甚至百億級別的資料,開發者在寫sql的時候完全不需要關注底層表到底被分散在多少臺物理裝置中。
作為業界原生分布式資料庫以及新一代分布式資料庫的代表,sequoiadb對於分布式交易與acid與傳統技術完全相容,架構與功能特性與傳統資料庫完全相容。同時,sequoiadb還積極擁抱新一代微服務與雲計算框架,在面向微服務應用開發與雲計算基礎架構時,支援彈性擴張、資源隔離、多租戶、可配置一致性、多模式(支援各類sql協議)、集群內可配置容災策略等一系列功能。
事實上,傳統單點資料庫的容量瓶頸,僅僅是分布式資料庫所解決的問題之一。更重要的是在未來微服務化應用開發以及雲化平台的趨勢下,應用不再以「煙囪式」的中介軟體加資料庫模式進行構建,而是採用數千甚至上萬的微服務程式構建成的複雜網狀模型。因此,分布式資料庫需要能夠滿足上層應用的彈性擴充套件、高併發、高吞吐量、與靈活敏捷的需求。而sequoiadb在這些方面都有著出色的表現,包括:
完整的acid支援,事務和一致性保證;sql的完整支援,傳統資料庫mysql/postgresql的語法完全相容。分布式與擴充套件性,應對資料量的變化,實現儲存層和計算層的彈性擴充套件;多模式訪問介面,支援多型別資料管理和多種模式的訪問介面; htap交易/分析混合處理能力,複雜業務需求下,實現資料的物理隔離,互不干擾。
而在此次大會最新發布的 3.2版本中,巨杉通對sequoiadb進行大幅度效能優化與提公升,使得其在分布式的交易型業務下,整體效能提公升2~3倍,cpu消耗節省超過30%,從而大大提公升了對微服務的支援力度。
sequoiadb,不僅僅是支援微服務而已
實際上,sequoiadb 並不僅僅是微服務的「良師益友」,其更大維度下的定位是一款真正的金融級分布式關係型資料庫。
據悉,目前巨杉資料庫已在近百家大型商業銀行核心生產業務上線,並廣泛應用於金融、電信、**、網際網路、交通等領域,企業使用者總數超過1000家。同時,巨杉也是中國首家連續兩年入選gartner 資料庫報告的資料庫廠商。
資料庫索引到底是什麼,是怎樣工作的?
我們通過乙個簡單的例子來開始教程,解釋為什麼我們需要資料庫索引。假設我們有乙個資料庫表 employee,這個表有三個字段 列 分別是 employee name employee age 和employee address。假設表employee 有上千行資料。現在假設我們要從這個表中查詢出所有名...
資料庫索引到底是什麼,是怎樣工作的?
索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。例如這樣乙個查詢 select from table1 where id 44。如果沒有索引,必須遍歷整個表,直到id等於44的這一行被找到為止 有了...
資料庫索引到底是什麼,是怎樣工作的?
資料庫索引到底是什麼,是怎樣工作的?我們通過乙個簡單的例子來開始教程,解釋為什麼我們需要資料庫索引。假設我們有乙個資料庫表 employee,這個表有三個字段 列 分別是 employee name employee age 和employee address。假設表employee 有上千行資料。...