serverless 和 faas-编程思维

参考FaaS(函数即服务) + BaaS(后台即服务)、拉钩教育《玩转 Serverless 架构》课程、Faas,又一个未来?

Serverless 说白了,就是一种不用关心服务器的架构思想,开发者可以不关心除业务代码之外的事情,进而提高业务的迭代效率,使用的云服务也是用多少付多少,从而节省成本。总的来讲,Serverless 对开发者研发方式的影响是巨大的。

因为基于 Serverless,后端工程师不用再关心系统运维,可以专注于业务开发,深入业务细节,使业务快速迭代,帮助业务成功。

说到 Serverless,就不得不说云计算,因为云计算的发展史就是 Serverless 的兴起史。纵观云计算的历史,我们可以将其分为物理机时代、虚拟机时代、容器时代、Serverless 时代
物理机时代,网站上线和稳定运行面临的最大问题就是服务器等硬件问题,你既要购买服务器,还要承担服务器的场地、电力、网络等开销,并且还需负责服务器的维护。好在随后几年随着虚拟化技术逐渐成熟,云计算逐渐进入虚拟机时代,这也给我们带来了希望。

云产品常见分层

Iaas

最初云厂商都是卖硬件,AWS 的 EC2、阿里云 ECS、Azure Virtual Machines,这种云计算形态也被叫作 IaaS(基础设施即服务)

Paas

在裸机上部署操作系统后就是 Paas,提供了一个可运行环境

Saas

后面随着业务形态发展,云厂商发现可以抽象出一些通用的平台,比如中间件、数据库等,于是就把这些功能做成服务,也放在云上去卖,这就是 SaaS。
云数据库有专门的服务器,并且还提供了备份容灾,比自己在服务器上安装数据库更稳性能更强。
对象存储能无限扩容,不用担心磁盘不够了。

这样一来,服务器就只负责处理用户的请求,把计算和存储分离开来,既降低了系统负载,也提升了数据安全性。并且单机应用升级为了集群应用,通过负载均衡,会把用户流量均匀分配到每台服务器上。

不过在服务器扩容的过程中,你还是会遇到一些麻烦。 比如购买服务器时,会发现之前服务器型号没有了,只有新的型号,并且每次新扩容一台服务器,都需要在上面初始化软件环境和配置,还需要保证所有服务器运行环境一致,这是个非常复杂还容易出错的工作。

总的来说,虚拟机可以让你不用关心底层硬件,但是如果能让我们不用关心运行环境就更好了。于是,容器技术诞生了。

容器时代

你还使用了 Kubernetes 来做管理容器集群。基于 Kubernetes 和云厂商提供的弹性能力,你可以实现网站的自动弹性伸缩。目前使用 k8s 的成本还比较高,还需要开发者自己去维护集群,编写繁多的 YAML 来部署应用。
问题:
1、因为你需要去规划节点和 Pod 的 CPU、内存、磁盘等资源,需要编写复杂的 YAML 去部署 Pod、服务,需要经常排查 Pod 出现的异常,需要学习专业的运维知识。
2、容器扩缩容时间长,不能实现秒级扩缩容。

Serverless

在 Serverful 的架构下,开发首先需要分配或找到可用的资源,然后加载代码和数据,再执行计算,将计算的结果存储起来,最后还需要管理资源的释放。

现阶段关于 Serverless 的实现主要是基于 FaaS(函数即服务) 和 BaaS (后端即服务)的方案。
FaaS 提供了运行函数代码的能力,并且具有自动弹性伸缩。基于 FaaS,我们应用的组成就不再是集众多功能于一身的集合体,而是一个个独立的函数。每个函数实现各自的业务逻辑,由这些函数组成复杂的应用。

BaaS(Backend as a service),“后端即服务”, 是将后端能力封装成了服务,并以接口的形式提供服务。比如数据库服务、文件存储服务等。通过 BaaS 平台的接口,我们运行在 FaaS 中的函数就能调用各种后端服务,进而以更低开发成本实现复杂的业务逻辑。

有了 IaaS,我们不需要关注物理机;有了 PaaS,我们不需要关注操作系统;有了容器,我们不需要关心运行环境;而 Serverless 技术的出现,能够让我们不再关心传统的运维工作,让我们更专注于业务的实现,把时间精力花在更有意义的事情上,让我们以更快的速度、更低的成本完成应用的开发迭代,进而创造出更大的价值。

谁在维护serverless的底层

使用 Serverless 有两个途径,一是使用公有云 Serverless 产品,二是自己私有化部署 Serverless 平台。
如果使用公有云 Serverless 产品,底层机器全都由云厂商维护。Serverless 的弹性能力也由云厂商实现。缺点就是你需要依赖云厂商。
如果在自己的服务器集群上部署 Serverless 平台(私有化部署),但这样就需要自己维护底层机器了,运维成本和经济成本都很高。

为什么没有提到Saas

SaaS 的话,是厂商直接提供软件服务,用户花钱购买使用,也就不用自己设计网站架构了

Pod(容器组)是Kubernetes项目的原子调度单位

serverless为什么能实现秒级切换

k8s 的弹性有两种,一种是 Pod 的伸缩,快的话可能几秒钟,这与镜像大小、网络环境等因素有关,并且每次 Pod 扩容都是创建一个全新的 Pod;另一种是节点的伸缩,需要创建新的机器,通常需要几分钟,而 Serverless 则不需要我们关心机器。所以整体上,我认为 Serverless 是秒级弹性伸缩,而 k8s 是分钟级。
一方面是优化了容器本身的启动速度,另一方面是通过容器重用、执行上下文重用等方案,尽可能避免从零初始化一个容器,这样 Serverless 函数就可以实现几十毫秒甚至几毫秒的弹性伸缩。

Severless和容器的关系

目前绝大多数 Serverless 平台底层实现,都是基于容器技术的,Serverless 平台可以基于容器技术实现函数的资源隔离、CPU 和内存限制等。

Serverless的特点

Serverless 架构的主要特点是按量付费、弹性伸缩、不用运维

无状态。基于 FaaS 和 BaaS 的架构,是一种计算和存储分离的架构。 计算由 FaaS 负责,存储由 BaaS 负责,计算和存储也被分开部署和收费。这使应用的存储不再是应用本身的一部分,而是演变成了独立的云服务,降低了数据丢失的风险。而应用本身也变成了无状态的应用,更容易进行调度和扩缩容。

缺点:由于函数无状态,我们就需要使用数据库来存储状态,每次执行就需要访问数据库,就会有大量的网络 I/O,进而降低代码执行的效率。我们大多数应用都是有状态的,比如本地缓存、数据库连接池以及进行通信等,FaaS 的局限就会让我们开发复杂的后端应用变得困难
函数通信效率低
如果两个函数的数据有依赖,需要进行通信、交换数据,就要进行函数与函数之间的调用(调用方式是 HTTP 调用)。相比之前的内存调用,数据交互效率显然低了很多。而这个问题的本质,是 FaaS 还没有比较好的数据通信协议或方案。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/hi3254014978/p/17066785.html

欠你们的 → k8s 集群搭建,除夕奉上!-编程思维

开心一刻   有一天,qq收到一个好友申请,验证消息上写的是:哥哥加我,我是妹妹   我以为是性骚扰,就没加,直接回了一句:我喜欢少妇   过了一会儿,姑姑就给我打了个电话:你妹妹qq加你,你怎么不同意,她想问你几道数学题,你说你喜欢少妇   我:姑姑,你听我狡辩一下......   祝大家除夕快乐! 节点准备   

为什么要虚拟化,为什么要容器,为什么要docker,为什么要k8s?-编程思维

前言 如标题中的问题所提到的虚拟化,容器,Docker和K8s那样,我们不妨这样问:这些技术到底适用于哪些场景,有没有别的技术可以替代?这些技术的优劣在哪里? 下面我将针对性地从以上几个问题的出发点,去和大家分享自己的答案。 一、虚拟化—历史的选择 我们现在提到虚拟化技术,一般会知道有5种:软件虚拟化,硬件虚拟化,完全

光速上手k8s(2023)(containerd)(未完待续)-编程思维

又过了好久没写了,主要是近来状况也无聊 一、了解概念(参考) 概念 Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。 Kubernetes 这个名字源于希腊语,意

无需依赖docker环境制作镜像-编程思维

随着高版本的Kubernetes弃用Docker,企业也可以不依赖Docker环境了,但是DevOps通过Kubernetes部署的话,仍然需要制作镜像,那么在没有Docker环境的情况下如何制作呢?推荐一款谷歌的开源工具Jib,github地址,它是一个无需Docker守护进程——也无需深入掌握Docker最佳实践的

daemonset方式部署nginx-ingress -编程思维

前言 nginx-ingress是k8s官方维护的一个Ingress Controller,具体使用,官方有详细的文档:https://kubernetes.github.io/ingress-nginx/deploy/ 直接按照官方文档进行安装,一般都会失败,本文将帮助你成功安装他。 官方的安装方式 官方文档提供了两

腾讯全面上云之后的首次春保:这里的夜晚静悄悄-编程思维

除夕夜,是全国人民阖家团圆的日子,也是鹅厂这帮技术人最紧张的时刻——一年一度的春节重保。 在这辞旧迎新的重要节点,全球十多亿用户通过微信和QQ拜年、发红包,在朋友圈、QQ空间分享心情,通过微信视频号、腾讯视频等观看春晚直播。 这些“新年俗”带来的是秒级内增长几十倍甚至数百倍的流量洪峰,就像传说中每年如约而至的“年兽”,

东风微鸣云原生-编程思维

Web 服务器与应用Nginx我的Nginx Docker镜像## 设置继承自己创建的 sshd 镜像 FROM caseycui/ubuntu-sshd ## 维护者 LABEL maintainer="CaseyCui cuikaidong@foxmail.com" ## 安装 nginx RUN apt-ge

个人文章-编程思维

背景由于不可描述的原因,相对于以前,最近在更加频繁的迁移服务器,简单的 Shell 脚本已经不能满足需求了,于是将所有的项目 Docker 化。部分不含敏感配置的项目准备放到 DockerHub 上面,但是在 docker push 的时候报错:denied: requested access to the resou