【最不佳实践】函数计算的函数是什么意思

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: 如果说,这两年在云计算的领域中那些名词最热门,可能非“云原生”、“Serverless”等莫属了,现在在云计算领域聊天,中途不说一下云原生、Serverless,差不多就会“被落伍”。

如果说,这两年在云计算的领域中那些名词最热门,可能非“云原生”、“Serverless”等莫属了,现在在云计算领域聊天,中途不说一下云原生、Serverless,差不多就会“被落伍”。

在如今,在Serverless架构火热发展的过程中,我们不得不面对一个词:FaaS。

所谓的FaaS就是Functions as a Service的简称,翻译成国内各个云厂商的产品就是:函数计算、云函数等。

无疑,这里有一个共同点,那就是这些产品都与函数有着或多或少的“纠葛”,那么这里面的函数是什么?到底是不是我们曾经认识的“二狗子”,还是说“二狗子已经变了”?

定义对比

在百度百科中,传统编程领域的函数定义为:

函数是指一段可以直接被另一段程序或代码引用的程序或代码。也叫做子程序、(OOP中)方法。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的作用是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。
函数分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。

关于函数计算中的函数,在各个云厂商中的定义:

  • 阿里云
函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务,您无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,并以弹性、可靠的方式运行您的代码。
  • 腾讯云
云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码。您只需使用平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。SCF 是实时文件处理和数据处理等场景下理想的计算平台。

通过各个厂商的描述,“函数”这个词,貌似没有被单独解释,或者是被单独的描述,整体来看,“函数”在Serverless架构下,貌似是一个“函数即服务”的计算平台。

与传统的计算机编程中的函数对比,在Serverless架构下的Function,变得略微模糊。

函数就是函数

在最开始,Serverless架构中的FaaS平台,通常都是针对编程语言提供对应的Runtime,例如Python3的运行时,Node.js12的运行时等,在这些FaaS平台中,针对这些运行时是有一个词汇叫做”函数入口“,所谓的函数入口指的就是我们一个相对明确的方法或者函数。

例如以Python为例,我们的函数入口可以定义成:文件名.方法名,具体来说可以是index.handler

此时对应的文件index.py就是:

handler(args1, args2):
  pass

此时,当其被事件触发时,就会默认调用这个handler函数,并将对应的事件数据结构和上下文等作为参数传入。所以,在最初的概念中,Function的概念或许真的就是指一个函数,这个函数有点类似于C语言中的main()

函数并不是函数

但是在实际发展过程中,我们会发现,真实情况下的Function,只是更加抽象的概念,并不是传统的函数概念,而是”对新鲜事物的一种特指“。

例如:

  • 传统的某个语言Runtime为例,在其代码中不仅仅会有函数的入口,还可能存在初始化方法、结束方法,那么这里的函数到底是指的谁,这个事情就说不清楚了;
  • 随着时间的发展,自定义运行时、自定义镜像等概念逐渐被提出,所谓的函数入口逐渐的变成了启动指令,例如阿里云的custom runtime的启动入口实际上是bootstrap中的启动命令,那么此时函数就不再是我们曾经说的函数了;

所谓的”一种特指“,实际上就是说他表示的一个服务,再或者说,他表示的是在Serverless架构下的计算平台中的”计算模块粒度“。这个模块的粒度:

  • 它可以是一个单纯的函数,非常简单的一个方法;
  • 它也可以是一个相对完整的功能,几个方法的结合,例如登录功能;
  • 它还可以是几个功能的结合,形成一个简单的模块,例如登陆/注册模块;
  • 它甚至可以是一个框架,例如在一个函数中,放下整个框架,如express、django等;
  • 它甚至是一个完整的服务,例如某个blog系统(zblog,wordpress)等部署到一个函数中,对外提供服务;

“不求甚解”未尝不可

就我个人而言,在Serverless架构中,对函数的概念、定义,真的不能太较真。因为这个函数,有的时候或许和我们计算机编程的函数有些许类似,但是有的时候,这两者可能毫无关系,过分的纠结“我要将业务迁移到函数计算架构是不是要把业务打成函数的粒度”就太“得不偿失”了。

同样是函数,学习计算机编程的时候有函数,在接触Serverless架构的时候有函数,在学习数学的时候也有函数,此函数非彼函数,每个函数各有妙用,无需“强行对应”,更不必区分个所以然。

坦然面对“函数”

在Serverless架构下,我相对来说是比较推荐“具体情况具体分析、沉着面对”的思路。

往往有很多人在上Serverless架构的时候都在想“我应该如何面对函数“,是“一个服务对应一个函数”还是“一个功能对应一个函数”,再比如是“一个函数对应一个函数”?

其实站在我的角度来看,这个不用过分纠结,我们只需要遵循两个原则即可:

  1. 资源相似原则:所谓的资源相似指的是,当我们某个业务中,所对外暴露的接口是否对资源消耗类似。例如,某个后端服务,对外暴露10个接口,其中9个接口的内存只需要128M,超时只需要3秒;而另一个接口则需要2048M的内存与60秒的超时;此时我们可以认为前9个接口是资源相似的,可以放在“一个函数中实现”,最后一个单独来放到一个函数中实现;
  2. 功能相似原则:所谓的功能相似指的是,当我们一个业务中,功能概念,定义相差非常大的时候,不太建议将这些功能放在一起。例如某个聊天系统,有一个聊天功能(Websocket),还有一套注册/登录功能,如果此时将两者融合到一起,其实在一定程度上会增加项目的复杂度,也不宜与后期管理;可以考虑拆分成聊天函数和注册/登陆函数;

如果说纠结如何面对“函数”,其实我觉得可以把他认为是一种哲学:

业务拆的太细:

  • 函数太多,不易于管理;
  • 业务出现问题,不便于排查具体情况;
  • 会导致很多模块,配置重复使用;
  • 在一定情况下会让冷启动变的比较频繁;

业务耦合的太严重:

  • 现阶段下,容易产生比较大的资费问题;
  • 在高并发的情况下,容易出现流量限制问题;
  • 更新业务代码可能有较大的风险;
  • 不便于调试等;

总结

最不佳实践第一节:用函数要用到“不求甚解”,再到“了然于胸”。使用Serverless架构,不是较真能出效果的,往往“要根据业务具体情况”来进行处理,无论是目标为降低迁移/改造成本,还是说体验技术红利,再或者说是极客风。

Serverless架构没有明确的要求我们怎么做,所以适合自己的就是最好的。不求甚解,也许也是一种“最佳”。

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
3月前
|
消息中间件 缓存 监控
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
在FaaS中,如何设计无状态的函数来确保数据处理的一致性?
|
16天前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
44 10
|
29天前
|
人工智能 Serverless API
尽享红利,Serverless构建企业AI应用方案与实践
本次课程由阿里云云原生架构师计缘分享,主题为“尽享红利,Serverless构建企业AI应用方案与实践”。课程分为四个部分:1) Serverless技术价值,介绍其发展趋势及优势;2) Serverless函数计算与AI的结合,探讨两者融合的应用场景;3) Serverless函数计算AIGC应用方案,展示具体的技术实现和客户案例;4) 业务初期如何降低使用门槛,提供新用户权益和免费资源。通过这些内容,帮助企业和开发者快速构建高效、低成本的AI应用。
73 12
|
1月前
|
Serverless 开发工具 开发者
活动实践 | 西游再现,函数计算一键部署 Flux 超写实文生图模型部署
这些图片展示了阿里巴巴云开发者生态的多个方面,包括开发工具、技术文档、社区交流、培训认证等内容,旨在为开发者提供全方位的支持和服务。
|
1月前
|
存储 弹性计算 关系型数据库
活动实践 | 告别资源瓶颈,函数计算驱动多媒体文件处理测评
本方案介绍了一种高效处理文件的方法,适用于企业办公和社交媒体应用。通过阿里云的函数计算、对象存储OSS和轻量消息队列,实现文件的异步处理,如格式转换和水印添加,有效减轻了核心应用的负担,提高了业务稳定性和资源利用率。方案包括云服务器ECS、云数据库RDS、OSS存储等组件,支持快速部署和资源清理。
|
2月前
|
监控 Serverless 云计算
探索Serverless架构:开发实践与优化策略
本文深入探讨了Serverless架构的核心概念、开发实践及优化策略。Serverless让开发者无需管理服务器即可运行代码,具有成本效益、高可扩展性和提升开发效率等优势。文章还详细介绍了函数设计、安全性、监控及性能和成本优化的最佳实践。
|
2月前
|
弹性计算 算法 搜索推荐
活动实践 | 通过函数计算部署ComfyUI以实现一个AIGC图像生成系统
ComfyUI是基于节点工作流稳定扩散算法的新一代WebUI,支持高质量图像生成。用户可通过阿里云函数计算快速部署ComfyUI应用模板,实现个性化定制与高效服务。首次生成图像因冷启动需稍长时间,之后将显著加速。此外,ComfyUI允许自定义模型和插件,满足多样化创作需求。
|
2月前
|
弹性计算 自然语言处理 搜索推荐
活动实践 | 基于函数计算部署GPT-Sovits模型实现语音生成
通过阿里云函数计算部署GPT-Sovits模型,可快速实现个性化声音的文本转语音服务。仅需少量声音样本,即可生成高度仿真的语音。用户无需关注服务器维护与环境配置,享受按量付费及弹性伸缩的优势,轻松部署并体验高质量的语音合成服务。
|
3月前
|
机器学习/深度学习 监控 物联网
函数即服务(FaaS)
函数即服务(FaaS)
138 6
|
2月前
|
运维 监控 Serverless
揭秘云计算中的Serverless架构:优势、挑战与实践
揭秘云计算中的Serverless架构:优势、挑战与实践