對于此事有許多評論,我最喜歡來自Phil Kaplan的一條:“云泥之別。”(同樣是云,云服務(wù)根本不是龍卷風(fēng)的對手。)
這讓我對于不同類型云服務(wù)的穩(wěn)定程度、如何加強這些自己網(wǎng)站的穩(wěn)定性有了更多思考。
積云,層云,卷云,雨云
許多產(chǎn)品都號稱自己是“云”服務(wù),然而所謂“云”的定義確實各自不同的。
Salesforce以自身服務(wù)特性為云服務(wù)下定義——將自己與傳統(tǒng)的客戶關(guān)系管理系統(tǒng)(CRM)對比,后者需要客戶自行購買設(shè)備和運行數(shù)據(jù)庫,而Salesforce的CRM系統(tǒng)則相當(dāng)于一個收費服務(wù),客戶能在多種設(shè)備上使用。
為了做到這一點,Salesforce不光是在世界各地建立服務(wù)器和數(shù)據(jù)中心,還收購了另外一家云服務(wù)平臺Heroku,后者原先用于在線運行Ruby、Java、Python等程序。
Salesforce運行于自家服務(wù)器,而Heroku運行于Amazon AWS之上,早在“云”這個概念提出來之前,就有人給出了更精確的定義:“as a Service”(作為服務(wù))。Salesforce是軟件即服務(wù)(SaaS),Heroku是平臺即服務(wù)(PaaS),Amazon AWS則是基礎(chǔ)設(shè)施即服務(wù)(IaaS)。
這三者共同點是,為客戶提供數(shù)據(jù)存儲和計算的服務(wù)、減少設(shè)備或平臺帶來的障礙,我稱之為“數(shù)據(jù)與程序”云服務(wù)。
一層層服務(wù)器堆疊起來的網(wǎng)絡(luò)
印度傳說中世界是在龜背上的,而《時間簡史》里提到了與這相關(guān)的一段軼事,一位科學(xué)家公開演講時,被老太太斥責(zé)“你講的都是廢話,宇宙是個龜背上的平臺”,于是他反問道“那么烏龜是站在哪兒?”,老太太只好說“數(shù)不勝數(shù)的烏龜一層層馱著”。
我們在使用云服務(wù)時很容易忘記它的結(jié)構(gòu),所有云服務(wù)都建立在服務(wù)器、交換機和路由器之上,但在Salesforce上添加公司客戶信息時,并不要考慮添加任何硬件,Salesforce服務(wù)器會承擔(dān)這些。
一個個環(huán)節(jié)構(gòu)成了云服務(wù),當(dāng)任何一處受到阻礙時,云服務(wù)就癱瘓了。前幾天的AWS數(shù)據(jù)中心停電,或者單純從服務(wù)器來說,驅(qū)動崩潰、內(nèi)存損壞,CPU過熱,路由死機等等,不同環(huán)節(jié)出的問題會帶來不同影響。
同步帶來的挑戰(zhàn)
有情況便有對策,多服務(wù)器負載均衡、備份和同步數(shù)據(jù)等等,為服務(wù)和數(shù)據(jù)提供保障。但同步數(shù)據(jù)要比備份數(shù)據(jù)難得多,一方面是同步機制設(shè)計,另一方面則 是網(wǎng)絡(luò)狀況限制。以光速為例,在理想條件之下光子以全速從舊金山運動到阿姆斯特丹需要58.69毫秒,這個延遲不會讓人覺得有卡頓感,然而實際上光纖、銅 電纜、各級路由和交換機丟包等等條件,使得網(wǎng)絡(luò)延遲大大上升,此時同步機制就要重新設(shè)計。
以Google和Twitter為例,在加拿大和日本搜索相同關(guān)鍵詞結(jié)果是不同的,這不僅因為所用語言不通,引擎收錄數(shù)據(jù)的同步也是原因,Google并沒有保證所有人會有相同的搜索結(jié)果。
Twitter則不一樣,Twitter Timeline是網(wǎng)站核心,為了保證每個人能看到自己Follow的所有人的更新,Twitter面臨著更嚴(yán)重的問題。順帶一提Facebook的無法 復(fù)制的解決方案——Facebook讓用戶覺得Timeline重要性不大。
Twitter、Facebook和Google這三者共同點在于擁有著龐大而需要同步的數(shù)據(jù),同時面對著網(wǎng)絡(luò)狀況和服務(wù)器建設(shè)的問題。以目前的科技水平來看,提高容錯率是個比較好的解決方案,把數(shù)據(jù)同步問題先放一放,思考在同步無法順利進行的時候保持同樣用戶體驗。
前端
數(shù)據(jù)同步問題只是一個方面,暫且稱之為后端。所有網(wǎng)絡(luò)服務(wù)都有前端,即用戶界面或接口,前端是用戶與數(shù)據(jù)的橋梁,前端設(shè)計不需要考慮太多程序邏輯和數(shù)據(jù)處理步驟,它只是將用戶提交的請求轉(zhuǎn)移給服務(wù)器,將處理結(jié)果根據(jù)用戶類型(瀏覽器、系統(tǒng)等等)進行調(diào)整然后返回。
前端還能為后端提供一定程度的保護,使其免受安全威脅和攻擊,Anycast任播技術(shù)是這類典型應(yīng)用。
這就是我們建立CloudFlare的原因,用戶只需調(diào)整域名DNS設(shè)置,便能獲得CloudFlare提供的許多服務(wù),包括網(wǎng)站加速、節(jié)約流 量(緩存和防惡意盜鏈)、服務(wù)器安全防護、瀏覽者數(shù)據(jù)統(tǒng)計分析(自身分析系統(tǒng)和一鍵添加Google Analytics)等等。
我們用上文中提到的對策為無需同步的前端層提供了改進空間,緩存技術(shù)使得瀏覽服務(wù)器崩潰時的網(wǎng)站不是難題,服務(wù)器負載均衡的好處在今天San Jose服務(wù)器故障中體現(xiàn)出來,很少人受到影響,而且其他服務(wù)器表現(xiàn)良好,最終結(jié)果是客戶并不需要為我們的錯誤買單。