编程笔记

lifelong learning & practice makes perfect

serverless|阿里云函数计算FC,使用总结

近来,serverless这个词出现次数愈加频繁,各云厂商也纷纷推出相关的产品和工具,最近也尝试在公
司项目上使用severless去解决一些问题,这里讲讲我的体验.

阿里云FC

阿里云的severless产品,从对已有框架的支持上说,FC的体验非常好,go,java,js,python的各种框架基本都支持,也通过社区/官方提供了完善的demo和模板(serverless devs,工具, demo,模板)

像java的Springboot,go的beego,gin,Python的Django…,官方都有提供模板,在创建应用时可以根据模板一键创建,如图:
FC,应用模板

使用时也支持多个环境,和正常开发流程类型,一个应用可以创建开发,测试,生产等多套
环境,每套环境的配置可以分开配置,做到环境间的隔离.
FC多多环境

访问其他服务

在项目中使用一般都需要配合其他基础设施,如数据库,缓存,消息队列等,可以参考阿里云文档访问其他服务,如果都是使用阿里云云产品,建议都通过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等国外厂商也支持,需访问国际站查看

参考

欢迎关注我的其它发布渠道