日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

golang mysql proxy_mixer: 一个用go实现的mysql proxy

發布時間:2025/3/20 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang mysql proxy_mixer: 一个用go实现的mysql proxy 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

介紹

mixer是一個用go實現的mysql proxy,支持基本的mysql代理功能。

mysql的中間件很多,對于市面上面現有的功能強大的proxy,我主要考察了如下幾個:

mysql-proxy,mysql官方的代理,使用起來并不友好,需要進行lua定制,而且本人對其穩定性和性能存疑。

Cobar,阿里的東西,品質沒的說,但對于我們項目,有點殺雞用牛刀的感覺,另外我們都不會java。

Atlas,360出品的基于mysql-proxy的增強版,幾乎用c重寫了核心框架,性能和穩定性都沒話說。

當然,還有很多強大的proxy,我不可能一一涉及,而現階段我們項目中使用的是Atlas(這算不算給Atlas打了一個廣告?)。

既然有這么多的proxy,為什么我還想自己實現一個呢?可能最主要的原因在于興趣使然吧。

mysql功能支持

當開始著手進行mixer開發的時候,我就知道,mixer不是mysql,它不可能proxy所有mysql的功能。所以,我決定mixer只支持如下mysql命令:

COM_QUERY

select, insert, update, delete, replace

set autocommit

set names

begin, commit, rollback

COM_PING

COM_INIT_DB

COM_STMT_PREPARE, COM_STMT_EXEC等COM_STMT_*命令,僅支持上述COM_QUERY命令的prepare

[mixer](https://github.com/siddontang/mixer不支持命令挺多的,列舉一些:

set variable。如果支持,mixer需要維護每一個變量的狀態,增加了復雜度。但mixer支持autocommit和names的設置。

sql text模式的prepare statement。

show命令。

存儲過程。

雖然很多功能現階段沒有,但不排除后續支持。

高可用方案

mixer提供了一套mysql高可用使用方案,現階段主要功能如下:

讀寫分離,將select發送到slave,其余發送到master執行,事物所有在master執行。現階段只支持一主一備。

主備自動切換,當主mysql不可用,根據相關規則切換到backup mysql執行。

Todo

mixer還不完善,很多功能需要實現,后續優先需要實現的功能:

parser,將sql進行語法解析,構建AST,在proxy層面就防止一些mysql隱患,譬如注入攻擊,delete沒有where等。

自定義路由,根據路由規則將sql路由到不同mysql執行。譬如根據主鍵將select語句hash到不同的slave上面執行。

統計功能。

代碼在這里https://github.com/siddontang/mixer。非常希望對proxy感興趣的童鞋參與進來,共同完善mixer,使其成為另一個mysql中間件解決方案。

總結

以上是生活随笔為你收集整理的golang mysql proxy_mixer: 一个用go实现的mysql proxy的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。