摘要:簡(jiǎn)介本文首發(fā)公眾號(hào)一名打字員據(jù)悉,年的月份,螞蟻金服已經(jīng)宣布,螞蟻金服及阿里巴巴自研的關(guān)系型數(shù)據(jù)庫(kù)已經(jīng)支撐起和淘寶的日常業(yè)務(wù)需求,成功替換了之前所采用的單機(jī)數(shù)據(jù)庫(kù)如或者開(kāi)源的。
簡(jiǎn)介
Tip:本文首發(fā)公眾號(hào)【一名打字員】
據(jù)悉,17年的4月份,螞蟻金服已經(jīng)宣布,螞蟻金服及阿里巴巴自研的關(guān)系型數(shù)據(jù)庫(kù)OceanBase已經(jīng)支撐起Tmall和淘寶的日常業(yè)務(wù)需求,成功替換了之前所采用的單機(jī)數(shù)據(jù)庫(kù)如Oracle或者開(kāi)源的MySQL。OceanBase作為一個(gè)金融級(jí)應(yīng)用,已經(jīng)做到了可以容納數(shù)百TB以及數(shù)千億條數(shù)據(jù)的跨表事物,其最大的亮點(diǎn)就是可擴(kuò)展,未來(lái)很可能會(huì)成為支持跨域多地的數(shù)據(jù)中心。
發(fā)展歷程阿里巴巴首席DBA馮春培在一次大會(huì)中曾分享了阿里數(shù)據(jù)庫(kù)的演變歷程,其中大致分為幾個(gè)階段:
Oracle
04年以前,淘寶是使用的MySQL數(shù)據(jù)庫(kù),眾所周知,5.6以前的PHP在數(shù)據(jù)庫(kù)方面有著極大的隱患,所以后來(lái)開(kāi)始向ORACLE遷移。據(jù)馮春培介紹,04年阿里的數(shù)據(jù)庫(kù)經(jīng)常出現(xiàn)問(wèn)題,后來(lái),業(yè)務(wù)超速發(fā)展,ORACLE的優(yōu)化還是承載不了業(yè)務(wù)的發(fā)展,這個(gè)時(shí)候阿里和淘寶進(jìn)行了拆分。雖然ORACLE作為一個(gè)優(yōu)質(zhì)的商業(yè)級(jí)DB來(lái)說(shuō),他提供了一個(gè)健碩的應(yīng)用環(huán)境,但是也依然無(wú)法擺脫上億級(jí)數(shù)據(jù)操作的困擾。當(dāng)然我猜,成本上也是一個(gè)很大的方面,每年投入的成本都在1千萬(wàn)以上,另外由于當(dāng)時(shí)淘寶內(nèi)部團(tuán)隊(duì)大都很擅長(zhǎng)商業(yè)DB,能很便捷的配合業(yè)務(wù)的擴(kuò)展。
MySQL
07年以后,阿里感受到數(shù)據(jù)庫(kù)方面的貧瘠,開(kāi)始選擇在開(kāi)源數(shù)據(jù)庫(kù)上動(dòng)手腳,這意味著需要放棄熟悉的,重新開(kāi)始,并將固化思維進(jìn)行改變。這個(gè)時(shí)候的MySQL作為開(kāi)源領(lǐng)域的佼佼者,具有很強(qiáng)的開(kāi)發(fā)易用性以及具有成熟的中間層,這樣極大程度的減少了開(kāi)發(fā)難度,底層的數(shù)據(jù)存儲(chǔ)引擎也十分強(qiáng)大。而且,當(dāng)時(shí)國(guó)內(nèi)某銀行使用服務(wù)商提供的全套產(chǎn)品之后,無(wú)法替換,所以阿里徹底向MySQL進(jìn)行遷移。在長(zhǎng)達(dá)三年的遷移中,阿里一方面與ORACLE簽署了一份采購(gòu)協(xié)議,使得ORACLE的授權(quán)可以隨意使用,然后另一方面,平穩(wěn)的推進(jìn)MySQL的發(fā)展,在當(dāng)時(shí),傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)在擴(kuò)張方面是沒(méi)有一個(gè)好的解決方案的。
NoSQL,OceanBase
10年,淘寶的大部分業(yè)務(wù)擴(kuò)張很快,這些業(yè)務(wù)通常涉及到安全、交易以及數(shù)據(jù)的穩(wěn)定性等問(wèn)題,DB方面已經(jīng)完成不了了,這個(gè)時(shí)候,淘寶開(kāi)始重新架構(gòu)自己的系統(tǒng),據(jù)說(shuō),在10年頭,阿里系里出現(xiàn)了一系列優(yōu)秀的架構(gòu)師。而且市面上開(kāi)始掛起大數(shù)據(jù)的熱風(fēng),很多人開(kāi)始意識(shí)到數(shù)據(jù)的重要性。而大數(shù)據(jù)主要分為存取數(shù)據(jù),挖掘數(shù)據(jù)和運(yùn)營(yíng)數(shù)據(jù),數(shù)據(jù)可廣泛作用于各個(gè)領(lǐng)域。
這個(gè)時(shí)候比起昂貴的ORACLE和各種坑坑洼洼的MySQL來(lái)說(shuō),阿里開(kāi)始拋棄開(kāi)始汲取市場(chǎng)上僅有的非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)的優(yōu)點(diǎn),決定使用自己掌握的核心技術(shù)研發(fā)出一款自己的數(shù)據(jù)庫(kù)。OceanBase可以自動(dòng)擴(kuò)展,具有強(qiáng)一致性,能夠達(dá)到機(jī)房級(jí)的容災(zāi),最重要的一點(diǎn),OceanBase能夠達(dá)到真正的完全不丟數(shù)據(jù)。
之前也已經(jīng)提到,MySQL、ORACLE與OceanBase的發(fā)展歷程,也簡(jiǎn)單描述了相關(guān)的優(yōu)缺點(diǎn),在這里也只簡(jiǎn)單的安利一下OceanBase的特點(diǎn),其中大部分思路源于@日照(OceanBase)的官方推文。
在這之前,不得不說(shuō)說(shuō)MySQL,當(dāng)我們切換到MySQL上時(shí),通常會(huì)有下面幾個(gè)疑問(wèn):
MySQL的容災(zāi)解決方案
MySQL的性能數(shù)據(jù)
MySQL自身穩(wěn)定性如何
MySQL DDL解決方案
MySQL主備同步延遲以及數(shù)據(jù)一致性校驗(yàn)
當(dāng)然,在這里我就不一一解答了,在互聯(lián)網(wǎng)上有一系列的解決方案,另外我會(huì)在后面的文章中陸續(xù)給出自己的看法以及相應(yīng)的解決方案,有興趣的童鞋也可以私下與我交流交流。
讀過(guò)《MySQL技術(shù)內(nèi)幕:InnoDB存儲(chǔ)引擎》的童鞋都應(yīng)該知道,MySQL被設(shè)計(jì)為一個(gè)但進(jìn)程多線程架構(gòu)的數(shù)據(jù)庫(kù),與SQL Server類似,與Oracle的多進(jìn)程架構(gòu)有所不同。大名鼎鼎的InnoDB被ORACLE收購(gòu),應(yīng)用十分廣泛,其體系結(jié)構(gòu)主要分為后臺(tái)線程和內(nèi)存。后臺(tái)線程主要作用是負(fù)責(zé)刷新內(nèi)存池中的數(shù)據(jù),保證緩沖池中的內(nèi)存緩存的是最近的數(shù)據(jù),這時(shí)將已修改的數(shù)據(jù)文件刷新到磁盤文件,同時(shí)中途如果出現(xiàn)異常還要能恢復(fù)到正常狀態(tài)。
MySQL后面我們會(huì)詳細(xì)介紹,畢竟也是開(kāi)源圈內(nèi)的一桿大旗,說(shuō)回來(lái)我們的OceanBase,從13年的設(shè)計(jì)到后面15年的崛起,從官方推文來(lái)說(shuō),OceanBase達(dá)到了分布式數(shù)據(jù)庫(kù)基本的幾個(gè)核心部分,一個(gè)是查詢,一個(gè)是存儲(chǔ)還有一個(gè)就是事務(wù)。
事務(wù)處理
首先我們得理清數(shù)據(jù)分布情況,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)都有一種叫做兩級(jí)分區(qū)表的概念,就是:時(shí)間+業(yè)務(wù)主鍵。常見(jiàn)的分布式系統(tǒng)中,分區(qū)要不就是用哈希或者是范圍。OceanBase能夠?qū)⒉煌姆謪^(qū)分布到不同的數(shù)據(jù)庫(kù)。這是當(dāng)下傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)所無(wú)法完成的。
OceanBase是如何達(dá)到多機(jī)的事務(wù)呢,這又得分為單分區(qū)和多分去的操作。因?yàn)椴僮鲉蝹€(gè)分區(qū)就是在一臺(tái)機(jī)器上,也就是使用的一臺(tái)機(jī)器的服務(wù),本質(zhì)就是一個(gè)單機(jī)事務(wù)。和其他傳統(tǒng)數(shù)據(jù)庫(kù)的原理差不多,基于導(dǎo)個(gè)版本進(jìn)行并發(fā)控制,不同的是,OceanBase做了一些優(yōu)化例如日志同步以及加入了內(nèi)存數(shù)據(jù)庫(kù)的無(wú)鎖結(jié)構(gòu)、內(nèi)存多版本并發(fā)控制、SQL編譯執(zhí)行等等。
多個(gè)分區(qū)則分為兩種情況,單服務(wù)器和多服務(wù)器。由于多個(gè)服務(wù)器肯定會(huì)跨多個(gè)觀察者,所以O(shè)ceanBase也對(duì)此進(jìn)行了一系列的優(yōu)化,而且里面的里面高可用是基于Paxos協(xié)議實(shí)現(xiàn)的,OceanBase的開(kāi)發(fā)者和Google Chubby系統(tǒng)的發(fā)明者也一致認(rèn)同“Paxos協(xié)議實(shí)現(xiàn)的高可用機(jī)制都是耍流氓”的話語(yǔ)。
分布式查詢
OceanBase里有一個(gè)ObProxy的代理服務(wù)器,功能則就是一個(gè)透明轉(zhuǎn)發(fā)代理,可以解析SQL,能夠識(shí)別操作對(duì)應(yīng)的哪一個(gè)分區(qū),然后將其轉(zhuǎn)發(fā)過(guò)去,據(jù)說(shuō)他的性能是能夠達(dá)到百萬(wàn)級(jí)的QPS。內(nèi)部人員對(duì)它的評(píng)價(jià)就是:
輕量級(jí)SQL Parser
高性能異步框架
支持線程本地化
另外。在運(yùn)維方面,它支持熱升級(jí)、全鏈路監(jiān)控。說(shuō)到熱升級(jí),主要是新老版本發(fā)出不同的請(qǐng)求,對(duì)應(yīng)到相應(yīng)的新老版本提供服務(wù),一段時(shí)間后將自動(dòng)退出。
OceanBase的執(zhí)行計(jì)劃主要分為本地計(jì)劃、遠(yuǎn)程計(jì)劃和分布式計(jì)劃。這樣一個(gè)SQL請(qǐng)求到了Observer的服務(wù)端,經(jīng)過(guò)一系列的解析、重寫和優(yōu)化過(guò)程,再由SQL執(zhí)行器負(fù)責(zé)執(zhí)行。
其它
其它OceanBase還有很多很好的優(yōu)點(diǎn),雖然它年齡還小,各方面還很稚嫩,比如說(shuō)他的強(qiáng)一致性和它的高可用的優(yōu)化,以及等等等等。。
更多的優(yōu)點(diǎn)可以移步官方推文
據(jù)說(shuō)OceanBase也曾經(jīng)開(kāi)源過(guò)0.4的版本,但是目前的版本已經(jīng)和開(kāi)源中的架構(gòu)風(fēng)馬牛不相及,也意味著OceanBase肯定是遇到了許多坎坷,但是最終還是遇到了自己的伯樂(lè)。雖然許多關(guān)鍵性的指標(biāo)OceanBase還沒(méi)有達(dá)到,也沒(méi)有辦法在處理互聯(lián)網(wǎng)實(shí)時(shí)大數(shù)據(jù)量的處理進(jìn)行高度的契合,生態(tài)圈也不夠完善,但是一切都在起步,就和我們每一個(gè)打字員一樣,都在成長(zhǎng)的路上,We always on the road。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17659.html
摘要:相反,它曾無(wú)人看好困難重重,整個(gè)團(tuán)隊(duì)甚至數(shù)度瀕臨解散。從危在旦夕到浴火重生,這十年經(jīng)歷了什么今天,我們一起了解它背后不為人知的故事。在陽(yáng)振坤看來(lái),如果一件事情幾乎所有的人都認(rèn)為它很重要需要做,這件事情就已經(jīng)不是創(chuàng)新了。 showImg(https://segmentfault.com/img/remote/1460000019001650); 阿里妹導(dǎo)讀:談及國(guó)產(chǎn)自研數(shù)據(jù)庫(kù),就不得不...
閱讀 1666·2021-09-28 09:35
閱讀 1137·2019-08-30 15:54
閱讀 1664·2019-08-30 15:44
閱讀 3369·2019-08-30 14:09
閱讀 498·2019-08-29 14:05
閱讀 2667·2019-08-28 17:53
閱讀 1988·2019-08-26 13:41
閱讀 1719·2019-08-26 13:26