從NewSQL的角度看Apache ShardingSphere
近些年NewSQL概念盛行,國內外各大公司對NewSQL都有著不同的解讀。本次ITPUB技術棧線上沙龍2020上,京東數科高階DBA潘娟分享了有關NewSQL理念、國內外產品架構的解讀,以及Apache ShardingSphere的架構、特性、規劃、開源社群。
▲京東數科高階DBA&Apache ShardingSphere PMC 潘娟
嘉賓簡介:主要負責京東數科分散式資料庫開發、資料庫運維自動化平臺開發等工作。曾負責京東數科資料庫自動化平臺設計與開發,現專注於Apache ShardingSphere分散式資料庫中介軟體平臺的開發。主要在分散式資料庫、開源、分散式架構等相關領域進行探索。多次受邀參加資料庫&架構領域的相關會議並進行分享交流。
一、NewSQL的概念
NewSQL的概念,最開始來源於國外的一份商業分析報告。它是各種新的可擴充套件/高效能資料庫的簡稱,這類資料庫不僅具有NoSQL海量資料的儲存管理能力,還保持了傳統資料庫支援ACID和SQL等特性。
提及SQL,很多朋友最先想到的就是MySQL資料庫和PostgreSQL資料庫。對我們來說,它其實一個單點、很可靠,有ACID事務,也有查詢語言的關係型資料庫。其中,ACID事務和查詢語言是我們最關心的兩點。
伴隨網際網路的蓬勃發展,資料量的持續膨脹,NoSQL出現了。NoSQL泛指非關係型資料庫,具備Scalability(擴充套件性)和Resilience(彈性)。擴充套件性是指可以無限的把一個單點變成一個叢集,從而提升整個系統的可用性。彈性保證了在當機叢集崩潰後,資料的自動修復且上層業務無感知。
那麼就有人提出來了,我能不能既可以擁有像SQL的關係模型,擁有它的ACID事務,同時還擁有像NoSQL的擴充套件性、彈性伸縮,以及高可用性。於是,NewSQL應運而生,它最開始的定義就叫做Scalability SQL。
在分散式的場景中,沒有辦法同時保證Consistency(一致性)和Availability(可用性),以及分割槽的容錯性。CAP原則就是,你只能保證整個系統更關注於強一致性,或者高可用性。
綜上所述,NewSQL是為了綜合SQL和NoSQL的特性。它的存在並不是完全顛覆了CAP理論,而是需要基於這套理論,根據我們自身的實際情況,選擇一個Consistency和Availability之間的平衡點。
對於使用者來說,NewSQL其實就是A single logical DB,即單個邏輯資料庫。從開發的角度,NewSQL具有New Architecture(新架構)、Transparent Sharding(透明化分片中介軟體)、Database as a Service(雲資料庫)三種形態。
二、Apache ShardingSphere的架構
Apache ShardingSphere是一套開源的分散式資料庫中介軟體解決方案組成的生態圈,它由JDBC、Proxy和Sidecar(規劃中)這3款相互獨立,卻又能夠混合部署配合使用的產品組成。它們均提供標準化的資料分片、分散式事務和資料庫治理功能,可適用於Java同構、異構語言、雲原生等各種多樣化的應用場景。
Apache ShardingSphere定位為關係型資料庫中介軟體,旨在充分合理地在分散式的場景下利用關係型資料庫的計算和儲存能力,而並非實現一個全新的關係型資料庫。Apache ShardingSphere目前已提供數十個SPI作為系統的擴充套件點,仍在不斷增加中。
如上圖所示,這是Apache ShardingSphere最新的部署框架。Apache ShardingSphere最開始定位於NewSQL的中介軟體,後面它的盤子越來越大,逐漸超越了中介軟體的範疇,但又未達到新架構的範疇,處在一箇中間的狀態。
首先,中介軟體的資料庫叢集,可能有自己的主庫或者從庫,包括同步、複製、備份等都是靠MySQL或者PG資料庫來實現的。
其次,使用者真正能夠接觸三個產品,第一個產品叫ShardingSphere-JDBC,它定位為輕量級Java框架,在Java的JDBC層提供的額外服務。它具備解析SQL、分片管理、分散式事務,脫敏等功能。
第二個產品叫ShardingSphere-Proxy,定位為透明化的資料庫代理端,提供封裝了資料庫二進位制協議的服務端版本,用於完成對異構語言的支援。適用於任何相容MySQL/PostgreSQL協議的的客戶端,可以管理資料庫叢集。
三、功能介紹
仔細觀察ShardingSphere的框架,我們不難發現中介軟體左側的Sharding-Scaling,它是一個提供給使用者的通用的ShardingSphere資料接入遷移,及彈性伸縮的排程平臺。
JDBC的核心功能就是Orchestration,即編排治理,配置集中化與動態化、資料治理。ShardingSphere提供了介面治理模組——Sharding-UI,可以快速維護Sharding-Proxy叢集,方便使用者一鍵式的操作。
如上圖所示,從研發的角度來看Apache ShardingSphere的框架,最上面的接入端有JDBC和Proxy,中間層的核心功能是資料分片、分散式事務、資料庫治理,最下層是資料庫叢集。
其實,Sharding是Apache ShardingSphere的立足之本。除了分庫分表,它還還支援Encrypt(脫敏)和Shadow(影子庫),所有壓測的資料都會分配的影子庫中。Sharding最核心的還是底層四個模組來做支撐。
我們必須要解析SQL,才能理解使用者需要什麼。Parser(解析器)已經重構過很多遍,為了實現自主可控,保證高效性和正確性。除此之外,Router代表著路由,Rewriter改寫一些SQL,Executor做並行的控制,提高整體效率。
分散式事務主要有兩個方面,ACID強一致性事務和BASE柔性事務。值得一提的是,ShardingSphere分為自研的分散式資料庫(DTX)、對接其他公司的解決方案兩部分。對於使用者來說,他無需過多瞭解ShardingSphere,就可以擁有多種分散式事務的選型,這其實是一種非常有意思的方式。
ShardingSphere不只是一個分散式資料庫的原因在於,它的Orchestration模組提供了很多功能,比如線上變更、分片規則的線上推送,以及限流和熔斷等。使用者在瞭解分片的基礎上,可以慢慢去探索這個開放生態,找到自己想要的功能。
潘娟強調道,分庫分表、強一致事務、柔性事務、分散式治理、視覺化鏈路追蹤、讀寫分離等所有的功能都是可以組合在一起的。完全的自由組合,從而形成一個只滿足公司所需要的產品。
當儲存系統或者效能不夠的時候,資料庫就要透過Scaling(遷移平臺)進行Scale out(擴充套件)。目標不是放在提高單機效能上,而是要做成分散式,多個機器來解決。
四、社群
如果您有任何關於NewSQL的問題,可以在Github或者郵件給我們留言交流。上圖是Apache ShardingSphere的使用者牆,只擷取了一部分,瞭解更多可點選。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31545813/viewspace-2718292/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從JDK角度看物件克隆JDK物件
- 從JDK原始碼角度看FloatJDK原始碼
- 從JDK原始碼角度看LongJDK原始碼
- 從JDK原始碼角度看IntegerJDK原始碼
- 從 JDK 原始碼角度看 BooleanJDK原始碼Boolean
- 從 JDK 原始碼角度看 ObjectJDK原始碼Object
- 從JDK原始碼角度看ShortJDK原始碼
- [譯] 從設計師的角度看 ReduxRedux
- 從觀麥前端框架的角度看css前端框架CSS
- 世界是平的嗎?——從不同角度看前端前端
- 從微服務的角度看,如何 Be Cloud Native微服務Cloud
- 從 generator 的角度看 Rust 非同步程式碼Rust非同步
- 從開發者角度看Android 和 IOS的前景AndroidiOS
- 從排列的角度看超幾何分佈
- 【雜談】從實現角度看ChannelFuture
- 從原始碼角度看ContentProvider原始碼IDE
- 從微服務治理的角度看RSocket,. Envoy和. Istio微服務
- 從Oracle資料庫管理員的角度看PostgreSQLOracle資料庫SQL
- 從區塊鏈的角度看企業協作區塊鏈
- 從效能角度看 react 元件拆分的重要性React元件
- 從OMF和備份角度看ASM的優點ASM
- 從設計模式角度看OkHttp原始碼設計模式HTTP原始碼
- 從語言學角度看詞嵌入模型模型
- 從原始碼的角度看 Service 是如何啟動的原始碼
- 從巨集觀的角度看 Gradle 的工作過程Gradle
- 從原始碼的角度看Activity是如何啟動的原始碼
- Apache ShardingSphere HINT 實用指南Apache
- 從原始碼角度看traces.txt是如何生成的原始碼
- 從JDK原始碼角度看併發鎖的優化JDK原始碼優化
- 從Windows的角度看Mac OS X軟體開發WindowsMac
- 從原始碼角度看CPU相關日誌原始碼
- [WAF攻防]從WAF攻防角度重看sql注入SQL
- 從技術人員角度看Google chrome薦GoChrome
- 從JDK原始碼角度看併發競爭的超時JDK原始碼
- 從程式設計師的角度看 12306程式設計師
- 從 JDK 原始碼角度看 java 併發的公平性JDK原始碼Java
- 從專案管理的角度看三國和西遊(轉)專案管理
- 從卷積拆分和分組的角度看CNN模型的演化卷積CNN模型