百度運(yùn)維專家:我在大數(shù)據(jù)項(xiàng)目中踩過(guò)的那些坑
一、主要討論人員
提問(wèn):陳超,七牛云技術(shù)總監(jiān)
回答:朱冠胤,百度資深大數(shù)據(jù)專家,連續(xù)兩次百度***獎(jiǎng)得主。
二、引言
“坐而論道”是一個(gè)輪流問(wèn)答的玩法。本文是大數(shù)據(jù)主題周中,幾位國(guó)內(nèi)一線專家激情問(wèn)答的一部分內(nèi)容。期間,各位群友也積極參與。
三、問(wèn)題集錦
1.MongoDB在百度的使用場(chǎng)景及規(guī)模?
2.假設(shè)現(xiàn)在讓你完全主導(dǎo)一個(gè)類似Hadoop的項(xiàng)目,你會(huì)選擇哪種語(yǔ)言?
3.分享你在百度各種大數(shù)據(jù)項(xiàng)目中踩過(guò)的坑?
4.你所在團(tuán)隊(duì)在自研和使用開源方案的主要考慮因素?
5.新一代分布式數(shù)據(jù)庫(kù)(NewSQL,類似Spanner)是一個(gè)好的創(chuàng)業(yè)方向嗎?
四、精彩回答
問(wèn):我們都知道你深度參與了百度多個(gè)成功的大數(shù)據(jù)項(xiàng)目,你是否可以分享下這個(gè)過(guò)程中踩過(guò)的典型的坑?
答:主要包括如下這些:
1.避免過(guò)度設(shè)計(jì);有些問(wèn)題考慮太早沒用;快速迭代,小步快跑!
2.防御性編程,認(rèn)為一切都是不靠譜的(同時(shí)避免走向1的極端,例如離線系統(tǒng),就不要考慮跨IDC高可用了)。
3.很多工作盡可能量化(能量化***先量化);if you can’t measure it,you can’t improve it!
4.對(duì)外接口一定要慎重,不要輕易變動(dòng),兼容性尤其重要。
5.做好各種預(yù)案、監(jiān)控,出現(xiàn)異常能快速定位是系統(tǒng)上游還是本系統(tǒng)還是系統(tǒng)下游的問(wèn)題。
6.提供好架構(gòu)和機(jī)制,讓業(yè)務(wù)方去調(diào)整配置各種策略。
7.將例行手工勞動(dòng)自動(dòng)化,人是不靠譜的;不要相信系統(tǒng)是***的,要有例行check機(jī)制。
其他Tips:
1.嚴(yán)格遵守編碼規(guī)范。
2.采用最嚴(yán)格的編譯選項(xiàng)。
3.做好CodeReview。
問(wèn):假設(shè)現(xiàn)在讓你完全主導(dǎo)一個(gè)類似Hadoop的項(xiàng)目,你會(huì)選擇哪種語(yǔ)言?(不考慮團(tuán)隊(duì),僅從語(yǔ)言層面出發(fā))
答:類似Hadoop的項(xiàng)目:如果想開源,并且讓業(yè)界更多人參與進(jìn)來(lái),***Java;Hadoop能取得巨大成功,我個(gè)人認(rèn)為這與它選擇Java有很大關(guān)系。
相反,Storm選擇了一個(gè)比較小眾的語(yǔ)言Clojure,我聽到的一些消息,twitter重寫Storm其中一個(gè)原因就是,精通Clojure的程序員比較難招,開源社區(qū)很多人也參與不進(jìn)來(lái),項(xiàng)目本身的活躍度也會(huì)受影響。
一個(gè)完整系統(tǒng),要考慮項(xiàng)目推廣(業(yè)務(wù)方接受程度)、項(xiàng)目開發(fā)、調(diào)試和維護(hù)成本,***是性能。
拿Hadoop來(lái)說(shuō),接口層面需要支持Python、Php;如果是百度內(nèi)部業(yè)務(wù),還需要支持C++;如果是開放云對(duì)外服務(wù),必須支持Java(對(duì)內(nèi)則不用考慮,很少業(yè)務(wù)使用Java開發(fā))。
對(duì)性能要求較高的部分,會(huì)考慮用C++;例如向量計(jì)算,會(huì)考慮SSE向量化,或一些業(yè)界成熟的高性能庫(kù),甚至?xí)紤]GPU或FPGA實(shí)現(xiàn)。
除了這兩部分,就考慮公司通用基礎(chǔ)服務(wù),盡量減少重復(fù)造輪子,多利用程序的基礎(chǔ)庫(kù),例如序列化、rpc實(shí)現(xiàn)支持情況等,結(jié)合百度情況,會(huì)優(yōu)先考慮C++。
問(wèn):面對(duì)眾多開源解決方案,你所在團(tuán)隊(duì)在自研和使用開源方案的主要考慮因素有哪些?
答:1.首先搞清楚究竟想解決什么業(yè)務(wù)場(chǎng)景的問(wèn)題,包括已明確需求和潛在需求。
2.優(yōu)先并充分調(diào)研業(yè)界已有實(shí)現(xiàn)(論文、代碼、論文活躍度和主要committer交流等),要想清楚該系統(tǒng)試圖解決的業(yè)務(wù)場(chǎng)景是否是我們準(zhǔn)備解決的;該方案在業(yè)界有哪些公司在站臺(tái)(爭(zhēng)取拿到一些內(nèi)部消息),構(gòu)造一定規(guī)模測(cè)試,內(nèi)部組織分享調(diào)研成果。
3.該方案是否能hold住(從設(shè)計(jì)理念到代碼級(jí)深度理解),是否容易維護(hù)(選擇了Clojure估計(jì)難度不是一點(diǎn)半點(diǎn)),是否容易推廣(看業(yè)務(wù)方對(duì)它的接受程度)。
4.如果上述3個(gè)都回答了,且答案是yes,此時(shí)看看該系統(tǒng)的論文(或原理)。和論文(或原理)對(duì)比,假設(shè)論文沒有缺陷且能很好覆蓋典型業(yè)務(wù)場(chǎng)景,則看該系統(tǒng)對(duì)論文的實(shí)現(xiàn)情況,是否有重大缺陷,如果有,一票否決;如果沒有,不猶豫,選它好了:)
5.能達(dá)到這點(diǎn)的不多,所以很多項(xiàng)目都自研了......
問(wèn):請(qǐng)說(shuō)一下MongoDB在百度的使用場(chǎng)景及規(guī)模。
答:MongoDB在百度比較小眾,應(yīng)用規(guī)模應(yīng)該在百臺(tái)量級(jí),基礎(chǔ)架構(gòu)部對(duì)內(nèi)不提供統(tǒng)一服務(wù),都是各業(yè)務(wù)線自行維護(hù)。
百度開放云對(duì)外提供MongoDB,主要是在BAE(BaiduAppEngine)產(chǎn)品中提供共享模式的Mongo服務(wù)。
問(wèn):你覺得現(xiàn)在新一代分布式數(shù)據(jù)庫(kù)(NewSQL,類似Spanner)是一個(gè)好的創(chuàng)業(yè)方向嗎?
答:選擇類Spanner系統(tǒng)來(lái)創(chuàng)業(yè),注定不走尋常路,挑戰(zhàn)極大。
首先,看該產(chǎn)品的受眾,有這類需求的客戶似乎都是大企業(yè)(一般用mysql就搞定了,需要拆到128個(gè)實(shí)例太少見了),銀行、能源行業(yè)等,都是不差錢的主。
如果自己創(chuàng)業(yè),即便做出來(lái)了,客戶一般也基本不考慮,他們不會(huì)相信一個(gè)創(chuàng)業(yè)公司能提供這樣的質(zhì)量和服務(wù)能力。
其次,實(shí)現(xiàn)難度,實(shí)現(xiàn)Spanner的技術(shù)難度不小。
從我不專業(yè)的角度來(lái)看,類似RedShift的系統(tǒng)是個(gè)不錯(cuò)的創(chuàng)業(yè)方向,很多公司都有這類需求,目前業(yè)界缺乏很好的開源實(shí)現(xiàn),而已有商業(yè)化實(shí)現(xiàn)成本都比較高。
如何一起愉快地發(fā)展
“高效運(yùn)維”公眾號(hào)(如下二維碼)值得您的關(guān)注,作為高效運(yùn)維系列微信群的唯一官方公眾號(hào),每周發(fā)表多篇誠(chéng)意滿滿的原創(chuàng)好文:來(lái)自于系列群的討論精華、運(yùn)維講壇線上精彩分享及群友原創(chuàng)。“高效運(yùn)維”也是互聯(lián)網(wǎng)專欄《高效運(yùn)維***實(shí)踐》及運(yùn)維2.0官方公眾號(hào)。
提示:目前高效運(yùn)維新群已經(jīng)建立,歡迎加入。您可添加蕭田國(guó)個(gè)人微信號(hào)xiaotianguo8 為好友,進(jìn)行申請(qǐng),請(qǐng)備注“申請(qǐng)入群”。
重要提示:除非事先獲得授權(quán),請(qǐng)?jiān)诒竟娞?hào)發(fā)布2天后,才能轉(zhuǎn)載本文。尊重知識(shí),請(qǐng)必須全文轉(zhuǎn)載,并包括本行。