開(kāi)發(fā)者和應(yīng)用設(shè)計(jì)者對(duì)于在云端部署數(shù)據(jù)庫(kù)有眾多選擇,很難做出最佳的選擇判斷。將數(shù)據(jù)庫(kù)服務(wù)器在IaaS云上運(yùn)行好嗎?或者應(yīng)該轉(zhuǎn)換成PaaS選擇?數(shù)據(jù)庫(kù)即服務(wù)的選擇可能聽(tīng)起來(lái)很誘人,比如Cloudant的NoSQL但是怎么權(quán)衡?
為所有的選擇列一個(gè)提綱有助于這項(xiàng)工作開(kāi)始,但是不管選擇了哪一種云數(shù)據(jù)庫(kù),都需要衡量多種因素,包括成本、可用性、可擴(kuò)展性以及性能支持。
當(dāng)前的代碼可能很難對(duì)接到平臺(tái)即服務(wù)(PaaS)數(shù)據(jù)庫(kù)選擇;甚至是關(guān)系型數(shù)據(jù)庫(kù)都無(wú)法完全兼容,比如微軟SQL Server和Windows Azure SQL數(shù)據(jù)庫(kù)。比如SQL Server中,SQL數(shù)據(jù)庫(kù)不支持自定義文本操作。
因此,如果當(dāng)前的應(yīng)用使用MySQL、Oracle、SQL Server、PostgreSQL或者其他常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),構(gòu)建在三層架構(gòu)上,可以將數(shù)據(jù)庫(kù)服務(wù)器轉(zhuǎn)移到基礎(chǔ)架構(gòu)即服務(wù)(IaaS)云上。在這種選擇下,可以保持配置和管理控制,但是也要持續(xù)承擔(dān)備份、監(jiān)控和按需擴(kuò)展(或收縮)的責(zé)任。
相反,如果開(kāi)始一項(xiàng)新的開(kāi)發(fā)或者重新設(shè)計(jì)一個(gè)當(dāng)前的數(shù)據(jù)庫(kù)層,隨后PaaS或者數(shù)據(jù)庫(kù)即服務(wù)(DBaaS)可能會(huì)更好的適應(yīng)需求。要盡早確定是使用SQL還是NoSQL架構(gòu)。
SQL和NoSQL利弊分析
SQL和NoSQL都有優(yōu)缺點(diǎn),但是有些最為重要的因素則是你的團(tuán)隊(duì)開(kāi)發(fā)每一種類(lèi)型數(shù)據(jù)庫(kù)的技能水平,以及每一種數(shù)據(jù)庫(kù)類(lèi)型怎樣更好的適應(yīng)你的需求。擅長(zhǎng)技術(shù)類(lèi)型的優(yōu)勢(shì)在于你的開(kāi)發(fā)者不會(huì)被較長(zhǎng)的學(xué)習(xí)曲線(xiàn)嚇到。不要過(guò)分強(qiáng)調(diào)不需要的功能,即便市場(chǎng)上營(yíng)銷(xiāo)它比其他的數(shù)據(jù)庫(kù)得到了更多的支持者。比如,分布式事務(wù)兩階段提交對(duì)于一些應(yīng)用很重要,但是你真的需要嗎?
基于SQL的關(guān)系型數(shù)據(jù)庫(kù)平臺(tái)可以選擇PaaS,比如亞馬遜關(guān)系型數(shù)據(jù)庫(kù)服務(wù)(RDS)和Windows Azure SQL數(shù)據(jù)庫(kù)。亞馬遜RDS支持MySQL、Oracle和微軟SQL Server數(shù)據(jù)庫(kù)。在優(yōu)化數(shù)據(jù)庫(kù)性能時(shí)磁盤(pán)I/O是重點(diǎn),因此在對(duì)接PaaS或者DBaaS數(shù)據(jù)庫(kù)開(kāi)發(fā)時(shí),考慮一下存儲(chǔ)的選擇。
亞馬遜Web服務(wù)(AWS)允許客戶(hù)提供RDS實(shí)例,不管是標(biāo)準(zhǔn)的存儲(chǔ)還是預(yù)分配的IOPS.后者對(duì)于事務(wù)處理應(yīng)用是個(gè)不錯(cuò)的選擇。如果你可以忍受I/O性能,標(biāo)準(zhǔn)存儲(chǔ)可以節(jié)省AWS費(fèi)用?蛻(hù)可以按照1000—30000 IOPS的范圍,每月價(jià)格為10美分/IOPS.
谷歌云SQL是一個(gè)基于云的MySQL實(shí)現(xiàn),針對(duì)中小型應(yīng)用。整合了谷歌App Engine,對(duì)于已經(jīng)使用PaaS的開(kāi)發(fā)者十分適用。不管是打包計(jì)劃還是每個(gè)用例的計(jì)劃付費(fèi)都是可行的。
當(dāng)成本和快速擴(kuò)展成為問(wèn)題所在,NoSQL選擇可能更適合。NoSQL數(shù)據(jù)庫(kù)并不具備我們構(gòu)建面向事務(wù)的系統(tǒng)所依賴(lài)的所有性能,但是很適合Web和移動(dòng)應(yīng)用,這些應(yīng)用要求快速擴(kuò)展。AWS和微軟都有NoSQL數(shù)據(jù)庫(kù)服務(wù)。
亞馬遜DynamoDB是一個(gè)托管的NoSQL數(shù)據(jù)庫(kù)?蛻(hù)對(duì)讀寫(xiě)分配容量,基于此支付每小時(shí)的費(fèi)用。AWS根據(jù)“讀容量單元”和“寫(xiě)容量單元”衡量容量。
亞馬遜SimpleDB是另一個(gè)NoSQL選擇。其首要優(yōu)勢(shì)在于成本低。SimpleDB對(duì)于小型應(yīng)用是個(gè)不錯(cuò)的選擇,這種應(yīng)用可以接受更低的性能。對(duì)于大量數(shù)據(jù)則需要分區(qū)和自動(dòng)擴(kuò)展,從而處理負(fù)載,DynamoDB可能更適合。
微軟的NoSQL產(chǎn)品稱(chēng)之為T(mén)able Storage,類(lèi)似亞馬遜DynamoDB,是一種鍵值對(duì)數(shù)據(jù)存儲(chǔ)。這些數(shù)據(jù)庫(kù)都是支持大量數(shù)據(jù)的應(yīng)用的有利候選,簡(jiǎn)化了數(shù)據(jù)類(lèi)型的關(guān)系,可以不用修復(fù)預(yù)定義模式就獲益。Table Storage的價(jià)格基于數(shù)據(jù)量和冗余水平。
除了IaaS廠商之外,比如微軟、谷歌、亞馬遜,你還可以選擇特定的數(shù)據(jù)庫(kù)服務(wù),比如Cloudant的數(shù)據(jù)庫(kù)即服務(wù)。Cloudant提供多租戶(hù)和專(zhuān)用MongoDB數(shù)據(jù)庫(kù)服務(wù),價(jià)格起始于每月每GB1美分,加上額外的HTTP請(qǐng)求費(fèi)用(如GET、PUT、POST和DELETE)。