黃文俊:Serverless小程序後端技術分享

歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~前端

黃文俊,現任騰訊雲SCF無服務器雲函數高級產品經理,多年企業級系統開發和架構工做經驗,對企業級存儲、容器平臺、微服務架構、無服務器計算等領域均有涉獵。

clipboard.png

今天講的是怎麼使用Serverless作後端技術分享。個人職業偏向是後端,可能不是寫前端,不是使用Node.js,更可能是使用CR作後端語言,今天關注的微信小程序,我這一塊的分享更可能是怎麼實現它的後端。我所使用的是Serverless技術,也是在近兩年新出來的一種架構。講Serverless這個架構以前,我也給你們講一下小程序和傳統的後臺技術。mysql

clipboard.png

小程序的後臺技術

小程序,是一種全新的鏈接用戶與服務的方式,它能夠在微信內被便捷地獲取和傳播,同時具備出色的使用體驗。它的加載方式比傳統的APP方式更快速上線,體驗也不差,除了它自己的界面展現和刷新以外,小程序裏面的數據獲取經過微信和後端進行交互,小程序的運行其實是一個類前端的運行方式,整個運行是在微信內,它和後端的交互實際上經過微信進行轉發的,運行起來以後,它會提出一個api的請求,這個請求首先給到微信,微信再經過網絡apr轉到你本身的服務器上,服務器拿到這個請求之後進行數據的處理,而後再響應到前端,這就是小程序和後臺交互的一種架構。web

clipboard.png

對於後端服務,這張圖是你們傳統作的方式,暴露api,這些均可以用來開發業務應用,業務應用以後須要有相應的存儲文件,結構化的數據存儲,或者是非結構化的數據存儲,須要有數據庫和緩存,爲了實現這一套架構且不會因爲某一塊的服務器宕掉,或者有一些漏洞等等,咱們一般的實現是一個較爲複雜的過程。好比說,咱們爲了保證的Serverless和服務器不會垮掉,須要創建一個集羣,咱們要對外提供服務,須要LB的請求,請求到以後分到某一臺服務器上。好比說文件存儲,若是單純只用一臺設備,這臺設備掛了,整個文件服務就掛了,因此咱們要使用分佈式存儲來解決文件存儲的問題。數據庫和緩存也是同樣的,須要構建集羣,不管是兩臺仍是三臺仍是多臺,構建集羣之後能確保不會因爲某一個單點的問題致使整個服務不可用,從而致使服務癱瘓。sql

clipboard.png

clipboard.png

若是做爲一個小程序開發者,這套架構在互聯網公司已經搭建了,做爲我的來講這一道過重了,須要瞭解這裏面的某一塊和它的配置,好比說數據庫的集羣怎麼配?讓你們無法把精力集中到你的業務和小程序自己,而是過多耗在運維和支撐上。數據庫

Serverless架構

clipboard.png

我下面要介紹的Serverless架構,採用無服務器的方式,主要會介紹無服務器和雲怎麼結合,怎麼利用雲的服務減輕架構化的工做。介紹它的架構以前,我介紹一下Serverless架構,英文稱之爲Serverless,中文稱之爲無服務器,你們不用購買服務器,不用購買虛擬機或者物理機,這一塊怎麼運行呢?它使用計算託管的方式,在Serverless這裏,咱們能夠當作兩塊,第一塊就是函數即服務,它真正實現了你業務的託管計算。另一種是後端即服務,包括對象存儲,你們不用本身構建分佈式存儲,不用擔憂數據的丟失和安全性問題;同時在雲上提供的數據庫,消息隊列和對象存儲都是同樣的,不用購買服務器本身搭建,在購買使用的過程中咱們能夠稱之爲Serverless。由於這些都是託管型的,使用的時候不用關心它的安全性,不用關心可能服務器宕機致使的故障。小程序

clipboard.png

Serverless的計算託管式雲在服務函數內,下面來說一下雲函數的架構。你們看到這個架構之後,咱們後面在拿一個實際案例來看怎麼把具體的api服務落地。雲服務器架構自己是計算託管型的,計算託管意味着把真正的業務代碼託管到雲上面,而後在雲上面運行,它的運行方式有一個特色是觸發式運營,跟各個產品打通之後,各個產品產生的事件,後面的案例就是和API網關進行結合,從api網關來的事件就是api事件,當這個請求到達api網關時,咱們就認爲是一個事件,而後再運行。你們最初進行託管的時候,把代碼和觸發期的配置提交到雲上面來,並非說提交以後代碼就運行起來,而是事件到達才運行起來,代碼對這個事件進行處理。在這個過程當中,對於每一次的事件,每個代碼拉起的過程,實際上都是單獨處理一個事件,爲何呢?由於咱們在這兒使用併發的模式,若是你有上萬個用戶同時訪問你的小程序,要同時對上萬的用戶進行服務,啓動上萬的實例,它是在事件時運行起來,沒有事件不能運行,這與微信小程序自己點開即用、用完即走的概念是符合的,有請求時才運行,沒有請求時不運行。產品的計費模式也是根據實際運行的時間計費的。後端

Serverless的使用

clipboard.png

怎麼使用Serverless呢?傳統的架構就是前面說的web服務,而後是使用存儲、緩存,咱們對外服務之後,有對外暴露相應的api,實際上用戶的業務邏輯都是放在雲函數內,須要結構化存儲,須要進行緩存或者對象存儲,咱們須要數據服務或者雲緩存服務等,其餘的服務均可以直接在線服務,這些服務直接經過代碼調用。微信小程序

前面講了Serverless的架構介紹,後面是對於這個後臺開發的介紹,後面也是基於這個方式進行詳細案例的說明。api

clipboard.png

小程序除了自己的頁面啓動,後續與網絡的交互都是由小程序發起,通過微信自己之後,首先請求到達api網關,對於對外的api的管理,把這個api暴露到官網上,能夠被要程序訪問獲得。它自己也可以提供api的發佈和版本的切換能力,api網關以後就是雲函數。雲函數就是實際處理業務的邏輯,若是你須要使用數據庫,就在代碼內發數據庫的鏈接,須要存儲文件,就調用相應的窗口寫文件。緩存

基於這個方案咱們來看一下,傳統提供的是中間的一塊,由於前端是用戶的小程序,後端是微信自己提供的接口服務,中間建議的是開發者本身的服務器。咱們如今要展現的一個案例,也就是怎麼把中間的開發者服務器替換掉,用Serverless的方案落地,咱們使用了api網關加雲數據庫實現開發者服務器所可以作到的事情,不須要購買服務器而落地咱們的api。

首先從最前面的小程序來看,這個案例也是小程序開發者上面的demo,demo的前端包括登錄端口,以及session展現,咱們在小程序這端首先獲取一個talk,開發者拿到之後再跟微信交互,驗證合法之後,咱們這裏選擇了記錄到雲數據庫,這就是小程序界面提供點擊登錄的位置,後面的業務會發送請求到雲上面來。

對於這個小程序的核心,咱們在某一個api上面的路徑就是在hos的login url上發起GET操做,根據Wx.login構造請求的頭部,body內容,發送獲取到的code及加密數據到後臺。

clipboard.png

api網關

咱們看一下api網關作的事情,它對外以一個api的接口呈現出來,咱們直接提供了對外訪問的域名,用戶基於這個域名綁定本身所擁有的域名,這種狀況下能夠實現發佈的要求,微信小程序的開發者要求域名要備案,把本身的域名綁定到api的服務上面來,對外提供,在右側api的網關上,配一個/login Get,在後臺還未實現以前,能夠配置爲mock方法,解耦先後端,小程序能夠基於api構造的mock數據開發。實現雲函數後,對接api到雲函數並更新發布api,避免開發的同時影響到在線業務。

雲函數的處理流程

從雲函數的方面來講,用戶會承載計算業務。按照咱們最開始用戶給的官方圖,拿到api的請求之後,解析請求內容,根據規範鏈接微信認證服務器,獲取認證狀況並記錄session,返回session信息給到請求端。拿到微信服務器的返回之後能夠判斷用戶的登錄過程是成功仍是失敗,若是成功之後能夠拿到用戶相應的值,這個地方咱們發起到數據庫的鏈接,創建一個masico的鏈接,完成session的記錄。

雲函數的處理流程以後,下面展現的是咱們怎麼和數據庫創建鏈接,登錄信息的細節流程,建立鏈接並可複用鏈接,拼裝SQL語句並執行。

數據庫的配置

這個地方就是咱們購買之後,數據庫啓動而且作了登錄之後,能夠進入到數據庫裏面查看數據,查看session的記錄。

實操案例——用戶登錄及session展現

建立並初始化實例,按照mysql標準化使用方式操做,計算託管式的優點用戶關心核心的代碼,不用關心周邊的運維,因爲託管式業務,不管是我的請求,我的開發者的小程序,頗有可能你的一個小程序就成爲爆款,爆款之後可能訪問量就是突增的形式。

咱們利用session的架構實現小程序,並且不用去擔憂運維;秒級啓動,彈性計算能力知足用戶上萬的併發。核心點關注業務代碼,而不用關注web,這就是快速的應用實現小程序的落地的方法。

clipboard.png

Q/A

Q:在api網關部署HTTPS證書嗎?
A:對,這個證書是騰訊雲提供的,綁定你本身域名的時候,能夠實現HTTPS的支持。

Q:咱們在生產環境的時候由騰訊雲提供的證書?
A:對。

Q:在生產環節須要騰訊雲提供的證書上線咱們的服務?
A:對,這是小程序方面的要求,由於小程序要求必須使用自有域名和小程序打通。

Q:小程序即用即刪,若是手機裏面有不少會很卡,若是小程序用過在微信上面的頁面會顯示出來,若是上萬個對微信自己有什麼影響?
A:能夠從一些限制能夠看到,如今對於微信小程序的大小有限制的,它自己的大小是要求,目前我記得是5兆包2兆包的大小,若是是上千個,對於你手機來講多是多存儲了一些數據,每一個包最大用滿可能就是5兆,自己小程序頁面的加載都是有限制的,這個限制從微信角度來考慮,都是爲了保證小程序的流暢運行,不會對用戶的手機形成很大的衝擊,這一塊要微信的同窗介紹,我是偏後端的。

Q:我再舉個例子,小程序進入的時候加載速度比較快的,舉一個比較極端的,好比說跳一跳,第一次使用的時候,它的加載速度,好比說今天用完了,刪掉,過一段時間再進去,相比來講加載速度有差異嗎?或者第二次用的時候快一些嗎?緣由是什麼?
A:這個要由微信的同窗解答比較好一些,由於這些都是小程序自己的體現,或者說速度的一種體現。

Q:你好,我是作後端開發的,什麼樣的模型不是用Serverless來作的。
A:Serverless它自己的一些特性也限制了它的使用場景,好比說對於內存的配置,cpu的配置,運行時間的限制,不是全部場合都適用,它自己對運行時間有限制的,不能長時間的運用,包括內存的使用,包括cpu的應用,好比說動畫的渲染,長時間的批量計算,這些都不適合api的服務,因爲它的請求到達之後必須快速響應用戶,api比較適合的。

更多分享資料,請戳下面的連接:
使用 serverless 構建小程序後臺.pdf

問答
微信小程序如何與數據庫交互?
相關閱讀
朱展:騰訊雲小程序解決方案
施德來:有贊電商小程序的實踐
鄒偉:如何開發一款小遊戲

此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/dev...
圖片描述

相關文章
相關標籤/搜索