對(duì)云,愛(ài)過(guò),傷過(guò)?
遇到過(guò)很多擁有海量數(shù)據(jù)的互聯(lián)網(wǎng)產(chǎn)品,初期會(huì)認(rèn)為所有的服務(wù)都應(yīng)該掌握在自己的手上,這樣可控性最強(qiáng)。他們其中也會(huì)有些嘗試過(guò)一些云服務(wù),但如果在當(dāng)時(shí)服務(wù)質(zhì)量沒(méi)有給予他們足夠信心,那么很長(zhǎng)一段時(shí)間內(nèi),他們的絕大部分服務(wù),都是自建的,比如說(shuō)圖片源站存儲(chǔ)選擇利用業(yè)界的一些開(kāi)源工具自建。
但是這兩年,隨著精益創(chuàng)業(yè)理念的盛行,以及云服務(wù)的進(jìn)一步完善,他們又會(huì)開(kāi)始重新考慮使用第三方服務(wù),觀念在逐步轉(zhuǎn)變?yōu)椋簩I(yè)的東西,讓更專業(yè)的人來(lái)做,而團(tuán)隊(duì)則更專注業(yè)務(wù)的優(yōu)化。謂之“善假于物也”。2014年納斯達(dá)克上市的移動(dòng)社交平臺(tái)陌陌正是經(jīng)歷了這樣一個(gè)過(guò)程。2014年,當(dāng)自建的源站存儲(chǔ),隨著用戶量過(guò)億以及月活躍用戶增大至數(shù)千萬(wàn),遇到了訪問(wèn)的壓力時(shí),他們想到了七牛云。
小試“牛刀”
七牛平臺(tái)上已經(jīng)承載了一批擁有海量數(shù)據(jù)的成熟互聯(lián)網(wǎng)產(chǎn)品,其中不乏上市公司,很多都是UGC類產(chǎn)品,比如??低?,唱吧,camera360,豌豆莢,視覺(jué)中國(guó)等。這里面的經(jīng)驗(yàn)是:出于之前對(duì)云服務(wù)已經(jīng)持有的懷疑以及謹(jǐn)慎態(tài)度,成熟產(chǎn)品在選擇一家第三方云服務(wù)時(shí),會(huì)進(jìn)行非常系統(tǒng)而謹(jǐn)慎的功能以及性能測(cè)試。這個(gè)測(cè)試主要包含:
1. 首先是功能,看提供的API是不是能夠充分考慮到客戶對(duì)場(chǎng)景的需求,并且是否留給調(diào)用者以足夠的靈活性。此外,功能的使用者是程序員,而API就是程序員的UI(用戶界面)。API應(yīng)該對(duì)程序員友好,應(yīng)該簡(jiǎn)單,直觀,容易使用的同時(shí)優(yōu)雅。
在陌陌測(cè)試七牛的案例中,根據(jù)產(chǎn)品業(yè)務(wù)運(yùn)營(yíng)的特點(diǎn),他們分別從不同大小的文件上傳,下載,縮略圖處理,自定義域名綁定,以及七牛獨(dú)有的鏡像存儲(chǔ)等功能點(diǎn)進(jìn)行了測(cè)試。
2. 豐富的API,易用性強(qiáng)能夠迅速接入,滿足場(chǎng)景特點(diǎn)。接下來(lái)就是要測(cè)試源站的穩(wěn)定性了。
測(cè)試穩(wěn)定性通常都是放一小部分的量跑一段時(shí)間看各方面數(shù)據(jù)。為了測(cè)試穩(wěn)定性,陌陌先丟了萬(wàn)分之一的量到七牛上,跑了一周。在成熟產(chǎn)品對(duì)七牛進(jìn)行初步穩(wěn)定性測(cè)試的時(shí)候,使用的一般是七牛的“鏡像存儲(chǔ)”功能。鏡像存儲(chǔ)是指數(shù)據(jù)還是存儲(chǔ)在客戶源站的情況下,額外使用七牛作為鏡像服務(wù)器,對(duì)于已經(jīng)擁有海量數(shù)據(jù)的客戶,這個(gè)功能既可以很方便的感受到加速又有“安全感”。通過(guò)七牛的開(kāi)發(fā)者后臺(tái),可以為源站設(shè)置鏡像存儲(chǔ),讓網(wǎng)站的用戶每次訪問(wèn)的時(shí)候都從七牛云存儲(chǔ)上讀取。如果云端上沒(méi)有用戶需要讀取的數(shù)據(jù),則七牛的服務(wù)器會(huì)從源站拉取資源,然后再返回給終端用戶。在七牛內(nèi)部,這個(gè)功能又被稱為“秒接”,其中寓意,可以感受下。
三觀正了,從萬(wàn)分之一到百分之十
在測(cè)試過(guò)程中,服務(wù)方和客戶方也會(huì)在技術(shù)選型、團(tuán)隊(duì)、產(chǎn)品以及服務(wù)理念等方面進(jìn)行非常深入的交流,客戶也會(huì)從“三觀”來(lái)評(píng)價(jià)云服務(wù)。三觀正了,會(huì)對(duì)后續(xù)的合作有很大的推動(dòng)作用,也讓彼此都有了很好的信任基礎(chǔ)。在這個(gè)服務(wù)為王的時(shí)代,專注,專業(yè),極致的服務(wù)理念應(yīng)該是每家云提供商放在心里去遵循的。
在七牛推動(dòng)與成熟產(chǎn)品合作的過(guò)程中,還有個(gè)技術(shù)細(xì)節(jié)被客戶考慮到的是:七牛服務(wù)端是用Go語(yǔ)言寫(xiě)的,Go從基因上支持并行計(jì)算,非常適合做云服務(wù)系統(tǒng)的搭建,因此很多客戶對(duì)這個(gè)選型也非常認(rèn)可。
回到陌陌的案例,經(jīng)歷了系列測(cè)試后,對(duì)陌陌來(lái)說(shuō),結(jié)果是很令他們滿意的,但由于本身已經(jīng)是成熟運(yùn)營(yíng)的互聯(lián)網(wǎng)產(chǎn)品,本著對(duì)用戶體驗(yàn)的負(fù)責(zé),測(cè)試后決定只切10%的量到七牛上。
專業(yè),極致
社交類產(chǎn)品與電商或者其他產(chǎn)品不同。對(duì)于用戶已經(jīng)過(guò)億,日活躍用戶千萬(wàn)級(jí)別的社交類應(yīng)用,后端系統(tǒng)文件數(shù)可以達(dá)到百億級(jí)別。整體的訪問(wèn)中,圖片的流量要占到90%以上,并且因?yàn)樵谝苿?dòng)設(shè)備上被訪問(wèn),因此系統(tǒng)中小于8k的圖片特別多,而圖片的顯示質(zhì)量,上傳時(shí)間和訪問(wèn)速度都是直接影響到用戶體驗(yàn)的關(guān)鍵因素。此外,對(duì)于社交類的UGC, 技術(shù)難度在于沒(méi)有數(shù)據(jù)是死角,所有數(shù)據(jù)理論上都是“熱數(shù)據(jù)”,流量分散,但總的訪問(wèn)壓力非常大。還有社交網(wǎng)絡(luò)中的突發(fā)熱點(diǎn)造成的單個(gè)文件的并發(fā)訪問(wèn)急劇增大,也會(huì)給基礎(chǔ)服務(wù)帶來(lái)巨大考驗(yàn)。
這樣的特點(diǎn),基于開(kāi)源技術(shù)做存儲(chǔ),隨著源站的業(yè)務(wù)壓力越來(lái)越大,如果出現(xiàn)問(wèn)題,很難實(shí)現(xiàn)精準(zhǔn)的bug定位。這些問(wèn)題,很多自建存儲(chǔ)的成熟產(chǎn)品一般都會(huì)遇到。
而服務(wù)過(guò)多個(gè)類似產(chǎn)品并淌過(guò)各種坑的第三方云存儲(chǔ)服務(wù)在這些方面會(huì)更有經(jīng)驗(yàn)。下面也分享下七牛是如何解決問(wèn)題的:
1. 海量存儲(chǔ)。
采用多數(shù)據(jù)中心的廣域網(wǎng)分布式架構(gòu),在全國(guó)建設(shè)數(shù)個(gè)核心存儲(chǔ)機(jī)房??蛻艨梢愿鶕?jù)自己的業(yè)務(wù)特點(diǎn)主動(dòng)選擇存儲(chǔ)機(jī)房或者完全交給云服務(wù)系統(tǒng)來(lái)調(diào)度數(shù)據(jù)。此外,雙數(shù)據(jù)中心之間采用互備技術(shù),將兩個(gè)數(shù)據(jù)中心用裸光纖互聯(lián),當(dāng)用戶上傳到某個(gè)數(shù)據(jù)中心時(shí),系統(tǒng)異步將文件數(shù)據(jù)和相關(guān)原數(shù)據(jù)同步到與之互備的另一數(shù)據(jù)中心,這樣當(dāng)一個(gè)數(shù)據(jù)中心故障時(shí),存儲(chǔ)服務(wù)會(huì)根據(jù)故障的級(jí)別啟用不同的應(yīng)急預(yù)案,將請(qǐng)求切換到與之互備的數(shù)據(jù)中心。
在技術(shù)上存儲(chǔ)系統(tǒng)的核心訴求是成本和可靠性,而這兩者又是一對(duì)矛盾,想降低丟失數(shù)據(jù)的風(fēng)險(xiǎn),勢(shì)必要增加每份數(shù)據(jù)拷貝的份數(shù),而增加每份數(shù)據(jù)拷貝的份數(shù),又勢(shì)必增加成本。為了解決這個(gè)問(wèn)題,七牛使用了EC冗余算法來(lái)很好的平衡這對(duì)矛盾,達(dá)到低成本,高可用。
2. 流量壓力的應(yīng)對(duì)
作為云服務(wù)提供商,要承載更多的成熟業(yè)務(wù),運(yùn)營(yíng)上的精細(xì)化是非常重要的,能夠考慮不同類型客戶業(yè)務(wù)的特點(diǎn),在設(shè)計(jì)緩存以及系統(tǒng)邏輯時(shí),留有足夠的靈活性以及可擴(kuò)展性。云服務(wù)需要建立分級(jí)存儲(chǔ)機(jī)制,并且按照對(duì)象訪問(wèn)熱點(diǎn)進(jìn)行遷移。對(duì)內(nèi)部數(shù)據(jù)流的分發(fā)體系進(jìn)行統(tǒng)一,并且統(tǒng)一管理消息流的處理流程,以便能有足夠的容量來(lái)應(yīng)對(duì)不同客戶的峰值請(qǐng)求,使服務(wù)更穩(wěn)定。同時(shí)針對(duì)響應(yīng)時(shí)間做實(shí)時(shí)監(jiān)控,以確保問(wèn)題出現(xiàn)時(shí)能夠第一時(shí)間感知并作出處理。
3. 強(qiáng)大的圖片/音視頻處理服務(wù)。
在場(chǎng)景化時(shí)代,視覺(jué)系,富媒體類的數(shù)據(jù)會(huì)越來(lái)越多的產(chǎn)生。這其中有一部分來(lái)自用戶主動(dòng)生成,也會(huì)有一部分來(lái)自被動(dòng)產(chǎn)生,比如攝像頭的數(shù)據(jù)??梢灶A(yù)見(jiàn),云存儲(chǔ)平臺(tái)上將會(huì)承載大量的圖片音視頻類型的數(shù)據(jù),這其中云存儲(chǔ)服務(wù)對(duì)圖片處理的實(shí)時(shí)響應(yīng)能力也是重點(diǎn)。拿陌陌來(lái)說(shuō),每一秒中有一半的圖片都需要做處理,也就是說(shuō),每秒接近5000次左右的實(shí)時(shí)圖片處理次數(shù),要保證其實(shí)時(shí)性,99.9%都在一百毫秒以內(nèi)處理完。并且,使用七牛的圖片轉(zhuǎn)碼,可以將原有的JPG格式轉(zhuǎn)為WebP格式,在同等質(zhì)量的條件下獲得更好的壓縮比,節(jié)省了成本。
對(duì)視頻的實(shí)時(shí)響應(yīng)也是一樣。當(dāng)前比如說(shuō)像短視頻應(yīng)用,還有一些其他的游戲視頻分享,就是用戶在手機(jī)上錄完以后,后臺(tái)傳輸,過(guò)個(gè)10秒鐘你就可以分享了,分享完即時(shí)就有其他終端設(shè)備的用戶訪問(wèn)了,訪問(wèn)需要的格式還不一定一樣。如果客戶采用自建,這種實(shí)時(shí)性要求高,從后端數(shù)百公里,數(shù)千公里的機(jī)房,通過(guò)各種路由器,最終到用戶小區(qū)的局域網(wǎng),這條路是很長(zhǎng)的,環(huán)境比較難控制。再到真正的服務(wù)端,它必須數(shù)據(jù)要快,處理能力要強(qiáng)。然后又有高吞吐,用戶量大了,一秒鐘一臺(tái)服務(wù)器僅能支持幾百個(gè)KPS,這種情況下,對(duì)客戶來(lái)說(shuō),自建能保證性能的響應(yīng)依然是良好的技術(shù)難度大大增加。從我們觀察到的,服務(wù)端處理不應(yīng)該超過(guò)一秒,超過(guò)一秒用戶的體驗(yàn)將大受影響。
4. 新增自定義處理來(lái)滿足部分客戶的特殊數(shù)據(jù)處理的需求。這是七牛比較有特點(diǎn)的一個(gè)服務(wù)。云服務(wù)作為通用型框架,本身提供的處理服務(wù)可能不能包含有些客戶提出的不通用的數(shù)據(jù)處理需求。因此針對(duì)這種特殊需求,客戶可以定義自己的數(shù)據(jù)處理邏輯??蛻粽f(shuō)去我們機(jī)房買一個(gè)處理器是可以的。但是接下來(lái)要運(yùn)維、機(jī)器全部覆蓋,這個(gè)流程做起來(lái)很累。自定義處理可以讓用戶把自定義程序打包完,放在這個(gè)計(jì)算框架里跑。用戶的應(yīng)用處理完以后,進(jìn)入到指定的框架,讓用戶以插電的方式體驗(yàn)自己的邏輯。這個(gè)服務(wù)也可以讓更多本身針對(duì)非結(jié)構(gòu)化數(shù)據(jù)做處理的開(kāi)發(fā)者比如語(yǔ)音識(shí)別,圖像識(shí)別服務(wù)提供商等可以加入七牛平臺(tái)上提供處理能力給我們的客戶,大家一起把生態(tài)做起來(lái)。
5. 專業(yè)的服務(wù)意識(shí)。 服務(wù)意識(shí)對(duì)于云服務(wù)提供商的重要性自不必說(shuō),快速定位和解決客戶問(wèn)題,迅速響應(yīng)客戶的需求是一個(gè)好的云服務(wù)提供商的判定標(biāo)準(zhǔn)之一。
全面擁抱云存儲(chǔ)
隨著對(duì)七牛的技術(shù)以及服務(wù)的越來(lái)越肯定,幾個(gè)月后,陌陌做出了決定,把七牛正式作為源站以及異地備份的提供方,并且將所有圖片處理也轉(zhuǎn)至七牛。同樣是一直保持創(chuàng)業(yè)精神的陌陌,需要一家持續(xù)、穩(wěn)定、有前景、有技術(shù)情懷的公司,提供穩(wěn)定高質(zhì)的云服務(wù)。七牛恰恰符合他們的期許。
全面擁抱云的第一步就是將歷史數(shù)據(jù)遷移到云端。這是大工程,但對(duì)于”成熟產(chǎn)品使用云服務(wù)“來(lái)說(shuō),這是極其關(guān)鍵的服務(wù)步驟。首先,在遷移過(guò)程中可能遇到以下問(wèn)題:
1. 硬盤遷移過(guò)程中,網(wǎng)絡(luò)傳輸中的數(shù)據(jù)出錯(cuò)。
2. 傳輸過(guò)程中的速率問(wèn)題。拿陌陌舉例,如果采用常用的傳輸辦法,整個(gè)遷移過(guò)程要耗時(shí)半年,并且會(huì)嚴(yán)重影響線上的業(yè)務(wù)。
3. 硬盤寄送過(guò)程以及使用過(guò)程中的磁盤損壞。
4. 存儲(chǔ)數(shù)據(jù)文件對(duì)數(shù)據(jù)庫(kù)的合并。如果按照傳統(tǒng)的數(shù)據(jù)庫(kù)寫(xiě)入方式,需要若干天,會(huì)給客戶數(shù)據(jù)庫(kù)以及云服務(wù)的數(shù)據(jù)庫(kù)帶來(lái)不必要的巨大壓力。
針對(duì)這些問(wèn)題,一個(gè)考慮全面的遷移系統(tǒng)就顯得尤為重要:
1. 針對(duì)客戶的業(yè)務(wù)數(shù)據(jù)模型,定制數(shù)據(jù)格式,進(jìn)行存儲(chǔ)數(shù)據(jù)的導(dǎo)入。
2. 數(shù)據(jù)庫(kù)結(jié)構(gòu)需要有強(qiáng)擴(kuò)展性,可以實(shí)現(xiàn)瞬時(shí)合并。
3. 遷移系統(tǒng)充分考慮不可控因素,比如硬盤損壞,斷電等情況。
至此,七牛已經(jīng)成為陌陌非常好的合作伙伴,支撐了他們近兩億用戶的數(shù)據(jù)存儲(chǔ),訪問(wèn)加速與圖片處理。云服務(wù)幫助小伙伴陌陌解決了后續(xù)業(yè)務(wù)增長(zhǎng)規(guī)模所帶來(lái)的技術(shù)壓力,讓他們可以更加關(guān)注自己的核心業(yè)務(wù)。
大家也許會(huì)說(shuō)國(guó)內(nèi)的云生態(tài)尚不成熟,但是經(jīng)歷了幾年洗禮,踩過(guò)無(wú)數(shù)的坑后,目前的國(guó)內(nèi)云服務(wù)提供商越來(lái)越努力,專業(yè),我們也看到越來(lái)越多成熟企業(yè)和新創(chuàng)公司一樣,選擇信任專業(yè)的第三方云服務(wù),因此可以更專注自有業(yè)務(wù)。2015,可以預(yù)見(jiàn),云將更加精彩。