作者 | Trey Huffine
譯者 | 彎月 責(zé)編 | 辛?xí)粤?/p>
(相關(guān)資料圖)
出品 | CSDN(ID:CSDNnews)
在本文中,我們采訪了 Prerender.io 的首席工程師兼經(jīng)理 Zsot Varga。他跟我們分享了一個(gè)真實(shí)的小故事:他們放棄了AWS,并構(gòu)建了內(nèi)部基礎(chǔ)設(shè)施來(lái)處理流量和緩存數(shù)據(jù),從而將服務(wù)器每年的費(fèi)用從100萬(wàn)美元降低到了20萬(wàn)美元。
“我們的目標(biāo)是降低成本,同時(shí)保持渲染速度和服務(wù)質(zhì)量不變。這類的遷移需要仔細(xì)計(jì)劃和認(rèn)真執(zhí)行,配置不正確或執(zhí)行不給力就會(huì)導(dǎo)致客戶網(wǎng)頁(yè)和社交媒體宕機(jī),影響他們的網(wǎng)絡(luò)搜索排名,也會(huì)導(dǎo)致我們的客戶流失?!?/p>
需要解決的技術(shù)問(wèn)題
簡(jiǎn)單來(lái)說(shuō),我們的產(chǎn)品Prerender會(huì)緩存和預(yù)渲染JavaScript頁(yè)面,這樣搜索引擎就可以抓取和索引一個(gè)純HTML文件,你只需要在網(wǎng)站上安裝適當(dāng)?shù)闹虚g件,就可以避免使用昂貴且冗長(zhǎng)的JavaScript解決方案。
但是,所有這些數(shù)據(jù)和流程都需要在服務(wù)器上處理,為此以前我們使用的是AWS。經(jīng)過(guò)幾年的發(fā)展,如今我們每分鐘需要處理的頁(yè)面超過(guò)了7萬(wàn),存儲(chǔ)的頁(yè)面高達(dá)5.6 億,因此而產(chǎn)生的AWS費(fèi)用也高達(dá)一百萬(wàn)美元。
繼續(xù)使用AWS,我們就需要持續(xù)承擔(dān)如此高昂的費(fèi)用。相反,我們花了三個(gè)月的時(shí)間,通過(guò)一些現(xiàn)成的思路和一個(gè)清晰的計(jì)劃,削減了80%的成本。
遷移計(jì)劃
之前,我們使用的是托管在亞馬遜的AWS之上的服務(wù)器,用于存儲(chǔ)客戶緩存和呈現(xiàn)的頁(yè)面。眾所周知,AWS是目前最大的云提供商之一,提供虛擬服務(wù)器和托管服務(wù)。
我們利用AWS來(lái)存儲(chǔ)緩存頁(yè)面,然后供Google、Facebook以及其他搜索引擎查詢或抓取。我們的產(chǎn)品Prerender的主要功能就是向Google以及其他搜索引擎提供靜態(tài)的HTML頁(yè)面,向人類用戶提供動(dòng)態(tài)的交互式 JavaScript。
我們所面臨的問(wèn)題是,將大量(TB級(jí))的預(yù)渲染網(wǎng)頁(yè)存儲(chǔ)到第三方服務(wù)器上產(chǎn)生了巨額的費(fèi)用。通過(guò)這種方式存儲(chǔ)緩存頁(yè)面,導(dǎo)致我們所需承擔(dān)的維護(hù)和托管費(fèi)接近天文數(shù)字。
此外還有一個(gè)問(wèn)題,很多初創(chuàng)公司都沒(méi)有考慮到,也沒(méi)有太多相關(guān)的話題引發(fā)討論,那就是流量成本。
將數(shù)據(jù)導(dǎo)入 AWS 是免費(fèi)的,但對(duì)于大多數(shù)軟件來(lái)說(shuō),靜態(tài)數(shù)據(jù)并沒(méi)有什么用。但移動(dòng)這些數(shù)據(jù)會(huì)產(chǎn)生巨額成本,而這將成為我們前進(jìn)道路上的瓶頸。
那么,該怎么解決呢?我們的計(jì)劃是,將緩存的頁(yè)面和流量遷移到自己內(nèi)部的服務(wù)器上,并盡快減少對(duì)AWS的依賴。
我們預(yù)估了一下成本,發(fā)現(xiàn)可以將托管費(fèi)用降低 40%,而且此次服務(wù)器遷移不僅可以節(jié)省我們的成本,也可以為客戶省錢。
我們的目標(biāo)是降低成本,同時(shí)保持渲染速度和服務(wù)質(zhì)量不變。這類的遷移需要仔細(xì)計(jì)劃和認(rèn)真執(zhí)行,配置不正確或執(zhí)行不給力就會(huì)導(dǎo)致客戶網(wǎng)頁(yè)和社交媒體宕機(jī),影響他們的網(wǎng)絡(luò)搜索排名,也會(huì)導(dǎo)致我們的客戶流失。
為了避免可能出現(xiàn)的問(wèn)題,我們的計(jì)劃包含三個(gè)階段。如果出現(xiàn)任何問(wèn)題,我們可以輕松地退回到前一個(gè)階段。如果由于某種原因?qū)е滦路?wù)器無(wú)法工作,我們也可以輕松地回滾,而不會(huì)出現(xiàn)任何停機(jī)或影響到客戶的服務(wù)降級(jí)。
我們需要謹(jǐn)慎地執(zhí)行系統(tǒng)測(cè)試,而且這是一個(gè)持續(xù)的過(guò)程,可能需要數(shù)周或數(shù)月的時(shí)間。
遷移過(guò)程
第一階段:測(cè)試(4~6周)
第一階段的主要工作是設(shè)置裸機(jī)服務(wù)器,在小規(guī)模且易于管理的機(jī)器上測(cè)試遷移,然后再擴(kuò)大規(guī)模。這個(gè)階段沒(méi)有太多修改軟件的需求,我們決定在Linux的KVM虛擬機(jī)上運(yùn)行服務(wù)器。
5 月初,我們的第一批服務(wù)器開始運(yùn)行,1%的流量被定向到新服務(wù)器。遷移兩周后,我們每天的費(fèi)用節(jié)省了800美元。5月底,我們已將大部分流量工作負(fù)載從 AWS 遷移出去,渲染工作負(fù)載的成本降低了 45%。
服務(wù)器每月的成本降到了13,000 美元,與AWS相比,開支已經(jīng)削減了 22%。
測(cè)試階段對(duì)于確保今后流程的順利運(yùn)行至關(guān)重要。我們付出了巨大努力,設(shè)法通過(guò)更多的監(jiān)控和更好的錯(cuò)誤處理來(lái)提高系統(tǒng)的穩(wěn)健性。除了已有的服務(wù)器監(jiān)控儀表板外,我們還設(shè)置了一個(gè)新的渲染監(jiān)控儀表板,以便發(fā)現(xiàn)錯(cuò)誤或性能問(wèn)題。
多虧了持續(xù)的監(jiān)控和清晰的溝通,我們的測(cè)試成功了,最終能節(jié)省的成本已超出了預(yù)期。一切準(zhǔn)備就緒,我們開始向第二階段邁進(jìn)。
第二階段:技術(shù)遷移(4周)
6月~7月初,我們以第一階段的遷移作為概念驗(yàn)證,在此基礎(chǔ)之上進(jìn)行技術(shù)方面的遷移。第二階段的主要工作是將緩存存儲(chǔ)移動(dòng)到裸機(jī)服務(wù)器。
6 月中旬,我們搭建了300臺(tái)服務(wù)器,并開始順暢運(yùn)行,緩存頁(yè)面總數(shù)達(dá)到 2 億。我們的每臺(tái)服務(wù)器上都使用了 Apache Cassandra 節(jié)點(diǎn)(與AWS S3兼容)。
我們將在線遷移分為四個(gè)步驟,每個(gè)步驟相隔1~2周。在測(cè)試了頁(yè)面是否可以同時(shí)緩存在 S3 和 minio 中之后,我們慢慢地將流量從 AWS S3 切換到minio。在向S3的寫入完全停止后,我們每天省下了200美元的成本(使用S3 API的費(fèi)用)。也就是說(shuō),我們現(xiàn)在可以刪除緩存在 Cassandra 集群中的數(shù)據(jù)了。
6月24日,第二階段的工作暫告一段落,這時(shí)我們的成本驟降。在這之前的四個(gè)星期里,我們將大部分緩存工作負(fù)載從 AWS S3 轉(zhuǎn)移到了我們自己的 Cassandra 集群。隨之而來(lái)的是,AWS每天的開銷降至1,100美元,預(yù)計(jì)每月3.5萬(wàn)美元,而新服務(wù)器的每月經(jīng)常性成本約為1.4萬(wàn)美元。
當(dāng)時(shí),S3仍留有一些數(shù)據(jù),每天的開銷約為60美元,而且會(huì)在接下來(lái)的幾周內(nèi)逐漸消失。盡管我們本可以將所有數(shù)據(jù)移出,將成本立即削減成零,但將數(shù)據(jù)移出 AWS 需要一次性支出5000美元,這筆錢花得有點(diǎn)冤。
移動(dòng)數(shù)據(jù)是我們遇到的巨大瓶頸,我們的新CTO Zsolt Varga表示:
“ASW真正的坑在于流量成本,他們的存儲(chǔ)費(fèi)用非常合理,甚至可以免費(fèi)上傳。但是當(dāng)你將數(shù)據(jù)拿出來(lái)的時(shí)候,就需要付出巨大的代價(jià)。”
“小型創(chuàng)業(yè)公司通常不會(huì)計(jì)算流量成本,盡管這筆費(fèi)用有可能占到總成本的90%?!?/p>
舉個(gè)例子,假設(shè)你在美國(guó)西部地區(qū)(比如俄勒岡),那么必須支付的流量成本為0.080 美元/GB,而在亞太地區(qū)(比如首爾)則需要支付0.135 美元/GB。
而對(duì)于我們,每月的流量成本輕輕松松就能達(dá)到3萬(wàn)~5萬(wàn)美元。在第二階段結(jié)束時(shí),我們的服務(wù)器每月的總成本降低了 41.2%。
第三階段:實(shí)現(xiàn)和擴(kuò)展(4~6周)
到這一階段,遷移工作進(jìn)行得很順利,而且我們已經(jīng)節(jié)省了大量資金。剩下的工作是將所有其他數(shù)據(jù)遷移到本地的服務(wù)器上。
這個(gè)階段我們需要移動(dòng)所有的亞馬遜RDS示例。這是整個(gè)過(guò)程中最容易出錯(cuò)的部分,但是由于很大一部分?jǐn)?shù)據(jù)已經(jīng)遷移完了,因此任何故障或瓶頸都不會(huì)導(dǎo)致整個(gè)遷移崩潰。
以下是我們?cè)谶w移過(guò)程的最后階段所需完成的工作:
最終結(jié)果證明,此次遷移取得了巨大的成功。當(dāng)所有緩存頁(yè)面都被重定向后,我們每月的服務(wù)器費(fèi)用下降到最初預(yù)估的40%~80%。
我們獲取的經(jīng)驗(yàn)教訓(xùn)
如果在此過(guò)程中遇到任何問(wèn)題或?qū)嶋H的工作進(jìn)展落后于計(jì)劃,服務(wù)器遷移都將面臨很多風(fēng)險(xiǎn)。因此,我們?cè)谶w移的每個(gè)階段都設(shè)計(jì)了故障保險(xiǎn),以確保出現(xiàn)問(wèn)題時(shí)我們可以回到上一步。這也是我們?cè)谌孢w移之前,實(shí)施了一系列小規(guī)模測(cè)試的原因。
為了規(guī)避風(fēng)險(xiǎn),我們仔細(xì)規(guī)劃了遷移的每個(gè)階段,在擴(kuò)展之前測(cè)試了每個(gè)實(shí)施階段,并在出現(xiàn)問(wèn)題時(shí)及時(shí)修復(fù)。這樣,我們不僅大幅降低了服務(wù)器的費(fèi)用,而且將所有潛在風(fēng)險(xiǎn)降至最低。
遷移服務(wù)器的動(dòng)力
如你所見,客戶可以利用我們的產(chǎn)品推出以用戶體驗(yàn)為中心的網(wǎng)站,他們的工作重心是為客戶提供最好的服務(wù),而不是設(shè)法優(yōu)化SEO。在過(guò)去的幾年里,每當(dāng)建立一個(gè)新頁(yè)面,我們都需要利用Wordpress,僅僅是為了獲得最好的 SEO,而只把管理界面等需要SPA的功能留給未索引的頁(yè)面。但如今,我們可以幫助客戶解決過(guò)去的這些難題。
技術(shù)棧的選擇
Javascript的使用范圍非常廣泛,由于我們解決了Javascript 渲染引起的“問(wèn)題”,因此我們希望在這個(gè)領(lǐng)域積累盡可能多的專業(yè)知識(shí)。我們利用CloudFlare的分布式系統(tǒng),實(shí)現(xiàn)了快速響應(yīng)和全球擴(kuò)展。在Digital Ocean云平臺(tái)的支持下,我們可以保障正常的運(yùn)行時(shí)間。此外,我們還使用了很多其他 SaaS 提供商來(lái)最大限度地提高我們的效率。
關(guān)鍵詞: 我們服務(wù)器的年成本降低了 javascript