共享性數(shù)據(jù)庫(kù)與獨(dú)享性數(shù)據(jù)庫(kù)的特點(diǎn)對(duì)比 在介紹共享性數(shù)據(jù)庫(kù)之前先來(lái)分析一下什么叫“獨(dú)享性數(shù)據(jù)庫(kù)”。獨(dú)享性數(shù)據(jù)庫(kù),顧名思義,獨(dú)享就是自己的數(shù)據(jù)庫(kù),在云計(jì)算出來(lái)之前,我們幾乎沒(méi)有獨(dú)享性數(shù)據(jù)庫(kù)的概念,因?yàn)闆](méi)有對(duì)比,認(rèn)為所有的數(shù)據(jù)庫(kù)都應(yīng)該叫做獨(dú)享性數(shù)據(jù)庫(kù)。
“獨(dú)享性數(shù)據(jù)庫(kù)”就比如我們有一塊兒地(這塊是有地址和門(mén)牌號(hào)的,好比數(shù)據(jù)庫(kù)和端口),自己在這塊兒地上修一棟房子當(dāng)倉(cāng)庫(kù)(類(lèi)似于我們創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù)),我們?cè)谶@棟房子里任意使用房間來(lái)存東西(類(lèi)似于我們可以創(chuàng)建Table一樣)。
而“共享型數(shù)據(jù)庫(kù)”是為節(jié)省資源、降低開(kāi)發(fā)者成本孕育而生的,很多人一起共同使用這棟樓房,但是這棟樓房不是屬于具體某一個(gè)人是雇主的資產(chǎn)。在云平臺(tái)的世界里,雇主是提供云數(shù)據(jù)庫(kù)的供應(yīng)商,使用服務(wù)的人稱(chēng)為“租戶(hù)”。大家在一起使用一個(gè)數(shù)據(jù)庫(kù),你有創(chuàng)建表的權(quán)限、修改表的權(quán)限,但是沒(méi)有創(chuàng)建數(shù)據(jù)庫(kù)、修改數(shù)據(jù)庫(kù)的權(quán)限,因?yàn)檫@棟樓是大家的,不是你一個(gè)人的,而你,只是租戶(hù)之一。
當(dāng)然,你的幾個(gè)房間會(huì)給你一個(gè)標(biāo)簽,取個(gè)名字,是某某人的(這個(gè)名字就是你以后使用數(shù)據(jù)庫(kù)的名稱(chēng));您的這些房間與其他人的房間也是完全隔離的,彼此是不存在隱私暴露的問(wèn)題的。
共享性數(shù)據(jù)庫(kù)的租戶(hù)的房租比較便宜,因?yàn)榘葱枋召M(fèi),甚至免費(fèi)!鞍葱枋召M(fèi)“是云平臺(tái)的共同特點(diǎn),因?yàn)槟愕姆块g是用來(lái)存東西的,就類(lèi)似于你的數(shù)據(jù)庫(kù)表是用來(lái)存數(shù)據(jù)的一樣,在以前你使用獨(dú)享性數(shù)據(jù)庫(kù),你自己買(mǎi)了一個(gè)云數(shù)據(jù)庫(kù),是一次性投入,好比你花費(fèi)了一輩子的積蓄來(lái)買(mǎi)了一棟房子,但是你真的需要那么房間來(lái)存你的東西嗎?
如存糧食也許你自己都不知道你的東西有多少個(gè)東西。共享性數(shù)據(jù)庫(kù)的誕生解決了這個(gè)問(wèn)題,一般的情況下,你有多少東西,你就租多大的房間,房東就收你多少的費(fèi)用。這種就叫按需付費(fèi)。有這樣服務(wù)的云平臺(tái)有很多,比如百度的BAE、新浪的SAE、京東云擎等。目前的數(shù)據(jù)庫(kù)是按空間收費(fèi),是既按空間計(jì)費(fèi),也按流量計(jì)費(fèi)。
目前,不同公司在對(duì)待共享型數(shù)據(jù)庫(kù)技術(shù)實(shí)現(xiàn)上,各家公司采用的技術(shù)與架構(gòu)不同,所以也無(wú)法對(duì)其進(jìn)行一一的接受,只簡(jiǎn)單總結(jié)一下各共享性數(shù)據(jù)庫(kù)的共同的特點(diǎn):
1)租戶(hù)隔離。多個(gè)租戶(hù)共享同一數(shù)據(jù)庫(kù)實(shí)例必然需要一個(gè)有效的隔離方案,防止一個(gè)用戶(hù)的慢查詢(xún)請(qǐng)求或惡意請(qǐng)求影響其他用戶(hù)訪問(wèn)。這里的隔離實(shí)現(xiàn)方式是通過(guò)JProxy層對(duì)用戶(hù)所有的訪問(wèn)進(jìn)行了攔截,并根據(jù)用戶(hù)訪問(wèn)的數(shù)據(jù)表索引信息等,對(duì)用戶(hù)執(zhí)行該請(qǐng)求所需資源進(jìn)行預(yù)判,并攔截掉惡意的請(qǐng)求及影響其他用戶(hù)的請(qǐng)求。同時(shí)為了精確控制每個(gè)用戶(hù)的資源使用,整個(gè)系統(tǒng)針對(duì)用戶(hù)使用的連接數(shù),內(nèi)存占用容量,磁盤(pán)空間使用情況,帶寬流量等都做了有效的記錄和監(jiān)控并根據(jù)用戶(hù)的配額進(jìn)行控制。
2)集群路由信息高一致性保障。整體集群采用經(jīng)典的弱中心化集群結(jié)構(gòu),在滿(mǎn)足集群高性能的基礎(chǔ)上同時(shí)具備足夠的可控性,JManager管理整個(gè)集群路由信息,并通過(guò)多個(gè)Slave避免單點(diǎn)故障,當(dāng)路由變更時(shí),JManager首先同步路由變更信息給自己的Slave,然后才會(huì)同步所有的JProxy,避免路由變更時(shí)JManager掛掉導(dǎo)致路由不一致。
3)高可用保障。整體集群所有節(jié)點(diǎn)無(wú)單點(diǎn),用戶(hù)的數(shù)據(jù)庫(kù)會(huì)通過(guò)zookeeper做主從的高可用,如果用戶(hù)主庫(kù)掛掉,會(huì)自動(dòng)切換至從庫(kù),并重新綁定floating ip到從庫(kù),不會(huì)影響對(duì)用戶(hù)的服務(wù)。(floating ip知道什么意思,想做架構(gòu)師的朋友可以搜一下,這里不做累述)
4)用戶(hù)數(shù)據(jù)庫(kù)無(wú)縫升級(jí)擴(kuò)容。當(dāng)用戶(hù)的數(shù)據(jù)庫(kù)數(shù)據(jù)增長(zhǎng)超過(guò)指定配額時(shí),用戶(hù)可以選擇升級(jí)數(shù)據(jù)庫(kù),系統(tǒng)會(huì)自動(dòng)根據(jù)資源池使用情況將用戶(hù)數(shù)據(jù)庫(kù)遷移到比較空閑的實(shí)例上,遷移過(guò)程中并不會(huì)影響用戶(hù)的服務(wù)。通過(guò)定時(shí)自動(dòng)為用戶(hù)數(shù)據(jù)庫(kù)做快照的方式,結(jié)合數(shù)據(jù)庫(kù)binlog同步工具,來(lái)幫助用戶(hù)實(shí)現(xiàn)增量備份,遷移的工作也是依賴(lài)于以上這些工具完成的。
5)型數(shù)據(jù)庫(kù)基于安全方面考慮。通過(guò)jproxy對(duì)有潛在安全風(fēng)險(xiǎn)的數(shù)據(jù)庫(kù)操作語(yǔ)法進(jìn)行了限制,不如不能使用Create database,剛才提到了這棟房子除了您在用,別人也在用,你只有這幾個(gè)或者幾十個(gè)房間而已,你只能在這幾個(gè)或者幾十個(gè)房間里活動(dòng),不能去別人的房間滋事!
|