輕量級Mysql分庫分表(Sharding)中間件 - Kratos

jopen 9年前發布 | 17K 次閱讀 Kratos

輕量級Mysql分庫分表(Sharding)中間件 - Kratos

輕量級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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!