自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

開(kāi)發(fā) 后端 數(shù)據(jù)庫(kù)運(yùn)維
相對(duì)于業(yè)務(wù)邏輯分庫(kù)分表,通過(guò)DBProxy數(shù)據(jù)庫(kù)中間件,可以更簡(jiǎn)單輕松更快的對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平擴(kuò)展,由原來(lái)單臺(tái)數(shù)據(jù)庫(kù)擴(kuò)展到多臺(tái)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中間件通過(guò)路由規(guī)則將數(shù)據(jù)的訪問(wèn)請(qǐng)求路由到其中一臺(tái)數(shù)據(jù)庫(kù)上,從而大大降低了數(shù)據(jù)訪問(wèn)的瓶頸和單臺(tái)數(shù)據(jù)的壓力。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

前言碎語(yǔ)

好久沒(méi)更博了,今天引用美團(tuán)技術(shù)團(tuán)隊(duì)的一篇文章來(lái)給大家分享一款數(shù)據(jù)庫(kù)中間件-美團(tuán)DBProxy!

我們都知道,隨著數(shù)據(jù)量的不斷增大,傳統(tǒng)的直連數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)進(jìn)行訪問(wèn)的方式已經(jīng)無(wú)法滿足一般公司的需求。相對(duì)于業(yè)務(wù)邏輯分庫(kù)分表,通過(guò)DBProxy數(shù)據(jù)庫(kù)中間件,可以更簡(jiǎn)單輕松更快的對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平擴(kuò)展,由原來(lái)單臺(tái)數(shù)據(jù)庫(kù)擴(kuò)展到多臺(tái)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中間件通過(guò)路由規(guī)則將數(shù)據(jù)的訪問(wèn)請(qǐng)求路由到其中一臺(tái)數(shù)據(jù)庫(kù)上,從而大大降低了數(shù)據(jù)訪問(wèn)的瓶頸和單臺(tái)數(shù)據(jù)的壓力。

開(kāi)源項(xiàng)目地址:https://github.com/Meituan-Dianping/DBProxy

概述

這次分享的主要內(nèi)容包括6個(gè)部分:

  • ***是我的簡(jiǎn)單介紹一下美團(tuán)點(diǎn)評(píng)DBProxy;

  • 第二部分,會(huì)介紹一下美團(tuán)點(diǎn)評(píng)DBProxy的整體架構(gòu);

  • 第三個(gè)是美團(tuán)點(diǎn)評(píng)DBProxy的主要模塊,主要模塊介紹我們美團(tuán)點(diǎn)評(píng)在上面的主要工作;

  • 第四個(gè)部分是上線的現(xiàn)狀;

  • 第五個(gè)部分是我們后續(xù)的一些安排,未來(lái)的計(jì)劃;

  • ***是QA的部分。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy的優(yōu)點(diǎn)

首先介紹一下為什么要使用DBProxy:

  • 使用DBProxy之后,應(yīng)用程序只需要在連接串中設(shè)置DBProxy的地址,不需要關(guān)注整個(gè)數(shù)據(jù)庫(kù)集群的結(jié)點(diǎn);

  • DBProxy內(nèi)部實(shí)現(xiàn)負(fù)載均衡,讀寫(xiě)分離;

  • Slave上下線的操作由DBA在自動(dòng)化運(yùn)營(yíng)系統(tǒng)上點(diǎn)一下鼠標(biāo)就能夠完成。

這樣極大的減輕了DBA和應(yīng)用開(kāi)發(fā)人員的工作;而沒(méi)有DBProxy的情況下,這些工作是由RD來(lái)實(shí)現(xiàn)的,引入DBProxy對(duì)于系統(tǒng)的可管理性和便利性都有非常大的幫助。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy的軟件模塊

介紹DBProxy的軟件模塊。軟件模塊分三層:

  • ***層是一個(gè)訪問(wèn)控制,包括用戶處理,IP過(guò)濾等等的功能;

  • 中間層是一個(gè)SQL處理的過(guò)程,包括SQL解析,SQL重寫(xiě),和SQL執(zhí)行;

  • 第三層就是一個(gè)主要和DBA連接相關(guān)的一個(gè)模塊,像讀寫(xiě)分離,負(fù)載均衡,連接池;

  • 另外還有三個(gè)模塊是貫穿整個(gè)三層的: ***是連接的管理,負(fù)責(zé)管理收發(fā)數(shù)據(jù)的底層連接;第二是日志的管理,第三個(gè)是監(jiān)控管理。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy連接改進(jìn)

首先介紹一下連接的管理:根據(jù)我們鏈路比較長(zhǎng)的特點(diǎn),著重添加了對(duì)于連接異常的檢測(cè)和處理,包括:

  • DBProxy上游和MGW交互的連接檢測(cè);

  • DBProxy下游和MySQL連接的檢測(cè);

  • DBProxy所在機(jī)器的連接檢測(cè)。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

MTAltas SESSION級(jí)變量

SQL處理模塊中增加了SESSION參數(shù)的功能: 客戶端分配一個(gè)DB連接的時(shí)候,如果二者SESSION級(jí)參數(shù)不一樣時(shí),首先做一個(gè)校正,校正之后才會(huì)真正執(zhí)行查詢。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy連接池改進(jìn)

連接池的管理中做了這樣的修改:將鏈表改成Hash表,其中Hash鍵是用戶名,Hash值是以用戶身份建立的連接的一個(gè)鏈表。如下圖把連接按用戶來(lái)分,client分別會(huì)分到各自u(píng)ser建立的db連接,二者互不影響,既保證了查詢的正確性,又保證了較高的性能。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy訪問(wèn)控制

下面講一下訪問(wèn)控制模塊,是在我們整個(gè)軟件模型的***層。

  • ***個(gè)是增加了一個(gè)SQL過(guò)濾的功能:

  • 該功能由黑名單的方式實(shí)現(xiàn),黑名單的形式是如下邊兩個(gè)語(yǔ)句;

  • 黑名單可以根據(jù)執(zhí)行的頻率,執(zhí)行的時(shí)間來(lái)自動(dòng)的添加,其中頻率時(shí)間,都是可以根據(jù)自己的需求動(dòng)態(tài)修改的,另外我們也提供了一個(gè)手動(dòng)添加黑名單的功能。

  • 第二個(gè)個(gè)是根據(jù)后臺(tái)db的thread running進(jìn)行負(fù)載均衡,每當(dāng)分配到一個(gè)后臺(tái)的連接的時(shí)候,先檢查后臺(tái)的Thread running數(shù),直到有一個(gè)thread running數(shù)在我閾值之內(nèi)的時(shí)候才真正去分配。

  • 第三個(gè)就是用戶IP限制,我們限制了用戶的host地址,相當(dāng)于進(jìn)行一個(gè)權(quán)限的控制。

  • ***一個(gè)就是從庫(kù)流量配置,我可以指定某一個(gè)用戶只能訪問(wèn)某幾個(gè)從庫(kù),或者反過(guò)來(lái)說(shuō)某幾個(gè)從庫(kù)只允許某幾個(gè)用戶訪問(wèn),這樣可能在一個(gè)更細(xì)的力度上對(duì)數(shù)據(jù)庫(kù)的資源進(jìn)行分配。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy監(jiān)控模塊

DBProxy的監(jiān)控體系實(shí)現(xiàn)了一個(gè)從無(wú)到有的過(guò)程,目前主要監(jiān)控一些DBProxy內(nèi)部運(yùn)行相關(guān)的一些參數(shù):

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy Sharding改進(jìn)

對(duì)于sharding版本,做了如下的改進(jìn):

  • 首先我們把分庫(kù)變成分庫(kù)分表,并且提供了5種分庫(kù)分表的方式;

  • 第二個(gè)是改進(jìn)了Lemon基本上兼容MySQL語(yǔ)法;

  • 第三個(gè)是有限支持單個(gè)庫(kù)內(nèi)部的JOIN,經(jīng)過(guò)Lemon解析后,發(fā)現(xiàn)涉及的表都是在同一個(gè)庫(kù),那么表的JOIN是支持的;

  • 同樣的道理,單庫(kù)的事務(wù)也是支持的。

  • ***一個(gè)就是增加錯(cuò)誤處理:在一個(gè)庫(kù)上面執(zhí)行出錯(cuò)的時(shí)候,會(huì)相應(yīng)有一些rollback的機(jī)制,來(lái)處理一些異常情況導(dǎo)致的執(zhí)行失敗。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

Q:這方面能大概講一下怎么去改進(jìn)的?

A:首先是一個(gè)語(yǔ)法的支持,我們就是把中間不支持語(yǔ)法的支持,這樣的話有些復(fù)雜的查詢,我們可以通過(guò)這個(gè)語(yǔ)法來(lái)進(jìn)行一些,比如說(shuō)where條件的分析,可以知道分布分表的情況,然后就是表的替換。

DBProxy上線現(xiàn)狀

和大家分享一下上線的現(xiàn)狀:從2015.5上線***個(gè)版本后到現(xiàn)在已經(jīng)有87%的服務(wù)組接入了DBProxy, DBProxy也已經(jīng)經(jīng)歷了5個(gè)版本的迭代。

java數(shù)據(jù)庫(kù)讀寫(xiě)分離-數(shù)據(jù)庫(kù)中間件DBProxy

DBProxy未來(lái)計(jì)劃

***講一下未來(lái)的計(jì)劃:

  • ***個(gè)就是更強(qiáng)大的SQL處理:

  • 增加一些SQL優(yōu)化,Row cache的功能;

  • 分庫(kù)分表全面的SQL支持,如聚集,排序;

  • 更全面的連接上下文信息;

  • 第二:監(jiān)控管理要結(jié)合自動(dòng)故障處理,真正把監(jiān)控的信息智能化;

  • 第三:下一個(gè)是和我們美團(tuán)點(diǎn)評(píng)自己的MHA融合,支持自動(dòng)故障切換;

  • 第四:支持分布式事務(wù)。 

責(zé)任編輯:龐桂玉 來(lái)源: 今日頭條
相關(guān)推薦

2017-12-01 05:04:32

數(shù)據(jù)庫(kù)中間件Atlas

2017-11-27 05:36:16

數(shù)據(jù)庫(kù)中間件TDDL

2017-11-27 05:06:42

數(shù)據(jù)庫(kù)中間件cobar

2011-08-10 13:03:58

CJDBC數(shù)據(jù)庫(kù)集群

2017-05-23 18:55:05

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

2024-12-06 08:29:29

2017-07-26 09:41:28

MyCATSQLMongoDB

2018-11-07 15:30:19

數(shù)據(jù)庫(kù)NewSQLNoSQL

2019-01-29 14:55:50

數(shù)據(jù)庫(kù)中間件分庫(kù)分表

2017-12-01 05:40:56

數(shù)據(jù)庫(kù)中間件join

2017-11-27 06:01:37

數(shù)據(jù)庫(kù)中間件中間層

2017-12-11 13:30:49

Go語(yǔ)言數(shù)據(jù)庫(kù)中間件

2017-07-18 17:07:40

數(shù)據(jù)庫(kù) MyCATJoin

2017-07-18 17:35:16

數(shù)據(jù)庫(kù)MyCATPreparedSta

2017-11-03 11:02:08

數(shù)據(jù)庫(kù)中間件

2017-11-30 08:56:14

數(shù)據(jù)庫(kù)中間件架構(gòu)師

2022-12-15 09:44:29

數(shù)據(jù)庫(kù)利器

2021-07-27 05:49:59

MySQL數(shù)據(jù)庫(kù)中間件

2020-10-15 08:34:32

數(shù)據(jù)庫(kù)中間件漫談

2009-01-20 10:45:55

Oracle數(shù)據(jù)庫(kù)中間件
點(diǎn)贊
收藏

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