05.10 開發者必讀!小程序後端技術你需要了解下

開發者必讀!小程序後端技術你需要了解下

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

開發者必讀!小程序後端技術你需要了解下

目錄

小程序的後臺技術

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

開發者必讀!小程序後端技術你需要了解下

對於後端服務,這張圖是大家傳統做的方式,暴露api,這些都可以用來開發業務應用,業務應用之後需要有相應的存儲文件,結構化的數據存儲,或者是非結構化的數據存儲,需要有數據庫和緩存,為了實現這一套架構且不會由於某一塊的服務器宕掉,或者有一些漏洞等等,我們通常的實現是一個較為複雜的過程。比如說,我們為了保證的Serverless和服務器不會垮掉,需要建立一個集群,我們要對外提供服務,需要LB的請求,請求到之後分到某一臺服務器上。比如說文件存儲,如果單純只用一臺設備,這臺設備掛了,整個文件服務就掛了,所以我們要使用分佈式存儲來解決文件存儲的問題。數據庫和緩存也是一樣的,需要構建集群,無論是兩臺還是三臺還是多臺,構建集群以後能確保不會由於某一個單點的問題導致整個服務不可用,從而導致服務癱瘓。

開發者必讀!小程序後端技術你需要了解下

傳統後臺架構

開發者必讀!小程序後端技術你需要了解下

傳統後臺架構

如果作為一個小程序開發者,這套架構在互聯網公司已經搭建了,作為個人來說這一道太重了,需要了解這裡面的某一塊和它的配置,比如說數據庫的集群怎麼配?讓大家沒法把精力集中到你的業務和小程序本身,而是過多耗在運維和支撐上。

Serverless架構

開發者必讀!小程序後端技術你需要了解下

Serverless架構

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

開發者必讀!小程序後端技術你需要了解下

Serverless架構

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

Serverless的使用

開發者必讀!小程序後端技術你需要了解下

Serverless的使用

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

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

開發者必讀!小程序後端技術你需要了解下

serverless後臺開發方案

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

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

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

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

開發者必讀!小程序後端技術你需要了解下

用戶示例

api網關

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

雲函數的處理流程

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

數據庫的配置

這個地方就是我們購買以後,數據庫啟動並且做了登陸以後,可以進入到數據庫裡面查看數據,查看session的記錄。

實操案例——用戶登陸及session展示

創建並初始化實例,按照mysql標準化使用方式操作,計算託管式的優勢用戶關心核心的代碼,不用關心周邊的運維,由於託管式業務,無論是個人請求,個人開發者的小程序,很有可能你的一個小程序就成為爆款,爆款以後可能訪問量就是突增的形式。

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

開發者必讀!小程序後端技術你需要了解下


分享到:


相關文章: