Serverless 计算将会成为云时代默认的计算范式,并取代 Serverful (传统云)计算模式,所以也就意味着服务器 -- 客户端模式的终结。 ------《简化云端编程:伯克利视角下的 Serverless计算》前端
Serverless计算让开发者可以以更高的灵活性和更低的成本构建现代应用程序。开发者无需配置和管理服务器等基础设施,可将所有精力投入核心业务。redis
Serverless相比传统的serverful开发方式有着本质的区别:数据库
计算和存储的解耦;它们独立扩展,独立订价;编程
代码的执行再也不须要手动分配资源;json
按使用量计费。后端
函数服务做为Serverless架构中的核心计算组件,可应用于各种Serverless架构,主要包括两大类:Web、移动、IoT、AI等无服务器后端和数据处理系统后端。缓存
其中,Web、移动serverless后端的典型场景应用最为普遍,本文介绍如何使用函数服务+API网关分分钟在京东云APP中构建用户问卷调查。服务器
构建APP问卷调查可由两个简单函数完成:获取问卷内容和提交答案。架构
建立一个用于存储问卷题库及用户答案的数据库或对象存储bucket,本示例建立一个云缓存Redis实例(主从4GB)。app
在函数服务中建立并测试两个函数(运行时: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
函数测试
建立函数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调查问卷效果以下:
点击“京东云”了解更多关于队列服务