java中間件是什么意思_數據庫中間件漫談

f62c6d26d87793eb9d2ed002b4e186d2.png

1.前言

隨著業務的發展,MySQL數據庫中的表會越來越多,表中的數據量也會越來越大,相應地,數據操作的開銷也會越來越大;另外,無論怎樣升級硬件資源,單臺服務器的資源(CPU、磁盤、內存、網絡IO、事務數、連接數)總是有限的,最終數據庫所能承載的數據量、數據處理能力都將遭遇瓶頸。

分表、分庫和讀寫分離可以有效地減小單臺數據庫的壓力。

本文主要針對業界主流的數據庫中間件的實現、功能、成本等方面進行對比,總結數據庫中間件的實現方式,并展望未來的可能發展。

2. 實現方式

一般來說,對于數據庫中間件,可以在以下六個層次做切入。

e959a3963e4ef2d4af86f8c3a95a3914.png

2.1 代碼層

在同一個項目中創建多個數據源,采用if else的方式,直接根據條件在代碼中路由。

Spring中有動態切換數據源的抽象類,具體參見AbstractRoutingDataSource。

如果項目不是很龐大,使用這種方式能夠快速的進行分庫。但缺點也是顯而易見的,這種海量的代碼侵入是絕不能被接受的。

而且當查詢結果返回時,需要對跨庫、聚合等查詢結果進行歸并,開發工作量非常巨大。

這種方式了解一下即可,一般不會去使用。

2.2 框架層

主要是修改或增強現有ORM框架的功能,在SQL中增加一些自定義原語或者hint來實現。

常見的比如實現一些攔截器(比如Mybatis的Interceptor接口),增加一些自定義解析來控制數據的流向,效果雖然較好,但會改變一些現有的編程經驗。

這種情況適合公司ORM框架統一的情況,但在很多情況下不太現實。

而且大部分情況下要修改框架源碼,因此,也不推薦。

2.3 驅動層

無論是從代碼層還是框架層做處理,都是高侵入、難維護的。

因此,常見的數據庫中間件,至少需要從驅動層開始,我們可以理解為一個smart-client。

什么意思是smart-client呢?

通常smart-client是在連接池或者driver的基礎上進行了一層封裝。

這個smart-client內部可以與不同的數據庫建立連接。

服務需要查詢的sql,就交給smart-client進行解析、優化,然后發送給具體的數據庫進行操作。

例如在讀寫分離情況下,smart-client會選擇sql走從庫還是主庫;在分庫分表的情況下,進行sql解析、sql改寫等操作,然后路由到不同的分庫,將得到的結果進行合并,返回給應用。

8efabe82828e873b557299e2ee1d652e.png

我們熟知的TDDL、Sharding-JDBC等,都是在此層切入。

優點:

1)實現方便,業務無入侵。smart-client不需要實現客戶端通信協議,只需要在數據數據庫廠商提供的不同語言的數據庫驅動上做封裝即可。例如mysql針對java語言提供了mysql-connector-java驅動,針對python提供了mysql-connector-python驅動。

2)天然去中心化。smart-client以sdk的方式被應用引入,然后部署到不同的服務節點上,不需要有代理層proxy。因此相較于代理方式而言,不需要考慮高可用的問題。只要應用的節點沒有全部宕機,就可以訪問數據庫。(這里的高可用是相比代理層proxy而言,數據庫本身的高可用還是需要保證的)

缺點:

1)通常僅支持某一種語言。例如tddl、zebra、sharding-jdbc都是使用java語言開發,因此對于使用其他語言的用戶,就無法使用這些中間件。如果其他語言要使用,那么就要開發多語言客戶端。

2)版本升級困難。因為應用使用數據源代理就是引入一個jar包的依賴,在有多個應用都對某個版本的jar包產生依賴時,一旦這個版本有bug,所有的應用都需要升級。而數據庫代理升級則相對容易,因為服務是單獨部署的,只要升級這個代理服務器,所有連接到這個代理的應用自然也就相當于都升級了。

3)去中心化的缺點,比如無法做全局的sql限流

2.4 代理層

在應用中,我們通過一個普通的數據源(c3p0、druid、dbcp等)與代理服務器建立連接,所有的sql操作語句都是發送給這個代理,由這個代理去操作底層數據庫,得到結果并返回給應用。在這種方案下,分庫分表和讀寫分離的邏輯對開發人員是完全透明的。

bc0026e4b67bfa46932ee37d819bd4ba.png

像MySQL Router、MyCat、ShardingSphere(proxy模式)等,都是在此層切入。

優點:

1)多語言支持。也就是說,不論你用的php、java或是其他語言,都可以支持。以mysql數據庫為例,如果proxy本身實現了mysql的通信協議,那么你可以就將其看成一個mysql 服務器,因此不同語言的開發者都可以使用mysql官方提供的對應的驅動來與這個代理服務器建通信。

2)對業務開發同學透明。由于可以把proxy當成mysql服務器,理論上業務同學不需要進行太多代碼改造,既可以完成接入。

缺點:

1)實現復雜。因為proxy需要實現被代理的數據庫server端的通信協議,實現難度較大。

2)proxy本身需要保證高可用。由于應用本來是直接訪問數據庫,現在改成了訪問proxy,意味著proxy必須保證高可用。否則,數據庫沒有宕機,proxy掛了,導致數據庫無法正常訪問,就尷尬了。

3)租戶隔離。可能有多個應用訪問proxy代理的底層數據庫,必然會對proxy自身的內存、網絡、cpu等產生資源競爭,proxy需要需要具備隔離的能力。

2.5 Sidecar

Sharding-Sidecar是ShardingSphere的第三個產品,目前仍然在規劃中。 定位為Kubernetes或Mesos的云原生數據庫代理,以DaemonSet的形式代理所有對數據庫的訪問。

通過無中心、零侵入的方案提供與數據庫交互的的嚙合層,即Database Mesh,又可稱數據網格。 Database Mesh的關注重點在于如何將分布式的數據訪問應用與數據庫有機串聯起來,它更加關注的是交互,是將雜亂無章的應用與數據庫之間的交互有效的梳理。使用Database Mesh,訪問數據庫的應用和數據庫終將形成一個巨大的網格體系,應用和數據庫只需在網格體系中對號入座即可,它們都是被嚙合層所治理的對象。

96f816c3c48215c7f1ccbb628d669c5b.png

優點:

分布式云原生的數據庫中間件模式,集成了jdbc和proxy各自的優點,能滿足高可用、跨語言、無感知升級等多種優勢特性

缺點:

需要整體架構支持云原生體系

目前還沒正式上線。

2.6 存儲層

這個層次實際上不應該叫數據庫中間件了,需要更換存儲。

比如Aurora、polardb、tidb等分布式數據庫,通過計算節點和存儲節點分離,計算節點scale up,存儲節點scale out的理念將公有云的關系數據庫產品推向了一個新的高度。

這樣一來,實際上已經不再需要傳統的數據庫中間件了,一切問題天然就不存在了。

3. 功能對比

從上文可以了解到,目前最主流的數據庫中間件主要是從驅動層smart-client和代理層proxy切入的。

下面,我們來了解下業界主流的中間件產品在這兩個層次的站隊情況與實現的功能對比。

7d4b55d99733b01235b40cea34670584.png

其他還有比如:

Atlas、Kingshard、DBProxy、mysql router、MaxScale、58 Oceanus、ArkProxy、Ctrip DAL、Tsharding、Youtube vitess、網易DDB、Heisenberg、proxysql、Mango、DDAL、Datahekr、MTAtlas、

我們可以看到,基本各個大廠都擼過一遍自己的中間件產品。不過目前開源而且比較火的已經不多了,主要還是以shardingsphere為主。

我們從功能維度,來對比一下幾個產品。

2b2a6fb6ca8df3eb12b139bd7dd6bb3a.png

4. 展望

從上文的分析可以看出,盡管目前主流的數據庫中間件還是在smart-client和proxy兩個層面進行處理的,但是,已經能看到未來的方向了。云原生的到來,估計會做進一步的降維打擊。

一方面是作為sidecar的模式,可能會有一個新的階段,比如shardingsphere推出sidecar模式后。

而另一方面,云數據庫通過全新的計算存儲分離的架構方式,打破傳統關系型數據庫的性能瓶頸,傳統數據庫中間件將不再需要關注,一切都將以數據庫基礎設施的形式提供給使用者。

都看到最后了,原創不易,點個關注,點個贊吧~
知識碎片重新梳理,構建Java知識圖譜:https://github.com/saigu/JavaKnowledgeGraph(歷史文章查閱非常方便)
掃碼關注我的公眾號“阿丸筆記”,第一時間獲取最新更新。同時能免費獲取海量Java技術棧電子書、各個大廠面試題哦。

dcd95373221a14802a2779fa5071fe3a.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530653.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530653.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530653.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

kafka多個消費者消費一個topic_kafka:一文讀懂消費者背后的那點quot;貓膩quot;

來自:z小趙前言經過前幾篇文章的介紹,大致了解了生產者背后的運行原理。消息有生產就得有人去消費,今天我們就來介紹下消費端消費消息背后發生的那點事兒。文章概覽消費者與消費組的“父子關系”。Repartition 觸發時機。消費者與 ZK 的關系。…

MySQL 入門教程:初學者一學就會,零基礎 MySQL 安裝及增刪改查入門

文章目錄前言一、MySQL 的相關概念介紹二、Windows 下 MySQL 的配置2.1、MySQL 安裝配置步驟2.2、MySQL 服務的啟動、停止與卸載三、MySQL 腳本的基本組成四、MySQL 中的數據類型4.1、數字類型4.2、日期和時間4.3、字符串類型五、使用 MySQL 數據庫5.1、登錄到 MySQL5.2、創建一…

四大基本反應類型的關系_如何進入四大的咨詢部門?

在會計行業,人人夢寐以求的職位,莫過于四大的財務咨詢的崗位,第一咨詢工作很高大上,第二沒有其他職位那么幸苦,我從我的工作經歷來講講,我是怎么進入咨詢這個“真香”崗位的。首先,給大家說一個…

MySQL 異常:這一篇就夠了,MySQL 拋出異常的幾種常見解決方式小結

Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connections could not be acquired from the underlying database! 幾種解決方式小結 文章目錄Could not open JDBC Connection for transaction; nested exception is java.sql…

vnc用戶名 查看linux_vnc用戶名未被識別,5步教你如何解決vnc用戶名未被識別

在進行vnc使用時,很多小伙伴會出現用戶名未被識別的情況,那如何解決vnc用戶名未被識別呢?咱接著往下看。使用工具:IIS7服務器管理工具主程序界面圖:官網地址:IIS7服務器管理工具作為IIS7服務器管理工具&…

IntelliJ IDEA 亂碼:全網最全 4 種方法完美解決 IntelliJ IDEA 控制臺中文亂碼問題

文章目錄前言一、修改當前 Web 項目 Tomcat Server 的虛擬機輸出選項二、修改 IntelliJ IDEA 全局編碼、項目編碼、屬性文件編碼三、IntelliJ IDEA 中自定義虛擬機選項四、直接修改 IntelliJ IDEA 配置文件的編碼信息五、修改成功亂碼問題解決總結前言 IntelliJ IDEA 如果不進行…

JVM 調優 1:“精通 JVM 調優,有過 JVM 調優經驗”簡歷敢寫嗎?薪資漲 5k 的技巧

文章目錄前言一、部分大廠對于 JVM GC 的面試題1.1、百度1.2、順豐1.3、京東1.4、淘寶1.5、阿里、蘑菇街二、Garbage Collectors(GC)作何使用三、GC 的十種類型四、JVM 的版本參數信息4.1、查看 Java 啟動時所有默認的命令行參數4.2、查看 Java 啟動時 G…

ip地址合不合法怎么看_電子印章合不合法?兩部門再發意見認定

近日,最高法、國家發改委聯合發布 《關于為新時代加快完善社會主義市場經濟體制提供司法服務和保障的意見》以助力經濟高質量發展、建設高標準市場體系為出發點和落腳點,從市場主體、產權保護、公平交易、市場秩序、民生保障、服務開放、高效解紛等七個方…

JVM 調優 2:GC 如何判斷對象是否為垃圾,三色標記算法應用原理及存在的問題?

文章目錄前言一、如何判斷一個對象是否為垃圾?1.1、reference count(引用計數)1.2、reference count(引用計數)存在的問題二、Root Searching(根可達算法或根搜索算法)2.1、Root Searching 釋義…

班尼機器人怎么拆_博鼎建筑科技外墻錯臺打磨機器人和外墻螺桿洞封堵機器人—自升造樓平臺1+N執行器...

繼上期的混凝土整平機和智能噴淋養護系統,本期給大家介紹的是實際應用在自升造樓平臺外墻環軌車上的外墻錯臺打磨機器人和外墻螺桿洞封堵機器人。外墻錯臺打磨機器人傳統外墻錯臺處理,需要人工拿鑿具對外墻面錯臺進行鑿平處理。鑿具重、操作人工容易疲勞…

架構師基礎必備:“腹有詩書氣自華”,馳騁一線大廠不是夢,抓緊收藏

文章目錄前言一、軟件1.1、何為軟件?1.2、計算機軟件的分類1.2.1、系統軟件1.2.2、應用軟件1.3、軟件系統體系結構1.3.1、C/S 結構(桌面應用程序)1.3.2、B/S 結構(Web 應用程序)1.3.3、Web 服務器與數據庫服務器1.3.4、…

JDK 7-JDK 21:Oracle Java SE 支持路線圖/Oracle Java SE Support Roadmap 持續更新

文章目錄前言一、Oracle Java SE 產品版本二、Java SE 8 的公共更新結束三、參考文檔總結前言 幾十年來,Java 生態系統已經成功地經歷了這個過程,經歷了十次主要的平臺修訂。長期強大的向后兼容性保護了整個生態系統的投資。同時,隨著時間的推…

multisim中輕觸開關在哪_現貨供應輕觸開關|品質確保|廠家直銷

輕觸開關是現今社會生活當中不可或缺的電子元器件之一,那么大家在使用的過程當中是否注意到一些細節問題。首先,我們要注意產品的放置要盡量避免接觸腐蝕性氣體以及過于潮濕的環境,這樣很容易造成產品的損壞,減少輕觸開關的使用壽…

DDoS 攻擊與防護(一):如何識別 DDoS 攻擊?DDoS 防護 ADS 服務有哪些?

文章目錄前言一、什么是 DDoS 防護 ADS?1.1、什么是 DDoS 攻擊?1.2、如何識別 DDoS 攻擊?1.3、從 Web 訪問流程分析 DDoS 攻擊1.4、DDoS 攻擊類型二、DDoS 防護 ADS 介紹2.1、Anti-DDoS 流量清洗2.2、DDoS 原生高級防護2.3、DDoS 高防三、DDo…

收藏功能_六款多功能榻榻米,裝完你家會大一半!超實用,收藏

原標題:六款多功能榻榻米,裝完你家會大一半!超實用,收藏當今社會城市的生活壓力大,在外日夜打拼,回到家中只想做一個慵懶派,隨性舒適的榻榻米,功能樣式豐富,能讓你徹底釋…

混凝土墻開洞_新樂專業混凝土切割報價適中

新樂專業混凝土切割報價適中粘碳纖維加固,屋頂加層。本公司采用目前的鋼筋混凝土切割結構分離和水鉆排孔技術。真正實現對不同規格和形狀的橋梁、道路、煙囪、建筑立柱、鋼筋砼墻體、磚混結構墻體、建筑大梁等建筑物、構筑物實施無損切割(傳統的建筑改造或局部拆除分…

class觸發后讓另一個class加樣式_Bootstrap的按鈕組樣式

將一系列的.btn包裹在.btn-group內&#xff0c;并使用我們提供的插件&#xff0c;可以實現選擇按鈕、選取塊狀區的行為功能。<div class"row mt-5 d-block"><div class"btn-group"><button class"btn btn-primary">Left</b…

碼云怎么創建公開的倉庫_使用碼云或GitHub搭建簡單的個人網站(補充hexo搭建博客)...

使用碼云或GitHub搭建個人網站碼云&#xff1a;1、新建一個倉庫路徑名會影響你的個人網站的網址(自行修改)&#xff0c;開源(公開)&#xff0c;其他默認我們點擊創建2、進入倉庫后&#xff0c;我們新建一個文件3、文件名為index.html&#xff0c;再寫入我們的html代碼然后“提交…

bsp模型適用于圖計算_【論文解讀】目標檢測之RFBnet模型

原創聲明&#xff1a;本文為 SIGAI 原創文章&#xff0c;僅供個人學習使用&#xff0c;未經允許&#xff0c;不能用于商業目的。其它機器學習、深度學習算法的全面系統講解可以閱讀《機器學習-原理、算法與應用》&#xff0c;清華大學出版社&#xff0c;雷明著&#xff0c;由SI…

win10雷電3接口驅動_“雷電3”接口知識大科普

近年來部分高端筆記本電腦在接口上會采用一種叫“雷電3”的新接口。今天小編就為大家解讀一下“雷電3”接口的特性。最早的雷電接口雷電接口是由Intel開發定制的、接口類型為mini DP&#xff0c;在雷電3接口出來之前&#xff0c;雷電1和雷電2都是作為在蘋果MAC上使用的&#xf…