題主,恭喜你,你深刻思考了一系列重要問題,做爲一個開源技術人員+數據中間件的愛好者,試着回答一下題主的幾個問題:html
1、何時須要數據中間件,中間件能幹什麼node
就像題主說的那樣,隨着業務的發展,MySQL、Oracle數據庫裏的表愈來愈大,一兩年之後,2千萬、甚至上億記錄的表就會出現了(通常能夠簡單認爲表比較複雜的時候,MySQL幾百萬上千萬的時候,Oracle幾千萬的時候,就會出現複雜查詢或變動有性能問題),這時候可能會致使複雜的查詢慢,插入和修改數據慢,修改表的DDL執行太慢致使沒法修改列類型或者加索引或者加字段等等。怎麼辦呢?這時候咱們能夠由幾個處理辦法:mysql
若是咱們的業務發展到了須要下降單庫單表的壓力、或者讀寫分離,而研發團隊又不大,本身對這一塊的技術積累不足以本身開發一些中間層代碼去搞定問題,就像題主同樣,須要考慮引入數據中間件了。爲何都是國內大場開源的數據中間件,小公司數據量不夠,或技術不夠,不須要本身開發中間件,量上來之後,若是使用場景簡單,採用開源技術是最經濟的解決辦法。大公司有能力本身搞定數據中間件,咱們如今知道的都是這部分裏面開源出來的,特別是近幾年,就像有個答主說的同樣,你們都在搞分佈式數據庫了,分佈式數據庫的容量上限,遠大於傳統的關係數據庫MySQL/Oracle,能夠考慮是把中間件的部分功能固化到數據庫裏了,這些公司不太關注這些問題了。另外一方面,有些數據中間件,融入雲的體系,變成閉源的RDS裏的一部分了。git
2、數據中間件的實現原理,有哪些開源數據中間件github
簡單的說,有兩種原理:sql
早期主流的開源中間件以下圖:數據庫
引自:https://blog.csdn.net/w892824196/article/details/82660415apache
上面都是提到了分佈分表和讀寫分離的中間件,其實還有一些專一於分佈式事務的、數據複製傳輸的等等,好比fescar,canal、outter等等。架構
其實淘寶早期開源了TDDL,淘寶分佈式數據中間層,可是隻開源了客戶端jdbc模式,沒有開源proxy代理模式。併發
3、爲何都是國內開源的,而且大都中止了更新
國內的開源,部分是大公司主導的技術影響力輸出,部分是我的的興趣之做貢獻給社區,總而言之是沒有直接的顯著回報的。也就是說,這一塊一直沒有一個穩定可行的商業模式來支持,因此一直以來,大公司實際上也看不上,由於賺不了錢,而沒有回報的事情就沒法長久,因此天然就中止了更新。對於個別有云服務的公司,這一塊技術發展好了,其實能夠併到雲裏提供數據服務,或者進一步的發展成爲分佈式數據庫,這樣能夠變現了,那就閉源,因此,如今活躍的開源數據中間件,已經很少了,下面就推薦一個活躍的項目。
4、推薦使用什麼數據中間件--ShardingSphere
推薦使用近期加入Apache基金會的第一款數據中間件,也是國人開發的,ShardingSphere項目。能夠直接在這個項目的github commits記錄看到,很是活躍,天天都有提交記錄,issue也一直在持續維護。爲何還活得這麼好呢?由於有張亮團隊的專職在開發、維護和推廣。
詳細文檔和代碼參見:
ShardingSphere apache/incubator-shardingsphereShardingSphere是一套開源的分佈式數據庫中間件解決方案組成的生態圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產品組成。 他們均提供標準化的數據分片、分佈式事務和數據庫治理功能,可適用於如Java同構、異構語言、雲原生等各類多樣化的應用場景。
ShardingSphere定位爲關係型數據庫中間件,旨在充分合理地在分佈式的場景下利用關係型數據庫的計算和存儲能力,而並不是實現一個全新的關係型數據庫。 它與NoSQL和NewSQL是並存而非互斥的關係。NoSQL和NewSQL做爲新技術探索的前沿,放眼將來,擁抱變化,是很是值得推薦的。反之,也能夠用另外一種思路看待問題,放眼將來,關注不變的東西,進而抓住事物本質。 關係型數據庫當今依然佔有巨大市場,是各個公司核心業務的基石,將來也難於撼動,咱們目前階段更加關注在原有基礎上的增量,而非顛覆。
稍後我推薦ShardingSphere項目的兩個主要PMC,@張亮 和 @曹昊,來關注一下這個問題。