Serverless是什么?

简介: 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 实战”征稿活动】

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
目录
相关文章
|
人工智能 自然语言处理 安全
国产算力平台的磨砺与革新:助力国内AI走向更高更远
近几年技术圈由人工智能的快速发展,引起来了变革和创新,虽然国外的算力一直是走在最前沿,但是国产算力平台在推动我国AI产业中发挥着重要作用,扮演着重要角色,但要助力国内AI走得更高更远,国产算力平台还需要经历磨砺和革新。那么本文就来分享和讨论一下国产算力平台所需的磨砺和革新,以及这样的平台在国产算力土壤之上能孕育出的AI创新之花。
479 1
国产算力平台的磨砺与革新:助力国内AI走向更高更远
|
4月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
3450 71
|
3月前
|
Kubernetes API 开发工具
深入浅出K8S技术原理,搞懂K8S?这一篇就够了!
本文以“K8S帝国”为喻,系统解析Kubernetes核心技术原理。从声明式API、架构设计到网络、存储、安全、运维生态,深入浅出揭示其自动化编排本质,展现K8S如何成为云时代分布式操作系统的基石。(239字)
1042 4
|
3月前
|
存储 运维 Serverless
Serverless 不是“无服务器”,而是“别再让服务器绑架你的创新”
Serverless 不是“无服务器”,而是“别再让服务器绑架你的创新”
119 11
|
存储 Serverless 数据库
科普文:云计算服务类型IaaS, PaaS, SaaS, BaaS, Faas说明
本文介绍了云计算服务的几种主要类型,包括IaaS(基础设施即服务)、PaaS(平台即服务)、SaaS(软件即服务)、BaaS(后端即服务)和FaaS(函数即服务)。每种服务模式提供了不同的服务层次和功能,从基础设施的提供到应用的开发和运行,再到软件的交付使用,满足了企业和个人用户在不同场景下的需求。文章详细阐述了每种服务模式的特点、优势和缺点,并列举了相应的示例。云计算服务的发展始于21世纪初,随着互联网技术的普及,这些服务模式不断演进,为企业和个人带来了高效、灵活的解决方案。然而,使用这些服务时也需要注意服务的稳定性、数据安全性和成本等问题。
12494 5
|
10月前
|
API PHP 索引
这插件太危险了!PDFParser自动扒取PDF每天躺赚300+的暴利搬运术
本文介绍了如何使用PHP提取PDF文档中的文字内容。为解决PDF文档“不可编辑”或“文本无法复制”的问题,推荐使用免费的PHP库——PDFParser。通过Composer安装后,可利用其简单强大的API解析PDF文件,提取文本内容。文章详细演示了获取PDF基本信息、全文内容、指定页内容及循环输出每页文本的方法,并附带中英文PDF示例,操作简便实用。
405 3
这插件太危险了!PDFParser自动扒取PDF每天躺赚300+的暴利搬运术
|
8月前
|
运维 监控 数据可视化
一文详解:工业软件“低代码开发平台”技术架构研究与分析
本文围绕工业软件低代码开发平台的机遇与挑战,提出基于自动化引擎的技术架构,由工具链、引擎库、模型库、组件库、工业数据网关和应用门户组成。文章分析了其在快速开发、传统系统升级中的应用模式及价值,如缩短创新周期、降低试错成本、解决资源缺乏和提升创新可复制性,为我国工业软件产业发展提供参考和支持。
|
存储 弹性计算 人工智能
弹性计算是一种非常有用的技术
弹性计算是一种灵活的计算资源分配方式,它可以根据应用程序的需求动态地调整计算资源的数量和类型。这种技术可以帮助企业在高峰期处理更多的请求,同时在低峰期释放不必要的资源,从而最大限度地提高资源利用率和降低成本。
340 1
弹性计算是一种非常有用的技术
|
运维 监控 Devops
如何理解DevOps在IT环境中的应用及价值
本文介绍DevOps的定义、适用团队、实施步骤及常用工具链,帮助初创公司实现自动化流程、持续集成与交付,增强灵活性和产品质量,快速响应市场需求。
471 0
如何理解DevOps在IT环境中的应用及价值