摘要:技術(shù)成就劃時(shí)代的分布式數(shù)據(jù)庫(kù)通過(guò)核心業(yè)務(wù)的不斷上線,螞蟻金服幫助渡過(guò)了自研基礎(chǔ)軟件產(chǎn)品最艱難的應(yīng)用關(guān)。年天貓雙十一,支付寶創(chuàng)造了萬(wàn)筆每秒支付峰值的業(yè)界新紀(jì)錄,這對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),意味著每秒需要同時(shí)運(yùn)行萬(wàn)條。
技術(shù)成就:劃時(shí)代的分布式數(shù)據(jù)庫(kù)
通過(guò)核心業(yè)務(wù)的不斷上線,螞蟻金服幫助OceanBase渡過(guò)了自研基礎(chǔ)軟件產(chǎn)品最艱難的應(yīng)用關(guān)。OceanBase不只是被研發(fā)出來(lái)的,更是被用出來(lái)的,是在生產(chǎn)系統(tǒng)中被磨練出來(lái)的。螞蟻金服作為互聯(lián)網(wǎng)金融的標(biāo)桿企業(yè),也通過(guò)OceanBase的應(yīng)用,于2017年真正實(shí)現(xiàn)了所有核心業(yè)務(wù)100%去商業(yè)數(shù)據(jù)庫(kù),這對(duì)整個(gè)金融體系來(lái)說(shuō)都是具有里程碑意義的事件。
今天的OceanBase已經(jīng)支持了阿里巴巴/螞蟻金服數(shù)百個(gè)關(guān)鍵業(yè)務(wù)的執(zhí)行,其中有很多業(yè)務(wù)已經(jīng)穩(wěn)定的運(yùn)行了多年。2017年天貓雙十一,支付寶創(chuàng)造了25.6萬(wàn)筆每秒支付峰值的業(yè)界新紀(jì)錄,這對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),意味著每秒需要同時(shí)運(yùn)行4200萬(wàn)條SQL。
市場(chǎng)對(duì)關(guān)系型數(shù)據(jù)庫(kù)的性能和穩(wěn)定性要求苛刻,真正的關(guān)系型數(shù)據(jù)庫(kù)都是磨礪出來(lái)的——OceanBase用了7年多的時(shí)間才取代Oracle成為了支付寶的賬務(wù)等數(shù)據(jù)庫(kù)。從2010年5月調(diào)研、6月25日立項(xiàng)開(kāi)始,OceanBase的目標(biāo)就是成為新一代的商用關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品,差異化競(jìng)爭(zhēng)點(diǎn)在于底層的分布式技術(shù)。全球三大數(shù)據(jù)庫(kù)廠商已存在幾十年,每家公司都擁有數(shù)以萬(wàn)計(jì)的員工,而OceanBase之外做分布式數(shù)據(jù)庫(kù)的全球唯一一個(gè)成功案例是谷歌。
OceanBase等后來(lái)者反映了以互聯(lián)網(wǎng)為代表的新興社會(huì)生產(chǎn)力對(duì)關(guān)系數(shù)據(jù)庫(kù)的新需求:互聯(lián)網(wǎng)訪問(wèn)的用戶數(shù)量無(wú)法確定,可能在幾天甚至幾小時(shí)內(nèi)增長(zhǎng)數(shù)倍,傳統(tǒng)數(shù)據(jù)庫(kù)的垂直擴(kuò)展方式根本無(wú)法應(yīng)對(duì)。而全球前三大數(shù)據(jù)庫(kù)甲骨文、IBM、微軟都采用集中式系統(tǒng)的重要原因在于主機(jī)系統(tǒng)的穩(wěn)定性,一臺(tái)主機(jī)動(dòng)輒數(shù)百萬(wàn)美元,存儲(chǔ)空間不夠就只能再買(mǎi)一臺(tái),而且新主機(jī)系統(tǒng)上線還要數(shù)天時(shí)間。
楊傳輝現(xiàn)任螞蟻金服基礎(chǔ)數(shù)據(jù)部(OceanBase團(tuán)隊(duì))研究員,目前負(fù)責(zé)數(shù)據(jù)庫(kù)事務(wù)開(kāi)發(fā)工作,著有《大規(guī)模分布式存儲(chǔ)系統(tǒng):原理解析與架構(gòu)實(shí)戰(zhàn)》一書(shū),他從武漢大學(xué)畢業(yè)后加入百度從事大規(guī)模分布式存儲(chǔ)系統(tǒng)開(kāi)發(fā),后隨著陽(yáng)振坤轉(zhuǎn)戰(zhàn)阿里系從事OceanBase系統(tǒng)開(kāi)發(fā),是OceanBase 0.5和1.0版本的總體設(shè)計(jì)師。
楊傳輝總結(jié)OceanBase的六大特點(diǎn):第一高可用、第二強(qiáng)一致、第三易用性、第四高性能、第五可擴(kuò)展、第六低成本。
OceanBase作為分布式關(guān)系型數(shù)據(jù)庫(kù),最大的特色在于分布式架構(gòu),而分布式架構(gòu)的一個(gè)基本特征是能夠基于普通的PC服務(wù)器,構(gòu)建一個(gè)滿足金融級(jí)更高的可靠性以及數(shù)據(jù)一致性要求的業(yè)務(wù)核心。而PC服務(wù)器硬件的不可靠,可以通過(guò)架構(gòu)設(shè)計(jì)和軟件的可靠性來(lái)彌補(bǔ),螞蟻金服的多年實(shí)踐已經(jīng)非常清楚地向業(yè)界證明了這一點(diǎn)。
OceanBase又被稱為原生的分布式關(guān)系型數(shù)據(jù)庫(kù),即OceanBase是真正把所有與高可用及數(shù)據(jù)一致性相關(guān)的問(wèn)題在數(shù)據(jù)庫(kù)內(nèi)核層面就解決掉了,這和現(xiàn)在很多互聯(lián)網(wǎng)公司采用的中間層+單機(jī)數(shù)據(jù)庫(kù)的分層設(shè)計(jì)方式有很大的差別。從技術(shù)復(fù)雜度上看,選擇走原生分布式數(shù)據(jù)庫(kù)這條路,無(wú)疑是非常艱難和痛苦的,這意味著在這樣的一個(gè)復(fù)雜的分布式內(nèi)核上,哪怕是實(shí)現(xiàn)一個(gè)簡(jiǎn)單的功能,也需要付出比單機(jī)數(shù)據(jù)庫(kù)大得多的代價(jià),但正是這樣的選擇,使得OceanBase真正具備了商業(yè)數(shù)據(jù)庫(kù)最重要的特征:高度集成、整體交付,對(duì)業(yè)務(wù)無(wú)侵入;同時(shí)也真正解決了分層設(shè)計(jì)中無(wú)法同時(shí)實(shí)現(xiàn)的水平擴(kuò)展及跨庫(kù)查詢等缺陷。
OceanBase的一個(gè)基礎(chǔ)設(shè)計(jì)思想是把每一份數(shù)據(jù)存放在三臺(tái)不同的機(jī)器上,那么一臺(tái)PC服務(wù)器出故障的概率為千分之一的話,兩臺(tái)同時(shí)壞的概率可能就是百萬(wàn)分之一,三臺(tái)同時(shí)壞的概率則是十億分之一。這樣做的成本雖然下來(lái)了,但如何保證三臺(tái)機(jī)器上數(shù)據(jù)的強(qiáng)一致性,這對(duì)于金融業(yè)務(wù)來(lái)說(shuō)至關(guān)重要。
OceanBase高可靠的核心是基于PAXOS協(xié)議。PAXOS協(xié)議原來(lái)為分布式理論上的算法,OceanBase在分布式數(shù)據(jù)庫(kù)中實(shí)現(xiàn)了這一協(xié)議。PAXOS協(xié)議本質(zhì)是少數(shù)服從多數(shù)的協(xié)議,具體實(shí)現(xiàn):在n個(gè)(n>=3)個(gè)數(shù)據(jù)庫(kù)中,其中一個(gè)為主庫(kù),其余為備庫(kù),每一筆事務(wù)不是同步到所有備庫(kù),而是同步到超過(guò)半數(shù)的庫(kù)(包括主庫(kù)自身),比如3個(gè)庫(kù)中的2個(gè)、5個(gè)庫(kù)中的3個(gè)等等。一旦主庫(kù)故障,只要存活的庫(kù)超過(guò)半數(shù),就可以自動(dòng)選舉出新的主庫(kù),并且恢復(fù)所有已經(jīng)提交的事務(wù)(超過(guò)半數(shù)庫(kù)或者保證了每一筆提交的事務(wù)至少在一個(gè)庫(kù)上存在),這樣就允許少數(shù)的庫(kù)故障而不丟失數(shù)據(jù)、不中斷業(yè)務(wù)?;赑AXOS協(xié)議,OceanBase能夠?qū)崿F(xiàn)單機(jī)/機(jī)房/城市級(jí)別,真正的無(wú)損容災(zāi);在少數(shù)庫(kù)故障的時(shí)候,RPO(恢復(fù)目標(biāo))為零,即沒(méi)有數(shù)據(jù)因?yàn)楣收隙鴵p壞或丟失;同時(shí)基于完全自動(dòng)的主備切換,能把RTO(恢復(fù)時(shí)間)縮短到30秒以內(nèi)。
在強(qiáng)一致性方面,OceanBase還做了大量?jī)?yōu)化工作。比如對(duì)于事務(wù)消息改造為異步消息機(jī)制:事務(wù)開(kāi)始時(shí)把消息投入消息系統(tǒng),當(dāng)交易全部完成后才通知消息系統(tǒng)投遞消息,而這個(gè)是一個(gè)非常關(guān)鍵性的改造,解決了高并發(fā)支撐同時(shí)的一致性問(wèn)題。
所謂事務(wù)(transaction),這是面向OLTP交易型關(guān)系數(shù)據(jù)庫(kù)的一個(gè)關(guān)鍵流程。對(duì)于交易來(lái)說(shuō),數(shù)據(jù)庫(kù)的事務(wù)必須是“原子”的,典型的是銀行轉(zhuǎn)賬:這邊扣了100塊錢(qián),另一邊就必須加上100塊錢(qián),而不能這邊扣了那邊卻沒(méi)有加上。
為了保證數(shù)據(jù)庫(kù)的高可用,OceanBase實(shí)現(xiàn)了三地五中心容災(zāi)架構(gòu)在核心業(yè)務(wù)的落地,即使一個(gè)城市的所有數(shù)據(jù)中心都完全不可用,整個(gè)系統(tǒng)在數(shù)據(jù)層面仍然會(huì)做到不丟一行數(shù)據(jù)并繼續(xù)提供服務(wù)。例如支付寶的會(huì)員ID采用了OceanBase的三地五中心部署方案,即使其中一個(gè)城市故障,剩下的兩個(gè)城市至少還有3個(gè)活著的庫(kù),仍然能夠自動(dòng)選舉出新的主庫(kù)、立即恢復(fù)數(shù)據(jù),并繼續(xù)提供服務(wù)。
在易用性方面,OceanBase作為后來(lái)者,必須要考慮到已有數(shù)據(jù)庫(kù)用戶的習(xí)慣,必須要兼容已經(jīng)有的技術(shù)與產(chǎn)品,特別是在做數(shù)據(jù)庫(kù)遷移的時(shí)候,最好是原有的軟件代碼不需要改動(dòng)一行也能直接遷移到OceanBase上,這就是易用性。
在可擴(kuò)展性方面,每一個(gè)城市里面的機(jī)房可以想象為一個(gè)可分片的大型數(shù)據(jù)庫(kù),可作為數(shù)據(jù)拆分的基礎(chǔ),例如把全中國(guó)的所有用戶分成一百份,那么一份放在第一個(gè)機(jī)房,依此類推使得整體伸縮能力可達(dá)到機(jī)房級(jí)。理論上只要增加機(jī)房,就能無(wú)限增加伸縮能力。不論跨越多少個(gè)機(jī)房、多少個(gè)城市,所有參與部署的數(shù)據(jù)庫(kù)服務(wù)器在邏輯上是一個(gè)OceanBase集群的一部分,這就是所謂“原生”的概念,無(wú)論從應(yīng)用視角還是運(yùn)維視角,都是整體交付。
通過(guò)原生的分布式數(shù)據(jù)庫(kù)設(shè)計(jì),OceanBase實(shí)現(xiàn)了高可用、強(qiáng)一致、易用性、高性能和可擴(kuò)展,這樣帶來(lái)的好處就是OceanBase性價(jià)比能做到傳統(tǒng)數(shù)據(jù)庫(kù)的10倍甚至更高,原先一臺(tái)高端服務(wù)器動(dòng)輒幾十萬(wàn)、幾百萬(wàn),而OceanBase僅用幾千元至多幾萬(wàn)元的PC服務(wù)器即可,這從根本上來(lái)說(shuō)就不是一個(gè)量級(jí),諸如大型銀行使用的大型機(jī)可能以幾千萬(wàn)、幾億元來(lái)計(jì)算。陽(yáng)振坤表示,OceanBase的性價(jià)比已經(jīng)達(dá)到了現(xiàn)有商業(yè)數(shù)據(jù)庫(kù)的5倍~6倍以上,未來(lái)還將達(dá)到更高。
OceanBase的開(kāi)發(fā)分為兩條線:一條線是從2010年開(kāi)始開(kāi)發(fā)的0.1、0.2、0.3、0.4、0.5這一系列的版本,主要是早期為了服務(wù)當(dāng)時(shí)已有的阿里系業(yè)務(wù);另一條線是從2012年開(kāi)始構(gòu)想的、完全從云時(shí)代架構(gòu)重新設(shè)計(jì)的分布式數(shù)據(jù)庫(kù)OceanBase 1.0系列,2013年開(kāi)始整體設(shè)計(jì)、2014年中旬抽出資源正式投入開(kāi)發(fā)、2015年底開(kāi)發(fā)完成,后又經(jīng)歷了1.0、1.1、1.2、1.3到現(xiàn)在的1.4版本。
2016年雙十一的時(shí)候,有些支付寶業(yè)務(wù)還是基于0.5版本,有些業(yè)務(wù)已經(jīng)升級(jí)到1.1版本,少量業(yè)務(wù)升級(jí)到1.2版本。而2014年雙十一,10%的交易數(shù)據(jù)鏈搬到了OceanBase上;2015年雙十一,100%交易數(shù)據(jù)鏈和支付數(shù)據(jù)鏈都搬過(guò)來(lái)了;2016年雙十一,整個(gè)賬務(wù)庫(kù)都搬過(guò)來(lái)了,這一核心數(shù)據(jù)庫(kù)被稱為“金融系統(tǒng)數(shù)據(jù)庫(kù)皇冠上的明珠”。
研發(fā)故事:軟件、硬件、業(yè)務(wù)一體優(yōu)化▲OceanBase 團(tuán)隊(duì)SQL組負(fù)責(zé)人 蔣志勇
對(duì)于OceanBase這樣一個(gè)劃時(shí)代的分布式數(shù)據(jù)庫(kù),自然有寫(xiě)也寫(xiě)不完的研發(fā)故事,以下僅摘取幾例以體現(xiàn)OceanBase的研發(fā)之難。
陳萌萌介紹說(shuō),以前數(shù)據(jù)庫(kù)技術(shù)更多偏向軟件層的,硬件層有專業(yè)人員、專業(yè)技術(shù)和專業(yè)的公司來(lái)解決硬件本身的穩(wěn)定性或容災(zāi)等問(wèn)題。但是在螞蟻金服這邊更多是軟硬結(jié)合的方案,OceanBase軟件從設(shè)計(jì)之初就考慮了硬件層面不穩(wěn)定、分布式系統(tǒng)的特征,從而去做以前數(shù)據(jù)庫(kù)不會(huì)做的優(yōu)化工作。以前的數(shù)據(jù)庫(kù)優(yōu)化根本不會(huì)考慮到底層的硬件損壞、機(jī)器宕掉、網(wǎng)絡(luò)斷網(wǎng)、天災(zāi)人禍不確定性問(wèn)題,而今天OceanBase無(wú)時(shí)無(wú)刻不在考慮這些問(wèn)題?!耙郧白鲕浖_(kāi)發(fā),先假設(shè)底層的硬件沒(méi)有問(wèn)題,而只需要把上層軟件邏輯做好就行了,現(xiàn)在我們是整體的軟硬件考慮?!?/p>
以數(shù)據(jù)庫(kù)的查詢優(yōu)化技術(shù)來(lái)講,比如傳統(tǒng)的銀行柜臺(tái),通過(guò)人工窗口提供服務(wù),用戶的主要時(shí)間花在與人工窗口打交道等方面,對(duì)于數(shù)據(jù)庫(kù)的快慢體會(huì)不那么敏感,但是螞蟻金服是互聯(lián)網(wǎng)應(yīng)用,數(shù)據(jù)庫(kù)隨時(shí)的一個(gè)抖動(dòng)或查詢執(zhí)行時(shí)間變慢了一點(diǎn),用戶馬上就能直接感受到。這與傳統(tǒng)應(yīng)用場(chǎng)景差異很大,如果數(shù)據(jù)庫(kù)的一個(gè)查詢從一毫秒變到了五毫秒,傳統(tǒng)數(shù)據(jù)庫(kù)不會(huì)認(rèn)為這是件大事,但是互聯(lián)網(wǎng)應(yīng)用下,多出來(lái)的四毫秒可能被放大成為幾百毫秒甚至一兩秒,一旦出現(xiàn)這樣的時(shí)延,用戶體驗(yàn)馬上就變差了?!拔覀兠刻於荚谧鎏貏e精細(xì)的事情,生怕一毫秒變成五毫秒這種事情出現(xiàn),因此做了很多精確防御?!?/p>
楊傳輝進(jìn)一步解釋。數(shù)據(jù)庫(kù)查詢優(yōu)化器本身是近似解,基本上不存在最優(yōu)解,優(yōu)化的目標(biāo)就是逼近最理想的情況。在傳統(tǒng)應(yīng)用場(chǎng)景下可以允許優(yōu)化結(jié)果差幾個(gè)毫秒甚至更多,但是在互聯(lián)網(wǎng)場(chǎng)景下就很難接受這么大的差異,所有的優(yōu)化效果都要精確到幾個(gè)毫秒以內(nèi)。
比如每一次在支付寶付款,點(diǎn)擊一下支付寶的付款按鈕,背后的數(shù)據(jù)庫(kù)可能要執(zhí)行一兩百次數(shù)據(jù)庫(kù)的SQL查詢,優(yōu)化器要為每一個(gè)查詢生成一個(gè)需要做的優(yōu)化執(zhí)行計(jì)劃,如果優(yōu)化器在某一個(gè)場(chǎng)景下犯了一個(gè)錯(cuò)誤,每個(gè)查詢多出了5毫秒,那么整個(gè)鏈路就會(huì)多500毫秒,用戶在按下付款按鈕的時(shí)候發(fā)現(xiàn)有可能變慢了。如果再加上可能不止做支付,比如買(mǎi)商品后下單再要支付,這幾個(gè)鏈路加在一起就有可能慢幾百毫秒甚至上到秒級(jí),這對(duì)用戶來(lái)說(shuō)就已經(jīng)不能接受了。
還有一個(gè)場(chǎng)景是地鐵的刷臉或者刷支付寶進(jìn)站,如果用戶站在閘機(jī)前面半天刷不出來(lái),那就不光是體驗(yàn)問(wèn)題了,有可能會(huì)引來(lái)連鎖麻煩,后面人也會(huì)被堵起長(zhǎng)龍,這些現(xiàn)實(shí)的挑戰(zhàn)都要求OceanBase反應(yīng)精確、迅速。楊傳輝介紹說(shuō),從關(guān)鍵業(yè)務(wù)系統(tǒng)的數(shù)據(jù)鏈路梳理上來(lái)看,一兩百條SQL是最普通的一次交易了,如果涉及到支付渠道不一樣,SQL執(zhí)行的次數(shù)就會(huì)更多。
因?yàn)槲浵伣鸱旧硎欠植际降南到y(tǒng),分布式系統(tǒng)一個(gè)很大挑戰(zhàn)是對(duì)底層的基礎(chǔ)組件包括網(wǎng)絡(luò)要求非常高。如果網(wǎng)絡(luò)出現(xiàn)了問(wèn)題,就會(huì)對(duì)整個(gè)服務(wù)產(chǎn)生影響。因此OceanBase不僅要對(duì)數(shù)據(jù)庫(kù)層做優(yōu)化,還對(duì)網(wǎng)絡(luò)、磁盤(pán)、操作系統(tǒng)等軟硬件層都要做很精確的優(yōu)化。
那么OceanBase是怎么解決的呢?OceanBase團(tuán)隊(duì)從業(yè)務(wù)的開(kāi)始階段就會(huì)介入到業(yè)務(wù)的設(shè)計(jì)當(dāng)中,業(yè)務(wù)怎么用數(shù)據(jù)庫(kù)、怎么用最合理等等,從一開(kāi)始就會(huì)參與整體設(shè)計(jì),與業(yè)務(wù)方和整個(gè)架構(gòu)一起演進(jìn)。
蔣志勇所從事的SQL引擎和優(yōu)化器工作,為OceanBase從無(wú)到有的建立了自己的SQL引擎,特別是讓原先的MySQL應(yīng)用不改動(dòng)任何代碼就能遷移過(guò)來(lái)。在數(shù)據(jù)庫(kù)的兼容性方面,OceanBase做到了對(duì)MySQL的兼容,螞蟻金服的內(nèi)部業(yè)務(wù)從MySQL數(shù)據(jù)庫(kù)遷到OceanBase,不需要任何改動(dòng)。
在優(yōu)化器方面,涉及到的系統(tǒng)統(tǒng)計(jì)信息收集,是與螞蟻金服的業(yè)務(wù)體系架構(gòu)結(jié)合起來(lái),設(shè)計(jì)了一個(gè)動(dòng)靜分離的架構(gòu):白天把統(tǒng)計(jì)信息都存儲(chǔ)到內(nèi)存中,每天到業(yè)務(wù)低谷的時(shí)候再?gòu)膬?nèi)存寫(xiě)到磁盤(pán)上。而不是像其他數(shù)據(jù)庫(kù)那樣直接寫(xiě)到磁盤(pán)上,導(dǎo)致收集系統(tǒng)統(tǒng)計(jì)信息慢且不全面;也不像內(nèi)存數(shù)據(jù)庫(kù)那樣全采用高成本的內(nèi)存來(lái)存儲(chǔ)統(tǒng)計(jì)信息。OceanBase的這種準(zhǔn)內(nèi)存數(shù)據(jù)庫(kù)設(shè)計(jì)方式,既滿足了SQL查詢需要實(shí)時(shí)收集更全面系統(tǒng)統(tǒng)計(jì)信息的需求,也讓整體的信息收集成本沒(méi)有額外開(kāi)銷。
OceanBase還在SQL語(yǔ)句搜索優(yōu)化方面進(jìn)行了精細(xì)化的調(diào)節(jié)。由于是完全自研的數(shù)據(jù)庫(kù),對(duì)于Join連接查詢算法可以靈活適配多種算法,而在其他數(shù)據(jù)庫(kù)中則由于已經(jīng)限制可選范圍而無(wú)法做到更精細(xì)的優(yōu)化?!拔覀?cè)谒阉鳁l件的改寫(xiě)上面做了巧妙的設(shè)計(jì),結(jié)果就是有更廣的可選擇范圍,而其他數(shù)據(jù)庫(kù)則只能在一個(gè)很窄的范圍內(nèi)選擇最優(yōu)策略,因此OceanBase的搜索結(jié)果更優(yōu)?!笔Y志勇說(shuō)。
因?yàn)橐嫒軲ySQL,OceanBase團(tuán)隊(duì)也精研了MySQL,對(duì)MySQL進(jìn)行了大量調(diào)優(yōu)工作。在這個(gè)過(guò)程中,OceanBase團(tuán)隊(duì)發(fā)現(xiàn)了MySQL的幾百個(gè)問(wèn)題,向MySQL開(kāi)源社區(qū)匯報(bào)后得到了確認(rèn)。諸如MySQL對(duì)不同路徑執(zhí)行出來(lái)的結(jié)果都不一樣、MySQL的語(yǔ)義不是非常完整等等,都是OceanBase團(tuán)隊(duì)在使用MySQL中發(fā)現(xiàn)的問(wèn)題。特別是由于阿里巴巴和螞蟻金服的業(yè)務(wù)規(guī)模日益擴(kuò)大,經(jīng)常會(huì)踩到各種技術(shù)的極限門(mén)檻,OceanBase團(tuán)隊(duì)就曾經(jīng)在開(kāi)發(fā)MySQL接口驅(qū)動(dòng)程序的時(shí)候,通過(guò)業(yè)務(wù)排查發(fā)現(xiàn)某個(gè)事務(wù)已經(jīng)回滾但數(shù)據(jù)還是被提交進(jìn)入了數(shù)據(jù)庫(kù),導(dǎo)致會(huì)出現(xiàn)轉(zhuǎn)賬已經(jīng)取消但錢(qián)還是被轉(zhuǎn)走了的現(xiàn)象,團(tuán)隊(duì)排查了很久后終于發(fā)現(xiàn)是由于MySQL客戶端的一個(gè)變量設(shè)置本身有問(wèn)題,但這種問(wèn)題只有在極限條件下才有可能出現(xiàn),屬于小概率事件。OceanBase團(tuán)隊(duì)就是這樣逐一排除小概率事件,最終走向了通用型產(chǎn)品的道路。
通用型產(chǎn)品與場(chǎng)景化產(chǎn)品最大的區(qū)別在于通用型產(chǎn)品能夠適配絕大多數(shù)場(chǎng)景,而場(chǎng)景化產(chǎn)品則只能適配單一的場(chǎng)景。馮柯表示,這就是商業(yè)數(shù)據(jù)庫(kù)最強(qiáng)的地方,因?yàn)槟軌蚱ヅ浣^大多數(shù)的場(chǎng)景。也許商業(yè)數(shù)據(jù)庫(kù)的技術(shù)不是最強(qiáng)的,但價(jià)格那么貴還有用戶買(mǎi),就說(shuō)明商業(yè)數(shù)據(jù)庫(kù)的總體擁有成本更低,一個(gè)產(chǎn)品就能適配大多數(shù)場(chǎng)景。而能夠適配絕大多數(shù)場(chǎng)景,就說(shuō)明把已經(jīng)能踩的坑兒都全部踩過(guò)了,今天的OceanBase也在經(jīng)歷同樣的過(guò)程。
OceanBase踩過(guò)的另一個(gè)坑兒,也是在極限情況下才會(huì)出現(xiàn)的Linux系統(tǒng)bug。OceanBase本身是在Linux和C語(yǔ)言基礎(chǔ)上開(kāi)發(fā)的分布式數(shù)據(jù)庫(kù)系統(tǒng),2010年到2011年OceanBase團(tuán)隊(duì)在支持淘寶收藏夾業(yè)務(wù),2011年雙十一的時(shí)候遇到了穩(wěn)定性的問(wèn)題。當(dāng)時(shí)的Linux有一個(gè)直接訪問(wèn)IO的特性,這個(gè)特性出現(xiàn)了bug,而且是在極限條件下才會(huì)被觸發(fā)的bug。
楊傳輝回憶當(dāng)時(shí)距離2014年雙十一還有不到一個(gè)月的時(shí)間,是一個(gè)周五出現(xiàn)的問(wèn)題,導(dǎo)致淘寶收藏夾一天之內(nèi)連續(xù)宕機(jī)三次、每次一個(gè)小時(shí)左右,每次宕機(jī)后恢復(fù)收藏夾的流量,一旦訪問(wèn)量超過(guò)一定量就又觸發(fā)了Linux內(nèi)核的bug導(dǎo)致再次宕機(jī),直到周五晚上8、9點(diǎn)后淘寶訪問(wèn)用戶變少后才恢復(fù)了運(yùn)轉(zhuǎn)。由于當(dāng)時(shí)的開(kāi)發(fā)團(tuán)隊(duì)主要集中在北京,因此第二天的周六早上所有團(tuán)隊(duì)成員搭第一班飛機(jī)從北京飛到杭州來(lái)解決問(wèn)題?!爱?dāng)時(shí)的氣氛很緊張,如果這個(gè)問(wèn)題解決不了,OceanBase團(tuán)隊(duì)當(dāng)時(shí)就會(huì)解散?!睏顐鬏x回憶當(dāng)時(shí)的情況,而且在解決問(wèn)題的時(shí)候,負(fù)責(zé)寫(xiě)代碼的程序員的壓力也很大,后面有兩三個(gè)在盯著到底怎么寫(xiě)代碼。“當(dāng)時(shí)也并不確定這么做就一定能解決問(wèn)題,只是覺(jué)得有70%-80%的概率能解決問(wèn)題,后來(lái)還真解決了這個(gè)問(wèn)題?!?/p>
“阿里巴巴/螞蟻金服的系統(tǒng)發(fā)展太快、一直在變,OceanBase也一直在開(kāi)發(fā)新功能,又要支持線上業(yè)務(wù),而雙十一的爆發(fā)可能會(huì)是平常流量的十倍,而像Linux內(nèi)核bug這樣的問(wèn)題,如果只是平常流量的一兩倍,是根本不會(huì)觸發(fā)的,它只有在爆發(fā)十倍的時(shí)候才會(huì)出現(xiàn)。所以我們特別緊張,也沒(méi)有時(shí)間讓我們仔細(xì)去分析,慢吞吞地解決問(wèn)題。當(dāng)問(wèn)題來(lái)的時(shí)候,所有人加班解決,就是這樣?!睏顐鬏x說(shuō)。
馮柯回憶說(shuō),他加入OceanBase后的第一件事是做診斷監(jiān)控,當(dāng)時(shí)沒(méi)有人愿意做這件事,因?yàn)樽钪饕且较到y(tǒng)中埋點(diǎn),大家都認(rèn)可這件事很重要,但是沒(méi)有人愿意去做,因?yàn)樗婕暗剿械哪K,是一件非常吃力不討好的事情。而自己當(dāng)時(shí)選擇做的原因,是因?yàn)檫@對(duì)業(yè)務(wù)來(lái)說(shuō)非常重要,是必須要做的事情,當(dāng)時(shí)也碰到了很多的挫折,出了很多問(wèn)題。例如OceanBase診斷監(jiān)控功能剛上線的時(shí)候,有N個(gè)人去看監(jiān)控,會(huì)得出各種不同的結(jié)論來(lái),“大家覺(jué)得這個(gè)功能完全不能用,覺(jué)得做得很爛,所以當(dāng)時(shí)參加的同學(xué)很沮喪,覺(jué)得沒(méi)有被承認(rèn)”。馮柯當(dāng)時(shí)鼓勵(lì)團(tuán)隊(duì),最困難的時(shí)候反而是團(tuán)隊(duì)進(jìn)步最快的時(shí)候,“別人對(duì)你的批評(píng)最多的時(shí)候,其實(shí)是你進(jìn)步最快的時(shí)候,你的產(chǎn)品能夠獲得更多資源,能夠被更多的人認(rèn)識(shí)到,這其實(shí)是非常好的,那個(gè)時(shí)候的觸動(dòng)確實(shí)很大?!?/p>
OceanBase是一個(gè)一邊在業(yè)務(wù)中“討生活”,一邊尋找機(jī)會(huì)發(fā)展壯大自己的過(guò)程。在“討生活”的過(guò)程中,OceanBase也會(huì)不得已做出妥協(xié)。楊傳輝回憶2010年的OceanBase版本有一個(gè)比較大的缺陷,就是設(shè)計(jì)了單點(diǎn)寫(xiě)入。當(dāng)時(shí),把所有寫(xiě)入數(shù)據(jù)全放在一臺(tái)機(jī)器上,這個(gè)版本可擴(kuò)展能力比較差,本質(zhì)上只能做垂直擴(kuò)展而沒(méi)有辦法做水平擴(kuò)展。另外,因?yàn)槊總€(gè)寫(xiě)入都要經(jīng)過(guò)那個(gè)節(jié)點(diǎn),最后整個(gè)性能也相對(duì)更差,數(shù)據(jù)庫(kù)的功能也受限。這主要是OceanBase早期的版本,當(dāng)時(shí)團(tuán)隊(duì)的數(shù)據(jù)庫(kù)經(jīng)驗(yàn)沒(méi)有那么豐富,也沒(méi)有時(shí)間做長(zhǎng)期的開(kāi)發(fā),直到2015年重新設(shè)計(jì)開(kāi)發(fā)的1.0版本才是真正面向云時(shí)代的分布式數(shù)據(jù)庫(kù)。這個(gè)期間,OceanBase團(tuán)隊(duì)也從各個(gè)渠道引進(jìn)數(shù)據(jù)庫(kù)人才,最終實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的重構(gòu)。
OceanBase經(jīng)歷的失敗還有很多。楊傳輝回憶,OceanBase在2012年11月份轉(zhuǎn)到螞蟻金服到2014年實(shí)現(xiàn)了交易系統(tǒng),這之間的2013年其實(shí)在從事淘寶的庫(kù)存項(xiàng)目而不是交易系統(tǒng)。當(dāng)時(shí),OceanBase團(tuán)隊(duì)看到庫(kù)存的數(shù)據(jù)庫(kù)問(wèn)題也是一大挑戰(zhàn),這就像賣火車票系統(tǒng)的挑戰(zhàn)本質(zhì)上也是減庫(kù)存問(wèn)題——如果有兩人同時(shí)并發(fā)減庫(kù)存,就會(huì)亂掉。當(dāng)時(shí),淘寶的MySQL團(tuán)隊(duì)也在做這個(gè)事情,最終業(yè)務(wù)部門(mén)選擇了MySQL的方案,就是因?yàn)闃I(yè)務(wù)團(tuán)隊(duì)當(dāng)時(shí)覺(jué)得用MySQL更放心,“就這一個(gè)原因,也沒(méi)有其他的點(diǎn),最后沒(méi)有選擇OceanBase,我們相當(dāng)于那一年白干,整個(gè)團(tuán)隊(duì)白干。但因?yàn)檫@個(gè)鋪墊,我們下一個(gè)交易系統(tǒng)真的做成了?!?/p> OceanBase的研發(fā)方法論
總結(jié)OceanBase的開(kāi)發(fā)過(guò)程,總會(huì)試圖尋找一些研發(fā)方法論,就像微軟的軟件開(kāi)發(fā)“三駕馬車”那樣的方法論。但正如陳萌萌所總結(jié)的:“我們其實(shí)更多的時(shí)候是與運(yùn)維、業(yè)務(wù)團(tuán)隊(duì)等一起在定義問(wèn)題。我們會(huì)看到一些問(wèn)題,找到真正要解決的問(wèn)題是什么,然后幫助用戶定義這個(gè)問(wèn)題。在定義問(wèn)題時(shí),有時(shí)候我們會(huì)開(kāi)一個(gè)會(huì),分析某問(wèn)題是由數(shù)據(jù)庫(kù)團(tuán)隊(duì)解決、還是由業(yè)務(wù)團(tuán)隊(duì)解決,而在開(kāi)會(huì)之前可能大家都不知道最后要達(dá)到什么樣的效果。很多時(shí)候我們?cè)谧鲞@些不確定的事情?!?/p>
OceanBase本身是在做一個(gè)沒(méi)有先例可參考的分布式數(shù)據(jù)庫(kù),純粹做分布式系統(tǒng),全世界谷歌做得最好。陽(yáng)振坤在百度時(shí)所帶領(lǐng)的分布式團(tuán)隊(duì)已經(jīng)是國(guó)內(nèi)當(dāng)時(shí)最強(qiáng)的分布式技術(shù)團(tuán)隊(duì),也從谷歌吸收了很多分布式技術(shù)的思想。但當(dāng)后來(lái)試圖把分布式架構(gòu)與關(guān)系型數(shù)據(jù)庫(kù)結(jié)合在一起的時(shí)候,就再也沒(méi)有先人的經(jīng)驗(yàn),而只能靠團(tuán)隊(duì)自己琢磨。雖然OceanBase到目前為止還沒(méi)有發(fā)表過(guò)論文、還是在做業(yè)務(wù),但楊傳輝回憶OceanBase中有很多是別人沒(méi)有想過(guò)方法,可能要做一個(gè)新的方案要想好久,要思考半年到一年后面再?zèng)Q定去做。
在具體開(kāi)發(fā)的執(zhí)行過(guò)程中,測(cè)試是很重要的工作。分布式系統(tǒng)的異常處理很容易出錯(cuò),平常機(jī)器不出故障,到上線業(yè)務(wù)突然出一個(gè)故障時(shí),可能就是一個(gè)大故障,而這種異常處理的測(cè)試比較難。OceanBase有容災(zāi)模擬框架,就是隨時(shí)把一臺(tái)機(jī)器殺死,而這樣的容災(zāi)測(cè)試隨時(shí)在運(yùn)行。另外,對(duì)于并發(fā)處理的測(cè)試,即某個(gè)條件的達(dá)成可以突然觸發(fā)兩個(gè)線程的先后順序或一個(gè)變量的訪問(wèn)順序出錯(cuò),OceanBase也是隨時(shí)在模擬這樣的場(chǎng)景,讓這樣的小概率事件盡早出現(xiàn)。
在開(kāi)發(fā)的過(guò)程上,OceanBase通常是一個(gè)人寫(xiě)出來(lái)的代碼,要另外一個(gè)人去讀和審查,通過(guò)的代碼才會(huì)提交。OceanBase團(tuán)隊(duì)還寫(xiě)了很多自動(dòng)測(cè)試用的框架,開(kāi)發(fā)人員要自己做單元測(cè)試和一部分的功能測(cè)試,集成測(cè)試則由專門(mén)的人來(lái)完成,OceanBase的測(cè)試人員很少只有幾個(gè)人,大部分的測(cè)試都是靠自動(dòng)化完成。
因?yàn)镺ceanBase是軟件、硬件和業(yè)務(wù)集成在一起的整體優(yōu)化,而當(dāng)軟件、硬件和業(yè)務(wù)碰到一起的時(shí)候,經(jīng)常會(huì)出現(xiàn)各種碎片化的小場(chǎng)景問(wèn)題,那么又是怎么解決的呢?陳萌萌介紹說(shuō),當(dāng)遇到這樣的場(chǎng)景時(shí),就會(huì)提前把大家拉到一個(gè)釘釘群里,把需求丟到群中,技術(shù)團(tuán)隊(duì)根據(jù)需求提供反饋建議,業(yè)務(wù)團(tuán)隊(duì)也會(huì)反饋在試驗(yàn)中遇到的問(wèn)題。這些碎片化的場(chǎng)景和問(wèn)題,很難區(qū)分到是軟件、硬件還是業(yè)務(wù)的問(wèn)題,因此群里有運(yùn)維、開(kāi)發(fā)、業(yè)務(wù)甚至還有負(fù)責(zé)業(yè)務(wù)拓展的BD和負(fù)責(zé)產(chǎn)品的PD,只要需要關(guān)注的人員都可以進(jìn)到群里。陳萌萌透露他自己平常關(guān)注的活躍群就至少在20個(gè)以上,也就是至少一天發(fā)一條消息的群,他也在更多的可能十天半個(gè)月才發(fā)一條消息的技術(shù)討論群中。
以前在甲骨文公司的時(shí)候,陳萌萌說(shuō)大家更習(xí)慣用郵件的慢節(jié)奏溝通方式,到了阿里系就是碎片化的溝通。首先每個(gè)人有負(fù)責(zé)的業(yè)務(wù)或技術(shù)方向,空閑的時(shí)間就會(huì)把群里的來(lái)龍去脈都過(guò)一遍。有些群是按需找人,在群里被@了就肯定會(huì)關(guān)注這些消息,如果沒(méi)有被@,就會(huì)找不是特別緊急時(shí)候再把群里的消息過(guò)一遍。雖然群很多,但是真正過(guò)群消息的時(shí)候,幾分鐘時(shí)間還是能夠把過(guò)去幾天的消息都過(guò)一遍。這樣總是能區(qū)分哪些是需要第一時(shí)間響應(yīng)的,哪些可以后續(xù)持續(xù)關(guān)注的。
一般OceanBase團(tuán)隊(duì)的工作時(shí)間是早9點(diǎn)到晚9點(diǎn)12個(gè)小時(shí),但也有大促的“雙十一”、“6.18”、春節(jié)紅包壓測(cè)等緊急情況。當(dāng)然,隨著OceanBase的發(fā)展,需要處理緊急事件的情況在減少。陳萌萌回憶,以前跟著業(yè)務(wù)團(tuán)隊(duì)壓測(cè)到凌晨,甚至說(shuō)半夜被揪起來(lái)的情況,會(huì)經(jīng)常發(fā)生。
“我記得經(jīng)歷過(guò)很多故障都挺戲劇化的:因?yàn)橐坏┏霈F(xiàn)一些問(wèn)題以后,各方面的人都會(huì)被半夜拉起來(lái),大家臨時(shí)被拉到一個(gè)群里面,誰(shuí)也不知道當(dāng)時(shí)發(fā)生了什么,但是每個(gè)人可能有一部分的信息,大家很快把各自的信息扔到群里面,這樣就對(duì)出來(lái)到底發(fā)生了什么。每個(gè)人都有點(diǎn)膽戰(zhàn)心驚,生怕自己做的那部分導(dǎo)致了什么問(wèn)題?!标惷让然貞浾f(shuō)?!拔矣浀糜幸淮喂收?,半夜11點(diǎn)說(shuō)有一個(gè)問(wèn)題需要大家上線去看,一幫人包括主管都上線看問(wèn)題,一直到凌晨四五點(diǎn)。一開(kāi)始大家都在,慢慢發(fā)現(xiàn)問(wèn)題越來(lái)越聚焦,相關(guān)的人員就上來(lái),一直到凌晨四五點(diǎn)才解決問(wèn)題。中間大家在群里面各種排查信息分析,提出各種建議,雖然沒(méi)有坐在一起,但就像關(guān)在一個(gè)屋子里面開(kāi)了連夜的戰(zhàn)斗會(huì)一樣?!?/p>
陳萌萌總結(jié)了阿里這種獨(dú)特的技術(shù)討論群解決問(wèn)題的過(guò)程:“這是一個(gè)不停過(guò)濾信息再分析的過(guò)程。如果一開(kāi)始不掌握所有信息,誰(shuí)也總結(jié)不了。對(duì)完信息后,有人發(fā)現(xiàn)說(shuō)某個(gè)地方需要關(guān)注,別的人再把相關(guān)信息加過(guò)來(lái),慢慢連成一個(gè)邏輯。當(dāng)你回頭再看群里消息的時(shí)候,這個(gè)現(xiàn)象特別明顯。信息一開(kāi)始是散的,然后慢慢才能達(dá)成一致,最后走下去。”
當(dāng)然,群里也會(huì)有熟悉各種“疑難雜癥”的“老中醫(yī)”,一般是經(jīng)驗(yàn)比較豐富的人員,見(jiàn)到的問(wèn)題也比較多,所以別人可能還在猜測(cè)的時(shí)候,“老中醫(yī)”就會(huì)給一個(gè)很靠譜的可能性,沿著這個(gè)可能性去看的話,發(fā)現(xiàn)確實(shí)可以通過(guò)這個(gè)角度去挖掘解決問(wèn)題的方案。
然而,即使討論出了可能的解決方案,“大家還是挺膽戰(zhàn)心驚的,敲命令都是讓專門(mén)負(fù)責(zé)運(yùn)維的人員去敲,這個(gè)時(shí)候的關(guān)鍵在于手不抖、別敲錯(cuò),因?yàn)槿f(wàn)一敲錯(cuò)了那就是二次故障。所以我們都會(huì)找一個(gè)心理素質(zhì)好的同事操作,大家誰(shuí)也不要吱聲,看著這個(gè)同事安靜地把命令敲完?!币?yàn)椴还芡ㄟ^(guò)群里的討論,選擇一條最保險(xiǎn)最靠譜的操作方式,但在系統(tǒng)里面直接敲命令都有可能直接動(dòng)數(shù)據(jù),敲錯(cuò)一個(gè)鍵就有可能把所有數(shù)據(jù)都刪了,這是沒(méi)法挽回的,“所有人在操作的時(shí)候都不敢出氣”。
當(dāng)然,每次處理完故障后,也會(huì)復(fù)盤(pán)找到以后的解決方案,最后形成知識(shí)庫(kù)也就是應(yīng)急預(yù)案再固化到程序里,通過(guò)程序防止下一個(gè)錯(cuò)誤。
前面提到整個(gè)OceanBase并沒(méi)有一個(gè)統(tǒng)一的產(chǎn)品經(jīng)理,因?yàn)镺ceanBase的功能列表是對(duì)標(biāo)商業(yè)數(shù)據(jù)庫(kù)。但還是會(huì)有產(chǎn)品開(kāi)發(fā)的規(guī)劃,通常以財(cái)年為單位、雙十一為重要節(jié)點(diǎn),比如某個(gè)版本必須要在下一個(gè)雙十一之前做出來(lái)并且穩(wěn)定運(yùn)行,再通過(guò)雙十一檢驗(yàn)。“保持這樣一個(gè)節(jié)奏”,蔣志勇補(bǔ)充。
成功之道:不斷證明自己“以前分布式系統(tǒng)谷歌里面是有的,但是數(shù)據(jù)庫(kù)領(lǐng)域沒(méi)有一個(gè)人用到生產(chǎn)系統(tǒng)里面。包括我們最初用PAXOS協(xié)議做數(shù)據(jù)庫(kù)的時(shí)候,傳統(tǒng)數(shù)據(jù)庫(kù)從業(yè)人員帶著原有思維看這件事,大家覺(jué)得不可思議。我們與螞蟻金服的業(yè)務(wù)方交流,告訴業(yè)務(wù)方能同時(shí)做到一致性與可用性,不丟一條數(shù)據(jù)而且做到高可用,業(yè)務(wù)方覺(jué)得不可理解,因?yàn)闃I(yè)務(wù)方已經(jīng)習(xí)慣了傳統(tǒng)數(shù)據(jù)庫(kù)的方式?!瘪T柯在回憶OceanBase早期的發(fā)展時(shí),還是很興奮當(dāng)時(shí)打破了傳統(tǒng)技術(shù)的思維。
改變一個(gè)人的思想是非常困難的事情。OceanBase作為數(shù)據(jù)庫(kù)領(lǐng)域的新進(jìn)入者,優(yōu)勢(shì)在于把分布式系統(tǒng)和數(shù)據(jù)庫(kù)結(jié)合起來(lái)?!捌鋵?shí)OceanBase本身不是一個(gè)專業(yè)數(shù)據(jù)庫(kù)團(tuán)隊(duì),OceanBase的創(chuàng)始人本身都不是學(xué)數(shù)據(jù)庫(kù)的,而是最早從分布式存儲(chǔ)開(kāi)始做起,OceanBase到很后面才真正有了SQL的功能?!弊鳛閭鹘y(tǒng)數(shù)據(jù)庫(kù)專家出身的馮柯說(shuō),OceanBase最吸引他的地方在于有機(jī)會(huì)能接觸到影響幾億人的業(yè)務(wù)。OceanBase對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)也不是一味模仿,而是在分布式架構(gòu)方面做差異化,“我們今天不是簡(jiǎn)單的功能模仿,每一個(gè)功能在OceanBase上,由于架構(gòu)的不同,內(nèi)涵其實(shí)是不一樣的,挑戰(zhàn)也不一樣。其次,今天在OceanBase真正上線一個(gè)業(yè)務(wù),馬上就能服務(wù)到幾億人,這兩點(diǎn)是非常吸引像我這樣背景,包括從Oracle來(lái)的技術(shù)人員。因?yàn)镺ceanBase有非常好的應(yīng)用場(chǎng)景?!?/p>
作為OceanBase的創(chuàng)始人,陽(yáng)振坤經(jīng)常強(qiáng)調(diào)數(shù)據(jù)庫(kù)不是被研制出來(lái)的,而是被用出來(lái)的。今天OceanBase如果推翻重來(lái),或許會(huì)有更好的方案,但在發(fā)展的初期很多時(shí)候要考慮團(tuán)隊(duì)的生存問(wèn)題、滿足業(yè)務(wù)和場(chǎng)景的需要,所以當(dāng)時(shí)很多的選擇是面向用戶的選擇,讓更多的業(yè)務(wù)能夠跑在OceanBase之上,通過(guò)這種方式來(lái)建立用戶對(duì)OceanBase的信任。
“如果大家當(dāng)時(shí)能看見(jiàn)原來(lái)七年后OceanBase能長(zhǎng)成這樣,我相信七年前的那個(gè)環(huán)境會(huì)好很多。但是這種如果是不存在的,很多時(shí)候你要先證明自己。”馮柯說(shuō)。
楊傳輝介紹說(shuō),OceanBase從淘寶轉(zhuǎn)到支付寶,很大程度上是因?yàn)镸ySQL可以滿足淘寶的多數(shù)業(yè)務(wù)需求。淘寶屬于電子商務(wù)類交易型業(yè)務(wù),與支付寶的金融交易差別很大。當(dāng)時(shí)淘寶電子商務(wù)交易是可以偶爾的丟失數(shù)據(jù),采用了傳統(tǒng)數(shù)據(jù)庫(kù)的主備同步來(lái)實(shí)現(xiàn)高可用,但是主備之間是異步的,備機(jī)與主機(jī)的數(shù)據(jù)之間落后幾毫秒都是有可能的,MySQL主備同步模式已經(jīng)能夠滿足淘寶電子商務(wù)交易。
從2012年底開(kāi)始,OceanBase開(kāi)始慢慢支持支付寶的交易,支付寶交易屬于金融系統(tǒng),不允許有任何一條數(shù)據(jù)的丟失。淘寶如果數(shù)據(jù)丟失了一條,還有一個(gè)最后的手段,就是可以查支付寶。畢竟丟失數(shù)據(jù)的概率極低,只有在極端場(chǎng)景下才有可能丟失數(shù)據(jù),而且還能向支付寶查詢,支付寶就是最后的防線。2014年,支付寶交易由Oracle切換成OceanBase,實(shí)現(xiàn)了一條數(shù)據(jù)都不丟失,而且保證高可用、強(qiáng)一致。這在傳統(tǒng)數(shù)據(jù)庫(kù)都沒(méi)有辦法做到:既保證一條數(shù)據(jù)也不丟失,又保證數(shù)據(jù)的高可用。因?yàn)閷?duì)于傳統(tǒng)數(shù)據(jù)庫(kù)來(lái)說(shuō),這兩個(gè)要求是相互矛盾的事情。OceanBase創(chuàng)新地采用了分布式系統(tǒng)里的PAXOS的協(xié)議,第一次把這個(gè)協(xié)議用于傳統(tǒng)數(shù)據(jù)庫(kù)和分布式系統(tǒng)兩個(gè)領(lǐng)域的結(jié)合,并在2014年雙十一中得到了檢驗(yàn),后面的發(fā)展就比較順了。
蔣志勇回憶他剛來(lái)的時(shí)候,當(dāng)時(shí)還是對(duì)于支付寶核心業(yè)務(wù)上OceanBase有很大的爭(zhēng)議?!?014年雙十一的時(shí)候,爭(zhēng)論很激烈,最后是CTO當(dāng)時(shí)拍板要上10%。當(dāng)時(shí)在上1%還是上10%這方面大家很糾結(jié),因?yàn)楫吘闺p十一10%的流量幾乎相當(dāng)于平時(shí)的全量了。當(dāng)時(shí)CTO拍板做10%,并且后面還挺順利。從那個(gè)時(shí)候開(kāi)始,在核心業(yè)務(wù)上,大家就慢慢接受和認(rèn)可OceanBase了?!?/p>
楊傳輝回憶當(dāng)時(shí)為了趕上2014年雙十一的進(jìn)度,時(shí)間非常緊張。上“雙十一”,就意味著在線上不能出一次問(wèn)題,那時(shí)有大約近二十萬(wàn)行代碼是半年之內(nèi)一次性新開(kāi)發(fā)的,但是上線不能出一次問(wèn)題,因此對(duì)質(zhì)量保證提出特別嚴(yán)格的要求。上線前做了很多容災(zāi)測(cè)試、代碼檢測(cè)、設(shè)計(jì)檢測(cè)等,包括當(dāng)時(shí)涉及到的所有SQL語(yǔ)句都做了全面測(cè)試?!凹幢闶沁@些事情都做了,也還是有一定的運(yùn)氣成分,最后OceanBase上線沒(méi)有出一次故障。因?yàn)楫?dāng)時(shí)七八月份對(duì)核心業(yè)務(wù)底層系統(tǒng)升級(jí)完后就不可能再升級(jí)了,后面確實(shí)一個(gè)問(wèn)題都沒(méi)有出現(xiàn),最后雙十一成功切了10%的流量。”如果當(dāng)時(shí)出現(xiàn)哪怕一次問(wèn)題,可能OceanBase將不再存在。
在螞蟻,遇到更好的自己2014年的時(shí)候,OceanBase團(tuán)隊(duì)面臨著當(dāng)年雙十一的生死大考。而馮柯也是在2014年加入OceanBase團(tuán)隊(duì)的,作為一個(gè)傳統(tǒng)技術(shù)和商業(yè)環(huán)境出身的技術(shù)人員,馮柯在OceanBase經(jīng)歷了從傳統(tǒng)企業(yè)文化到互聯(lián)網(wǎng)公司文化的轉(zhuǎn)型。
“我那時(shí)有很強(qiáng)的思維慣性,剛來(lái)OceanBase的時(shí)候,覺(jué)得看什么都不爽,OceanBase是別人寫(xiě)的代碼,總覺(jué)得這里不應(yīng)該這樣做,那里不應(yīng)該那樣做。那個(gè)時(shí)候特別挑戰(zhàn),也包括過(guò)去是我說(shuō)了算,今天說(shuō)了不算,反正是非常痛苦的一個(gè)過(guò)程?!瘪T柯來(lái)OceanBase前半年基本上處于每天無(wú)事可干的狀態(tài),后來(lái)主管就給他布置任務(wù),讓他放下層級(jí)的觀念去把OceanBase源代碼看一遍。于是,馮柯當(dāng)時(shí)就用了大概6個(gè)月左右的時(shí)間,看了將近20萬(wàn)行、每個(gè)月5萬(wàn)行左右的代碼,報(bào)了100多個(gè)bug,寫(xiě)了很多文檔,做了最基礎(chǔ)的事情。
這個(gè)過(guò)程讓馮柯在從代碼上更了解OceanBase,能夠做更具體的事情,其次也是最重要的就是調(diào)整了心態(tài)?!拔覄偧尤胛浵伣鸱臅r(shí)候覺(jué)得很恐懼,覺(jué)得阿里是一個(gè)價(jià)值觀很強(qiáng)的公司,后來(lái)發(fā)現(xiàn)層級(jí)只是對(duì)你過(guò)去的一個(gè)認(rèn)可,來(lái)了阿里之后就要忘了過(guò)去,從頭開(kāi)始。把自己沉下去,再浮上來(lái),你就會(huì)更加有力量?!碑?dāng)從代碼上真正認(rèn)可了OceanBase,把OceanBase當(dāng)作自己的產(chǎn)品,就能把自己全部投入到OceanBase中?!艾F(xiàn)在看兩年前的我,確實(shí)變化比較大。來(lái)了阿里之后,遇見(jiàn)更好的自己?!?/p>
之所以說(shuō)到阿里之后遇見(jiàn)更好的自己,這首先是要放開(kāi)自己、重新清零,打破思維定勢(shì)后就能給團(tuán)隊(duì)帶來(lái)非常大的幫助。馮柯發(fā)現(xiàn)螞蟻金服的團(tuán)隊(duì)文化不像國(guó)企那樣層級(jí)就代表決定權(quán),在螞蟻金服必須要做事情、真正拿到結(jié)果并獲得大家的認(rèn)可和信任,才能做更多的事情?!按蠹也](méi)有去想你是一個(gè)P10或P9,你不應(yīng)該做這個(gè)事,你應(yīng)該做那個(gè)事,這是我特別感觸的一點(diǎn)。螞蟻金服真的是一個(gè)非常專注技術(shù)、完全內(nèi)部平等的文化,這跟我在之前的很多公司差別很大?!倍@,正是在阿里遇到更好的自己的原因所在。
OceanBase商業(yè)化:再創(chuàng)造新時(shí)代“OceanBase是真正想去做一款通用的分布式數(shù)據(jù)庫(kù)產(chǎn)品。產(chǎn)品化這點(diǎn)非常重要,這就要對(duì)用戶做高度集成的整體交付,而不是一堆技術(shù)拼起來(lái)。OceanBase在架構(gòu)上是真正想去做一款能夠改變目前整個(gè)商業(yè)數(shù)據(jù)庫(kù)生態(tài)或者格局的產(chǎn)品,我不管它未來(lái)能不能做到,但當(dāng)時(shí)非常打動(dòng)我,也是吸引我加入OceanBase的原因?!?馮柯說(shuō):“分布式是OceanBase的亮點(diǎn),但最重要的是OceanBase是按照產(chǎn)品的思維而不是單純解決業(yè)務(wù)的問(wèn)題,當(dāng)時(shí)我就看明白了,OceanBase未來(lái)肯定是要到外部發(fā)展。”
關(guān)系數(shù)據(jù)庫(kù)這個(gè)領(lǐng)域的理論已經(jīng)比較早就成型了,多年來(lái)也沒(méi)有突破性的進(jìn)展。而OceanBase這些年做的事情,其實(shí)是在做一個(gè)分布式的關(guān)系數(shù)據(jù)庫(kù)產(chǎn)品。在做產(chǎn)品的過(guò)程中,最大的問(wèn)題是要有特別好的場(chǎng)景來(lái)檢驗(yàn)它,從而演變成一個(gè)能夠商業(yè)化的產(chǎn)品。螞蟻金服最大的優(yōu)勢(shì)是業(yè)務(wù)場(chǎng)景非常豐富,讓OceanBase在服務(wù)外部客戶之前,就在內(nèi)部得到非常充分的鍛煉,而這些鍛煉很難通過(guò)外部用戶去獲得。
蔣志勇強(qiáng)調(diào),數(shù)據(jù)庫(kù)產(chǎn)品化需要時(shí)間去歷練,如果抱著非常投機(jī)的心態(tài)參與就很難實(shí)現(xiàn)?!八詮臉I(yè)人員要確實(shí)對(duì)這個(gè)有興趣,并且要愿意長(zhǎng)時(shí)間堅(jiān)守、慢慢打磨,把OceanBase從幾個(gè)人做出來(lái)的軟件,變成一個(gè)很好用的通用產(chǎn)品。”
從2017年開(kāi)始,OceanBase跟隨整個(gè)螞蟻金服的金融科技開(kāi)放,開(kāi)始了向傳統(tǒng)金融賦能的實(shí)踐過(guò)程。當(dāng)然,這個(gè)過(guò)程也不是一帆風(fēng)順。雖然OceanBase已經(jīng)取得了很大的技術(shù)成就,但在外部用戶應(yīng)用OceanBase的過(guò)程中,往往會(huì)被很多具體的小細(xì)節(jié)所“絆倒”?,F(xiàn)在負(fù)責(zé)OceanBase外部業(yè)務(wù)的馮柯表示,外部客戶往往沒(méi)有螞蟻金服這么成熟的技術(shù)體系,還處于各種傳統(tǒng)技術(shù)混搭的局面,在這種情況下如何把OceanBase在外部用戶的業(yè)務(wù)環(huán)境中落地,這都是需要具體解決的問(wèn)題。
OceanBase終于邁出了商用的一小步:OceanBase在南京銀行正式上線,OceanBase數(shù)據(jù)庫(kù)為南京銀行“鑫云+”互聯(lián)網(wǎng)金融開(kāi)放平臺(tái)提供金融級(jí)分布式關(guān)系數(shù)據(jù)庫(kù)服務(wù)。而這主要取決于南京銀行的意愿,“南京銀行自身有非常強(qiáng)的意愿和情懷,把整個(gè)互聯(lián)網(wǎng)的核心業(yè)務(wù)完全架到OceanBase之上。南京銀行就像螞蟻金服內(nèi)部的業(yè)務(wù)方一樣,真正與技術(shù)團(tuán)隊(duì)站在了一起,包括南京銀行的很多設(shè)計(jì)都是超前的,即使目前的業(yè)務(wù)量不需要這樣設(shè)計(jì)的也會(huì)提前布局,后面有一個(gè)非常長(zhǎng)遠(yuǎn)的規(guī)劃。南京銀行項(xiàng)目為什么成功,就是因?yàn)檫@一點(diǎn)。” 馮柯總結(jié)南京銀行的成功?!澳暇┿y行當(dāng)時(shí)是陽(yáng)振坤老師去談的,南京銀行也有競(jìng)標(biāo),也不只螞蟻金服一家。當(dāng)時(shí)南京銀行技術(shù)負(fù)責(zé)人問(wèn)了陽(yáng)老師一句話,你們到底有沒(méi)有決心替換掉Oracle,這句話撞到陽(yáng)老師的槍口上了?!?/p>
陽(yáng)振坤回憶OceanBase的整個(gè)發(fā)展歷程,“首先肯定是要滿足內(nèi)部的業(yè)務(wù)需求,如果連自己的需求都滿足不了,就根本談不上做成一個(gè)真正的商用數(shù)據(jù)庫(kù)。也許Google吃虧在他們的業(yè)務(wù)部門(mén)比較強(qiáng)勢(shì)了,所以做出來(lái)的Google Spanner就是一個(gè)滿足自己內(nèi)部需求的產(chǎn)品,所有的都是自定義。而OceanBase走了一條標(biāo)準(zhǔn)化之路,我們支持標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)接口、標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)語(yǔ)言,所以能夠產(chǎn)品化。”
從2010年5月調(diào)研、6月25日立項(xiàng)開(kāi)始,OceanBase的目標(biāo)就是傳統(tǒng)商業(yè)關(guān)系數(shù)據(jù)庫(kù)的更新?lián)Q代產(chǎn)品:2012年底支持簡(jiǎn)單的SQL;2014年支持比較有限的SQL;2016年基本兼容了MySQL,對(duì)SQL的支持開(kāi)始豐富起來(lái)。這是一個(gè)由分布式到與數(shù)據(jù)庫(kù)結(jié)合的過(guò)程。接下來(lái),OceanBase要兼容商業(yè)數(shù)據(jù)庫(kù)。再接下來(lái),就是要發(fā)展OLAP技術(shù)。
與OLTP技術(shù)的要求不同,OLAP偏向大型數(shù)據(jù)分析,對(duì)于查詢處理、計(jì)劃生成、性能和調(diào)度等的要求非常高,對(duì)于分布式集群的大型查詢,怎樣通過(guò)調(diào)度把負(fù)載分配到每一個(gè)合適的節(jié)點(diǎn),讓整體的吞吐率和響應(yīng)時(shí)間都能達(dá)到一個(gè)比較好的平衡,都需要大量的工作。
總結(jié)OceanBase的成功,可以說(shuō)是阿里巴巴/螞蟻金服舉全集團(tuán)之力完成的“壯舉”。用楊傳輝的話說(shuō),就是阿里對(duì)技術(shù)容忍度超乎想象的高。馬云經(jīng)常講:我不懂技術(shù),但是我尊重技術(shù)。
陽(yáng)振坤回顧OceanBase的內(nèi)部創(chuàng)業(yè)史,對(duì)于數(shù)據(jù)庫(kù)技術(shù)來(lái)說(shuō)在螞蟻金服內(nèi)部創(chuàng)業(yè)要遠(yuǎn)比在公司外部創(chuàng)業(yè)好,因?yàn)楦菊也坏较裎浵伣鸱@樣愿意把自己的內(nèi)部業(yè)務(wù)拿出來(lái)當(dāng)“小白鼠”?!拔矣X(jué)得我們這些人正好趕上了一個(gè)很好的機(jī)會(huì),所以我就跟大家說(shuō)這是千載難逢的機(jī)會(huì),我們一定要做,而且一定能做成。”
本文作者:安和林
詳情請(qǐng)閱讀原文
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/17720.html
摘要:年,替換了支付寶支付系統(tǒng)中的數(shù)據(jù)庫(kù)。年,螞蟻金服全面去。土豪金工牌帶是螞蟻金服內(nèi)部最高榮譽(yù)大獎(jiǎng)。陳萌萌目前在螞蟻金服基礎(chǔ)數(shù)據(jù)部團(tuán)隊(duì)負(fù)責(zé)相關(guān)方向的開(kāi)發(fā)工作。 摘要: 兩萬(wàn)字長(zhǎng)文帶你了解關(guān)于OceanBase的一切! showImg(https://segmentfault.com/img/bV6WYx?w=900&h=500); 2008年,王堅(jiān)從微軟亞洲研究院常務(wù)副院長(zhǎng)的位置上離職后,...
摘要:年,替換了支付寶支付系統(tǒng)中的數(shù)據(jù)庫(kù)。年,螞蟻金服全面去。土豪金工牌帶是螞蟻金服內(nèi)部最高榮譽(yù)大獎(jiǎng)。陳萌萌目前在螞蟻金服基礎(chǔ)數(shù)據(jù)部團(tuán)隊(duì)負(fù)責(zé)相關(guān)方向的開(kāi)發(fā)工作。 摘要: 兩萬(wàn)字長(zhǎng)文帶你了解關(guān)于OceanBase的一切! showImg(https://segmentfault.com/img/bV6WYx?w=900&h=500); 2008年,王堅(jiān)從微軟亞洲研究院常務(wù)副院長(zhǎng)的位置上離職后,...
閱讀 1571·2021-09-30 09:57
閱讀 1582·2021-09-09 09:33
閱讀 2365·2021-09-04 16:40
閱讀 1922·2021-09-01 10:50
閱讀 3325·2021-09-01 10:31
閱讀 2626·2019-08-30 15:56
閱讀 3039·2019-08-30 15:44
閱讀 3546·2019-08-29 17:29