如何写一个数据库中间件以及需要准备的知识储备
生活随笔
收集整理的這篇文章主要介紹了
如何写一个数据库中间件以及需要准备的知识储备
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么是數據庫中間件
1.透明化使用方無感知,或者盡量少感知。通過現有的接入端接入已有服務 2.增量服務不改變數據庫本身功能的前提下,提供額外的功能與服務一個原則不破壞原有邏輯,并且讓用戶基于之前的經驗可以快速上手接入端協議的選擇
1.編程語言接口(jdbc) 2.數據庫協議(數據庫本身的協議,不同的數據庫有不同的協議,而且有的公開,有的還不公開) 數據庫 任意 單一 異構語言 單一 任意 連接數 高(代理) 低 性能 損耗低 損耗略高 無中心化 是 否 靜態入口 無 有(可獨立部署)確立目標
1.數據分片屏蔽數據庫分片,使用無感知,應該和不分片的使用一樣 2.分布式治理配置動態化,監控,調用鏈,熔斷,失效轉移(開著飛機換引擎),彈性伸縮 3.分布式事務跨片訪問較大時,物理存儲確實可能跨庫訪問兩階段事務,柔性事務 4.安全管控SQL審計(避免慢sql等),數據脫敏(脫敏和非脫敏自動轉換),權限控制數據庫中間件和NewSQL的對比
1.數據庫中間件 2.NewSQL 設計理念 穩定+增量 顛覆+兼容(架構顛覆,外形兼容) 存儲引擎 沿用關系型數據庫 自研(大部分K-V為主) 分布式能力 增量 原生 可信賴度 高 待驗證(需要時間檢測,數據庫一般十年才能說穩定) HTAP(混用) 較難 較易(數據庫中間件可能會有重復的問題,比如數據庫分片,需要解析sql,中間件才能知道去哪片執行, 但真正的數據庫層,也會解析sql,才能知道怎么執行sql,所以解析sql會有重復,不可避免)ShardingSphere簡單介紹(本文也是聽開源者張亮同學的視頻的總結)
核心功能數據分片,分布式事務,數據庫治理彈性伸縮,管控界面 接入端Sharding-JDBC,Sharding-Proxy,Sharding-Sidecar 核心功能+接入端=(HTAP,云原生,零侵入)接入端技術儲備
編程語言接口JDBC接口各種數據庫連接池各種ORM框架和Spring相關知識(Spring自定義命名空間) 數據庫協議MySQL & PostgreSQL協議IO Netty并發 & 多線程數據分片技術儲備
SQL解析(Lexer,Parser,AST) SQL路由(去哪個片) SQL改寫(到了某個片) SQL執行(多線程) 結果歸并(排序算法)分布式事務技術儲備
兩階段事務ACID事務要素XA協議以及他的各種實現Percolator事務模型(時間戳+兩階段事務做成強一致,來自谷歌論文) 柔性事務BASE和CAP理論TCC和Saga自動補償,反向SQL數據快照,版本控制數據庫治理技術儲備
配置中心:注冊中心相關,包括Zookeeper、Etcd等 服務治理:服務化相關知識可以復用,如服務發現,熔斷,限流,負載均衡,失效轉移等 追蹤監控:分布式調用鏈追蹤,OpenTracing協議等,數據庫以及應用狀態相關指標收集和暴露基礎技術儲備
性能調優JVM GC調優內存泄露,資源泄露排查 質量保證單元測試,整合測試,壓力測試,疲勞測試,性能測試體系的搭建寫中間件理念:隨時準備面向開源
1.保持視野的敏銳了解技術社區現狀,優先考慮復用和融入,而非顛覆保證能被人快速上手 2.保持設計解耦技術模塊與業務模塊和環境相關,在設計時即保證解耦 3.隨時保持代碼精煉面向意圖編程,代碼隨時準備開放面向社區,并具備高可讀性總結
以上是生活随笔為你收集整理的如何写一个数据库中间件以及需要准备的知识储备的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: redis单线程为什么还快的个人解释
- 下一篇: javascript中的this讲解