近兩年,國內(nèi)文檔類SaaS產(chǎn)品層出不窮,協(xié)作云文檔作為云時(shí)代辦公的一種工具和方式。與傳統(tǒng)的離線辦公軟件不同,協(xié)作云文檔更加注重協(xié)作的溝通和效率,同時(shí)作為工具類產(chǎn)品也同樣關(guān)注性能和體驗(yàn)。就在不久以前,《一個(gè)救命文檔的24小時(shí)》刷屏朋友圈,在河南暴雨災(zāi)情中,騰訊文檔快速響應(yīng)災(zāi)區(qū)需要,提升穩(wěn)定性,確保產(chǎn)品體驗(yàn)。
騰訊文檔脫胎于QQ家族旗下一款團(tuán)隊(duì)協(xié)作IM軟件TIM的在線文檔模塊,最初基于開源軟件搭建的技術(shù)架構(gòu),隨著業(yè)務(wù)的高速發(fā)展,已無法完全滿足業(yè)務(wù)的需求,且積累下了比較沉重的技術(shù)債務(wù)。團(tuán)隊(duì)經(jīng)過慎重的討論,決定從底層開始,分模塊,逐步重構(gòu)整個(gè)技術(shù)體系。在技術(shù)迭代的過程中,團(tuán)隊(duì)也在不斷探索和嘗試業(yè)內(nèi)一些先進(jìn)成熟的技術(shù)解決方案。
騰訊文檔整個(gè)技術(shù)體系內(nèi)集成了許多微服務(wù)為騰訊文檔提供業(yè)務(wù)支持,比如圖像識(shí)別、SSR、截圖、文檔預(yù)覽等,這些微服務(wù)需要從效率和成本需求出發(fā)考慮解決方案,以實(shí)現(xiàn)可擴(kuò)展、易維護(hù)、降低開發(fā)成本的目標(biāo)。伴隨著公司自研上云的浪潮,在近來的開發(fā)中,團(tuán)隊(duì)在多個(gè)微服務(wù)項(xiàng)目中深入使用騰訊云Serverless架構(gòu),滿足了業(yè)務(wù)的需求,取得了不錯(cuò)的效果。
01.
騰訊文檔x Serverless云函數(shù)
多場景應(yīng)用
1.應(yīng)對(duì)流量高峰低谷
辦公類產(chǎn)品是有明顯的流量潮汐的,比如上午8點(diǎn)到12點(diǎn),下午2點(diǎn)到6點(diǎn)這幾個(gè)時(shí)段是流量比較大的時(shí)候,其他時(shí)間段尤其是凌晨沒什么流量。隨著用戶量快速增加,這種潮汐規(guī)律尤為明顯,高峰時(shí)期海量用戶的實(shí)時(shí)修改對(duì)服務(wù)器造成巨大的壓力。
傳統(tǒng)架構(gòu)下可以通過增加虛擬機(jī),實(shí)現(xiàn)應(yīng)用的可擴(kuò)展。但由于預(yù)估容量不足,導(dǎo)致業(yè)務(wù)流量高峰期時(shí),大量用戶出現(xiàn)請(qǐng)求超時(shí)的情況,這意味著品牌聲譽(yù)受損、用戶流失。雖然可以通過創(chuàng)建虛擬機(jī)實(shí)例的方式進(jìn)行擴(kuò)容,但是仍然要做很多額外的配置。應(yīng)用底層有很多依賴的框架或語言運(yùn)行時(shí)需要安裝,安裝完成之后還需要配置和部署應(yīng)用,這個(gè)周期至少需要1-2個(gè)小時(shí),這種情況下傳統(tǒng)的部署架構(gòu)無法做到資源與流量的匹配。
Serverless解決方案
騰訊文檔借助Serverless云函數(shù)搭建文檔頁面直出服務(wù),將文檔的內(nèi)容渲染能力實(shí)現(xiàn)為函數(shù),部署在云函數(shù)環(huán)境上,當(dāng)文檔業(yè)務(wù)流量激增,由云函數(shù)的負(fù)載均衡系統(tǒng)自動(dòng)分配執(zhí)行環(huán)境,處理海量用戶觸發(fā)的內(nèi)容更新請(qǐng)求負(fù)載,動(dòng)態(tài)擴(kuò)縮容能力為微服務(wù)提供最合理的資源分配。同時(shí)通過設(shè)置云函數(shù)預(yù)置并發(fā),可預(yù)先啟動(dòng)多個(gè)函數(shù)實(shí)例,保持云函數(shù)的活性,消除冷啟動(dòng),降低在運(yùn)行環(huán)境初始化和業(yè)務(wù)代碼初始化產(chǎn)生的耗時(shí)。
2.SSR前端渲染
騰訊文檔自推出以來,已達(dá)千萬月活,為了支持用戶打開頁面時(shí)能快速看到頁面內(nèi)容,瀏覽器直接解析HTML直出的字符串模版顯示頁面,流量激增導(dǎo)致集群負(fù)載、前端渲染壓力增加,首屏加載時(shí)間慢等問題。SSR團(tuán)隊(duì)需要實(shí)現(xiàn)一套彈性高可用性的直出解析服務(wù)來處理文檔和表格的頁面內(nèi)容,滿足可擴(kuò)展、易維護(hù)、降低開發(fā)成本的目標(biāo)。文檔的渲染能力幾乎都是前端同學(xué)在負(fù)責(zé),而前端同學(xué)大多服務(wù)端知識(shí)積累比較淺,對(duì)于服務(wù)的開發(fā)運(yùn)維經(jīng)驗(yàn)比較少,長期的運(yùn)維成本是新的架構(gòu)設(shè)計(jì)重要的評(píng)估維度,從而讓前端團(tuán)隊(duì)可以更加聚焦于業(yè)務(wù)邏輯本身。
Serverless解決方案
SSR(Server-Side Rendering)需要依賴Node.js服務(wù)渲染頁面,顯然會(huì)比僅僅提供靜態(tài)文件的CSR(Client-Side Rendering)應(yīng)用需要占用更多服務(wù)器CPU資源,借助Serverless方案,前端同學(xué)無需關(guān)注SSR服務(wù)器的部署、運(yùn)維和擴(kuò)容,通過云函數(shù)對(duì)底層服務(wù)進(jìn)行封裝,極大地減少部署運(yùn)維成本,更加聚焦業(yè)務(wù)開發(fā),提高開發(fā)效率。
全新Serverless Web Funciton服務(wù)開發(fā)模式,只需簡單修改監(jiān)聽端口,即可將目前流行的Node.js框架直接部署上云,享受Serverless技術(shù)帶來的免運(yùn)維、低成本、按需擴(kuò)縮容的眾多優(yōu)勢,歡迎體驗(yàn)。
3.外部服務(wù)調(diào)用-OCR圖像識(shí)別
騰訊文檔幻燈片支持編輯公式的能力,OCR圖像識(shí)別是騰訊文檔幻燈片結(jié)合外部的OCR服務(wù)能力來完成文檔內(nèi)的公式圖片轉(zhuǎn)換為公式,進(jìn)而方便用戶進(jìn)行公示編輯。問題點(diǎn)在于:外部提供的OCR服務(wù)做了限制,不支持前端請(qǐng)求,僅支持服務(wù)端請(qǐng)求。傳統(tǒng)的解決方案需要后臺(tái)同學(xué)接入,進(jìn)而增加了人員排期、對(duì)接等項(xiàng)目管理的復(fù)雜度。
Serverless解決方案
騰訊文檔將外部提供的OCR用云函數(shù)SCF做一層轉(zhuǎn)發(fā),騰訊文檔再對(duì)接聯(lián)調(diào)云函數(shù)的接口。解決了外部服務(wù)的限制,同時(shí)節(jié)省了后臺(tái)開發(fā)資源,前端業(yè)務(wù)開發(fā)同學(xué)可以自己快速對(duì)接上外部服務(wù),大大提升了開發(fā)效率。
4.插件中心-第三方服務(wù)接入
騰訊文檔插件1.0的方案是基于對(duì)文檔前端封裝到前端插件SDK的方案,在內(nèi)部插件業(yè)務(wù)嚴(yán)重耦合文檔實(shí)現(xiàn)的前提下,無法將文檔能力以安全、成體系的方式對(duì)外提供,持續(xù)去開放前端文檔的編輯的能力,會(huì)使前端SDK和文檔側(cè)的實(shí)現(xiàn)逐步變得臃腫,最后有可能會(huì)在變成巨石應(yīng)用上長期存在的技術(shù)債務(wù)。
Serverless解決方案
插件2.0方案的核心是基于后臺(tái)內(nèi)容編輯的能力開放,利用文檔的數(shù)據(jù)響應(yīng)式的更新機(jī)制,云函數(shù)便成為前端-云函數(shù)-后臺(tái)內(nèi)容編輯中關(guān)鍵環(huán)節(jié),將開放的實(shí)現(xiàn)從前端剝離,通過云函數(shù)承載進(jìn)行開放。同時(shí),不同服務(wù)的調(diào)用量級(jí)不同,云函數(shù)帶有天然的服務(wù)隔離和動(dòng)態(tài)修復(fù)能力,可針對(duì)不同服務(wù)相互隔離,分別進(jìn)行升級(jí)拓展,避免服務(wù)間的影響。
5.灰度發(fā)布&環(huán)境隔離
在進(jìn)行應(yīng)用版本更新及切換時(shí),為了保證線上整體系統(tǒng)業(yè)務(wù)穩(wěn)定,及時(shí)發(fā)現(xiàn)業(yè)務(wù)代碼的問題,研發(fā)團(tuán)隊(duì)會(huì)采取灰度發(fā)布的方式測試迭代。通過云函數(shù)針對(duì)特定的版本進(jìn)行逐步的流量切換,可以實(shí)現(xiàn)某個(gè)版本的平滑灰度,保證新上線的版本能夠在可控的范圍能進(jìn)行發(fā)布迭代。
通過云函數(shù)版本隔離測試環(huán)境和生產(chǎn)環(huán)境,線上通過對(duì)$LASTEST進(jìn)行版本的固化,可以把測試環(huán)境的API網(wǎng)關(guān)對(duì)接到TEST版本,將生產(chǎn)環(huán)境對(duì)接都固化的版本上,保證生產(chǎn)環(huán)境的代碼質(zhì)量安全。
02.
Serverless架構(gòu)方案優(yōu)勢
·研發(fā)效率提升
本地開發(fā)測試后,觸發(fā)CI/CD流程,就可以完成部署流程。同時(shí),云函數(shù)提供了日志監(jiān)控、灰度、發(fā)布回滾等能力,可以通過接口或者插件實(shí)現(xiàn)完全自動(dòng)化的流程。云函數(shù)基于騰訊云專業(yè)的保障集群,自帶負(fù)載均衡和彈性伸縮,開發(fā)同學(xué)基本不需要再關(guān)心運(yùn)維等問題,可以有更多的時(shí)間聚焦業(yè)務(wù)的優(yōu)化。服務(wù)端經(jīng)驗(yàn)較少的前端開發(fā)工程師也可以較為輕易的開發(fā)維護(hù)服務(wù)。
·成本節(jié)約
云函數(shù)實(shí)現(xiàn)1ms計(jì)費(fèi)粒度,按實(shí)際用量計(jì)費(fèi),幫忙用戶獲得顯著的成本優(yōu)勢,在沒有訪問量時(shí)實(shí)現(xiàn)自動(dòng)縮容,節(jié)約部署成本。
·靈活度高
憑借騰訊云函數(shù)的多版本能力,可以靈活部署多個(gè)在線版本,通過和網(wǎng)關(guān)的配合的,輕松做到多版本共存,提供定制化的處理能力。
·加速業(yè)務(wù)迭代
使用Serverless方案之后,極大減少了運(yùn)維和監(jiān)控的負(fù)擔(dān),開發(fā)同學(xué)可以把更多的精力放在方案的優(yōu)化和技術(shù)迭代中,快速驗(yàn)證產(chǎn)品特性,推動(dòng)團(tuán)隊(duì)技術(shù)業(yè)務(wù)的發(fā)展。
03.
騰訊文檔x Serverless架構(gòu)
更多場景探索
當(dāng)下瀏覽器環(huán)境是有性能瓶頸的,對(duì)于較為復(fù)雜的異步邏輯可以考慮使用云函數(shù)將邏輯服務(wù)化,接下來,騰訊文檔計(jì)劃對(duì)前端瀏覽器邏輯FaaS化,可以從前端分離到服務(wù)端,進(jìn)而降低瀏覽器性能壓力。
在協(xié)作辦公的賽道上,團(tuán)隊(duì)業(yè)務(wù)還在快速的成長,面對(duì)快速變化的技術(shù)迭代,低成本、快速開發(fā)、快速部署、快速上線的Serverless解決方案成為了團(tuán)隊(duì)在微服務(wù)技術(shù)選型中優(yōu)先考慮的架構(gòu)。借助云函數(shù)SCF的能力,團(tuán)隊(duì)不用再擔(dān)心后臺(tái)計(jì)算資源的問題,可以更加有信心應(yīng)對(duì)更多突如其來的事件。未來,隨著騰訊文檔開放平臺(tái)的建設(shè),會(huì)有更多的使用云函數(shù)SCF的微服務(wù)跑在騰訊文檔的業(yè)務(wù)中,為廣大用戶提供更好的服務(wù)。
·GitHub:github.com/serverless
·官網(wǎng):cloud.tencent.com/product/serverless-catalog