乾貨 | 用Serverless快速在APP中構建調研問卷

Alt

Serverless 計算將會成爲雲時代默認的計算範式,並取代 Serverful (傳統雲)計算模式,所以也就意味着服務器 --
客戶端模式的終結。
------《簡化雲端編程:伯克利視角下的 Serverless計算》

前言

Serverless計算讓開發者可以以更高的靈活性和更低的成本構建現代應用程序。開發者無需配置和管理服務器等基礎設施,可將所有精力投入核心業務。前端

Serverless相比傳統的serverful開發方式有着本質的區別:redis

  1. 計算和存儲的解耦;它們獨立擴展,獨立訂價;
  2. 代碼的執行再也不須要手動分配資源;
  3. 按使用量計費。

Serverless快速構建構建APP問卷調查

函數服務做爲Serverless架構中的核心計算組件,可應用於各種Serverless架構,主要包括兩大類:Web、移動、IoT、AI等無服務器後端和數據處理系統後端。數據庫

其中,Web、移動serverless後端的典型場景應用最爲普遍,本文介紹如何使用函數服務+API網關分分鐘在京東雲APP中構建用戶問卷調查。編程

構建APP問卷調查可由兩個簡單函數完成:獲取問卷內容和提交答案json

Step1:建立存儲

建立一個用於存儲問卷題庫及用戶答案的數據庫或對象存儲bucket,本示例建立一個雲緩存Redis實例(主從4GB)。後端

Step2:建立函數

在函數服務中建立並測試兩個函數(運行時: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

Alt

建立函數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

函數測試

Alt

Step 3:建立發佈API

在API網關建立兩個API,做爲觸發器綁定至對應函數,經過function響應API請求,並將API發佈至測試環境。jcloud-app-survey-topic函數綁定API觸發器以下:

Alt

jcloud-app-survey-submit函數綁定API觸發器以下:

Alt

Step 4:驗證上線

經過本地API接口測試工具驗證API接口無誤,便可與前端H5頁面開發聯調,測試完成後,可經過函數版本、別名功能管理線上函數迭代發佈。

問卷提交頁

Alt

以上,快速完成APP後端上線,只等活動上線

Alt

最終效果

最後,APP調查問卷效果以下:

Alt

點擊「京東雲」瞭解更多關於隊列服務

Alt

Alt

相關文章
相關標籤/搜索