FaaS - Workflow
Created|Cloud NativeServerlessFaaS
|Word Count:0|Reading Time:1mins
Author: zhongmingmao
Copyright Notice: All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.
Related Articles

2023-02-08
FaaS - Advanced Attributes
公共能力 将函数依赖的公共库提炼到层,以减少部署、更新时的代码包体积 对于支持层功能的运行时,函数计算会将特定的目录添加到运行时语言的依赖包搜索路径中 对于自定义层,需要将所有内容打包到一个压缩包,并上传到函数计算平台 函数计算运行时会将层的内容解压并部署到特定的目录 层功能的好处 函数程序包更小 避免在制作函数 zip 包和依赖项过程中出现未知的错误 可以在多个函数中引入使用,减少不必要的存储资源浪费 上传层之后,函数计算会将层的 zip 包上传到对象存储 当调用函数执行时,会从对象存储中下载层的 zip 包并解压到特定目录 应用程序只需要访问特定目录,就能读取层的依赖和公共代码 注意:后序的层会覆盖相同目录下的文件 快速迭代 标准运行时 / 自定义镜像 函数计算系统初始化执行环境之前,会扮演该函数的服务角色,获得临时用户名和密码并拉取镜像 镜像拉取成功后,会根据指定的启动命令、参数和端口,启动自定义的 HTTP Server 该 HTTP Server 会接管函数计算系统所有请求的调用 调用方式不同:事件函数 / HTTP 函数 在创建函...

2023-02-13
FaaS - Function Invoke
函数拆分 成本 云函数的收费:调用次数、公网流量、占用资源时间(最贵) 复用 组件化 性能 对于非串行的功能,拆分成多个函数可以提高并发性 调用方式 同步、异步、编排(具有调度和管理的语义) 同步 需要注意调用延迟和超时带来的费用成本 直接调用 使用云厂商提供的 SDK,调用指定的函数,实现直接调用 12345678import fc2client = fc2.Client( endpoint='<Your Endpoint>', accessKeyID='<Your AccessKeyID>', accessKeySecret='<Your AccessKeySecret>')// 同步调用client.invoke_function('service_name', 'function_name') 网关调用 通过 API 网关调用函数,借助 API 网关来...

2023-02-12
FaaS - Runtime
概述 一般的编程语言都有自身的运行时,运行时的主要职责是可以让代码和机器交互,进而实现业务逻辑 函数计算运行时 能够让函数在机器或者容器中执行起来,实现业务逻辑的执行环境 通常由特定语言构建的框架构成 函数计算运行时依赖于语言运行时 函数计算运行时的本质:让函数在容器中执行起来的代码框架 在函数实例初始化时,函数计算运行时一般会由一个初始化进程加载起来 然后函数计算运行时就可以准备接收请求 当请求到达后,业务代码会被对应的语言运行时中加载进来处理请求 Runtime 是一个特定语言环境下的服务框架环境 该服务将以一个进程的形态运行在用户容器中,并与用户代码相关联 该服务启动后,会一直等待请求的到来,一旦请求到达后,Runtime 会关联业务代码去执行(并发) 原理语言类型编译型语言 C/C++/Go,在编译时将所有用到的静态依赖、源码一起打包,编译完后可以直接运行 Java,经过编译产生的字节码需要 JVM 再次将其转换为机器码,同时具有编译型和解释型的特性 通常需要将所有依赖包打包成一个 jar 包或者 war 包,符合编译型语言的风格 在开发函数时,需...

2023-02-07
FaaS - Trigger
事件 事件为系统运行期间发生的动作或者发生的事情,而函数计算,提供了一种事件驱动的计算模型 CloudEvents 期望通过一种通用的格式描述事件数据的规范,以提供跨服务、平台和系统的互操作性 国内云厂商的事件规范程度:在其中一家云产品上开发了函数,一般都需要进行简单的适配才能迁移 CNCF Serverless 工作组针对函数和工作流均定义了相关的格式规范和原语 单函数的事件触发 多个简单函数通过异步调用的方式形成事件触发 复杂场景下通过 WorkFlow 来进行编排的事件交互 触发器概述 由事件驱动连接上下游服务的关系组合称为触发器 函数计算由云函数和触发器组成 触发器描述了一组关系和规则,包括核心要素:事件源、目标函数、触发条件 事件源:事件的生产者 目标函数:事件的处理者 触发条件:当触发条件满足时,就会通知函数计算引擎,调度对应的目标函数执行 触发器的元数据可以由服务方持久存储,也可以由函数托管平台和服务方共同持有 类型集成原则 区别:事件源和事件的规则存储在哪里,以及从哪里触发 单向集成触发器 双向集成触发器 代理集成触发器 设计触发器的主要考虑:事件源和函数计算的...

2023-02-10
FaaS - Scaling
概述 Serverless 的弹性扩缩容可以将实例缩容为 0,并根据请求量级自动扩缩容,从而有效地提升资源利用率 极致动态扩缩容是 FaaS 的核心内涵,是与 PaaS 平台的核心差异 - 降本增效 调度形态 开源的 Serverless 函数计算引擎核心,一般是基于 Kubernetes HPA 云厂商一般有封装好的各种底座服务,可以基于底座服务来做封装 云厂商容器调度服务,通常有两种调度形态 基于 Node 调度 基于容器实例的调度 - Serverless 云厂商的函数计算通常是基于容器服务的底座 Node 维度 组件 Scheduler 负责将请求打到指定的函数实例(Pod)上,同时负责为集群中的 Node 标记状态,记录到 etcd Local-Controller Node 上的本地控制器,负责管理 Node 上所有函数实例的生命周期,以 DeamonSet 形式存在 AutoScaler 定期检测集群中 Node 和 Pod 的使用情况,并根据策略进行扩缩容 在扩容时,向底层的 PaaS 平台申请资源 Pod Cold 表示该 Pod 未被使用 Warm 表示...

2023-02-09
FaaS - Cold Start
触发时机 类似于 LoadingCache 首次请求 容器实例在服务请求后被回收 启动过程 容器创建 当所有容器实例都在处理请求时,需要向集群申请创建新的容器 函数计算平台会支持多种语言的运行时 这些运行时一般来说会打包成一个镜像,然后以 DeamonSet 的方式运行在 Kubernetes 中 在冷启动时,会根据不同的参数请求,动态挂载所需的运行时到对应的运行路径 代码包 / 层依赖 是整个冷启动耗时比较长的过程 函数计算本身不具备持久化的能力,代码包和层依赖通常都是从其它存储服务端拉取 代码包通常是压缩包的形式,下载到本地后,再解压 环境变量 / 参数文件 耗时相对较短 主流的函数计算平台往往提供了环境变量注入的能力,发生在冷启动阶段 运行时以及容器本身还需要准备一些参数配置文件 VPC 打通 / 资源准备 如果用户还为函数接入了私有网络,还需要为容器进行一些 VPC 网络打通的初始化工作 如果用户使用了类似分布式文件系统等功能,还需要进行挂载 运行时初始化 通常指的是云厂商标准的 Runtime 环境的启动过程 受编程语言类型的影响比较大(JV...
Announcement
Things are always unexpected!




