Serverless 計算將會成爲雲時代默認的計算範式,並取代 Serverful (傳統雲)計算模式,所以也就意味着服務器 -- 客戶端模式的終結。 ------《簡化雲端編程:伯克利視角下的 Serverless計算》前端
Serverless計算讓開發者可以以更高的靈活性和更低的成本構建現代應用程序。開發者無需配置和管理服務器等基礎設施,可將所有精力投入核心業務。redis
Serverless相比傳統的serverful開發方式有着本質的區別:數據庫
函數服務做爲Serverless架構中的核心計算組件,可應用於各種Serverless架構,主要包括兩大類:Web、移動、IoT、AI等無服務器後端和數據處理系統後端。編程
其中,Web、移動serverless後端的典型場景應用最爲普遍,本文介紹如何使用函數服務+API網關分分鐘在京東雲APP中構建用戶問卷調查。json
構建APP問卷調查可由兩個簡單函數完成:獲取問卷內容和提交答案。後端
建立一個用於存儲問卷題庫及用戶答案的數據庫或對象存儲bucket,本示例建立一個雲緩存Redis實例(主從4GB)。緩存
在函數服務中建立並測試兩個函數(運行時:Python2.7)bash
建立函數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
複製代碼
函數測試
建立函數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調查問卷效果以下:
點擊「 京東雲」瞭解更多關於隊列服務點擊「連接」瞭解京東雲更多精彩內容