Oceanus - 來自 58 同城的數據庫中間件
關于DB中間件
在DB存儲需求中,盡管業務不同,技術難點還是類似的,開源世界有很多DB中間件,解決方案也以通用方案為主,滿足業務需要為前提,支持各種類型的需求。
Oceanus致力于打造一個功能簡單、可依賴、易于上手、易于擴展、易于集成的解決方案,甚至是平臺化系統。擁抱開源,提供各類插件機制集成其他開源項目,新手可以在幾分鐘內上手編程,分庫分表邏輯不再與業務緊密耦合,擴容有標準模式,減少意外錯誤的發生。
Oceanus內部名詞定義
- datanode:數據源節點。為一個數據源命名,配置鏈接屬性、報警實現
- namenode:數據源的簇。為一組數據源命名,指定這組數據源的負載方式、訪問模式、權重
- table:映射表。匹配解析sql中的table名稱,命中table標簽的name屬性值后,會執行約定的路由邏輯
- bean:實體。由其他標簽引用,實體類必須有無參的構造函數
- tracker:監控埋點。涉及到計算和IO的功能點都有監控點,自定義一個埋點實現類,當功能耗時超出預期時會執行其中的回調函數,便于監控和優化系統
為什么說Oceanus是非常易用的
Oceanus在設計時非常注重使用者的評價,配置結構近乎于和使用者交流約定業務規則,便于不同的人看同一套配置,互相理解流程。當配置文件編 寫 完成后,編碼就變得更加簡單,只調用Oceanus客戶端的幾個方法就可以實現數據庫操作,不再關心HA、報警、負載均衡、性能監控等問題。良好的用戶視 覺減少了分庫分表在業務場景中的耦合度,對于編碼者就像只對一個table操作,Oceanus負責進行sql解析、路由、sql重寫。
如提交: select * from user; 改寫成: select * from user0; select * from user1; select * from user2; select * from user3;
分發給不同的庫(或者同庫)執行,用戶視覺如圖:
開源集成
“接地氣,擁抱開源” 是Oceanus的設計原則之一,可以很好的集成到mybatis和hibernate中,只要引用其中的插件,編寫Oceanus配置文件,然后改寫各 自的DataSource實現或ConnectionProvider即可做到集成。這樣既用到了熟悉的ORM,又借助Oceanus實現了分庫分表等功 能。
待開發
不得不說Oceanus在設計上非常靈活,使得每一個細小的功能點都有極高的切入價值,比如Cache機制、全局的ID生成規則、資源可視化監控等等,把其中某一個點做得足夠好,都會為整體產品帶來質的提升,簡化實際生產環境中的配套系統研發維護成本。