深圳魚傳科技有限公司是專注以精準營銷和互聯網生態產品運營為核心的綜合互聯網營銷推廣服務商,通過整合全網優質媒體資源,并結合智能資料模型和AI標簽演算法,向企業提供包括流量矩陣搭建運營、媒介流量采買、投放模型設計、產品營銷策劃、資料監控分析、效果運營等多層次服務,作為函式計算的資深用戶,魚傳科技的CTO和技術負責人跟我們聊了魚傳科技的 Serverless 旅程,
目前魚傳科技的業務主要基于支付寶小程式進行承載,小程式具有輕量、打開方便、內容可以快速更新等特點,為了適應市場的快速變化和多變的客戶訴求,對敏捷開發提出了更高的要求,魚傳科技的業務特點,還具有訪問量波動大、流量突發預測難等特點,尤其是活動期間訪問突增對小程式后端服務的穩定和彈性也是一個很大的考驗,
而阿里云函式計算是典型的 Serverless 計算平臺,具備極強的彈性能力,可以做到百毫秒彈性擴縮,可以很好的支撐業務彈性擴展,同時對函式計算,用戶上傳代碼即可運行,無需關注和維護服務器,也極大地提高了后端開發效率,這些特點使得函式計算成為很多企業支撐小程式/移動APP的優先選擇,尤其是有突發流量或者流量波動較大的業務場景,
如下是基于魚傳科技的第一視角呈現的 Serverless 落地實踐,
復雜互動小程式如何應對訪問量激增?
2018 年底,我們開始嘗試使用函式計算,當時,公司的核心業務是在支付寶上制作一些小程式,“多多有禮”小程式就是在那個時候上線的,“多多有禮”是一款主打互動領獎的小程式,當前已經積累了百萬榷訓的規模,是一款非常受用戶歡迎的產品,然而在 2018 年,“多多有禮”最初上線時,我們遇到了已有業務系統難以承載突增流量的難題,
那時我們的業務都跑在服務器上面,為了能抗住高并發流量,我們準備了大概三、四臺高配服務器做負載均衡,然而在業務并發高峰期,服務崩掉的情況還是經常發生,因為這個小程式涉及到的業務邏輯,和應用后端互動比較多,有很多復雜流程,比如打卡、簽到、莊園運營等,所以遇到突增流量,單純增加服務器數量很難扛住,
另外我們還遇到了資源利用率低的問題,“多多有禮”在初期上線的時候,業務高峰期并發大概在 1000-2000,但業務低峰期可能也就幾十,這是因為小程式設計的用戶打卡、簽到等動作,使得用戶量非常容易在早上、晚上,或者某一個特定時間暴增,在這種情況下我們再用 ECS 的話,不僅需要按照峰值流量預留足夠的ECS資源,維護起來也會變的非常復雜,資源利用率很難做上去,費用也會成倍的增加,
所以我們當時非常迫切地想把這個事情從我們系統里解耦,如果能簡化我們的運維復雜度,還能引入彈性能力就好了,經過調研我們發現當時阿里云,只有函式計算 FC 這款產品具備相應的特點,所以我們就開始嘗試把整個業務都遷到阿里云函式計算上來,經過這3年多的使用,我們把新的應用、可以遷移的舊應用、內部應用/外部應用等都陸續遷移上函式計算了,可以這么說,如果函式計算崩了,我們公司的業務基本也就癱了,但是經過這3年來的使用,發現函式計算的穩定性還是超預期的,比我們維護使用服務器的時候,業務穩定性和性能都有大幅提升,現在峰值可以達到數萬QPS、數千函式并發同時穩定運行,而且我們和函式計算也建立了專門的技術支持群,有任何技術問題,都能很快得到回應,這也是為啥我們敢把公司所有的業務都基于函式計算來部署的原因,使用函式計算,真正幫助我們解決了很多穩定性和性能問題,



“多多有禮”小程式頁面
最佳實踐
再來分享下我們使用函式計算的一些最佳實踐,希望也能幫助到其他用戶使用函式計算,
1. 開發流程
我們公司的主要技術堆疊是基于PHP語言,也會使用一些Web框架,像Lavaral,針對Web框架,為了能在函式計算上運行起來,我們也對框架做了些適配,一個專案拆成一個或多個檔案,對應多個函式,單個檔案有的1萬行代碼,基礎檔案一百行左右,但是現在函式計算配合 Serverless Devs 工具支持了多語言 Web 框架的“0”改造遷移,我們也在嘗試使用,目前我們每個開發會獨立負責一個函式服務,服務下面每個函式會作為一個小的應用,部分專案會跨服務依賴一些功能函式,但是我們都會盡可能都獨立開,函式計算也支持了層功能,后面會用層來部署公共函式、依賴,比如給用戶發紅包,代碼只用寫一份,另外對新招進來的開發來講,函式計算上手門檻還是很低的,不用管理服務器搭環境,可以直接在線編輯代碼、部署、測驗,
2. 流水線和灰度發布
我們本地一直采用的 SVN 存盤代碼,SVN 提交代碼支持觸發Action,我們封裝了函式計算的API介面,可以通過關鍵字觸發函式和服務的發布,為了避免發布影響線上服務,我們還使用了函式計算的版本和別名的功能,正常線上業務會發布成新的版本,同時把HTTP流量入口系結的 release 別名指向新的版本,這樣就完成了發布程序,如果最新的代碼出現問題,可以更改別名的指向,就能達到一鍵回滾到上個版本,同時我們也會創建一個測驗別名,會先完成版本的測驗后,才會把承載現網流量的release 別名指向到新版本,這樣通過別名的能力就區分出了線上環境和測驗環境,非常方便,
3. 運維管理
對函式計算來講,基本是不需要關心資源維護的,像我們最依賴的彈性能力,但是對于業務運維來講,監控日志就成了非常關鍵的手段,函式計算集成了SLS,每次請求都會生成一條日志,可以比較方便的過濾出錯誤日志,對線上問題排查還是比較方便的,另外函式計算也提供了比較全的監控視圖,我們最常用的就是請求量、錯誤次數、并發、執行耗時等指標,針對錯誤次數也加了告警,這樣開發就可以直接兼業務運維,效率成倍增加,
效果對比
對比之前使用服務器,函式計算確實給我們帶來了很大的便利性,我們也是最早吃螃蟹的人,基本伴隨著函式計算一路成長,我們也非常高興的看到,函式計算的功能越來越豐富,體驗也越來越好,總結下來:
1. 穩定性增強
開發不需要去關心后端服務的搭建運維,只需要撰寫函式就能夠為小程式提供穩定可靠并且彈性伸縮的服務,并且隨著小程式訪問量增加,函式計算能夠支持更大的并發配額,即使應對大促活動流量高峰也能夠如絲般順滑,對于穩定性的提升,這個是對我們最大的幫助,
2. 開發上手快,不用維護服務器
使用函式計算“上手快,不用維護服務器”也是很吸引我們的一個點,很多人對于 “Serverless”技術有一些誤解,認為這個火熱的技術可能會難以學習、理解,其實不然,在實際使用程序中,我們曾經嘗試讓一些開發新人在生產程序中直接使用函式計算,在實操的程序中,這些開發上手非常快,他們只需要關心自己的代碼就可以了,也非常樂于使用,
3. 價格低服務好,想買技術支持
之前我們對于函式計算的使用費用沒有做過細致的統計,剛發現支撐一個榷訓超過 50萬人的小程式,使用函式計算費用大約在200元/日左右,對我們的業務來講,這個費用還是很便宜的,我們日常使用也會遇到一些問題,函式計算團隊能及時、耐心的給予技術支持,我曾與團隊的同學開玩笑說,特別想在函式計算上多花點錢,想買技術支持,
云計算時代真正的彈性計算
Serverless 技術最大的優勢就是免運維,同時提供彈性能力和按需付費,我們選擇使用 Serverless 就是覺得它是真正的彈性計算,是未來的趨勢,如果我使用比如像彈性ECS 這樣的產品,如果我的業務發展需要上量,就需要人工去“起”機器,或者執行一些彈性策略,但 Serverless 卻能夠讓我不用考慮后端的所有的運維作業,實作自動的彈性伸縮,所以我們認為 Serverless 是云計算時代真正的彈性計算,
最后,我們也想對函式計算提一些建議:
- 期望函式計算的呼叫入口能夠支持訪問IP固定,因為一些政府監管的要求,需要加IP黑白名單,
- 函式的版本發布,能夠支持針對單個函式精準發布,更加精準的實作灰度,
更多內容關注 Serverless 微信公眾號(ID:serverlessdevs),匯集 Serverless 技術最全內容,定期舉辦 Serverless 活動、直播,用戶最佳實踐,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/509683.html
標籤:其他
