(注:這是我手繪的一個(gè)架構(gòu)圖,不代表數(shù)據(jù)庫(kù)真實(shí)架構(gòu),只為說(shuō)明清楚問(wèn)題而繪制)
1)租戶隔離。多個(gè)租戶共享同一數(shù)據(jù)庫(kù)實(shí)例必然需要一個(gè)有效的隔離方案,防止一個(gè)用戶的慢查詢請(qǐng)求或惡意請(qǐng)求影響其他用戶訪問(wèn)。這里的隔離實(shí)現(xiàn)方式是通過(guò)JProxy層對(duì)用戶所有的訪問(wèn)進(jìn)行了攔截,并根據(jù)用戶訪問(wèn)的數(shù)據(jù)表索引信息等,對(duì)用戶執(zhí)行該請(qǐng)求所需資源進(jìn)行預(yù)判,并攔截掉惡意的請(qǐng)求及影響其他用戶的請(qǐng)求。同時(shí)為了精確控制每個(gè)用戶的資源使用,整個(gè)系統(tǒng)針對(duì)用戶使用的連接數(shù),內(nèi)存占用容量,磁盤(pán)空間使用情況,帶寬流量等都做了有效的記錄和監(jiān)控并根據(jù)用戶的配額進(jìn)行控制。
2)集群路由信息高一致性保障。整體集群采用經(jīng)典的弱中心化集群結(jié)構(gòu),在滿足集群高性能的基礎(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),用戶的數(shù)據(jù)庫(kù)會(huì)通過(guò)zookeeper做主從的高可用,如果用戶主庫(kù)掛掉,會(huì)自動(dòng)切換至從庫(kù),并重新綁定floating ip到從庫(kù),不會(huì)影響對(duì)用戶的服務(wù)。(floating ip知道什么意思,想做架構(gòu)師的朋友可以搜一下,這里不做累述)
4)用戶數(shù)據(jù)庫(kù)無(wú)縫升級(jí)擴(kuò)容。當(dāng)用戶的數(shù)據(jù)庫(kù)數(shù)據(jù)增長(zhǎng)超過(guò)指定配額時(shí),用戶可以選擇升級(jí)數(shù)據(jù)庫(kù),系統(tǒng)會(huì)自動(dòng)根據(jù)資源池使用情況將用戶數(shù)據(jù)庫(kù)遷移到比較空閑的實(shí)例上,遷移過(guò)程中并不會(huì)影響用戶的服務(wù)。通過(guò)定時(shí)自動(dòng)為用戶數(shù)據(jù)庫(kù)做快照的方式,結(jié)合數(shù)據(jù)庫(kù)binlog同步工具,來(lái)幫助用戶實(shí)現(xiàn)增量備份,遷移的工作也是依賴于以上這些工具完成的。
5)型數(shù)據(jù)庫(kù)基于安全方面考慮,通過(guò)jproxy對(duì)有潛在安全風(fēng)險(xiǎn)的數(shù)據(jù)庫(kù)操作語(yǔ)法進(jìn)行了限制,不如不能使用Create database,剛才提到了這棟房子除了您在用,別人也在用,你只有這幾個(gè)或者幾十個(gè)房間而已,你只能在這幾個(gè)或者幾十個(gè)房間里瞎搞,不能去別人的房間胡來(lái)!
云計(jì)算出現(xiàn)以后,為企業(yè)、創(chuàng)業(yè)團(tuán)隊(duì)、個(gè)人帶來(lái)了便利, 那個(gè)自建機(jī)房、購(gòu)買(mǎi)或者租用服務(wù)器搭建環(huán)境、中間件、部署應(yīng)用,搞定域名而浪費(fèi)大量人力物力的時(shí)代,我相信在不久的未來(lái)可能會(huì)漸行漸遠(yuǎn); 按需付費(fèi)、方便快捷的互聯(lián)網(wǎng)服務(wù)讓云平臺(tái)成為未來(lái)軟件服務(wù)市場(chǎng)的寵兒, 而共享性數(shù)據(jù)庫(kù)也會(huì)逐步體現(xiàn)其價(jià)值,迎接嶄新的明天,相關(guān)的人才需求也會(huì)緊隨其后。 預(yù)祝中國(guó)的云計(jì)算有廣大的發(fā)展空間,越來(lái)越多的人才為其服務(wù)!