寫在前面
在京舉行的2017中國數(shù)據(jù)庫技術(shù)大會上,來自阿里巴巴集團(tuán)研究員張瑞發(fā)表了題為《面向未來的數(shù)據(jù)庫體系架構(gòu)的思考》的主題演講,主要介紹了阿里數(shù)據(jù)庫技術(shù)團(tuán)隊(duì)正在建設(shè)阿里下一代數(shù)據(jù)庫技術(shù)體系的想法和經(jīng)驗(yàn),希望能夠把阿里的成果、踩過的坑以及面向未來思考介紹給與會者,為中國數(shù)據(jù)庫技術(shù)的發(fā)展出一份力。
張瑞發(fā)會上講了以下幾方面內(nèi)容:首先是在內(nèi)核上的一點(diǎn)創(chuàng)新、數(shù)據(jù)庫怎么實(shí)現(xiàn)彈性調(diào)度、關(guān)于智能化的思考、最后是曾經(jīng)踩過的坑和看到未來的方向。
阿里場景下數(shù)據(jù)庫所面臨的問題
首先說一下,阿里巴巴最早一代使用的數(shù)據(jù)庫技術(shù)是Oracle,后面大家也知道一件事情就是去IOE,去IOE過程中我們邁向了使用開源數(shù)據(jù)庫的時代,這個時代今天已經(jīng)過去,這個過程大概持續(xù)了五六年,整個阿里巴巴有一個大家都知道的開源MYSQL分支--AliSQL,在上面做了大量的改進(jìn)。面向未來的下一代數(shù)據(jù)庫技術(shù)、數(shù)據(jù)庫架構(gòu)會往哪個方向走。
今天的阿里巴巴是一個技術(shù)的公司,所以很多時候我們會看比如說Google或者是一些互聯(lián)網(wǎng)的大的公司,他們在技術(shù)上創(chuàng)新點(diǎn)來自于哪里?來自于問題。
可以看到其實(shí)阿里巴巴的應(yīng)用和Facebook、Google的還是有很大區(qū)別的,他們的業(yè)務(wù)場景真的不一樣,首先阿里巴巴的主要應(yīng)用是交易型的,這些應(yīng)用會有些什么要求,你會看到有這些點(diǎn),下面主要講一下我們的思考。
今天數(shù)據(jù)的高可用和強(qiáng)一致是非常重要的,數(shù)據(jù)不一致帶來的問題是非常非常巨大的,大家也用淘寶,也是阿里巴巴一些服務(wù)的用戶,數(shù)據(jù)不一致帶來的問題,每一個用戶都會關(guān)注這些事情。
第二,今天存儲成本是非常高的,所有的數(shù)據(jù)中心已經(jīng)在用SSD,但數(shù)據(jù)的存儲成本依然是一個大型企業(yè)面臨的一個非常大的問題,這都是實(shí)實(shí)在在錢的問題。
另外剛才也提到了,數(shù)據(jù)都是有生命周期的,那么數(shù)據(jù)尤其是交易數(shù)據(jù)是有非常明顯的冷和熱的狀態(tài),大家一定很少看自己一年前在淘寶的購買記錄,但是當(dāng)下的購買記錄會去看,那系統(tǒng)就需要經(jīng)常會去讀它、更新它。
還有一個特點(diǎn)是今天阿里的業(yè)務(wù)還是相對簡單的,比如要在OLTP性能上做到極致性。還有一個阿里巴巴特有的點(diǎn)就是雙十一,雙十一本質(zhì)上是什么,本質(zhì)上就是制造了一個技術(shù)上非常大的熱點(diǎn)效應(yīng)。這對我們提出什么樣的需求呢?需求就是一個極致彈性的能力,數(shù)據(jù)庫實(shí)際上在這個方向是非常欠缺的,數(shù)據(jù)庫怎么樣去做到彈性伸縮是非常難的事情。
最后說說DBA,阿里在智能化這個方向上得到的思考是什么樣的,有海量的數(shù)據(jù),也有很多經(jīng)驗(yàn)很豐富的DBA,但這些DBA怎么樣去完成下一步的轉(zhuǎn)型、怎么樣不成為業(yè)務(wù)的瓶頸?數(shù)據(jù)庫怎么樣做到自診斷、自優(yōu)化。
阿里在數(shù)據(jù)庫內(nèi)核方向上的思考
我先講一下我們在數(shù)據(jù)庫內(nèi)核上的思考。首先我很尊敬做國產(chǎn)數(shù)據(jù)庫的廠商,凡是在內(nèi)核上改進(jìn)的人都知道,其實(shí)每個功能都是要一行行代碼寫出來都是非常不容易的,我想表達(dá)對國產(chǎn)數(shù)據(jù)庫廠商包括這些技術(shù)人的尊敬。今天我要講的內(nèi)容是我第一次在國內(nèi)的會議上來講,首先我會講一下AliSQL X-Cluster。X-Cluster是在AliSQL上做的一個三節(jié)點(diǎn)集群,這是在引入了Paxos一致性協(xié)議,保證MySQL變成一個集群,并且這個集群具有數(shù)據(jù)強(qiáng)一致、面向異地部署,且能夠容忍網(wǎng)絡(luò)高延遲等一系列特性。
今天很多數(shù)據(jù)庫都會和Paxos聯(lián)系在一起,比如大家都知道的Google的Spanser數(shù)據(jù)庫,但是以前大家沒有特別想過數(shù)據(jù)庫和Paxos會有什么關(guān)系,其實(shí)以前確實(shí)沒有什么關(guān)系的,但是今天的數(shù)據(jù)庫在幾個地方是需要用到Paxos協(xié)議的,第一個我們需要用Paxos來選舉,尤其在高可用的場景下需要唯一地選舉出一個節(jié)點(diǎn)作為主節(jié)點(diǎn),這就需要用到Paxos;第二是用Paxos協(xié)議來保證數(shù)據(jù)庫在沒有共享存儲的前提下數(shù)據(jù)的強(qiáng)一致,就是數(shù)據(jù)怎么樣在多個節(jié)點(diǎn)間保證是強(qiáng)一致,且保證高可用。
所以說現(xiàn)在的數(shù)據(jù)庫架構(gòu)設(shè)計上Paxos的應(yīng)用非常廣泛,今天外面很多展商包括Goolge Spanser也都在用Paxos協(xié)議和數(shù)據(jù)庫結(jié)合在一起來做。所以AliSQL的三節(jié)點(diǎn)集群也是一樣,就是利用Paxos協(xié)議變成一個數(shù)據(jù)強(qiáng)一致的集群。下面我大概解釋一下Paxos協(xié)議在數(shù)據(jù)庫里的作用是什么。
本質(zhì)上來說Paxos也是現(xiàn)在通用的技術(shù),大家都是搞數(shù)據(jù)庫的,簡單來說,Paxos協(xié)議用在我們數(shù)據(jù)庫里面,就是一個事務(wù)組的提交在一個節(jié)點(diǎn)并落地后,必須在多個節(jié)點(diǎn)同時落地,也就是說原來寫入只需要寫入一個節(jié)點(diǎn)上,但是現(xiàn)在需要跨網(wǎng)絡(luò)寫到另外一個節(jié)點(diǎn)上,這個節(jié)點(diǎn)可能是異地的,也可能是全球的另外一個城市,中間需要經(jīng)過非常漫長的網(wǎng)絡(luò)時延,這時候需要有一些核心技術(shù)。
我們的目標(biāo)是什么?首先沒有辦法抗拒物理時延,過去在數(shù)據(jù)庫上的操作只要提交到本地,但現(xiàn)在數(shù)據(jù)庫全球部署、異地部署,甚至跨網(wǎng)絡(luò),這個時延特性是沒有辦法克服的,但是在這種情況下我們能做到什么?在時延增長情況下盡可能保證吞吐不下降,原來做多少Q(mào)PS、TPS,這一點(diǎn)是可以保證的,只要工程做的好是可以保證的,但是時延一定會提升。
這也是大家經(jīng)常在Goolgle Spanser論文里看到的“我的時延很高”的描述,在這種時延很高的情況下,怎么樣寫一個好的應(yīng)用來保證可用、高吞吐,這是另外一個話題。大家很長一段時間里已經(jīng)習(xí)慣一個概念,那就是數(shù)據(jù)庫一定是時延很低的,時延高就會導(dǎo)致應(yīng)用出問題,實(shí)際上這個問題要花另外一個篇幅去講,那就是應(yīng)用程序必須要去適應(yīng)這種時延高的數(shù)據(jù)庫系統(tǒng)。當(dāng)然用了Batching和Pipelining技術(shù),本質(zhì)上是通用的工程優(yōu)化,讓跨網(wǎng)絡(luò)多復(fù)本同步變的高效,但是時延一定會增加。
實(shí)際上大家知道數(shù)據(jù)庫要做三副本或者三節(jié)點(diǎn),本質(zhì)上就是為了實(shí)現(xiàn)數(shù)據(jù)強(qiáng)一致,而且大家都在這個方向上做努力,比如Oracle前一段時間推出的Group replication,也是三節(jié)點(diǎn)技術(shù),X-Cluster和它的區(qū)別是,一開始的目標(biāo)就是跨城市,最開始設(shè)計的時候就認(rèn)為這個節(jié)點(diǎn)一定要跨非常遠(yuǎn)的距離來部署的,設(shè)計之初提出這個目標(biāo)造成在設(shè)計上、工程實(shí)踐上、包括最終的性能上有比較大的差異。
這里阿里巴巴做了一些X-Cluster和Oracle的Group replication的對比,同城的環(huán)境下我們要比他們好一些;在異地場景下這個差異就更大了,因?yàn)楸緛碓O(shè)計的時候就是面向異地的場景。可能大家也知道,阿里一直在講異地多活的概念,就是IDC之間做異地多活怎么樣能夠做到,所以最開始設(shè)計的就是面向異地的場景做的。
這是一個典型的X-Cluster在異地多活的場景下怎么做的架構(gòu)圖,這是一個典型的3城市4份數(shù)據(jù)5份日志架構(gòu),如果要簡化且考慮數(shù)據(jù)存儲成本的話,實(shí)際上可以做到3份數(shù)據(jù)5份日志,這樣的話就可以保證城市級、機(jī)房機(jī)、包括單機(jī)任何的故障都可以避免,并且是零數(shù)據(jù)丟失的,在今天阿里巴巴可以這么做,且能保證數(shù)據(jù)是零丟失、強(qiáng)一
再講一個小的,但是非常實(shí)用的創(chuàng)新點(diǎn),可能大家都比較感興趣,這就是X-KV。這里還要說一下,阿里巴巴所有的下一代技術(shù)組件都是以X開頭的。這個X-KV是基于原來MYSQL的Memcached plugin做的改進(jìn),做到非常高的性能,大家可能都了解MySQL的Memcached plugin,可以通過Memcached plugin的接口直接訪問InnoDB buffer 里的數(shù)據(jù),讀的性能可以做到非常高,這對于大家來說,或者對于所謂的架構(gòu)師,或者設(shè)計的過程中意義在什么地方呢?
那就是很多場景下不需要緩存了,因?yàn)閿?shù)據(jù)庫+緩存結(jié)構(gòu)基本上是所有業(yè)務(wù)通用的場景,但是緩存的問題在于緩存和數(shù)據(jù)庫里的數(shù)據(jù)永遠(yuǎn)是不一致的,需要一個同步或者失效機(jī)制來做這個事情。使用X-KV后讀的問題基本上就能解決掉。這是因?yàn)橐环輸?shù)據(jù)只要通過這個接口訪問就基本上做到和原來訪問緩存差不多的能力,或者說在大部分情況下其實(shí)就不需要緩存了。
所以建議建立兩個平臺:1、建立一個支撐的平臺,這個支撐的平臺盡可能把下層存儲的復(fù)雜性屏蔽掉,對上層提供統(tǒng)一的接口和服務(wù);2、建立一個服務(wù)的平臺,明確面向研發(fā)的平臺,研發(fā)人員可以直接通過這個平臺來用數(shù)據(jù)庫的服務(wù)。我看到很多公司把運(yùn)維平臺和DBA開發(fā)的平臺混在一起,但阿里的思路是,支撐平臺和服務(wù)平臺是兩個分層的平臺,支撐平臺在下面,上層服務(wù)平臺為所有的開發(fā)人員服務(wù),開發(fā)人員上了這個平臺就能看到我用了什么數(shù)據(jù)庫,性能怎么樣,在上面可以做什么事情,這樣就可以大量節(jié)省DBA的人力。
- 騎士人才招聘系統(tǒng):市場領(lǐng)導(dǎo)者還是追趕者?
- 騎士人才招聘系統(tǒng):打造企業(yè)招聘的新時代
- 人才系統(tǒng)招聘技術(shù)的變遷及其發(fā)展前景
- 人才招聘系統(tǒng):如何提升招聘效率
- 企業(yè)如何選擇適合自己的人才招聘系統(tǒng)呢?
- 互聯(lián)網(wǎng)招聘系統(tǒng)優(yōu)勢與挑戰(zhàn)并存
- 拓寬人才視野,盡享便捷招聘之旅-騎士app
- 企業(yè)人力資源管理中招聘系統(tǒng)的應(yīng)用與影響
- 騎士CMS,人才庫定位利器
- 人才招聘系統(tǒng):現(xiàn)代企業(yè)人才獲取的關(guān)鍵利器
