对Serverless的一点理解和思考

简介: 什么是Serverless,不同的Serverless云服务商各有什么特色

什么是Serverless

技术圈新鲜的词汇和概念层出不同,有些是新的理念,有些是新瓶装旧酒,还有就是已经广泛应用了但是最近才理论抽象化的。

那么Serverless是什么?

Serverless还真算不上一个全新的词汇。从字面上看就是无服务器的意思,最早的时候就是单纯指不需要服务器端的软件,绝大部分本地软件都属于这个范畴。

到了云时代,这个词就囊括了不需要关心服务器的相关技术和服务,比如使用了LeanCloud作为数据库,使用了Auth0作为用户认证服务等。此类服务对于使用者而言屏蔽了服务器等概念,一般也称为Baas(Backend as a Service)。Baas更偏向于服务外包,因为不管是服务器还是内在代码本身都是不透明的,使用者也无法感知。

再进一步,Faas(Function as a service)出现了,即函数服务/函数计算。这里的函数就是一个代码块,这个代码块没有明确的定义,但是在实际使用了为了响应速度,这个代码块的冷启动时间必须在毫秒级。

这样就可以在只有需要的时候才调用,做到按需运行,按量扣费。结合云服务商的其他服务,实现多种方式驱动和调度,做到真正的无服务化。当然这里的无服务化只是针对使用方而言的。

实现这个的本质其实是将一部分或者说一大部分控制都托付给了云服务商。Faas让开发者专注于业务逻辑本身,实际上也只有业务代码本身是开发者受控制,其运行环境,预热时间,缓存机制等都不再受控。

所以说Faas是Serverless的一种,而且CNCF也将提供Faas和Baas中一种或两种的服务商算作Serverless服务商。但是因为Faas的变革性更大,目前很多场合基本混用Serverless和Faas两者。

所以本文接下来讨论的Serverless专指Faas,中文也有函数计算,云函数,无服务器计算等称呼。

Serverless的服务商绑定问题

对于公有云平台的任何技术,使用者的主要顾虑就是单一服务商绑定。

因为一旦绑定,将造成数据和业务迁移困难,后续发展可能缺乏选择。还需要考虑云平台出现故障的情况,是否有异构容灾能力,是否会对业务造成不可逆的影响等。

虽然乍一看,因为业务代码是受控的,且不依赖特定环境,Faas似乎不像Baas那样有绑定问题,但是仔细看Serverless的使用范围不光受代码语言影响,更重要的是驱动的事件。

对于部署的函数,最终都需要使用云服务商提供的事件来驱动。

来看下使用Serverless的简要步骤:

  1. 编写函数,并发布到云
  2. 声明事件触发器,由事件触发器触发函数
  3. 云服务商的基础设施监控事件触发器,在触发时分配必要的资源和运行环境给对应的函数,执行函数

云服务商提供的事件类型越丰富,Serverless的适用面越广。比较通用的事件是HTTP调用和定时调度,其他大部分都是云服务商独有的,所以Serverless是存在较大绑定性的。

Serverless的服务提供者

从Amazon在2014推出Lambda至今已有5年,各大云服务商基本都是陆续跟进提供了Serverless服务。

主流大玩家们包括:AWS Lambda,Azure Functions,Cloud Functions,国内阿里云,腾讯云,华为云等都提供类似服务。

还有一派自然是开源类型的,需要自建Serverless平台,包括:IBM OpenWhisk,kubeless,knative等。

云服务商中对于语言的支持基本类似,包括主流的Java,Python,Nodejs,AWS Lambda还支持C#,Ruby,Go等,应该是支持语言中最多的。

事件类型方面是云服务商强绑定的,比如阿里云支持OSS事件触发器,HTTP 触发器,定时触发器,MNS 主题触发器,Table Store触发器,RDS 触发器,CDN 事件触发器,SLS 触发器等,而AWS Lambda支持的事件更多,应该是所有厂商中整个生态最完整的,具体支持的事件列表可以参考官方文档。

Serverless常用场景

目前公认的Serverless常见的使用场景包括:

  1. 异步,并发,易于并行化为独立的工作单元
  2. 不经常或有零星的需求,在扩展要求方面存在巨大的不可预测的差异
  3. 无状态,短暂的,对初次冷启动时间没有强需求

多媒体处理是Serverless最早的例子,当用户上传多媒体到云存储,云存储发出事件驱动函数,进而对多媒体进行转码,压缩等操作。

除此之外以下场景也可以考虑使用

  1. 数据库更改数据捕获
  2. 物联网传感器传入数据
  3. 大规模流处理
  4. 批处理作业
  5. 计划任务
  6. 聊天机器人/客服机器人
  7. 部分HTTP REST API Web应用程序
  8. 部分移动应用

写在最后

因为Serverless对于开发,测试还有部署流程都有很大的变动,且相对较新,所以各大云厂商都提供了一定程度的免费额度以供使用。

AWS Lambda与阿里云函数计算的免费套餐基本相同,都是
调用次数:每月前 100 万次函数调用免费。
执行时间:每月前 400000(GB*秒) 费用免费。

参考阅读

https://skyao.io/learning-serverless/introduction/cncf-whitepaper.html
https://martinfowler.com/articles/serverless.html

相关实践学习
函数计算部署PuLID for FLUX人像写真实现智能换颜效果
只需一张图片,生成程序员专属写真!本次实验在函数计算中内置PuLID for FLUX,您可以通过函数计算+Serverless应用中心一键部署Flux模型,快速体验超写实图像生成的魅力。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
存储 容器
科普:如果电容器阻断直流电,为什么还要在直流电路中使用电容器?
如果电容器阻止直流,那么为什么它用于直流电路?问题不应该是为什么,而是如何!电容器在直流电路中有许多应用,如旁路、滤波、耦合和去耦。因此,利用这种阻隔直流和通过交流的特性,电容器可用于不同的应用。这取决于它连接到电路的方式、电容值、信号频率、电压和其他几个因素。
2872 0
科普:如果电容器阻断直流电,为什么还要在直流电路中使用电容器?
|
存储 分布式计算 Hadoop
impala入门(一篇就够了)
impala入门(一篇就够了)
728 0
|
11月前
|
存储 网络安全 PHP
在阿里云服务器上如何搭建网站,网址怎么建站图文教程详解案例及步骤.
做好一个网站不仅需要我们对站点装修及内容发布,也需要我们学会对网站运营,如进行站长推送,将我们内容快速推送到各大搜索平台,有效的让用户能搜索到我们内容,或者需要在谷歌推广就必须对网站添加SSL证书,这样搜索域名的时候搜索框不会出现<不安全>字符在域名前面,以及运行网站要懂运维,出现BUG时要去及时解决查找原因.自始至终自身要不断学习网络相关知识,遇到问题方能迎刃而解. 本文结束,如还有不懂的同学可联系作者,倾力而为,祝您成功!
2340 75
|
10月前
|
存储 人工智能 Cloud Native
【发布实录】云原生+AI,助力企业全球化业务创新
本文介绍了阿里云在云原生与AI结合领域的最新产品发布和技术创新。首先,通过弹性智能的一体化架构,阿里云为AI场景提供了开箱即用的云原生能力,助力企业出海。其次,详细解析了云原生如何助力AI应用构建,包括Function AI平台、GPU极速模式、MCP Server开发托管及AI网关等核心功能。
|
存储 编解码 网络协议
Android平台GB28181执法记录仪硬件选型和国标技术实现探讨
前几年,我们在做Android平台GB28181设备接入模块的时候,第一个使用场景想到的就是用在公检法应急指挥等场景下的执法记录仪,本篇blog,我们主要围绕Android平台GB28181执法记录仪的硬件选型、设备接入、音视频流配置、流媒体传输、存储和管理、控制与控制中心等方面进行设计,探讨下Android平台GB28181设备接入模块在执法记录仪行业的应用。
578 1
Android平台GB28181执法记录仪硬件选型和国标技术实现探讨
|
JavaScript 前端开发 安全
【JavaScript】深入理解 let、var 和 const
掌握这些关键字的使用可以提高代码的可读性和可维护性,避免潜在的变量提升和作用域问题。希望本文能帮助您更好地理解和应用 JavaScript 中的变量声明方式,编写出更高质量的代码。
603 20
|
UED 开发者
鸿蒙next版开发:ArkTS组件通用属性(多态样式)
在HarmonyOS 5.0中,ArkTS的多态样式(stateStyles)功能允许开发者根据不同状态(如正常、按压、禁用、聚焦、选中等)为组件设置不同的样式,从而提供更丰富的用户体验。通过stateStyles属性,可以动态改变组件样式,提升用户交互的直观性和界面美观性。示例代码展示了如何为文本组件设置正常和按压状态的样式。
741 1
|
NoSQL Java Redis
Redlock分布式锁高并发下有什么问题
Redlock分布式锁在高并发场景下可能面临的问题主要包括:网络延迟、时钟偏移、单点故障、宕机重启问题、脑裂问题以及效率低等。接下来,我将使用Java代码示例来说明其中一些问题。
507 12
|
Java Android开发 开发者
【编程进阶知识】精细调控:掌握Eclipse JVM参数配置的艺术
本文详细介绍了如何在Eclipse中配置JVM参数,包括内存的初始和最大值设置。通过具体步骤和截图演示,帮助开发者掌握JVM参数的精细调控,以适应不同的开发和测试需求。
397 1
|
监控 JavaScript 安全
DOM Based XSS的防范措施有哪些
【8月更文挑战第25天】DOM Based XSS的防范措施有哪些
410 3