日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
“去IOE”激戰(zhàn)9年:深度揭秘OceanBase如何異軍突起

“去IOE”激戰(zhàn)9年:深度揭秘OceanBase如何異軍突起

作者:吳寧川 2018-04-18 09:38:30
云計(jì)算
作為螞蟻金服自研的分布式關(guān)系型數(shù)據(jù)庫(kù),OceanBase 從 2008 年阿里提出“去IOE”想法,到 2017 年螞蟻金服全面實(shí)現(xiàn)“去IOE”,經(jīng)歷過(guò)許多難以想象的磨礪,也創(chuàng)下了許多影響國(guó)內(nèi)外的成就。

近十年,隨著云計(jì)算帶來(lái)的變革,傳統(tǒng)的 IOE 架構(gòu)對(duì)于企業(yè)運(yùn)營(yíng)成本的影響以及對(duì)未來(lái)業(yè)務(wù)發(fā)展的制約逐漸加劇。

尤其是互聯(lián)網(wǎng)的大規(guī)模、高并發(fā)、實(shí)時(shí)在線、大型網(wǎng)絡(luò)優(yōu)化等新興需求,使得為傳統(tǒng) IT 環(huán)境設(shè)計(jì)的 Oracle 數(shù)據(jù)庫(kù)越來(lái)越難以處理互聯(lián)網(wǎng)公司愈加大規(guī)模的數(shù)據(jù)量。

因此,面向超大規(guī)?;ヂ?lián)網(wǎng)公司的分布式計(jì)算環(huán)境而重新開(kāi)發(fā)的關(guān)系型數(shù)據(jù)庫(kù) OceanBase 應(yīng)運(yùn)而生。

作為螞蟻金服自研的分布式關(guān)系型數(shù)據(jù)庫(kù),OceanBase 從 2008 年阿里提出“去IOE”想法,到 2017 年螞蟻金服全面實(shí)現(xiàn)“去IOE”,經(jīng)歷過(guò)許多難以想象的磨礪,也創(chuàng)下了許多影響國(guó)內(nèi)外的成就。

本文將深入 OceanBase,回溯其研發(fā)過(guò)程與研發(fā)方法論。

研發(fā)故事:軟件、硬件、業(yè)務(wù)一體化

以下僅摘選幾個(gè)典型案例作為說(shuō)明:

結(jié)合業(yè)務(wù),整體優(yōu)化軟硬件

螞蟻金服基礎(chǔ)數(shù)據(jù)部(OceanBase 團(tuán)隊(duì))負(fù)責(zé) SQL 相關(guān)方向開(kāi)發(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)馬上就變差了。

“我們每天都在做特別精細(xì)的事情,生怕一毫秒變成五毫秒這種事情出現(xiàn),因此做了很多精確防御?!?/p>

螞蟻金服基礎(chǔ)數(shù)據(jù)部(OceanBase 團(tuán)隊(duì))研究員楊傳輝進(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)不能接受了。

還有地鐵的刷臉或者刷支付寶進(jìn)站的場(chǎng)景。如果用戶站在閘機(jī)前面半天刷不出來(lái),那就不光是體驗(yàn)問(wèn)題了,有可能會(huì)引來(lái)連鎖麻煩,后面人也會(huì)被堵起長(zhǎng)龍。這些現(xiàn)實(shí)的挑戰(zhàn)都要求 OceanBase 反應(yīng)精確、迅速。

楊傳輝告訴我們,從關(guān)鍵業(yè)務(wù)系統(tǒng)的數(shù)據(jù)鏈路梳理上來(lái)看,一兩百條 SQL 是最普通的一次交易了,如果涉及到支付渠道不一樣,SQL 執(zhí)行的次數(shù)就會(huì)更多。

因?yàn)槲浵伣鸱旧硎欠植际降南到y(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)。

螞蟻金服基礎(chǔ)數(shù)據(jù)部(OceanBase 團(tuán)隊(duì))SQL 組負(fù)責(zé)人蔣志勇從事 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)橐嫒?MySQL,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)景。

螞蟻金服基礎(chǔ)數(shù)據(jù)部(OceanBase 團(tuán)隊(duì))架構(gòu)師馮柯表示,這就是商業(yè)數(shù)據(jù)庫(kù)最強(qiáng)的地方——能夠匹配絕大多數(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ò)程。

Linux 觸 Bug,團(tuán)隊(duì)險(xiǎn)解散

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ō)。

在挫折和失敗中成長(zhǎng)

馮柯回憶說(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ō)非常重要,是必須要做的事情。

在此過(guò)程中碰到了很多挫折、出了很多問(wèn)題。例如:OceanBase 診斷監(jiān)控功能剛上線的時(shí)候,有 N 個(gè)人去看監(jiān)控就會(huì)得出 N 種不同的結(jié)論。

“大家覺(jué)得這個(gè)功能完全不能用,覺(jué)得做得很爛,所以當(dāng)時(shí)參加的同學(xué)很沮喪,覺(jué)得沒(méi)有被承認(rèn)”。

馮柯當(dāng)時(shí)鼓勵(lì)團(tuán)隊(duì),“別人對(duì)你批評(píng)最多的時(shí)候,其實(shí)是你進(jìn)步最快的時(shí)候。你的產(chǎn)品能夠獲得更多資源,能夠被更多的人認(rèn)識(shí)到,這其實(shí)是非常好的。那個(gè)時(shí)候的觸動(dòng)確實(shí)很大。”

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>

研發(fā)方法論:發(fā)現(xiàn)問(wèn)題、定義問(wèn)題、解決問(wèn)題

總結(jié) OceanBase 的開(kāi)發(fā)過(guò)程,總會(huì)試圖尋找一些研發(fā)方法論,就像微軟的軟件開(kāi)發(fā)“三駕馬車”那樣的方法論。但我們其實(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è)谧鲞@些不確定的事情。

OceanBase 本身就是一個(gè)沒(méi)有先例可參考的分布式數(shù)據(jù)庫(kù)。團(tuán)隊(duì)的主干成員陽(yáng)振坤此前在百度帶領(lǐng)分布式技術(shù)團(tuán)隊(duì)時(shí)積累了豐富經(jīng)驗(yàn),也從谷歌吸收了很多分布式技術(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ì)提交。

團(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)?OceanBase 是軟件、硬件和業(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)到群里。

每個(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)題。”

陳萌萌回憶說(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á)成一致,最后走下去?!?/p>

當(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)?OceanBase 的功能列表是對(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)?!氨3诌@樣一個(gè)節(jié)奏”,蔣志勇補(bǔ)充。

未來(lái)展望:用時(shí)間歷練、用現(xiàn)實(shí)考驗(yàn)

蔣志勇強(qiáng)調(diào),數(shù)據(jù)庫(kù)產(chǎn)品化需要時(shí)間去歷練,如果抱著投機(jī)的心態(tài)參與就很難實(shí)現(xiàn)。

螞蟻金服最大的優(yōu)勢(shì)是業(yè)務(wù)場(chǎng)景非常豐富,讓 OceanBase 在服務(wù)外部客戶之前,就在內(nèi)部得到充分鍛煉,而這些鍛煉很難通過(guò)外部用戶去獲得。

從 2017 年開(kāi)始,OceanBase 跟隨整個(gè)螞蟻金服的金融科技開(kāi)放,開(kāi)始了向傳統(tǒng)金融賦能的實(shí)踐過(guò)程。

負(fù)責(zé) OceanBase 外部業(yè)務(wù)的馮柯表示:“分布式是 OceanBase 的亮點(diǎn),但最重要的是 OceanBase 是按照產(chǎn)品的思維而不是單純解決業(yè)務(wù)的問(wèn)題,未來(lái)肯定是要到外部發(fā)展?!?/p>

如今,OceanBase 已從金融級(jí)分布式關(guān)系數(shù)據(jù)庫(kù)服務(wù)為起點(diǎn),邁出了商用的一小步。

承受住時(shí)間的歷練和現(xiàn)實(shí)的考驗(yàn)后,團(tuán)隊(duì)有信心將 OceanBase 從一個(gè)軟件變成一款通用產(chǎn)品。

作者:吳寧川

簡(jiǎn)介:“云科技時(shí)代”創(chuàng)始人。職業(yè)生涯起步于《中國(guó)計(jì)算機(jī)報(bào)》,曾任副主編一職。采訪過(guò) Oracle 全球 CEO、VMWare 全球 CEO、ARM 全球 CEO、亞馬遜云全球 CTO、微軟全球研究院院長(zhǎng)、華為 CIO、京東 CTO、IBM 大中華區(qū)董事長(zhǎng)、阿里云 CEO等高管。


網(wǎng)站標(biāo)題:“去IOE”激戰(zhàn)9年:深度揭秘OceanBase如何異軍突起
網(wǎng)站路徑:http://www.5511xx.com/article/cdgsiss.html