您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關MySQL中如何使用DAL中間件,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
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負擔,它還維護了連接池。
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架構
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架構
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+Mycat實現數據庫主從同步與讀寫分離
5、Cobar
官網:https://github.com/alibaba/cobar/wiki
5.1.cobar簡介
Cobar是提供關系型數據庫(MySQL)分布式服務的中間件,它可以讓傳統的數據庫得到良好的線性擴展,并看上去還是一個數據庫,對應用保持透明。產品在阿里巴巴穩定運行3年以上。接管了3000+個MySQL數據庫的schema。集群日處理在線SQL請求50億次以上。集群日處理在線數據流量TB級別以上。
5.2.cobar架構
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架構
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、mysql proxy現狀
自從mysql官網出現mysql router之后,mysql proxy就已經停止維護了。
mysql proxy架構實戰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)通過代碼控制,可定義性強
以上就是MySQL中如何使用DAL中間件,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。