偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

數(shù)據(jù)庫(kù) MySQL
本文不會(huì)去介紹MySql 的高可用,需要了解Mysql高可用架構(gòu)相關(guān)的請(qǐng)戳淺談MySQL集群高可用架構(gòu),本文主要介紹mysql的訪問(wèn)中間件(DAL)的一些實(shí)現(xiàn)方案。

1、前言

MySql 作為互聯(lián)網(wǎng)公司都會(huì)用到的數(shù)據(jù)庫(kù),如果在使用過(guò)程中出現(xiàn)性能問(wèn)題,會(huì)采用mysql的橫向擴(kuò)展,使用主從復(fù)制來(lái)提高讀性能,要是解決寫(xiě)入問(wèn)題,需要進(jìn)行分庫(kù)分表。本文不會(huì)去介紹MySql 的高可用,需要了解Mysql高可用架構(gòu)相關(guān)的請(qǐng)戳淺談MySQL集群高可用架構(gòu),本文主要介紹mysql的訪問(wèn)中間件(DAL)的一些實(shí)現(xiàn)方案。 

2、Atlas

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

2.1.atlas簡(jiǎn)介

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

2.2.atlas架構(gòu)

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

 

2.3、主要功能

1.讀寫(xiě)分離

2.從庫(kù)負(fù)載均衡

3.IP過(guò)濾

4.自動(dòng)分表

5.DBA可平滑上下線(xiàn)DB

6.自動(dòng)摘除宕機(jī)的DB

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

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

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

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

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

3、Mysql router

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

3.1、mysql router簡(jiǎn)介

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

3.2、mysql router架構(gòu)

 

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

MySQL Router讀寫(xiě)分離原理:

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

3.3.mysql router主要功能

MySQL Router的主要用途是讀寫(xiě)分離,主主故障自動(dòng)切換,負(fù)載均衡,連接池等。

4、Mycat

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

4.1、mycat簡(jiǎn)介

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

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

4.2、mycat架構(gòu)

 

4.3、mycat主要功能

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

Mysql+mycat架構(gòu)實(shí)戰(zhàn)請(qǐng)戳Mysql+Mycat實(shí)現(xiàn)數(shù)據(jù)庫(kù)主從同步與讀寫(xiě)分離 

5、Cobar

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

5.1.cobar簡(jiǎn)介

Cobar是提供關(guān)系型數(shù)據(jù)庫(kù)(MySQL)分布式服務(wù)的中間件,它可以讓傳統(tǒng)的數(shù)據(jù)庫(kù)得到良好的線(xiàn)性擴(kuò)展,并看上去還是一個(gè)數(shù)據(jù)庫(kù),對(duì)應(yīng)用保持透明。產(chǎn)品在阿里巴巴穩(wěn)定運(yùn)行3年以上。接管了3000+個(gè)MySQL數(shù)據(jù)庫(kù)的schema。集群日處理在線(xiàn)SQL請(qǐng)求50億次以上。集群日處理在線(xiàn)數(shù)據(jù)流量TB級(jí)別以上。

5.2.cobar架構(gòu)

 

5.3、cobar現(xiàn)狀

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

6、Amoeba

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

6.1、amoeba簡(jiǎn)介

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

6.2、amoeba架構(gòu)

 

6.3、amoeba現(xiàn)狀

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

7、Mysql proxy

7.1.mysql proxy簡(jiǎn)介

MySQL Proxy是一個(gè)處于你的client端和MySQL server端之間的簡(jiǎn)單程序,它可以監(jiān)測(cè)、分析或改變它們的通信。它使用靈活,沒(méi)有限制,常見(jiàn)的用途包括:負(fù)載均衡,故障、查詢(xún)分析,查詢(xún)過(guò)濾和修改等等。MySQL Proxy就是這么一個(gè)中間層代理,簡(jiǎn)單的說(shuō),MySQL Proxy就是一個(gè)連接池,負(fù)責(zé)將前臺(tái)應(yīng)用的連接請(qǐng)求轉(zhuǎn)發(fā)給后臺(tái)的數(shù)據(jù)庫(kù),并且通過(guò)使用lua腳本,可以實(shí)現(xiàn)復(fù)雜的連接控制和過(guò)濾,從而實(shí)現(xiàn)讀寫(xiě)分離和負(fù)載平衡。對(duì)于應(yīng)用來(lái)說(shuō),MySQL Proxy是完全透明的,應(yīng)用則只需要連接到MySQL Proxy的監(jiān)聽(tīng)端口即可。當(dāng)然,這樣proxy機(jī)器可能成為單點(diǎn)失效,但完全可以使用多個(gè)proxy機(jī)器做為冗余,在應(yīng)用服務(wù)器的連接池配置中配置到多個(gè)proxy的連接參數(shù)即可。MySQL Proxy更強(qiáng)大的一項(xiàng)功能是實(shí)現(xiàn)“讀寫(xiě)分離”,基本原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性查詢(xún),讓從庫(kù)處理SELECT查詢(xún)。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性查詢(xún)導(dǎo)致的變更同步到集群中的從庫(kù)。

7.2、mysql proxy現(xiàn)狀

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

mysql proxy架構(gòu)實(shí)戰(zhàn)ProxySQL+Mysql實(shí)現(xiàn)數(shù)據(jù)庫(kù)讀寫(xiě)分離實(shí)戰(zhàn) 

8、客戶(hù)端分片

8.1、客戶(hù)端分片簡(jiǎn)介

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

8.2、優(yōu)點(diǎn)

(1)不需要使用中間件對(duì)性能沒(méi)有影響(2)通過(guò)代碼控制,可定義性強(qiáng)

9、后記

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

 

責(zé)任編輯:龐桂玉 來(lái)源: 數(shù)據(jù)庫(kù)開(kāi)發(fā)
相關(guān)推薦

2019-09-29 11:04:22

MySQL數(shù)據(jù)庫(kù)Atlas

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開(kāi)發(fā)CRUD

2016-11-11 21:00:46

中間件

2018-02-01 10:19:22

中間件服務(wù)器系統(tǒng)

2018-07-29 12:27:30

云中間件云計(jì)算API

2012-11-30 10:21:46

移動(dòng)中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2009-06-16 15:55:06

JBoss企業(yè)中間件

2011-11-28 17:53:55

淘寶aDev技術(shù)沙龍

2011-10-24 07:41:38

SOA中間件應(yīng)用服務(wù)器

2021-03-06 08:02:39

MySQL集群服務(wù)器

2017-05-23 18:55:05

mysql-proxy數(shù)據(jù)庫(kù)架構(gòu)

2021-04-22 06:13:41

Express 中間件原理中間件函數(shù)

2024-12-09 00:00:15

Gin框架中間件

2015-02-07 21:52:45

PaaS中間件

2009-06-16 10:53:01

JBoss中間件JBoss架構(gòu)

2021-10-06 19:03:35

Go中間件Middleware

2019-06-04 15:18:30

Web ServerNginx中間件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)