MySQL中介軟體總結

lhrbest發表於2020-02-13

MySQL中介軟體總結


1、前言

MySql 作為網際網路公司都會用到的資料庫,如果在使用過程中出現效能問題,會採用mysql的橫向擴充套件,使用主從複製來提高讀效能,要是解決寫入問題,需要進行分庫分表。本文不會去介紹MySql 的高可用,需要了解Mysql高可用架構相關的請戳 MySQL中介軟體總結 淺談MySQL叢集高可用架構 本文 主要介紹mysql的訪問中介軟體(DAL)的一些實現方案。

2、Atlas

官網:https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

2.1.atlas簡介

Atlas是由 Qihoo 360公司Web平臺部基礎架構團隊開發維護的一個基於MySQL協議的資料中間層專案。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,新增了很多功能特性。目前該專案在360公司內部得到了廣泛應用,很多MySQL業務已經接入了Atlas平臺,每天承載的讀寫請求數達幾十億條。同時,有超過50家公司在生產環境中部署了Atlas,超過800人已加入了我們的開發者交流群,並且這些數字還在不斷增加。

2.2.atlas架構

Atlas是一個位於應用程式與MySQL之間中介軟體。在後端DB看來,Atlas相當於連線它的客戶端,在前端應用看來,Atlas相當於一個DB。Atlas作為服務端與應用程式通訊,它實現了MySQL的客戶端和服務端協議,同時作為客戶端與MySQL通訊。它對應用程式遮蔽了DB的細節,同時為了降低MySQL負擔,它還維護了連線池。

MySQL中介軟體總結

2.3、主要功能

1.讀寫分離

2.從庫負載均衡

3.IP過濾

4.自動分表

5.DBA可平滑上下線DB

6.自動摘除當機的DB

Atlas相對於官方MySQL-Proxy的優勢

1.將主流程中所有Lua程式碼用C重寫,Lua僅用於管理介面

2.重寫網路模型、執行緒模型

3.實現了真正意義上的連線池

4.優化了鎖機制,效能提高數十倍

3、Mysql router

官網:http://dev.mysql.com/doc/mysql-router/en/

3.1、mysql router簡介

MySQL Router是mysql官方釋出的資料庫中介軟體,是處於應用client和dbserver之間的輕量級代理程式,它能檢測,分析和轉發查詢到後端資料庫例項,並把結果返回給client。是mysql-proxy的一個替代品。其架構圖和功能如下。

3.2、mysql router架構

MySQL中介軟體總結

  • 1.Router實現讀寫分離,程式不是直接連線資料庫IP,而是固定連線到mysql router。 MySQL Router對前端應用是透明的。應用程式把MySQL Router當作是普通的mysql例項,把查詢發給MySQL Router,而MySQL Router會把查詢結果返回給前端的應用程式。

  • 2.從資料庫伺服器故障,業務可以正常執行。由MySQL Router來進行自動下線不可用伺服器。程式配置不需要任何修改。

  • 3.主資料庫故障,由MySQL Router來決定主從自動切換,業務可以正常訪問。程式配置不需要做任何修改。

MySQL Router讀寫分離原理:

MySQL Router接受前端應用程式請求後,根據不同的埠來區分讀寫,把連線讀寫埠的所有查詢發往主庫,把連線只讀埠的select查詢以輪詢方式發往多個從庫,從而實現讀寫分離的目的。讀寫返回的結果會交給MySQL Router,由MySQL Router返回給客戶端的應用程式。

3.3.mysql router主要功能

MySQL Router的主要用途是讀寫分離,主主故障自動切換,負載均衡,連線池等。

4、Mycat

官網:http://www.mycat.org.cn/

4.1、mycat簡介

Mycat是基於開源cobar演變而來,對cobar的程式碼進行了徹底的重構,使用NIO重構了網路模組,並且優化了Buffer核心,增強了聚合,Join等基本特性,同時相容絕大多數資料庫成為通用的資料庫中介軟體。1.4 版本以後 完全的脫離基本cobar核心,結合Mycat叢集管理、自動擴容、智慧優化,成為高效能的中介軟體。

  • 一個徹底開源的,面向企業應用開發的大資料庫叢集
  • 支援事務、ACID、可以替代MySQL的加強版資料庫
  • 一個可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集
  • 一個融合記憶體快取技術、NoSQL技術、HDFS大資料的新型SQL Server
  • 結合傳統資料庫和新型分散式資料倉儲的新一代企業級資料庫產品
  • 一個新穎的資料庫中介軟體產品

4.2、mycat架構

MySQL中介軟體總結

4.3、mycat主要功能

  • 支援SQL92標準

  • 遵守Mysql原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理。

  • 基於心跳的自動故障切換,支援讀寫分離,支援MySQL主從,以及galera cluster叢集。

  • 支援Galera for MySQL叢集,Percona Cluster或者MariaDB cluster

  • 基於Nio實現,有效管理執行緒,高併發問題。

  • 支援資料的多片自動路由與聚合,支援sum,count,max等常用的聚合函式。

  • 支援單庫內部任意join,支援跨庫2表join,甚至基於caltlet的多表join。

  • 支援通過全域性表,ER關係的分片策略,實現了高效的多表join查詢。

  • 支援多租戶方案。

  • 支援分散式事務(弱xa)。

  • 支援全域性序列號,解決分散式下的主鍵生成問題。

  • 分片規則豐富,外掛化開發,易於擴充套件。

  • 強大的web,命令列監控。

  • 支援前端作為mysq通用代理,後端JDBC方式支援Oracle、DB2、SQL Server 、 mongodb 、巨杉。

  • 支援密碼加密

  • 支援服務降級

  • 支援IP白名單

  • 支援SQL黑名單、sql注入攻擊攔截

  • 支援分表(1.6)

  • 叢集基於ZooKeeper管理,線上升級,擴容,智慧優化,大資料處理(2.0開發版)。

Mysql+mycat架構實戰請戳 MySQL中介軟體總結 Mysql+Mycat實現資料庫主從同步與讀寫分離

5、Cobar

官網:https://github.com/alibaba/cobar/wiki

5.1.cobar簡介

Cobar是提供關係型資料庫(MySQL)分散式服務的中介軟體,它可以讓傳統的資料庫得到良好的線性擴充套件,並看上去還是一個資料庫,對應用保持透明。
產品在阿里巴巴穩定執行3年以上。
接管了3000+個MySQL資料庫的schema。
叢集日處理線上SQL請求50億次以上。
叢集日處理線上資料流量TB級別以上。

5.2.cobar架構

MySQL中介軟體總結

5.3、cobar現狀

2013年阿里的Cobar在社群使用過程中發現存在一些比較嚴重的問題,及其使用限制,後來在cobar的基礎上改良誕生mycat,也就是目前cobar的代替版,而且2013年之後就沒有版本更新了。

6、Amoeba

官網:http://docs.hexnova.com/amoeba/

6.1、amoeba簡介

Amoeba(變形蟲)專案,該開源框架於2008年 開始釋出一款 Amoeba for Mysql軟體。這個軟體致力於MySQL的分散式資料庫前端代理層,它主要在應用層訪問MySQL的 時候充當SQL路由功能,專注於分散式資料庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標資料庫、可併發請求多臺資料庫合併結果。通過Amoeba你能夠完成多資料來源的高可用、負載均衡、資料切片的功能

6.2、amoeba架構

MySQL中介軟體總結

6.3、amoeba現狀

目前作者已經停止維護。

7、Mysql proxy

7.1.mysql proxy簡介

MySQL Proxy是一個處於你的client端和MySQL server端之間的簡單程式,它可以監測、分析或改變它們的通訊。 它使用靈活,沒有限制,常見的用途包括: 負載均衡,故障、查詢分析,查詢過濾和修改等等。
MySQL Proxy就是這麼一箇中間層代理,簡單的說,MySQL Proxy就是一個連線池,負責將前臺應用的連線請求轉發給後臺的資料庫,並且通過使用lua指令碼,可以實現複雜的連線控制和過濾,從而實現讀寫分離和負載平衡。 對於應用來說,MySQL Proxy是完全透明的,應用則只需要連線到MySQL Proxy的監聽埠即可。 當然,這樣proxy機器可能成為單點失效,但完全可以使用多個proxy機器做為冗餘,在應用伺服器的連線池配置中配置到多個proxy的連線引數即可。
MySQL Proxy更強大的一項功能是實現“讀寫分離”,基本原理是讓主資料庫處理事務性查詢,讓從庫處理SELECT查詢。 資料庫複製被用來把事務性查詢導致的變更同步到叢集中的從庫。

7.2、mysq l proxy現狀

自從mysql官網出現mysql router之後,mysql proxy就已經停止維護了。

mysql proxy架構實戰 MySQL中介軟體總結 ProxySQL+Mysql實現資料庫讀寫分離實戰

8、客戶端分片

8.1、客戶端分片簡介

程式客戶端進行分庫分表。也就是直接在程式裡面進行資料庫和表的拆分,例如使用者表。根據使用者的UID,例如13678789,根據最後一位,可以拆分為0-9共10個資料庫,把尾號是0的存入db_user_0資料庫,尾號是1的存入db_user_1資料庫,select的時候也是一樣。然後根據倒數第二位,可以拆分為0-9共10張表,根據倒數第二的尾號寫入相應的表中。例如13678789這個UID的資訊,寫入db_user_9資料庫的table_user_8的表中。

8.2、優點

(1)不需要使用中介軟體對效能沒有影響
(2)通過程式碼控制,可定義性強

9、後記

對於上面的mysql中介軟體,我個人建議在生產中使用atlas和mycat,開發實力較強或者有DBA的情況下可以使用客戶端分片。Mysql router感覺目前還不是很成熟,至於其他的中介軟體作者都不更新了,只要沒有歷史遺留問題還是不要用了。







About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2020-02-01 06:00 ~ 2020-02-31 24:00 在西安完成

● 最新修改時間:2020-02-01 06:00 ~ 2020-02-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2675514/,如需轉載,請註明出處,否則將追究法律責任。

相關文章