地租经济-阿里【函数计算FC】实践

96 阅读6分钟

serverless概念

指的是无服务计算,它一种云计算架构模式,它允许开发者编写并运行代码,而无需关心底层基础设施和资源的管理。在这种模式下,云服务提供商负责管理计算资源,如容器、虚拟机或物理服务器,而开发者只需关注自己的业务逻辑,即函数。这些函数通常以事件驱动的方式运行,并且只在特定事件触发时才执行,从而实现了按需计费的模式。

Serverless架构的特点包括:

  • 无需购买和维护服务器:开发者不需要购买和维护自己的服务器,而是通过云服务平台提供的服务来获取所需的计算资源。
  • 高可用性和高扩展性:云服务提供商负责资源的自动扩展和收缩,以确保应用的高可用性和响应需求的变化。
  • 按需付费:开发者只需为实际使用的资源支付费用,这种计费模式类似于水电的使用,按量付费。
  • 无需关注基础设施运维:开发者不需要管理容器的配置、维护、操作系统更新等基础设施运维工作,这些全部由云服务提供商负责。

Serverless并不意味着完全没有服务器,而是意味着开发者不需要直接管理这些服务器。此外,Serverless计算通常是无状态的,这意味着每个函数执行完毕后,其状态会被清除,以便于快速响应新的请求。

以上的文本是比较官方文案,举一个例子来简单说明:假设我有个A服务,使用java语言编写,吭吭哧哧在idea开发完后,准备上线,为了让服务顺利部署,我们需要先购买一套ecs云服务器,在上面安装jdk,把服务打成jar包部署,配置域名映射,才能访问,如果为了应对偶尔的流量峰值,必须再整一套k8s,做到弹性伸缩。但是用FC服务,只要创建一个函数(应用),并把你的代码打包上传,即可通过应用默认分配的触发器地址即可访问到你的服务,如有弹性伸缩需求,也只要动动你的小手,配置弹性阈值就可。总结,ecs就是买断了一套毛坯房,还不带物业的那种。需要装修成什么样子,靠自己动手,fc就是【租】的方式,房东提供了各种各样的标准房,客户按需求选择,带“码”入住即可,资源(内存,带宽...)是用多少收多少。

阿里云函数计算FC-官网

带“码”入住:

1、申请试用

阿里现在提供三个月的申请试用

2、创建服务与函数

这里我创建了一个文件服务

创建完成后即可在应用下创建函数,我创建了一个upload的函数

创建函数的方式使用内置运行时创建:可以理解为编写一个接口处理请求,比如说接收请求,并打印请求中的参数使用自定义运行时创建:迁移带容器的web服务,像spring,flask使用容器镜像创建:
规格方案这个需要自己评估,如果方式是【使用自定义运行时创建】,规格分配过小,会在服务冷启动的时候超时,自检不通过而陷入不断重启
实例并发度即最大能承受的QPS,fc带有“性能探测”功能,可以压一压,设置合适的值
请求处理程序这里默认配置的是index.handler,我使用的是py编写,指定的是请求的处理方法是index.py 文件中handler方法
环境变量可以灵活配置环境变量,py可以通过os.environ['app_desc'],java可以通过System.getevn("app_desc")获得参数

进入函数,看到已经为我默认生成了代码,就可以直接测试一下,python解释型语言是可以在页面编辑代码,直接部署的,如果是java,go等编译型语言则不支持,只能在本地开发好后再打包到函数部署。

总结

我们需要从几点去判断业务是否适合该种模式

    • 得先弄清楚自己的业务是否适合使用它,抛开概念不说,函数计算最直接的,最大的优势是按量收费;支持弹性伸缩,节省运维成本。包月还是按量,这个需要斟酌。
    • 函数它就不是ecs,它也有自己的缺点,举个例子,你的服务是一个web应用,一个web常搭配常用的redis,mq,nacos等中间件使用,但是为了达到节省成本的目的,我们会开启【闲置模式】,该模式下当服务一段时间无流量后,不再分配cpu,类似ios系统的墓碑机制,这时中间件的心跳检测也会停止,导致当流量进来后,可能会资源不可用而抛出异常,对要求开发人员对中间件的心跳检活机制有一定的了解,甚至需要改写代码,得不偿失。
    • fc函数需要冷启动时间。函数可以做到无流量无服务,有流量再起服务,如果你的是一个较大的spring服务,这个时间就可能相当长了,fc的最佳实践是预留常活一个实例,但是你想啊,你都常活了一个实例了,这个是要收钱的,这个成本和ecs一核对...。
    • 异步线程的问题,实际使用过程中发现在主线程中开启异步线程任务,异步线程不会执行,猜测是主线程任务完成后,cpu就已经回收了,或者一个请求只分配了一个线程,如果你原有的业务是这样实现,迁移到fc后就需要改写你的逻辑了。

个人认为,fc函数适合【函数】概念的业务,这个函数具备原子性(小而精,复杂的事情,不需要过多的依赖),对响应时效不敏感,可以异步执行,函数有较为明显的流量峰值时间段,资源消耗量大的特点。例如用它来做文件加解密,视频分析等。对号入座,专业的人做专业的事情。