设计一个FASS架构中的云函数运行时

Faas 架构

在现代云计算的范畴里,FaaS是一个比较新潮的概念,在FaaS里面用户只需要关注自己的代码逻辑,可能是一个函数或者是一个脚本,不用关注底层的资源或者程序运行所需的运行时。也不用关注资源负载和流量并发度和100%免运维体验,因为这些FaaS都帮我们解决了,这通常意味着开发周期更短。

以RAG平台的知识入库场景为例,预处理流程(分片→Embedding→向量存储)存在以下技术挑战:

  • 计算密集型操作导致同步处理吞吐量受限
  • 异构Embedding模型(如未来多模态支持)带来的运行时环境差异
  • 海量任务下的资源弹性需求

通过FaaS架构实现异步任务系统,我们构建了如下解决方案:

  1. 事件驱动架构 :RAG平台将知识录入请求投递至消息队列,解耦前后端处理流程
  2. 动态资源分配 :自定义函数实例配置为2C2G规格,基于队列堆积情况自动扩缩容(Max 100并发)
  3. 冷启动优化 :实例空闲60秒后自动回收,结合Go运行时实现200ms级冷启动延迟,提高资源利用率。

函数运行时

上面说了这么多,只是为了介绍FaaS这种云计算架构的一些试用场景和优点。那么什么是函数运行时?

函数运行时,顾名思义就是云函数执行的运行环境,通常一个好的FaaS平台肯定是支持多种语言,如:Python/Golang/Node/java等的运行时。那么要设计和实现一个云函数运行时程序需要一些什么条件呢?

设计原则

  1. 云原生兼容性
  2. 多语言支持
  3. 高性能通信

云原生友好

所谓云原生友好是指对于docker/k8s平台友好,毕竟所有的函数实例都会以容器的形式部署在集群之中,而且FaaS通常是更加激进的冷启动,顾名思义也就是有请求过来的时候才启动容器:所以最重要的是启动速度,所以函数运行时最好是使用Golang语言编写。

executor

那么虽然运行时是golang编写,但是为了支持多语言的函数,运行时里面会有executor的概念,不同的executor又不同的语言代码实现,比如pyhton我们可以使用类似Flask或者FastAPI等web框架来搭建,其中的步骤逻辑可以简单的视为如下步骤:

  1. 运行时启动,加载用户函数配置和代码
  2. 判断函数类型:如果是go类型的直接在运行时调用,如果是其他语言函数则通过启动对应语言的web框架并且通过UDS加速

    UDS(Unix Domain Socket)是一种在同一台主机上的进程间通信(IPC)机制,通过文件系统路径而非网络端口进行通信。相比基于 TCP/IP 的本地通信(如 127.0.0.1),UDS 绕过了网络协议栈,减少了数据序列化、协议封装等开销,因此性能更高、延迟更低。

  3. 启动对应web服务加载用户代码
    1. 规定用户需要在main.py中实现main函数
    2. 然后在web框架里import main,然后将main.main赋值给self._func
    3. 暴露一个约定好的API:/v1/function 然后请求过来时,golang会调用 /v1/function 并触发self._func

通过UDS加速的http方式,让我们可以支持任意一种语言,当然最好是那种启动迅速的web框架。

main.go

云函数运行时的入口

mian.go的作用就是无限制的pull函数网关来获取请求。

image.png

当然真是的云函数运行时肯定比上面的过程更加复杂,但是上面的介绍可以简单的实现一个函数运行时。

函数运行时之外

虽然本文聚焦运行时实现,但完整的FaaS平台还需以下核心组件:

组件核心职责关键技术指标
调度器函数实例生命周期管理冷启动成功率 >99.9%
函数网关协议转换与触发器适配支持HTTP/MQ/Timer等8+触发器类型
监控系统实时指标采集与异常熔断秒级监控粒度
安全沙箱防止恶意代码攻击系统调用拦截率100%

这些组件共同决定了平台的SLA水平(如AWS Lambda的300秒超时限制)和用户体验,值得后续专文探讨。


标题:设计一个FASS架构中的云函数运行时
作者:Gakkiyomi
地址:https://gakkiyomi.blog/articles/2025/05/05/1746447839535.html

    评论
    9 评论
    xiong 2025-05-14 16:40

    不明觉厉

    moyupi 2025-05-14 16:11

    π除我佬

    Kirito 2025-05-13 11:30

    牛逼啊G大

    Gakkiyomi 2025-05-11 10:13
    回复» @mada888

    我是菜鸡

    Gakkiyomi 2025-05-11 10:13
    回复» @otis1026

    装起来了

    Gakkiyomi 2025-05-11 10:13
    回复» @JiuNian

    我是个渣渣

    otis1026 2025-05-10 07:16

    又是看不懂系列

    JiuNian 2025-05-09 23:10

    已阅!膜拜大佬!!

    mada888 2025-05-09 21:56

    不明觉厉!

avatar

取消