| 导语:Serverless符合云计算发展的方向,把用户关注点放在业务功能上,屏蔽底层网络框架、计算资源和机器运维等细节。这里基于Golang试了一把腾讯云SCF,简单把使用体验记一下
目录
一、谈谈Serverless背景
- 为什么要使用Serverless?
- 帮业务解决什么问题?
- 核心构成:Trigger FaaS BaaS
二、基于Golang的腾讯云SCF简易使用流程
- 创建编辑函数
- 编写Golang代码
- 上传调试
- 添加函数触发器
- 完善ApiGateway配置
- 查看函数日志
- 查看函数监控
三、谈谈Serverless使用感受
- 优缺点和使用场景
- 当前SCF业务接入情况
- 冷启动问题
- 关于本地缓存/全局变量的使用
- 调试工具不方便
- 测试环境搭建
- 关于灰度策略
一、谈谈Serverless背景
为什么要使用Serverless?
- 业务应用开发:聚焦业务逻辑、变轻变薄变简单
- 背后基础设施:能力不断完善、变重变厚变标准
帮业务解决什么问题?
让业务在无服务器架构演变中收益:
核心构成:Trigger FaaS BaaS
Serverless由Trigger FaaS BaaS构成:
- Trigger:函数的触发器,一般有ApiGateway、定时器、消息队列等多种触发模式
- FaaS:函数即服务,Serverless的核心,完成业务应用逻辑的载体
- BaaS:后端即服务,FaaS运营依赖的远端组件或服务,比如DB、KV、COS和后端SVR等
如一个背单词小程序简要架构图:
二、基于Golang的腾讯云SCF简易使用流程
腾讯云SCF:https://cloud.tencent.com/product/scf
创建编辑函数
- 登录到腾讯云控制台后,选择函数服务>选择地区和namespace->创建函数
- 几个主要关注项:运行角色、超时时间、环境变量、公网/内网访问、日志集等
编写Golang代码
- 引入SCF的Golang SDK:github.com/tencentyun/scf-go-lib/cloudfunction
- 下面是最简单的SCF代码,通过cloudfunction.Start()绑定Handler,函数触发后会调用
- 入参ctx为环境变量,req为自定义请求体(这里用ApiGateway触发,所以用了SCF默认的ApiGateway请求体结构),出参string为函数输出数据
上传调试
- 编译出二进制后,上传到SCF上就完成部署了。golang只支持上传二进制,像python、nodejs等脚本语言可直接上传代码且在控制台上编辑
- 除了控制台,一般使用VsCode插件或者命令行工具 CLI来上传
- 上传完保存后,就可点测试触发函数,入参为可选测试模板或自定义参数
添加函数触发器
- 选择触发方式,就可以添加1个或多个函数的触发器,当前CSF支持了API网关、Ckafka、CMQ、定时器等常用方式
- 添加了ApiGateway后,就自动给你生成url,一条cgi就完成了,不需搭建nginx、cgi-proxy等工程,全部云给你快速搞定
完善ApiGateway配置
- 点击API服务名,就可到ApiGateway的控制台,管理Api的访问方式、挂业务域名、配错误码、管理版本和环境等等
查看函数日志
- 选择运行日志,就可看到函数每次触发的运行日志信息。但只能按时间和请求ID检索,很不方便。一般通过挂载日志集,同步到腾讯云日志服务
查看函数监控
- 同样,监控信息里也包含了函数运行时间、流量、吞吐量等一些基础监控,也可配告警。更个性化和深入的业务监控,就需业务接入云监控等其他组件了
三、谈谈Serverless使用感受
优缺点和使用场景
- 优点:真心叫快速上线;降低开发运维成本,特别是对机器这方面;统一业务云开发框架;兼容微服务架构能力;能做到自动扩缩容,按需付费;
- 缺点:对云平台强依赖,被绑架以后必须都和云玩;服务类型受限,像无状态、长期运行等服务不合适;当前调试发布功能真心不完善;冷启动问题需优化
- 使用场景:虽然有些服务受限,以及存在调试不方便和冷启动等问题,但我感觉Serverless作为一种全托管、免运维的模式,能做的场景非常多。不只是后台业务服务、像数据服务、AI服务等都可以Serverless化
当前SCF业务接入情况
- 腾讯内:手机管家,NGW,微信内读书/支付一堆小程序,腾讯视频,腾讯地图,腾讯相册等
- 腾讯外:拼多多的运营活动小程序,TPLINK,英孚教育,北京尚德,新东方等
- 吞吐比较大的函数超过10 亿/天调用
冷启动问题
很多人担心函数冷启动,需初始化环境与VM、拉取代码等执行过久,导致首批请求失败。这里也有一些优化方案:
- 函数打薄:通过减少函数代码等,让容器更轻启动更快速
- 实例预留:Serverless比较聚焦讨论的话题,通过历史函数访问模型,计算实例预启动和保留策略,也可以业务自己配置,这里就不展开
关于本地缓存/全局变量的使用
目前SCF函数执行完会有3min左右环境保留,所以像本地缓存还是可使用的,只是什么时候失效变成未知数
此外,SCF也提供了像ServerlessDB等SDK,对连接池做了一些优化
调试工具不方便
作为刚入门的,也可能因为不熟悉,真心觉得Serverless调试还不是很方便,本地测试环境和现有测试服务打通很繁琐
几个点后面可完善使用:
- VsCode插件:查看函数,开发调试,同步文件等
- 命令行工具CLI: 实现函数打包部署,可和脚手架/CI结合使用
- 用例调试:本地和云端调试,完善用例工具
测试环境搭建
因为SCF函数并没环境区分,环境变量也只能设置一种,所以一般通过不同命名空间下,创建不同的函数来做测试环境。函数可一键复制,减少创建成本,但始终觉得有些冗余
关于灰度策略
现在SCF发布有版本控制,但还不支持流量控制和灰度策略。这点对于每次慢慢灰度小心翼翼的我很不习惯,希望可以早日完善这个功能