成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL官方的數據庫中間件,有人用么?

開發 開發工具 MySQL
mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。

MySQL官方的數據庫中間件,mysql-proxy,有童鞋了解么?

mysql-proxy是什么?

mysql-proxy是mysql官方提供的mysql中間件服務,上游可接入若干個mysql-client,后端可連接若干個mysql-server。畫外音:中間件有基于客戶端的,也有基于服務端的,此為后者。

mysql-proxy使用什么協議?

它使用mysql協議,任何使用mysql-client的上游無需修改任何代碼,即可遷移至mysql-proxy上。

mysql-proxy能怎么用?能干嘛?

mysql-proxy最基本的用法,就是作為一個請求攔截,請求中轉的中間層:

進一步的,mysql-proxy可以分析與修改請求。攔截查詢和修改結果,需要通過編寫Lua腳本來完成。

mysql-proxy允許用戶指定Lua腳本對請求進行攔截,對請求進行分析與修改,它還允許用戶指定Lua腳本對服務器的返回結果進行修改,加入一些結果集或者去除一些結果集均可。

所以說,根本上,mysql-proxy是一個官方提供的框架,具備良好的擴展性,可以用來完成:

  • sql攔截與修改;
  • 性能分析與監控;
  • 讀寫分離;
  • 請求路由;
  • ...

這個框架提供了6個hook點,能夠讓用戶能夠動態的介入到client與server中的通訊中去。

mysql-proxy的架構與原理是怎樣的?

如前文所述,mysql-proxy向用戶提供了6個hook點,讓用戶實現Lua腳本來完成各種功能,這些hook點是以函數的形式提供的,用戶可以實現這些函數,在不同事件、不同操作發生時,做我們期望的事情。

(1) connect_server()

mysql-client向proxy發起連接時,proxy會調用這個函數。用戶可以實現該函數,來做一些負載均衡的事情,例如選擇將要連向那個mysql-server。假設有多個mysql-server后端,而用戶又沒有實現這個函數,proxy默認采用輪詢(round-robin)策略。

(2) read_handshake()

mysql-server向proxy返回“初始握手信息”時,proxy會調用這個函數。用戶可以實現這個函數,來做更多的權限驗證工作。

(3) read_auth()

mysql-client向proxy發送認證報文(user_name, password,database)時,proxy會調用這個函數。

(4) read_auth_result()

mysql-server向proxy返回認證結果時,proxy會調用這個函數。

(5) read_query()

認證完成后,mysql-client每次經過proxy向mysql-server發送query報文時,proxy會調用這個函數。用戶如果要攔截請求,就可以模擬mysql-server直接返回了,當然用戶亦可以實現各種策略,修改請求,路由請求等各種不同的業務邏輯。

(6) read_query_result()

認證完成后,mysql-server每次經過proxy向mysql-client返回query結果時,proxy會調用這個函數。需要注意,如果用戶沒有顯示實現read_query()函數,則read_query_result()函數是不會被調用的。用戶可以在此處實現各種合并策略,或者對結果集進行修改。

下圖是一個各hook函數的觸發架構圖,箭頭方向表示觸發時機:

可以發現,最重要的兩個函數其實是read_query()和read_query_result(),各種sql的改寫與結果集的改寫邏輯,都是在這兩個函數中實現的,更細節的query過程如下圖:

mysql-proxy可以實現什么?

案例一:sql時間統計分析假設mysql-client提交的原sql為:

  1. XYZ; 

proxy可以在read_query()里將其改寫為:

  1. SELECT NOW(); 
  2. XYZ; 
  3. SELECT NOW(); 

這樣在返回結果集時,就可以在應用層對sql時間進行記錄,以方便統計分析。

案例二:sql性能統計分析假設mysql-client提交的原sql為:

  1. XYZ; 

proxy可以在read_query()里將其改寫為:

  1. XYZ; 
  2. EXPLAIN XYZ; 

這樣在返回結果集時,就可以在應用層對sql性能進行記錄,以方便統計分析。

需要強調的是,這兩個案例,由于proxy在read_query()時對sql進行了改寫,故在read_query_result()時,mysql-server其實返回了比原請求更多的信息,proxy一定要將多余的信息去掉,再返回mysql-client。多說一句,可以加入一個唯一ID,來對請求sql和返回結果進行配對。

案例三:讀寫分離

mysql-proxy啟動時,通過參數即可配置后端mysql-server是主server還是read-only,無需修改任何代碼:

  1. shell> mysql-proxy \ 
  2. --proxy-backend-addresses=10.0.1.2:3306 \ 
  3. --proxy-read-only-backend-addresses=10.0.1.3:3306 

注意,這里的兩個mysql-server為主從架構。

案例四:性能水平擴展

mysql-proxy啟動時,通過參數配置多個后端,即可實現性能的水平擴展,無需修改任何代碼:

  1. shell> mysql-proxy \ 
  2. --proxy-backend-addresses=10.0.1.2:3306 \ 
  3. --proxy-backend-addresses=10.0.1.3:3306 

注意,這里的兩個mysql-server為主主架構,如果不做特殊修改,負載均衡策略為round-robin。

mysql-proxy Q&A?

(1) 提問:Lua腳本引入的額外開銷有多大?

官網回答:Lua很快,對于大部分應用來說,額外開銷很小,原始包(raw packet)開銷大概在400微秒左右。

畫外音:這,,,我不太相信。

(2) 提問:mysql-proxy和mysql-server可以部署在一臺機器上么?

官網回答:proxy單獨部署也可以,和mysql部署在同一臺機器上也可以。相比mysql而言,proxy不怎么占CPU和內存,其性能損耗可以忽略不計。

畫外音:這,,,性能損耗可以忽略,我也不太信。

(3) 提問:proxy可以處理SSL連接么?proxy不會獲取和保存我的明文密碼吧?

官網回答:作為中間人,不能處理加密信息。不會獲取密碼,也獲取不到。mysql協議不允許密碼以明文傳輸,傳輸的都是加密后的密文。

(4) 提問:在Lua腳本里可以使用LuaSocket,連緩存,連其他服務么?

官網回答:理論上可以。但是,大哥,你確定要這樣做么,強烈不建議這樣。

【本文為51CTO專欄作者“58沈劍”原創稿件,轉載請聯系原作者】

戳這里,看該作者更多好文 

 

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-05-23 18:55:05

mysql-proxy數據庫架構

2017-11-27 05:36:16

數據庫中間件TDDL

2017-11-27 05:06:42

數據庫中間件cobar

2017-12-01 05:04:32

數據庫中間件Atlas

2018-02-24 19:37:33

Java8數據庫中間件

2011-08-10 13:03:58

CJDBC數據庫集群

2022-10-19 07:35:28

2017-12-11 13:30:49

Go語言數據庫中間件

2017-07-26 09:41:28

MyCATSQLMongoDB

2024-12-06 08:29:29

2017-11-03 11:02:08

數據庫中間件

2017-11-30 08:56:14

數據庫中間件架構師

2017-07-18 17:35:16

數據庫MyCATPreparedSta

2017-11-27 06:01:37

數據庫中間件中間層

2017-12-01 05:40:56

數據庫中間件join

2017-07-18 17:07:40

數據庫 MyCATJoin

2022-04-01 10:55:30

數據庫混合云建設

2009-01-20 10:45:55

Oracle數據庫中間件

2020-10-15 08:34:32

數據庫中間件漫談

2013-12-12 10:55:21

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄色片在线观看网址 | 国产精品美女久久久久aⅴ国产馆 | 免费观看黄网站 | 亚洲一页 | 欧美日韩亚洲视频 | 狠狠干五月天 | 黄色免费在线网址 | 国产激情在线看 | 中文字幕一级毛片视频 | 一级国产精品一级国产精品片 | 成人妇女免费播放久久久 | 精品久久久久一区二区国产 | 99re视频在线观看 | 国产高清在线 | 久久91精品国产一区二区 | 精品真实国产乱文在线 | 精品成人av| 在线一区视频 | 精品91视频| 成人精品国产免费网站 | 成人午夜av | 日本羞羞影院 | 国产高清美女一级a毛片久久w | 超碰男人天堂 | 丁香综合 | 91av在线电影 | 亚洲精品日日夜夜 | 日韩和的一区二区 | 91麻豆精品国产91久久久久久 | 中文字幕日韩欧美一区二区三区 | 一区二区三区欧美大片 | 精品综合久久久 | 青草久久免费视频 | 日韩免费一区 | 狠狠的干 | 国产综合精品一区二区三区 | 狠狠操网站 | 日韩欧美在线视频一区 | 涩涩片影院 | 91社区在线观看高清 | 国产特一级黄色片 |