前言
Serverless
从字面拆分 server
以及 less
, 词义推断就是 "少服务的,亦或是无服务器的". 低代码
.
但并不是从应用程序架构
中说没有
服务器资源的,而是通过 Serverless
这种服务形态,用户在使用对应服务的时候,不需要关注服务器的硬件资源,软件资源,稳定性等。因为这些通常都已经由 云计算厂商
提供设施,服务和 SLA保障,完全托管给云计算厂商
。
所以开发人员只需要关注 自己应用程序代码本身, 然后上传执行函数到相应的云计算平台,按照 函数运行的时长
按量付费即可!
主要比较成熟的 Serverless
云产品: Amazon Lambda, Google Cloud Function.
演进
云计算诞生之前,大部分计算资源是处于“裸金属”
状态的物理机
,运维人员选择对应规格的硬件,建设机房的 IDC 网络,完成服务的提供,投入硬件基础建设和维护的成本很高。
云计算
诞生后,用户可以直接购买云主机(VM)
,把基础物理硬件和网络的管理都交由供应商管理,多用户租用一台物理机,但每台云主机对用户来说就像是单独的一台物理机,用户
之间相互隔离
。
这种模式减少了用户硬件管理成本,站在平台的角度,我们通常称之为 IaaS(Infrastructure-as-a-Service
)基础设施即服务
。
随着软件的发展和容器技术的兴起,计算环境由 VM
发展到更小粒度的容器
,在容器中可以运行不同的软件服务,PaaS(Platform-as-a-Service)平台即服务
和 CaaS(Container-as-a-Service)容器即服务
也开始映入眼帘。用户使用平台基础软件
如 Database
、消息
等开发自己的应用,使用容器镜像
构建和部署应用,最后托管
给平台。
此时基础设施的运维更加下沉,开发者只需关注基础软件
和容器
。
继续向前发展,应用的运行演变
为更细粒度函数的运行
,用户开发特定业务的处理函数
,托管给函数平台
,按需使用相关的后端服务
,通过特定条件
的触发
完成开发者业务逻辑
函数的计算
。用户无需为应用持续付费,只需支付函数运行
时产生的资源消耗
费用,而这,就是 Serverless
服务的模型。
Serverless
服务模型中函数的执行时间如何计算.
架构
Serverless
架构由两部分组成,即 Faas
函数即服务 和 BaaS
后端即服务。
FaaS(Function-as-a-Service)即为函数运行平台
,用户无需搭建庞大的服务系统,只需要上传自己的逻辑函数如一些定时任务、数据处理任务
等到云函数平台
,配置执行条件触发器
、路由
等等,完成基础函数的注册。
BaaS(Backend-as-a-Service)包含了后端服务组件
,它是基于 API 的第三方服务,用于实现应用程序中的核心功能,包含常用的数据库
、对象存储
、消息队列
、日志服务
等等。
Serverless
其实是通过事件驱动
的,当一个任务
被触发时
,比如 HTTP 请求,API Gateway 接受请求、解析和认证,传递对应参数
给云函数平台
,平台中执行对应回调函数
,配合 DB
、MQ
等 BaaS 服务
在特定容器
中完成计算,最终将结果返回给用户。
函数
执行完成后,一般会被 FaaS
平台销毁
,释放
对应 容器
,等待下一个函数运行。
优缺点
云厂商强绑定
当你决定使用公有云
的 Serverless
产品时,它们常常会和厂商的其他云产品
相绑定,如对象存储
、消息
等等,这意味你需要同时开通其他的服务,将导致你的应用与平台强绑定
,迁移成本剧增。
- 不适合长时间任务
云函数平台会限制
函数执行时间
,如阿里云
Function Compute 最大执行时长为 10 min
,如果你的任务时间超长,那么你需要拆分编排你的函数执行流程,并在一个函数执行结束时唤起另一个函数执行。这将增加编码的复杂度,而且花费上可能高于购买一个长时间运行的实例。
- 冷启动时间
函数运行时,执行容器和环境需要一个准备的时间,尤其是第一次启动时时间可能会较长。对一个 HTTP 请求来讲,可能会带来响应时延的增加,产生性能毛刺。
- 调试与测试
由于本地环境和平台运行环境的差异性,开发者需要不断调整代码,打印日志,并提交到函数平台运行测试,会带来一些开发成本和产生一些费用。
Serverless
的持续发展,在将来可以使前端更加容易的使用 Node.js
等语言搭建一个完善的应用,只需关注前后端
的业务逻辑本身,而较少关心底层庞大的软硬件系统和运维知识。
未来也可能给前后端
工作流程带来一定变革,比如更统一的技术栈、设计规范和数据结构;更高的开发效率——应用搭建、联调时间的缩短,促使 Web 前端工程师
向 Web 应用工程师
进化转。
如果有侵权,请联系删除!