近来,serverless这个词出现次数愈加频繁,各云厂商也纷纷推出相关的产品和工具,最近也尝试在公
司项目上使用severless去解决一些问题,这里讲讲我的体验.
阿里云FC
阿里云的severless产品,从对已有框架的支持上说,FC的体验非常好,go,java,js,python的各种框架基本都支持,也通过社区/官方提供了完善的demo和模板(serverless devs,工具, demo,模板)
像java的Springboot,go的beego,gin,Python的Django…,官方都有提供模板,在创建应用时可以根据模板一键创建,如图:
使用时也支持多个环境,和正常开发流程类型,一个应用可以创建开发,测试,生产等多套
环境,每套环境的配置可以分开配置,做到环境间的隔离.
访问其他服务
在项目中使用一般都需要配合其他基础设施,如数据库,缓存,消息队列等,可以参考阿里云文档访问其他服务,如果都是使用阿里云云产品,建议都通过vpc访问,保证安全性且设置也便捷.
在将函数设置为仅通过VPC访问时,必须通过内网访问地址(如:http://beego-dev-serverlss-beego-ewihavwzni.cn-hangzhou-vpc.fcapp.run)调用函数,如果使用了Nacos等服务发现,直接使用注册的ip是无法调用的,函数的内网ip与服务发现里注册的ip不同,ping不同也无法调用.
流水线部署
使用阿里云创建应用时自动配置的流水部署函数时,可以设置为仅更新函数,这样函数的配置不会丢失(否则需要把配置写入配置文件,使用serverless-devs工具的情况下为s.yml)
如果未在流水线管理中设置,每次更新默认会更新服务及函数的配置
冷启动
FC函数实例在未设置预留实例的情况下’续存时长’有限,在实例销毁后调用函数,有个冷启动过程,go的项目冷启动时间很短,相比下Springboot项目由于应用启动时间很长,冷启动也变得难以接受(尝试过一个公司项目启动需要20s左右),而go在毫秒级,从这点看Springboot在FC上仅适合与异步任务(官方有个尚在实验期的解决方案:Spring-Native,java 11起支持).
针对冷启动通过社区也看到一些解决方案,如:
- 官方提供的’弹性管理’(通过预留实例保存实力不销毁解决冷启动问题)
- 通过预热,定时激活函数,减少冷启动时间
其他厂商
AWS Lambda
云厂商当之无愧的老大,也是最早做serverless的
netlify/vercel serverless function
netlify,vercel 使用的都是AWS的Lambda,这里就归于一处.两家的业务也很像
使用过两家的服务部署go语言的serverless function,体验相差不大,不过vercel由于政策原因,
部署的应用,函数在国内无法直接访问,必须绑定自定义域名.
从部署go的体验来说,适合于做一些小应用和api,对于已有的框架如gin,beego,go-micro之类的,无法直接将整个应用部署上去,需要做比较多调整.
腾讯云 serverless
工具
- serverless devs 官方定位是无厂商锁定的工具,支持部署函数到aws,阿里云等多家厂商,实际只有阿里云FC做的比较完善,大部分案例,模板也是用的FC
- serverless 开源工具,国内腾讯针对自家产品做了优化,对AWS等国外厂商也支持,需访问国际站查看
参考
- netlify
- vercel
- [AWS]
- 阿里云 FC
- 函数冷启动很慢,如何解决
- 函数计算冷启动响应很慢,请问如何优化一下
- Spring Boot Serverless 实战系列 | 性能调优
- 定时预热
- 冷启动延时缩短50%-80%,阿里云函数计算发布冷启动加速技术-阿里云开发者社区
- 弹性管理
- 闲置计费
- serverless devs,应用,demo,模板
- serverless devs
- 工具 serverless