輕量級Mysql分庫分表(Sharding)中間件 - Kratos
Github地址: https://github.com/gaoxianglong/kratos
kratos簡介
輕量級Mysql分庫分表(Sharding)中間件,豐富的Sharding算法支持(2類4種分片算法),能夠方便DBA實現庫的水平擴容和 降低數據遷移成本。Kratos站在巨人的肩膀上(SpringJdbc),采用與應用集成架構,放棄通用性,只為換取更好的執行性能與降低分布式環境下 外圍系統的宕機風險。
kratos的優點
- 動態數據源的無縫切換;
- master/slave一主一從讀寫分離;
- 單線程讀重試(取決于的數據庫連接池是否支持,推薦使用淘寶Druid);
- 單獨且友好支持Mysql數據庫,不支持其它RDBMS庫;
- 非Proxy架構,與應用集成,應用直連數據庫,降低外圍系統依賴帶來的宕機風險;
- 使用簡單,侵入型低,站在巨人的肩膀上,依賴于Spring JDBC;
- 不做真正意義上的Sql解析任務,規避Sql解析過程中由詞法解析、語法解析、語義解析等操作所帶來的性能延遲,僅用正則表達式解析片名和Route條件,解析過程僅耗時約<=1ms;
- 分庫分表路由算法支持2類4種分片模式,庫內分片/一庫一片;
- 提供自動生成全局唯一的sequenceId的API支持;
- 提供自動生成配置文件的支持,降低配置出錯率;
- 提供內置驗證頁面,方便開發、測試以及運維對執行后的sql進行驗證;
- 目標和職責定位明確,僅專注于Sharding,不支持其它多余或雞肋功能、無需兼容通用性,因此核心代碼量少、易讀易維護;
kratos的分片模型
kratos支持2類4種分片算法:
- 庫內分片類型:
- 片名連續的庫內分片算法;
- 非片名連續的庫內分片算法;
- 一庫一片類型:
- 片名連續的一庫一片算法;
- 非片名連續的一庫一片算法;
kratos的使用注意事項
- 不支持強一致性的分布式事務,但可以在業務層依賴MQ、異步操作的方式實現事物,保證最終一致性即可;
- 不支持多表查詢,所有多表查詢sql,務必全部打散為單條sql逐條執行;
- 不建議使用一些數據庫統計函數、Order by語句等;
- sql語句的第一個參數務必是路由條件;
- 不支持sql語句中出現數據庫別名;
- 路由條件必須是整數類型;
- 在連續分片模式下,子表后綴為符號"_"+4位整型,比如“tb_0001”——"tb_1024";
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!