今日鸡汤
我们的社会很像一列长长的火车,最前面的车厢和最后面的车厢隔着遥远的距离,但它们又分明是一个整体,谁都不能丢下其他车厢独立行驶。
你在火车的哪里呢?愿你身处车头却不自大,身处车尾而不自卑。
今天来看最后一篇,我在腾讯云上使用Serverless的体验。
腾讯云的Serverless产品
腾讯云的Serverless相关产品主要有三个:
云函数(Serverless Cloud Function, SCF):无服务器函数计算平台。
-
Serverless Framework:Serverless Framework是一个开源项目,它使用基于事件触发的资源,比如SCF、AWS Lambda等。
Tencent Service Framework Serverless(TSF Serverless):腾讯云面向应用和微服务的高性能Serverless平台。支持Web应用场景和Service Mesh微服务场景。
Serverless场景
在腾讯云Serverless专栏里面有一些Serverless场景的文章。腾讯现在也在鼓励大家自己上传自己做的有趣的场景,写成文章来宣传。其实,在开源项目Serverless framework里有很多示例场景,方便了解Serverless。
这次,就选择其中一个示例场景来做实验,使用SCF将它部署到腾讯云。
基于函数计算实现NLP自动文本摘要
这个实验也是Serverless和AI结合的场景,使用Serverless Framework开源CLI (serverless)在腾讯云上提供自动文本摘要的服务。这个实验涉及到的AI推理预测任务是云函数的核心应用场景:
在 AI 模型完成训练后,对外提供推理服务时,可以使用无服务器云函数,将数据模型包装在调用函数中,在实际用户请求到达时再运行代码。不仅能享受无需准备服务器或 GPU 服务器的费用节省、按实际调用量计费,还可以获得高并发请求下的自动扩容伸缩能力。
需要配置的环境
比起阿里云要开一堆服务,腾讯的Serverless用起来就自助很多了。只需要注册一个腾讯云服务,安装一个Serverless Framework CLI,在github上下载了就可以玩了。
- 腾讯云
注册了腾讯云账号,进入云函数控制台,里面有具体的函数统计,调用统计数据图表等:
函数服务里列出了所有创建的函数及其状态:
新建函数还提供了各种函数模板,感觉界面很清晰。
- Serverless Framework CLI
使用npm install -g serverless
来安装serverless
命令,该命令可以实现创建、安装、部署、测试Serverless服务等功能。
项目结构
项目源码在github自动文本摘要Demo。项目结构比较清晰,包括两个主要的文件:
- index.py
包括三个函数:
-
main_handler()
: 主handler,传入触发事件,调用业务逻辑,返回结果; -
FromJieba()
: 调用jieba进行分词; -
FromSnowNlp()
: 调用SnowNlp包的summary()功能生成摘要;
# -*- coding: utf8 -*-
import logging
import jieba.analyse
from snownlp import SnowNLP
logging.basicConfig(level=logging.NOTSET)
def FromSnowNlp(text, summary_num):
s = SnowNLP(text)
return s.summary(summary_num)
def FromJieba(text, keywords_type, keywords_num):
if keywords_type == "tfidf":
return jieba.analyse.extract_tags(text, topK=keywords_num)
elif keywords_type == "textrank":
return jieba.analyse.textrank(text, topK=keywords_num)
else:
return None
def main_handler(event, context):
text = event["text"]
summary_num = event["summary_num"]
keywords_num = event["keywords_num"]
keywords_type = event["keywords_type"]
return {"keywords": FromJieba(text, keywords_type, keywords_num),
"summary": FromSnowNlp(text, summary_num)}
- serverless.yaml
Serverless服务配置文件,定义部署环境和函数信息。
# Welcome to Serverless!
#
# This file is the main config file for your service.
# It's very minimal at this point and uses default values.
# You can always add more config options for more control.
# We've included some commented out config examples here.
# Just uncomment any of them to get that config option.
#
# For full config options, check the docs:
# docs.serverless.com
#
# Happy Coding!
service: textsummarization
provider: # provider information
name: tencent
runtime: Python3.6 # Python3.6 or Python2.7
credentials: ~/credentials
plugins:
- serverless-tencent-scf
functions:
text_summarization:
handler: index.main_handler
description: Tencent Serverless Cloud Function
runtime: Python3.6 # Python3.6 or Python2.7
memorySize: 1024
timeout: 10
开始使用
安装依赖
不同于阿里使用fun install
,通过docker形式安装依赖并直接打成image。
这里需要自己使用npm install
来安装依赖,对于函数运行时需要的NLP包jieba和snownlp,也同样需要使用pip install -t . jieba snownlp
自己来安装。部署
不同于阿里云函数计算有50M代码的限制,因此需要使用NAS服务存放依赖,腾讯云比阿里云客气多了,只是说当部署程序包保持在10M下可以在线编辑,超过10M就只显示入口函数。官方建议使用层来托管依赖和公共库。可以通过上传依赖的zip包,并将其与云函数绑定,就可以在函数中使用层,达到跟NAS存放依赖一样的效果,实现业务与依赖分离。
在配好腾讯云的credential信息后直接使用serverless deploy
命令进行部署。
可以看到,部署分为几个步骤:
1) 在当前目录打包:打出来的包解出来看了一下,包括整个工程目录中的所有内容,即包含业务逻辑和安装的依赖包。
2)上传服务压缩包
3)在云上创建服务
4)打tag
5)创建apigateway触发器
可以在云函数控制台看到上传的函数:
- 服务
使用serverless invoke -f text_summarization --path test.json
调用服务,可以在控制台看到调用的log,会详细列出函数调用的运行时间和内存使用量。
总结
对比一下阿里云和腾讯云的Serverless服务。
name | 阿里云 | 腾讯云 |
---|---|---|
CLI | fun | serverless |
需开通的服务 | 阿里云函数计算服务 | 腾讯云服务 |
上传方式 | fun跟NAS直接集成上传 | 支持在线编辑、本地上传文件夹、本地上传zip包、通过cos上传zip包四种方式 |
依赖安装 | fun install |
自己安装(npm install , pip install ) |
服务定义 | template.yaml | serverless.yaml |
部署方式 | fun deploy |
serverless deploy |
冷启动优化|预留实例|无|
对比比较简单,依据仅是这两天的一个体验,当然还有很多功能需要再深入研究之后才能了解。
就目前来看,阿里关于serverless的产品生态做的更好,更有体系,并且与已有服务的结合和探索更紧密,除了基础的函数服务外,还有serverless与小程序云、K8S结合的支持,已有的云上用户会方便一些接入serverless这种新方式。
腾讯的serverless借助开源项目serverless framework 简洁的功能,可以很快就使用和部署起来一个serverless应用,控制台也更清晰,但整个体系和功能还比较薄弱,文档和资料也有点儿乱。
之后有机会再试试其他主流的Serverless开源框架,比如Knative。
Serverless未来的发展,共同期待。