終于有人把云計算與數(shù)據(jù)庫的關(guān)系講明白了
2006年Google的CEO埃里克·施密特首次提出了云計算(Cloud Computing)的概念。2011年,哥倫比亞大學(xué)的Prof.Stolfo教授提出霧計算(Fog Computing),后被思科公司理論化。云計算是集中式計算,埃森哲(Accenture)公司給出了的云計算定義:第三方提供商通過網(wǎng)絡(luò)動態(tài)提供及配置IT功能(硬件、軟件或服務(wù))。
而霧計算是云計算概念的延伸,是局域網(wǎng)的分布式計算方式,符合互聯(lián)網(wǎng)的“去中心化”特征,其低延時、位置感知、廣泛的地理分布、適應(yīng)移動性的應(yīng)用特征,使得該計算范式可支持更多的邊緣節(jié)點。
2011年,同時出現(xiàn)了邊緣計算(Edge Computing)的概念,OpenStack社區(qū)給出的定義為:邊緣計算是為應(yīng)用開發(fā)者和服務(wù)提供商在網(wǎng)絡(luò)的邊緣側(cè)提供云服務(wù)和IT環(huán)境服務(wù),目標(biāo)是在靠近數(shù)據(jù)輸入或用戶的地方提供計算、存儲和網(wǎng)絡(luò)帶寬。
霧計算和邊緣計算的區(qū)別在于,霧計算具有層次性、網(wǎng)式架構(gòu);而邊緣計算依賴于不構(gòu)成網(wǎng)絡(luò)的單獨節(jié)點。霧計算中的不同節(jié)點之間具有廣泛的對等互連能力,而邊緣計算是孤島中運行的節(jié)點,這樣的節(jié)點被容納入云或霧的網(wǎng)絡(luò)中可實現(xiàn)流量傳輸。
云計算、霧計算、邊緣計算,是三種不同但又相關(guān)的計算范式,每種范式對于數(shù)據(jù)庫系統(tǒng)而言,都有提出不同需求的可能。如今,云計算中的云數(shù)據(jù)庫的特征基本探明,但也在發(fā)展中。而霧計算中的霧數(shù)據(jù)庫的特征尚未有提出,邊緣計算中的數(shù)據(jù)庫是否是可從傳統(tǒng)的單機(jī)數(shù)據(jù)庫系統(tǒng)稍加演化得到,也尚未有提及或討論。
但是,三種不同的計算方式,必然適用于不同類型的應(yīng)用,對于數(shù)據(jù)的存儲、管理、計算、交換的需求,也必有差異,深入研究不同應(yīng)用的需求和特點,可得到不同類型的數(shù)據(jù)庫。未來數(shù)據(jù)庫的類型或形態(tài)必然會更加豐富多彩。
一、云原生
早在云原生概念出現(xiàn)之前,就出現(xiàn)了Cloud Foundry的概念,其內(nèi)容可以被概括為一種方法論,稱為12要素應(yīng)用程序(12-Factor App)。根據(jù)這12個要素,人們對數(shù)據(jù)庫提出了如下一些具體的要求,使得數(shù)據(jù)庫的架構(gòu)和功能發(fā)生了變化。
- 12要素應(yīng)用的任意部署,都應(yīng)該可以在不進(jìn)行任何代碼改動的情況下完成,將本地MySQL數(shù)據(jù)庫換成第三方服務(wù)(例如 Amazon RDS)。與此類似,本地SMTP服務(wù)應(yīng)該也可以和第三方SMTP服務(wù)(例如Postmark)互換。這使得云應(yīng)用研發(fā)不深度依賴于數(shù)據(jù)庫系統(tǒng),使得云數(shù)據(jù)庫之間的功能差異化競爭被消滅。
- 12要素反對與會話具有高黏性。會話中的數(shù)據(jù)應(yīng)該保存在諸如Memcached或Redis等帶有過期時間的緩存中。這就要求云數(shù)據(jù)庫服務(wù)要么有多種產(chǎn)品支持不同能力,要么在一個產(chǎn)品內(nèi)提供帶有過期時間的緩存。
- 12要素應(yīng)用本身從不考慮存儲自己的輸出流,即不提倡提供日志功能(不寫或者管理日志文件),而是把信息直接輸出到標(biāo)準(zhǔn)輸出(stdout)事件流。在開發(fā)環(huán)境中,開發(fā)人員可以通過這些數(shù)據(jù)流,在終端實時看到應(yīng)用的活動。在應(yīng)用端不能提供日志以供確認(rèn)問題,這對服務(wù)端的數(shù)據(jù)庫提出了更高的要求:第一數(shù)據(jù)絕對保持強一致而不存儲,第二數(shù)據(jù)庫自身有分析等位問題的能力。但是,不是所有類型的應(yīng)用都適合進(jìn)行這方面的設(shè)計和實現(xiàn),大型復(fù)雜類應(yīng)用和網(wǎng)站類應(yīng)用的定位問題多依賴于日志。
Matt Stine于2017年在一次技術(shù)大會的分享中提出“Cloud Foundry與微服務(wù):一種共生關(guān)系”的概念,云原生(Cloud Native)的概念正式誕生。他將云原生歸納模塊化、可觀察、可部署、可測試、可替換、可處理6個特質(zhì)。
Matt Stine認(rèn)為:服務(wù)的基本原則是有一個清晰的專注點(對應(yīng)用功能細(xì)分的要求)、一個清晰的契約(應(yīng)用與后臺服務(wù)之間的接口定義要清晰)、一個清晰的API(應(yīng)用與后臺服務(wù)之間的接口在形式上要明確好用)。
云原生通常被認(rèn)為是一個思想的集合,包括了諸多內(nèi)容:DevOps、持續(xù)交付(Continuous Delivery)、微服務(wù)(MicroServices)、敏捷基礎(chǔ)設(shè)施(Agile Infrastructure)、康威定律(Conways Law)等,以及根據(jù)商業(yè)能力對公司進(jìn)行重組。
這使得云原生的概念全面且復(fù)雜,其成為一系列技術(shù)、企業(yè)管理方法的集合,其中既包含了技術(shù)(微服務(wù)、敏捷基礎(chǔ)設(shè)施),也包含了管理(從DevOps、持續(xù)交付、康威定律、重組等層面對技術(shù)進(jìn)行管理)。
云計算使得傳統(tǒng)的應(yīng)用方式發(fā)生了變化,其自身具有的特點如下。
1. 規(guī)?;?/strong>
IT設(shè)施從零散化走向集中化、規(guī)?;?。大型數(shù)據(jù)中心被大量建立,作為基礎(chǔ)設(shè)施向全社會提供集中式服務(wù)。
2. 資源池化
IT設(shè)施規(guī)模化以后,基于彈性服務(wù)的要求,需要對硬件資源統(tǒng)一管理。業(yè)務(wù)規(guī)模應(yīng)可動態(tài)瞬時擴(kuò)縮容,因此要池化硬件資源以提供彈性服務(wù)。
云計算,是期望通過互聯(lián)網(wǎng)絡(luò)為用戶提供按需使用的IT資源服務(wù)。因此,云服務(wù)商要保證在所提供的硬件資源上擁有容量充足的資源池,以保證在并發(fā)業(yè)務(wù)高峰時刻可以滿足用戶的服務(wù)要求,這就是云服務(wù)的資源池化。
云數(shù)據(jù)庫作為一種服務(wù),同云計算相似,其所能管理使用的資源同樣需要資源池化。這樣用戶在使用云數(shù)據(jù)庫的服務(wù)時就無須了解云數(shù)據(jù)庫中的實際架構(gòu)和技術(shù)實現(xiàn)了,用戶所感知的是其使用的獨立完整的數(shù)據(jù)管理服務(wù)和相應(yīng)的計算資源。
對于用戶而言,資源管理在云數(shù)據(jù)庫內(nèi)部體現(xiàn)為實現(xiàn)多租戶特性,根據(jù)租戶所租用的資源來提供服務(wù)。數(shù)據(jù)庫內(nèi)部資源池化后,可為用戶的應(yīng)用提供彈性伸縮服務(wù)。
3. 服務(wù)化
云計算使得過去IT業(yè)所能提供的內(nèi)容發(fā)生了變化。
- 交付方式從軟件交付走向服務(wù)交付。用戶看似在使用一個軟件其實不再是一個軟件,一系列軟件組合成一個服務(wù)后提供給用戶,對用戶而言一項項具體的服務(wù)是可直接感受到的。
- 開發(fā)方式從底層(IaaS+PaaS)走向上層(SaaS)。云計算不僅提供CPU和機(jī)架,更多的是提供用戶可感受的軟件服務(wù)(SaaS),或者軟件都感受不到,直接感受到的就是服務(wù)(Serverless)。
4. 多樣化
數(shù)據(jù)形式及應(yīng)用場景從單一化走向多樣化。服務(wù)、微服務(wù)等已經(jīng)各自成型,無服務(wù)(Serverless)也作為一種FaaS(Function-as-a-Service)開始為世界的多樣性和精彩性貢獻(xiàn)力量。
二、云數(shù)據(jù)庫
為了應(yīng)對云應(yīng)用的研發(fā)需求,云上提供服務(wù)的數(shù)據(jù)庫系統(tǒng)也相應(yīng)發(fā)生了一些變化。云原生數(shù)據(jù)庫是指通過云平臺進(jìn)行構(gòu)建、部署、交付和自動運維的數(shù)據(jù)庫服務(wù)。
該服務(wù)通常以DBaaS (Database-as-a-Service)的形態(tài),將數(shù)據(jù)庫架構(gòu)和實現(xiàn)細(xì)節(jié)隱藏起來,采用多租戶和資源有效分發(fā)的形式將云資源自動管理起來,為用戶提供一個能夠滿足彈性伸縮、高可用、高可靠、高安全性、強一致等需求,且可以隨時隨地訪問的數(shù)據(jù)庫服務(wù)。
該服務(wù)具備自動化運維能力(僅需要極少的人力),可提供自動備份和恢復(fù)、自動性能調(diào)優(yōu)、自動對規(guī)模化的數(shù)據(jù)庫集群的資源進(jìn)行調(diào)節(jié)等可超越傳統(tǒng)DBA所做工作的能力(具備智能數(shù)據(jù)庫的特征)。這種能力使得云數(shù)據(jù)庫系統(tǒng)托管和維護(hù)的成本降低,規(guī)?;靥岣哔Y源的利用率。
總體來說,云數(shù)據(jù)庫的特征可以概括為解放用戶和適應(yīng)業(yè)務(wù)兩類。具體可以轉(zhuǎn)化為如下6條內(nèi)容,其中前3條屬于解放用戶的范疇,后3條屬于適應(yīng)業(yè)務(wù)的范疇。
1. 智能運維(智能數(shù)據(jù)庫)
故障可自愈,包括宕機(jī)自動遷移、故障隔離、異常流量自動調(diào)度、負(fù)載均衡、自動限流降級等。數(shù)據(jù)庫可自動調(diào)優(yōu),自動調(diào)節(jié)資源的使用,擁有自適應(yīng)算法以應(yīng)對應(yīng)用的負(fù)載等。這樣的能力可以概括為自調(diào)優(yōu)、自適應(yīng)、自動駕駛(工業(yè)界將自動駕駛的標(biāo)準(zhǔn)分為6個級別,數(shù)據(jù)庫界借用了此級別來定義數(shù)據(jù)庫自動駕駛的概念)。
2. 易于管理
智能運維的表現(xiàn)就是易于管理。云數(shù)據(jù)庫具備自動化異常分析診斷能力,可在運維操作中實現(xiàn)白屏化、智能化、規(guī)?;⑸偃嘶?。
3. 極致體驗
用戶對于數(shù)據(jù)庫的申請、創(chuàng)建、監(jiān)控、報警、故障定位都可以最簡單的方式完成,給用戶以極致便捷的體驗。
4. 彈性伸縮
能夠根據(jù)業(yè)務(wù)的應(yīng)用負(fù)載自動伸縮,具備秒級擴(kuò)縮容能力,可靈活動態(tài)分配或釋放資源,結(jié)合彈性計費策略,可以大幅度降低用戶的使用成本。這一條中部分內(nèi)容和智能運維重合,但描述問題的角度不同,本條是從系統(tǒng)可擴(kuò)展性的角度,對云數(shù)據(jù)庫的重要特征進(jìn)行描述。
業(yè)務(wù)或系統(tǒng)上云,是購買了一種應(yīng)對未來的可能。對于正處于業(yè)務(wù)發(fā)展中的商戶而言,隨著數(shù)據(jù)的積累在云端可隨時擴(kuò)展存儲,也可自由擴(kuò)展計算節(jié)點,這樣對于一個從小向大發(fā)展的商戶而言,是一種最佳的資源利用方式,也是一種成本最低的方式。
而支持這種業(yè)務(wù)發(fā)展的技術(shù),就是彈性伸縮。在彈性伸縮中需要考慮事務(wù)執(zhí)行的先后次序,這個次序?qū)τ跀?shù)據(jù)庫架構(gòu)而言,就是存算分離。
5. 按需計費
支持按量(如流量、存儲量、調(diào)用次數(shù)、調(diào)用時長、核數(shù)、內(nèi)存資源占用量等)制定多種定價策略,使用戶可根據(jù)業(yè)務(wù)情況靈活匹配出最優(yōu)計量模式,節(jié)約用戶成本。
6. 安全、資源隔離
云數(shù)據(jù)庫采用共享池化技術(shù)來提高計算、存儲、網(wǎng)絡(luò)等資源的利用率,隔離用戶對資源的并發(fā)爭用;另外提供多租戶方式以做到安全隔離,避免信息泄露或遭受攻擊等。
上述內(nèi)容為云數(shù)據(jù)庫的設(shè)計指出了方向。
三、Serverless數(shù)據(jù)庫
Serverless是一種無服務(wù)器架構(gòu),其不是一個具體的編程框架、工具,而是一種軟件系統(tǒng)架構(gòu)思想和方法,其核心思想是讓用戶無須關(guān)注支撐應(yīng)用服務(wù)運行的底層主機(jī),用戶可根據(jù)應(yīng)用需要,按需使用底層服務(wù)器(硬件以及軟件系統(tǒng)),并根據(jù)使用量付費。Serverless類應(yīng)用所需要的計算資源由底層的云計算平臺動態(tài)提供。
云原生數(shù)據(jù)庫作為后臺服務(wù),其提供一種數(shù)據(jù)庫服務(wù)/訪問方式連接用戶,該方式即是Serverless方式。但是,Serverless不只是連接數(shù)據(jù)庫的一種服務(wù)方式,還是連通其他各類服務(wù)的一種方式。Serverless與云數(shù)據(jù)庫都是一種服務(wù)能力。云數(shù)據(jù)庫把數(shù)據(jù)存儲、管理、計算能力轉(zhuǎn)化為服務(wù)提供給用戶。
具備了Serverless能力的數(shù)據(jù)庫系統(tǒng),在存儲層面要解決無限量的數(shù)據(jù)存儲能力;在計算層面,要提供彈性計算的能力;在系統(tǒng)內(nèi)部的架構(gòu)方面,要提供監(jiān)控調(diào)度能力,使資源分配可動態(tài)進(jìn)行;對于數(shù)據(jù)庫的各個組件,要有可被池化的能力,即具備自動資源管理的能力;對于用戶接入層面,要能響應(yīng)用戶接入的事件請求,根據(jù)訪問量,利用前述的存儲、計算、管理的基礎(chǔ)進(jìn)行彈性擴(kuò)縮容以應(yīng)對應(yīng)用層的波峰或波谷,按量計費。
如果云數(shù)據(jù)庫具備了無服務(wù)器架構(gòu)的能力并可支持依賴于數(shù)據(jù)庫Serverless類的應(yīng)用,則該數(shù)據(jù)庫就可稱為ServerlessDB。而云數(shù)據(jù)庫在構(gòu)建Serverless能力時,應(yīng)具備如下特性。
- 單一職責(zé):該云數(shù)據(jù)庫的業(yè)務(wù)是獨立的,負(fù)責(zé)的團(tuán)隊是自主的。云數(shù)據(jù)庫負(fù)責(zé)單一的服務(wù)且該服務(wù)處于核心領(lǐng)域。該云數(shù)據(jù)庫具有高內(nèi)聚、低耦合、與其他系統(tǒng)和領(lǐng)域有明確邊界的特點。
- 輕量級通信:云數(shù)據(jù)間的通信應(yīng)該簡單、輕量,且與語言和平臺無關(guān)。
- 獨立性:該云數(shù)據(jù)庫應(yīng)是獨立開發(fā)、獨立測試和獨立部署的。
圖6-1顯示了AWS的Aurora的Serverless能力。
▲圖6-1 Aurora數(shù)據(jù)庫具備有Serverless的能力
在應(yīng)用層,形式上Aurora可以通過函數(shù)或事件的方式接入服務(wù)平臺。如AWS的API接口會觸發(fā)AWS的Lambda函數(shù)或者無服務(wù)器函數(shù),這些函數(shù)再從數(shù)據(jù)庫表中獲取數(shù)據(jù)流,返回應(yīng)用時數(shù)據(jù)的格式是固定的。不同云計算廠家有不同的設(shè)計方案, 但使用的思想是類似的。
關(guān)于作者:李海翔(網(wǎng)名:那海藍(lán)藍(lán)),騰訊金融云數(shù)據(jù)庫首席研究員,騰訊T14級專家,騰訊TDSQL分布式數(shù)據(jù)庫首席架構(gòu)師。中國人民大學(xué)、北京林業(yè)大學(xué)特聘碩士導(dǎo)師,CCF數(shù)據(jù)庫專委會委員,DTCC(中國數(shù)據(jù)庫技術(shù)大會)專家委員會委員,北京市科技進(jìn)步一等獎得主。申請和獲得授權(quán)的專利多達(dá)70余項,在VLDB等數(shù)據(jù)庫大會上發(fā)表論文若干篇,參與了多個國家863重大專項、核高基、工信部、科技部等的項目。
本文摘編自《分布式數(shù)據(jù)庫原理、架構(gòu)與實踐》,經(jīng)出版方授權(quán)發(fā)布。