对于 Serverless, DevOps, 多云及边缘可观察性的思考与实践
从单体到微服务,再到 Serverless,应用在逐渐地轻量化。有人可能会有疑问,微服务都还没有顺畅的搭建起来,现在又出了 Serverless,应该怎么办?
其实两者之间并不是一个相互替代的关系。我们可以看到,现在有单体应用在跑,也有微服务的应用在跑,那么以后 Serverless 这种应用也会有一定的用途。而微服务里也可以调用 Serverless 的函数(function)。
Serverless 定义
Serverless 类似于之前大数据的概念,大家都知道,但不是特别确切了解其中的含义。
CNCF 有一个 Serverless 工作组,在 Serverless 的白皮书中进行了定义。简单来讲就是,Serverless 等于 FaaS(Function-as-a-Service) 加上 BaaS(Backend-as-a-Service)。我们可以将应用程序以函数的形式打包,然后上传到 FaaS 平台。这样我们就不用关心底层服务器的运维,因为它能自动扩展,而且是按需收费。
Serverless 有一个很重要的特征,就是事件驱动模式,即依赖于外部事件去触发它运行。
至于 Backend-as-a-Service,你可以理解成支撑 Serverless 运行的一些 API 的服务,比如对象存储或者是数据库服务。
Serverless 处理模型
下图是 Serverless 的处理模型。上文讲到,它的模式是事件触发,所以它会有事件源产生事件,然后 FaaS 的 controller 是根据这些事件去启动 function 的 instance,而且能够实时的去扩展,能够 scale 到 0,这样动态的去给用户提供服务。
函数生命周期
函数(function)是有生命周期的,也就是函数部署流水线的流程。首先提供 function 的源码和 spec,然后把源码 build 成 docker image,再把 docker image 部署到 FaaS 平台上。
涉及到函数,肯定会有函数的创建、更新、发布等操作,因篇幅关系,这里就不再赘述了。
Serverless 应用场景
对 IoT 设备数据进行分析
目前边缘计算,还有 IoT 的应用都在逐渐地兴起。 比如 IoT 中的一个传感器,它会源源不断的产生一些数据(例如传感器温度超过了 60 度),我们可以调用一个云端的函数来处理这件事情(发个通知或者做一个应用)。所以 Serverless 和 IoT 这个场景可以很好地结合起来。
AI 模型服务
AI 也在逐渐兴起。边缘或者是云端提供模型的服务,因为很多模型的推理都要占用 GPU,所以如果一直占用 instance,非常耗费资源,而且还增加了成本。但是如果用 Serverless 这种方式去提供服务,比如利用 Kubeflow 项目下的 KFServing 提供推理服务,在空闲的时候可以 scale 到 0,有流量的时候会自动 scale up 起来,所以能很好地节省成本。
其他场景见上图,因为篇幅关系不再一一展开讲述。
Serverless 优势
- 降低成本
- 提高资源利用率
- 无需关系底层基础设施的运维及管理
- 灵活可拓展
- 提升开发效率
开源 Serverless 平台
我们针对开源的 Serverless 平台做了一个调研。下图中列出的都是开源的 Serverless 平台,可以分为两类,一类是 Knative,另一类就是非 Knative。
为什么这么分类呢?因为上文讲到,Serverless 主要就是有一个 FaaS 的功能,但 Knative 并不是一个严格意义上的 FaaS 平台,而其他开源的 Serverless 平台都属于 FaaS 平台。
下图是在 Google trend 上查询到的数据。在过去一年中, Knative 的热度基本是最高的,OpenFaaS 的热度在 FaaS 平台中是比较靠前的。而过去 5 年的数据也类似,可以说,Knative 自问世以来,热度一直居高不下。
下图是 CNCF 去年做的一个调查,调查显示,在可安装的 Serverless 平台里,Knative 是比较领先的,然后 OpenFaaS 在 FaaS 平台里是比较领先的。
Knative 的优势
大家可能会有疑问,上文说到 Knative 并不是一个严格意义上的 FaaS 平台,那么它为什么在 Serverless 领域会这么受欢迎呢?
有以下几个原因:
- Serverless 有几个要素,首先它是事件驱动的,所以它要对事件有很好的支撑。通过 Knative Eventing,可以对事件的管理有很好的支持,也形成了一套 cloudevent 规范,用于 Serverless 负载的交互。
- 我们上文讲到了,它需要把函数的源码去 build 成一个 docker 镜像,所以它也要有 build 的能力。之前这个组件叫knative build,现在叫 Tekton。然后在函数发布的时候,可以利用 Knative serving,进行部署和版本管理。也就是说 Knative 是一个平台的平台。基于 Knative,你可以去构建更多的 Serverless 平台或者 FaaS 平台。
- 之前大家对 Knative 比较诟病的地方,就是它比较重,因为它依赖于Istio。Knative 自身的安装,可能也就几十兆,但是装上 Istio 之后,会占用几 g 内存。然而目前它已经不再强依赖于 Istio 了,Istio 只是其中一个选项。你也可以使用别的组件,比如 ambassador、Gloo、Kong 去替代它做 API Gateway。这意味着 Knative 也在逐渐的轻量化。
Serverless DevOps
函数要 build 成镜像会有一个 build 的过程,那么在 devops 里这个过程就是持续交付。然后把镜像部署到生产环境,在 devops 里面这个过程就是持续部署,所以 Serverless 和 DevOps 也有很多结合点。
Serverless CI
Serverless 的 CI 也是需要的,但是因为它是函数,不是一个完整的 source code,所以它有一些不一样的地方。但是肯定也需要代码的质量扫描、单元测试这样的工作。
Serverless CD
对于 Serverless CD,build 的过程也就是函数的创建过程,会自动的把这个函数打包成镜像,这是由 FaaS 平台去完成的工作。
如果要将函数镜像发布到生产环境,需要进行审核。
Serverless CI/CD 工具
build 的过程,我们可以依赖于 tekton 去管理流水线。但是从 kubernetes 1.20 开始,不再支持 docker 作为它默认的一个运行时了,也就是说以后 kubernetes 里可以不安装 docker daemon。
CNCF 官方的文档中,推荐了几个 build docker 镜像的工具,比如 Kaniko,img,buildah。他们各有各的优劣势,但是有一个共同点,就是不依赖于 docker daemon。你可以用 Kaniko 在 docker 里面 build 一个 docker 镜像,但是不需要连接 docker daemon。
另外一个比较新兴的工具是 Cloud Native Buildpacks,它更进一步,连 Dockerfile 都不需要了,根据源码就能检测出来,然后能够 build 出一个 docker 镜像。很多国外的公司,比如 Google、Pivotal,都在使用 Buildpacks。
Serverless/FaaS 痛点
目前有很多云厂商,而且几乎每个云厂商都有自己的函数平台。开源平台又有很多。所以大家会面临应该如何选择的问题,另外也会有厂商锁定的问题。
KubeSphere Serverless 路线图
我们做 Serverless 有一个想法,能不能做一个厂商中立的 FaaS 平台?它是一个平台的平台,你可以基于它去构建自己的 FaaS 平台。
通过 KubeSphere Serverless 平台,你可以在 kubernetes 里边去运行各个云厂商的云函数,运行开源 FaaS 平台的云函数。当然,运行云厂商的云函数有个前提,就是它的 runtime 必须是开源的。
KubeSphere Serverless 平台大概率也会开源,到时候希望社区的小伙伴能够积极的参与进来。
另外一个就是 Serverless 的应用,你可以把它想象成一个 deployment + service 的替代品。它有一个额外的能力,就是可以动态的扩展,然后它也能够 scale 到 0。简单来讲,你可以提供一个 docker 镜像,然后你就拥有了一个能够自动伸缩的 service。
多云及边缘可观察性
KubeSphere 在 3.0 版本中已经支持了多集群的管理,将会在 3.1 版本中支持边缘计算。所以这就产生了一个话题——多云及边缘计算的可观察性。
需求和挑战
多云及边缘集群的全局视图
很多用户使用 KubeSphere 管理多集群,希望能在一个统一的界面看到各个集群使用资源的情况。目前这个功能还在开发中。
也有社区用户反馈,KubeSphere 已经支持联邦的 federated 的这种调度,能不能在一个界面看到 federated 联邦的部署,各个集群里边,对运行的资源的占用情况,这也是一个需求。跨集群监控指标
workspace 可能是跨了几个集群,那么能不能在一个界面里面看到 KubeSphere 在 workspace 中跨集群的资源的使用情况?多云及边缘集群的全局告警
因为边缘节点的资源是比较受限的,边缘集群的监控和告警怎么解决?网络状况各有不同
每个集群的特点都不一样。有的集群能够连接外网,也能够被外网连接。有的集群只能访问外网,不能够被 Host 集群主动连接。
架构
针对 Member 集群的连接方式,如果是像上图中左上角这样的集群,它只能连接外网,我们就可以用 prometheus 通过 remote write,把监控数据写到 Host 集群的存储上去。
对于上图中左下角的集群,可以双向访问,可以直接查询数据,然后到 Host 集群上做一个聚合,这样就能够把多集群监控的数据展现出来了。
有的用户尤其是企业用户,在单个集群上存储的数据可能不是很多,如果只想存一两年应该怎么办呢?
还有一个方案就是可以把它存储到对象存储中。Host 集群上也可以去查对象存储里时间比较久远的监控数据。
以上是监控的解决方案,那么告警是怎么解决的呢?
各个集群可以有自定义的告警,KubeSphere 3.1 会支持这个功能。对于 Host 集群,也可以做对于全局的监控指标的告警。KubeSphere 也有一些自己研发的组件,比如 Kube-Events、Kube-Auditing,这些组件也会发出一些告警,发到 Alertmanager 中,最后通过 Notification Manager 发到云端。
对于边缘集群,它的资源比较受限,它的配置通常是两核 4 g、一核 2 g,如果去使用 prometheus 往云端发送数据,资源占用会比较多。
对于边缘节点,它的带宽较小,如果源源不断的把监控数据传输到云端,会浪费带宽。
我们的想法是,可以利用一些边缘的流失处理组件,比如 EMQ 的 Kuiper 这样的组件,然后配合我们云端下发告警的规则,能够实时的把边缘的一些设备、节点的数据进行实时的过滤。当超过了阈值,就发到云端告警。这就是对边缘节点的支持。
对于 Serverless, DevOps, 多云及边缘可观察性的思考与实践的更多相关文章
- 技术分享预告丨k3s在边缘计算中的应用实践
技术分享是在[Rancher官方微信技术交流群]里以图文直播+QA实时互动的方式,邀请国内已落地经验的公司或团队负责人分享生产落地的最佳实践.记得添加微信小助手(微信号:rancher2)入群,实时参 ...
- 跨国合作:Serverless Components 在腾讯云的落地和实践
导语 | Serverless Components 是 Serverless Framework 推出的最新解决⽅案,具有基础设施编排能⼒,开发者通过使⽤ Serverless Components ...
- 红灯区:DevOps 建设的思考和实践
点击关注"有赞coder" 获取更多技术干货哦- 作者:费解 团队:效能改进 背景 众所周知,在丰田精益生产中,核心观念包含对人的尊重.消除浪费.持续改善,只有这样,企业才能保持良 ...
- DevOps - 从渐进式交付说起(含实践 Demo)
作者:CODING - 王炜 1. 开篇 如果让你主导一款千万.甚至亿级用户产品的功能迭代,你会怎么做?你需要面对的挑战可能来自于: 商业战略的变化带来新的产品诉求,而产品的任何改动哪怕仅是界面调整, ...
- The New Stack:KubeEdge将Kubernetes的能力延伸至边缘
3月29日,权威技术分析网站The New Stack在Edge/IoT专栏发表了关于边缘计算项目KubeEdge的最新调研报告.原文观点如下: https://github.com/kubeedge ...
- 阿里云王广芳:5G时代,我们需要怎样的边缘计算?
7月24日阿里云峰会开发者大会的IT基础设施云化专场中,阿里云边缘计算高级技术专家王广芳进行了边缘节点服务重大升级发布,同时与现场观众一同探讨了5G时代边缘计算的思考与技术实践. 5G时代,我们需要怎 ...
- AWS的边缘计算平台GreenGrass和IoT
AWS的边缘计算平台GreenGrass和IoT 为什么需要有边缘计算? 如今公有云和私有云平台提供的服务已经连接上了绝大多数的桌面设备和移动设备.但是更多的设备比如,车辆,工程机械,医疗设备,无人机 ...
- 边缘计算k8s集群之SuperEdge
什么是边缘计算? 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平台,就近提供最近端服务.其应用程序在边缘侧发起,产生更快的网络服务响应,满足行业在实时业务.应 ...
- Serverless 对研发效能的变革和创新
作者 | 杨皓然(不瞋) 对企业而言,Serverless 架构有着巨大的应用潜力.随着云产品的完善,产品的集成和被集成能力的加强,软件交付流程自动化能力的提高,我们相信在 Serverless 架构 ...
- 如何用Serverless让SaaS获得更灵活的租户隔离和更优的资源开销
关于SaaS和Serverless,相信关注我的很多读者都已经不陌生,所以这篇不会聊它们的技术细节,而将重点放在SaaS软件架构中引入Serverless之后,能给我们的SaaS软件带来多大的收益. ...
随机推荐
- 并行化强化学习 —— 初探 —— 并行reinforce算法的尝试 (中篇:强化学习在大规模仿真环境下单步交互并行化设计的可行性)
本篇博客是前篇博客并行化强化学习 -- 初探 -- 并行reinforce算法的尝试 (上篇:强化学习在多仿真环境下单步交互并行化设计的可行性)的继续,文中代码地址为:https://gitee.co ...
- ubuntu 18.04系统下CPU实时频率查看工具 cpupower
1. cpupower 安装 sudo apt install linux-tools-common 2. CPU实时频率查看 watch -n 1 sudo cpupower monitor ...
- 解锁GraphRag.Net的无限可能:手把手教你集成国产模型和本地模型
在上次的文章中,我们已经详细介绍了GraphRag的基本功能和使用方式.如果你还不熟悉,建议先阅读前面的文章 通过前两篇文章,相信你已经了解到GraphRag.Net目前只支持OpenAI规范的接口, ...
- [COCI2015-2016#1] RELATIVNOST 题解
前言 题目链接:洛谷. 这道题有很多做法,但是模拟赛寄了,故记之. Update on 2024.7.23 修复了一处时间复杂度的笔误. 题意简述 给你两个长为 \(n\) 的序列 \(A\) 和 \ ...
- .NET8 Blazor 从入门到精通:(二)组件
目录 Blazor 组件 基础 路由 参数 组件参数 路由参数 生命周期事件 状态更改 组件事件 Blazor 组件 基础 新建一个项目命名为 MyComponents ,项目模板的交互类型选 Aut ...
- Linux字节对齐的那些事
最近一口君在做一个项目,遇到一个问题,ARM上的threadx在与DSP通信采用消息队列的方式传递消息(最终实现原理是中断+共享内存的方式),在实际操作过程中发现threadx总是crash,于是经过 ...
- linux下开发编辑器vim常用指令
1.vim的3种模式:编辑模式.插入模式.命令行模式(最后一行模式) 编辑模式:对代码的修改(复制.粘贴.剪切 插入模式:用户编辑代码等等) 命令行模式:保存 退出 另存为等 vim3种模式的切换 最 ...
- github拉取项目执行npm i 失败的问题
一般卡在core-js没反应,然后报错的第一行是和node-sass有关的,基本上都是node-sass版本问题,这时候只需要在命令行输入两行代码就行 先把原来的依赖删掉 npm uni node-s ...
- ES6操作数组的7中方法
ES6操作数组目前共有7中方法,分别是:forEach.map.filter.find.every.some.reduce forEach方法:对数组的每个元素执行一次提供的函数 1. forEach ...
- 将文件的换行符由 CRLF 转换为 LF
在 DOS/Windows 文本文件中,换行,也称为新行,是两个字符的组合:回车(CR)后跟一个换行(LF).在 Unix 文本文件中,一行的换行是单个字符:换行(LF).在 Mac 文本文件中,在 ...