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