Serverless 計算將會成爲雲時代默認的計算範式,並取代 Serverful (傳統雲)計算模式,所以也就意味着服務器 --
客戶端模式的終結。
------《簡化雲端編程:伯克利視角下的 Serverless計算》
Serverless計算讓開發者可以以更高的靈活性和更低的成本構建現代應用程序。開發者無需配置和管理服務器等基礎設施,可將所有精力投入核心業務。前端
Serverless相比傳統的serverful開發方式有着本質的區別:redis
函數服務做爲Serverless架構中的核心計算組件,可應用於各種Serverless架構,主要包括兩大類:Web、移動、IoT、AI等無服務器後端和數據處理系統後端。數據庫
其中,Web、移動serverless後端的典型場景應用最爲普遍,本文介紹如何使用函數服務+API網關分分鐘在京東雲APP中構建用戶問卷調查。編程
構建APP問卷調查可由兩個簡單函數完成:獲取問卷內容和提交答案。json
建立一個用於存儲問卷題庫及用戶答案的數據庫或對象存儲bucket,本示例建立一個雲緩存Redis實例(主從4GB)。後端
在函數服務中建立並測試兩個函數(運行時:Python2.7)緩存
建立函數1服務器
建立函數jcloud-app-survey-topic:請求用戶PIN,問卷版本version,從數據庫獲取問卷內容,將入口文件index.py與依賴庫redis SDK打包上傳至函數服務。index.py代碼以下:架構
#coding=utf-8 import json import redis'''下載問卷''' def handler(event,context): if not bool(event): result = { 'statusCode': 200, 'headers': {}, 'body': "", } return result body = event['detail']['body'] body = json.loads(body) pin = body.get('pin', "") version = body.get('version', "") print(pin) print(version) r = redis.Redis(host='redis-v214pzrgiicq-proxy-nlb.jvessel-open-hb.jdcloud.com', port=6379, db=0) topic = r.hget('topic_' + version, version) data = {'pin': pin, 'version': version, 'topic': topic} data = json.dumps(data) result = { 'statusCode': 200, 'headers': {}, 'body': data, } return result
函數測試app
建立函數2
建立函數2jcloud-app-survey-submit :請求用戶PIN,問卷版本version,用戶答案submit,上傳至數據庫,將入口文件index.py與依賴庫redis SDK打包上傳至函數服務。index.py代碼以下。
#coding=utf-8 import json import redis''' 上傳問卷結果''' def handler(event,context): if not bool(event): result = { 'statusCode': 200, 'headers': {}, 'body': "", } return result body = event['detail']['body'] body = json.loads(body) pin = body.get('pin', "") version = body.get('version', "") submit = body.get('submit', "") print(pin) print(version) print(submit) r = redis.Redis(host='*********.jdcloud.com', port=6379, db=0) old = r.hget('submit_' + version, pin) if old != None : data = {'code': 1, 'desc': 'user have submitted'} data = json.dumps(data) result = { 'statusCode': 200, 'headers': {}, 'body': data, } return result r.hset('submit_' + version, pin, submit) data = {'code': 0, 'desc': 'success'} data = json.dumps(data) result = { 'statusCode': 200, 'headers': {}, 'body': data, } return result
函數測試
在API網關建立兩個API,做爲觸發器綁定至對應函數,經過function響應API請求,並將API發佈至測試環境。jcloud-app-survey-topic函數綁定API觸發器以下:
jcloud-app-survey-submit函數綁定API觸發器以下:
經過本地API接口測試工具驗證API接口無誤,便可與前端H5頁面開發聯調,測試完成後,可經過函數版本、別名功能管理線上函數迭代發佈。
問卷提交頁
以上,快速完成APP後端上線,只等活動上線
最後,APP調查問卷效果以下:
點擊「京東雲」瞭解更多關於隊列服務