亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

干貨!MySql DAL中間件總結(jié)

1.前言

mysql作為互聯(lián)網(wǎng)公司都會用到的數(shù)據(jù)庫,如果在使用過程中出現(xiàn)性能問題,會采用mysql的橫向擴展,使用主從復(fù)制來提高讀性能,要是解決寫入問題,需要進行分庫分表。本文不會去介紹mysql的高可用,需要了解Mysql高可用架構(gòu)相關(guān)的請戳

干貨!MySql DAL中間件總結(jié)

淺談MySQL集群高可用架構(gòu),本文主要介紹mysql的訪問中間件(DAL)的一些實現(xiàn)方案。

2.Atlas

官網(wǎng):https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md

2.1.atlas簡介

Atlas是由 Qihoo 360公司W(wǎng)eb平臺部基礎(chǔ)架構(gòu)團隊開發(fā)維護的一個基于MySQL協(xié)議的數(shù)據(jù)中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎(chǔ)上,修改了大量bug,添加了很多功能特性。目前該項目在360公司內(nèi)部得到了廣泛應(yīng)用,很多MySQL業(yè)務(wù)已經(jīng)接入了Atlas平臺,每天承載的讀寫請求數(shù)達幾十億條。同時,有超過50家公司在生產(chǎn)環(huán)境中部署了Atlas,超過800人已加入了我們的開發(fā)者交流群,并且這些數(shù)字還在不斷增加。

2.2.atlas架構(gòu)

Atlas是一個位于應(yīng)用程序與MySQL之間中間件。在后端DB看來,Atlas相當于連接它的客戶端,在前端應(yīng)用看來,Atlas相當于一個DB。Atlas作為服務(wù)端與應(yīng)用程序通訊,它實現(xiàn)了MySQL的客戶端和服務(wù)端協(xié)議,同時作為客戶端與MySQL通訊。它對應(yīng)用程序屏蔽了DB的細節(jié),同時為了降低MySQL負擔(dān),它還維護了連接池。

干貨!MySql DAL中間件總結(jié)

2.3.主要功能

1.讀寫分離

2.從庫負載均衡

3.IP過濾

4.自動分表

5.DBA可平滑上下線DB

6.自動摘除宕機的DB

Atlas相對于官方MySQL-Proxy的優(yōu)勢

1.將主流程中所有Lua代碼用C重寫,Lua僅用于管理接口

2.重寫網(wǎng)絡(luò)模型、線程模型

3.實現(xiàn)了真正意義上的連接池

4.優(yōu)化了鎖機制,性能提高數(shù)十倍

3.Mysql router

官網(wǎng):http://dev.mysql.com/doc/mysql-router/en/

3.1.mysql router簡介

MySQL Router是mysql官方發(fā)布的數(shù)據(jù)庫中間件,是處于應(yīng)用client和dbserver之間的輕量級代理程序,它能檢測,分析和轉(zhuǎn)發(fā)查詢到后端數(shù)據(jù)庫實例,并把結(jié)果返回給client。是mysql-proxy的一個替代品。其架構(gòu)圖和功能如下。

3.2.mysql router架構(gòu)

干貨!MySql DAL中間件總結(jié)
  • 1.Router實現(xiàn)讀寫分離,程序不是直接連接數(shù)據(jù)庫IP,而是固定連接到mysql router。MySQL Router對前端應(yīng)用是透明的。應(yīng)用程序把MySQL Router當作是普通的mysql實例,把查詢發(fā)給MySQL Router,而MySQL Router會把查詢結(jié)果返回給前端的應(yīng)用程序。
  • 2.從數(shù)據(jù)庫服務(wù)器故障,業(yè)務(wù)可以正常運行。由MySQL Router來進行自動下線不可用服務(wù)器。程序配置不需要任何修改。
  • 3.主數(shù)據(jù)庫故障,由MySQL Router來決定主從自動切換,業(yè)務(wù)可以正常訪問。程序配置不需要做任何修改。

MySQL Router讀寫分離原理:

MySQL Router接受前端應(yīng)用程序請求后,根據(jù)不同的端口來區(qū)分讀寫,把連接讀寫端口的所有查詢發(fā)往主庫,把連接只讀端口的select查詢以輪詢方式發(fā)往多個從庫,從而實現(xiàn)讀寫分離的目的。讀寫返回的結(jié)果會交給MySQL Router,由MySQL Router返回給客戶端的應(yīng)用程序。

3.3.mysql router主要功能

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

4.Mycat

官網(wǎng):http://www.mycat.org.cn/

4.1.mycat簡介

Mycat是基于開源cobar演變而來,對cobar的代碼進行了徹底的重構(gòu),使用NIO重構(gòu)了網(wǎng)絡(luò)模塊,并且優(yōu)化了Buffer內(nèi)核,增強了聚合,Join等基本特性,同時兼容絕大多數(shù)數(shù)據(jù)庫成為通用的數(shù)據(jù)庫中間件。1.4 版本以后 完全的脫離基本cobar內(nèi)核,結(jié)合Mycat集群管理、自動擴容、智能優(yōu)化,成為高性能的中間件。

  • 一個徹底開源的,面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫集群
  • 支持事務(wù)、ACID、可以替代MySQL的加強版數(shù)據(jù)庫
  • 一個可以視為MySQL集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的Oracle集群
  • 一個融合內(nèi)存緩存技術(shù)、NoSQL技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server
  • 結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級數(shù)據(jù)庫產(chǎn)品
  • 一個新穎的數(shù)據(jù)庫中間件產(chǎn)品

4.2.mycat架構(gòu)

干貨!MySql DAL中間件總結(jié)

4.3.mycat主要功能

  • 支持SQL92標準
  • 遵守Mysql原生協(xié)議,跨語言,跨平臺,跨數(shù)據(jù)庫的通用中間件代理。
  • 基于心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群。
  • 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
  • 基于Nio實現(xiàn),有效管理線程,高并發(fā)問題。
  • 支持數(shù)據(jù)的多片自動路由與聚合,支持sum,count,max等常用的聚合函數(shù)。
  • 支持單庫內(nèi)部任意join,支持跨庫2表join,甚至基于caltlet的多表join。
  • 支持通過全局表,ER關(guān)系的分片策略,實現(xiàn)了高效的多表join查詢。
  • 支持多租戶方案。
  • 支持分布式事務(wù)(弱xa)。
  • 支持全局序列號,解決分布式下的主鍵生成問題。
  • 分片規(guī)則豐富,插件化開發(fā),易于擴展。
  • 強大的web,命令行監(jiān)控。
  • 支持前端作為mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
  • 支持密碼加密
  • 支持服務(wù)降級
  • 支持IP白名單
  • 支持SQL黑名單、sql注入攻擊攔截
  • 支持分表(1.6)
  • 集群基于ZooKeeper管理,在線升級,擴容,智能優(yōu)化,大數(shù)據(jù)處理(2.0開發(fā)版)。

Mysql+mycat架構(gòu)實戰(zhàn)請戳

干貨!MySql DAL中間件總結(jié)

Mysql+Mycat實現(xiàn)數(shù)據(jù)庫主從同步與讀寫分離

5.Cobar

官網(wǎng):https://github.com/alibaba/cobar/wiki

5.1.cobar簡介

Cobar是提供關(guān)系型數(shù)據(jù)庫(MySQL)分布式服務(wù)的中間件,它可以讓傳統(tǒng)的數(shù)據(jù)庫得到良好的線性擴展,并看上去還是一個數(shù)據(jù)庫,對應(yīng)用保持透明。

產(chǎn)品在阿里巴巴穩(wěn)定運行3年以上。

接管了3000+個MySQL數(shù)據(jù)庫的schema。

集群日處理在線SQL請求50億次以上。

集群日處理在線數(shù)據(jù)流量TB級別以上。

5.2.cobar架構(gòu)

干貨!MySql DAL中間件總結(jié)

5.3.cobar現(xiàn)狀

2013年阿里的Cobar在社區(qū)使用過程中發(fā)現(xiàn)存在一些比較嚴重的問題,及其使用限制,后來在cobar的基礎(chǔ)上改良誕生mycat,也就是目前cobar的代替版,而且2013年之后就沒有版本更新了。

6.Amoeba

官網(wǎng):http://docs.hexnova.com/amoeba/

6.1.amoeba簡介

Amoeba(變形蟲)項目,該開源框架于2008年 開始發(fā)布一款 Amoeba for Mysql軟件。這個軟件致力于MySQL的分布式數(shù)據(jù)庫前端代理層,它主要在應(yīng)用層訪問MySQL的 時候充當SQL路由功能,專注于分布式數(shù)據(jù)庫代理層(Database Proxy)開發(fā)。座落與 Client、DB Server(s)之間,對客戶端透明。具有負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關(guān)的到目標數(shù)據(jù)庫、可并發(fā)請求多臺數(shù)據(jù)庫合并結(jié)果。通過Amoeba你能夠完成多數(shù)據(jù)源的高可用、負載均衡、數(shù)據(jù)切片的功能

6.2.amoeba架構(gòu)

干貨!MySql DAL中間件總結(jié)

6.3.amoeba現(xiàn)狀

目前作者已經(jīng)停止維護。

7.Mysql proxy

7.1.mysql proxy簡介

MySQL Proxy是一個處于你的client端和MySQL server端之間的簡單程序,它可以監(jiān)測、分析或改變它們的通信。它使用靈活,沒有限制,常見的用途包括:負載均衡,故障、查詢分析,查詢過濾和修改等等。

MySQL Proxy就是這么一個中間層代理,簡單的說,MySQL Proxy就是一個連接池,負責(zé)將前臺應(yīng)用的連接請求轉(zhuǎn)發(fā)給后臺的數(shù)據(jù)庫,并且通過使用lua腳本,可以實現(xiàn)復(fù)雜的連接控制和過濾,從而實現(xiàn)讀寫分離和負載平衡。對于應(yīng)用來說,MySQL Proxy是完全透明的,應(yīng)用則只需要連接到MySQL Proxy的監(jiān)聽端口即可。當然,這樣proxy機器可能成為單點失效,但完全可以使用多個proxy機器做為冗余,在應(yīng)用服務(wù)器的連接池配置中配置到多個proxy的連接參數(shù)即可。

MySQL Proxy更強大的一項功能是實現(xiàn)“讀寫分離”,基本原理是讓主數(shù)據(jù)庫處理事務(wù)性查詢,讓從庫處理SELECT查詢。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性查詢導(dǎo)致的變更同步到集群中的從庫。

7.2.mysql proxy現(xiàn)狀

自從mysql官網(wǎng)出現(xiàn)mysql router之后,mysql proxy就已經(jīng)停止維護了。

mysql proxy架構(gòu)實戰(zhàn)

干貨!MySql DAL中間件總結(jié)

ProxySQL+Mysql實現(xiàn)數(shù)據(jù)庫讀寫分離實戰(zhàn)

8.客戶端分片

8.1.客戶端分片簡介

程序客戶端進行分庫分表。也就是直接在程序里面進行數(shù)據(jù)庫和表的拆分,例如用戶表。根據(jù)用戶的UID,例如13678789,根據(jù)最后一位,可以拆分為0-9共10個數(shù)據(jù)庫,把尾號是0的存入db_user_0數(shù)據(jù)庫,尾號是1的存入db_user_1數(shù)據(jù)庫,select的時候也是一樣。然后根據(jù)倒數(shù)第二位,可以拆分為0-9共10張表,根據(jù)倒數(shù)第二的尾號寫入相應(yīng)的表中。例如13678789這個UID的信息,寫入db_user_9數(shù)據(jù)庫的table_user_8的表中。

8.2.優(yōu)點

(1)不需要使用中間件對性能沒有影響

(2)通過代碼控制,可定義性強

9.后記

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

好啦!今天的分享到這里就結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會有大量優(yōu)質(zhì)內(nèi)容與大家分享,聲明:文章轉(zhuǎn)載于網(wǎng)絡(luò),版權(quán)歸原作者所有!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評如潮的Linux云計算運維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機構(gòu)!