Serverless是什么?

本文涉及的产品
函数计算FC,每月15万CU 3个月
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
简介: Serverless是什么?

本篇由来

如果你是一个程序员,你可能在最近这两年或多或少的听到过一堆莫名其妙的名词,例如CaaS、BaaS、FaaS等类似的以aaS结尾的as-a-service名词,同时也可能听到ServiceMesh、Serverless等名词,对于从事相关工作的同学可能知道每个名词都代表什么,但我相信肯定还是会有部分人听到之后是黑人问号脸,我们不具体介绍每个都是什么意思,因为这些概念也出现很早了已经,不明白的可以自行google,这里我们重点聊一下最近挺火的Serverless是个什么鬼,因为我发现我们在日常探讨过程中好像每个人对其理解不一样,也是在听完一次讨论之后有感而发,并不是在抱怨什么,只是想跟大家探讨一下到底什么是Serverless,在继续开展后续工作之前,我认为有必要再统一一下概念,不谈细节,也不扯什么性能,那都是可以优化的,不是不可逾越的障碍。

什么是Serverles

要说Serverless是什么,直译过来就是无服务器。根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。CloudFlare对其定义:

Serverless computing is a method of providing backend services on an as-used basis. A Serverless provider allows users to write and deploy code without the hassle of worrying about the underlying infrastructure. A company that gets backend services from a serverless vendor is charged based on their computation and do not have to reserve and pay for a fixed amount of bandwidth or number of servers, as the service is auto-scaling. Note that although called serverless, physical servers are still used but developers do not need to be aware of them.

google翻译结果:

无服务器计算是一种按需提供后端服务的方法。无服务器提供程序允许用户编写和部署代码,而不必担心底层基础结构。从无服务器供应商处获得后端服务的公司将根据其计算费用,而不必保留和支付固定数量的带宽或服务器数量,因为该服务是自动扩展的。请注意,尽管称为无服务器,但仍使用物理服务器,但开发人员无需了解它们。

Serverless == FaaS?

在我们讨论Serverless的时候,经常能听到FaaS、事件触发之类的词组,但是为啥从官方的定义中丝毫没有看到这些字样呢?FaaS又和Serverless有什么关系呢?

其实这一块业界也没有统一的定义,但是普遍认为Serverless = FaaS + BaaS,可以参考这篇和这篇介绍的内容,通俗的理解一下就是无服务期计算相当于函数计算和后端即服务两种模式的组合,也是就说Serverless和FaaS不是一个概念,这个很重要,这是我们后续讨论和做事情的基础,我们不能简单的认为Serverless就是FaaS,这种理解太狭隘了。可以举个栗子来描述一下为什么这么说,例如已经被大家玩烂了的hello world,当我们写了一段hello world的代码并填写完访问规则后就可以通过FaaS平台部署,然后当我们访问指定Url后可以得到运行结果,典型的函数即服务。但是,又有谁会真正这么用呢,可以说没有任何作用,这只是个单纯的例子(在aws lambda上玩过这个例子的就敢号称使用过serverless产品),在最早的aws lambda官方推荐的使用场景里也都是和其他服务如S3搭配使用。毕竟每个业务都有自己的业务逻辑,或多或少都会涉及到一些基础组件的依赖或者第三方服务的调用(硬要抬杠的话,其实直接把依赖项都打包到一个程序里也不是不可以,但是这么做的人估计也不会用FaaS这种东西),很少或者不会有hello world这种自嗨式的场景,执行完什么记录都没有,单纯打印一下内容就返回的,除非在测试环境或者线下自己玩。而那些被使用的基础组件或服务就是BaaS。说了这么多到底是想说什么呢,其实就是想表达Serverless不等价于FaaS。

关于Serverless许多时髦的词儿都来自FaaS。抛开部署模式,FaaS本质上是事件驱动的途径或者事件流,这就包含两层意思,一层是事件,说到事件,自然联想到各种MQ组件,用MQ来解耦事件的生产者(事件源)和消费者(服务实例或者function),以及一些相关事件类型、触发规则、通知等概念,在这一点上确实和消息中间件有很大关系;另一层是驱动,也就是说是有流量属性的,MQ里的事件要被消费肯定是要经过网络传给消费者的。看起来就是一个用消息队列来解耦生产者消费者的通用模型,根据事先配置好的触发规则拿到想要的事件,执行预先写好的函数。他的关注点在于对用户屏蔽服务器,用户只需要告诉平台触发条件及触发后的逻辑即可,极大的减轻用户的工作量,提升开发效率。

Knative是什么

官方定义如下:Kubernetes-based platform to build, deploy, and manage modern serverless workloads,即基于k8s的,集构建、部署和管理serverless工作负载的平台。它包含三个模块,Build、Serving、Eventing,其中Build已经归档并被Tekton替代,其分别实现容器构建、工作负载管理、事件模型的功能,且分别对应不同的github项目,可以按需独立部署使用。

Knative和Serverless是什么关系

Knative 是通过整合容器构建(或者函数)、工作负载管理(和动态扩缩)以及事件模型这三者来实现的一套Serverless标准。

三个模块各司其职,Eventing制定了FaaS所需要的事件模型标椎,Serving制定了工作负载与外部或内部其他服务之间交互的标准、Tekton制定了容器构建的标准。

Eventing组件正是FaaS的本质,且制定了事件处理标准流程,并且抽象出来event source、broker、trigger等概念,且内置了许多事件源和消息队列,也支持自定义,非常灵活的。用户通过在集群内创建对应的事件源、队列、broker,trigger及service(真正的消费者)即可,其实这些信息在FaaS产品上也是需要配置的,但是由于每个FaaS平台的实现没有统一的标准,所以在lambda上实现的功能无法直接搬到kubeless上使用,这也是为什么knative出现原因,制定标准。

Serving组件主要治理刚才提到的service,这里的service并不仅限于刚才提到的消费者的角色,因为像普通的BaaS服务,或者就是简单的容器服务也是可以注册为一个service来享受Serving组件提供的基于流量或者资源或者自定义指标的动态扩缩容的功能及生命周期管理功能的。

再加上Tekton组件(本身也是service),就形成了一套完整的Serverless生态。例如用户编辑函数并配置触发规则后提交,然后Tekton利用Eventing检测到相关事件后获得代码,按需编译(解释型的不需要),然后制作镜像,推到镜像仓库,并根据配置的触发规则和镜像信息配置好事件源、队列、broker、trigger、service,剩下就是等待事件的到来,最终通过Eventing模块把流量打到对应的service上,但是此时Serving模块发现集群内还没有对应service的实例,于是就会按需启动指定副本数的service实例,请求处理完之后再按需缩容。最后既屏蔽了用户对服务器的感知,减轻了其工作量,提升了效率,又可以根据事件触发,并且按需使用服务器资源,提升资源利用率。在没有流量时甚至可以使用在离线混部的技术跑一些离线任务,在有流量时通过k8s的调度能力缩容一些离线任务的实例,为在线任务腾出资源来,类似容量调度的功能(给你划分的资源你用不了那么多的时候可以给别人用,当你需要的时候再给你,优先保证你够用)。

Knative工作流程展示

接下来我们举个例子来展示一下Knative的工作流程和现在的区别,例如在阿里云上使用Knative实现人脸识别的功能。场景如下:

通过 OSS 控制台上传照片,MnsOss 事件源接收图片上传的事件信息,发送到 Knatvie Eventing,通过Broker/Trigger事件处理模型之后,接着触发 Knative Serving 中的人脸识别服务进行分析。最后把分析之后的图片回传到 OSS。

整个流程就是上图所绘,大家可以体会一下。

应用场景

大家都在思考的共同问题就是Serverless的适用场景及预期的规模,能带来多大收益,以此来判断是否值得做。最终预期的规模和收益其实都和适用场景有关,场景多了,自然规模就大了,也和技术有关,如资源闲着你混部,那自然使用率就高了,降低了整体成本,带来收益的增加。但是具体有哪些适用场景呢,好像也没能说得清楚,一提到Serverless总会被带到FaaS上(无奈)。我们不妨直接去问问需求方到底是为什么想用Serverless的功能,Way社区里就有各团队之前对Serverless的探索,里面也总结过使用场景有哪些,或者网上随便一搜也能搜到很多,再结合实际业务,找出其他的适用场景我想应该没那么难吧。三个前端前端团队都有类似需求,不只是FaaS,还有BaaS等,而且需求方的提的FaaS也不一定就是上面提到的FaaS,有的时候我们理解用户需求不能只听他说了什么,还要看他为什么有这个需求,是想实现什么目的。

对前端的影响

大家一直在探讨前端的边界是什么。现在的前端开发早已不是以往的前端开发,前端不仅可以做网页,还可以做小程序,做 APP,做桌面程序,甚至做服务端。而前端之所以在不断拓展自己的边界、不断探索更多的领域,则是希望自己能够产生更大的价值。最好是用我们熟悉的工具、熟悉的方式来创造价值。

而 Serverless 架构的诞生,则可以最大程度帮助前端工程师实现自己的理想。使用 Serverless,我们不需要再过多关注服务端的运维,不需要关心我们不熟悉的领域,我们只需要专注于业务的开发、专注于产品的实现。我们需要关心的事情变少了,但我们能做的事情更多了。

Serverless 也必将对前端的开发模式产生巨大的变革,前端工程师的职能也将再度回归到应用工程师的职能。

为什么进行的不顺畅

因为认知不同。为什么认知会不同呢,...此处省略1000字。Whatever,结果就是大家认知不同,讨论的时候相较于倾听,又比较喜欢发言,so...

团队分工

...此处省略1万字

 

总结

如果要用一句话来总结 Serverless,那就是 Less is More。

【本文正在参与 “100%有奖 | 我的Serverless 实战”征稿活动】

相关实践学习
【文生图】一键部署Stable Diffusion基于函数计算
本实验教你如何在函数计算FC上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。函数计算提供一定的免费额度供用户使用。本实验答疑钉钉群:29290019867
建立 Serverless 思维
本课程包括: Serverless 应用引擎的概念, 为开发者带来的实际价值, 以及让您了解常见的 Serverless 架构模式
目录
相关文章
|
运维 Serverless 持续交付
|
2月前
|
存储 物联网 Serverless
什么是Serverless
Serverless是一种云计算架构模式,让开发者通过第三方服务直接构建和部署应用。在此模式下,应用被分解为无状态函数,由云平台统一管理。开发者仅需关注业务逻辑编写,无需管理底层服务器及基础设施。这种方式具有诸多优点:无需管理服务器,可专注业务逻辑;能够根据负载自动调整资源,实现按需计费;具备高可用性和灵活性,并支持多种编程语言。此外,Serverless应用按需启动和停止,无请求时不消耗资源,进一步提高了效率和成本效益。已被广泛应用于Web应用、移动应用、数据分析和物联网等领域。
206 3
|
5月前
|
弹性计算 运维 监控
体验Serverless架构
体验Serverless架构
|
7月前
|
运维 Cloud Native 安全
Serverless是什么
小陈向大刘请教Serverless,了解到Serverless是种云原生开发模式,重点在于FaaS(函数即服务)和BaaS(后端服务),让开发者专注于业务逻辑,而无需管理服务器等基础设施。Serverless并非无服务器,而是将服务器运维工作交给云厂商。FaaS是代码托管服务,例如阿里云的函数计算,提供敏捷、弹性、可靠且成本效益高的计算服务。BaaS则是通过API调用第三方服务,如数据库访问。Serverless与传统架构相比,减少了开发者的负担,提高了效率,降低了成本,并增强了安全性。
702 6
|
7月前
|
运维 Serverless 虚拟化
为什么需求Serverless
公司计划在网站上引入AIGC技术以增强用户互动,但担忧开发周期长和成本高。技术负责人建议使用Serverless技术,这种模式允许只关注核心代码开发,减少资源管理和运维成本,适应快速、低成本的需求。小陈将负责调研Serverless在AIGC应用中的可行性,以实现更高效、节省资源的开发。Serverless的核心是让开发者专注于业务逻辑,减少非必要技术问题的处理,符合开发人员期望的开发模式。
83 6
|
7月前
|
弹性计算 运维 Java
Serverless 应用引擎产品使用之在Serverless 应用引擎中,将 Java 应用从 ECS 迁移到 SAE如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
110 2
|
7月前
|
弹性计算 Kubernetes Serverless
Serverless 版 ACK Serverless 是
阿里云容器服务 Serverless 版 ACK Serverless 是一种基于弹性计算基础架构的容器服务,它兼容 Kubernetes 生态,允许用户在无需管理和维护集群的情况下,快速创建和部署容器化应用程序。ACK Serverless 根据应用程序实际使用的 CPU 和内存资源量进行按需付费,使您能够更专注于应用程序本身,而无需担心底层基础设施。
180 2
|
存储 安全 物联网
Serverless 是什么?
Serverless 是什么?
170 0
|
开发框架 JavaScript Java
Serverless Devs
Serverless Devs
|
弹性计算 监控 Java
Serverless
Serverless应用引擎SAE(Serverless App Engine)是一个全托管、免运维、高弹性的通用PaaS平台。SAE支持Spring Cloud、Dubbo、HSF、Web应用和XXL-JOB、ElasticJob任务的全托管,零改造迁移、无门槛容器化、并提供了开源侧诸多增强能力和企业级高级特性。
123 3

热门文章

最新文章