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