字节Faas学习笔记(二)Faas数据面架构

384 阅读2分钟

学习资料:bytedance.feishu.cn/file/boxcns…

  • Function Runtime 函数运行时

    • image-20221202162635461

    • 基础镜像 + 代码加载

    • runtime-agent——代理,类似knative里的sidecar

      • image-20221202162823728
    • function runtime类似knative里的user-container

      • image-20221202162838714

问:这里runtime-agent时怎么load Function的,如果只是简单拉起pod的话,和knative也没区别了?

  • 函数实例生命周期 Function Instance Lifecycle

    • image-20221202163023953

    • 问:java 等动态代码可以预先启动?

      • 预先启动也需要很多时间吧,怎么个预先启动法。
    • image-20221202163158289

    • image-20221202163208732

    • image-20221202163222200

    • image-20221202163415513

      • 问:这里的SIGINT信号是由每个proxy自己来发的吗?没有一个中心控制器来管理吗,比如knative里的activator
  • 函数调用路径 Function Invocation Path

    • image-20221202163633220

      • 这里的workemanager和hostagent就是冷启动过程,类似knative里的activator
      • 问:这里冷启动没有queue吗?应该也有吧,不然就会有请求被丢弃了。
  • 函数路径管理 Function Route Management

    • 就绪检测:healthcheck

      • 问:必须/ping吗?不能自定义healthcheck路径吗?
    • pod状态检测:

      • image-20221202164106751
      • 依赖k8s和kubelet
  • 并发控制

    • image-20221202164338391
    • 限制单实例请求并发:防止自己被打挂
    • 集群请求并发限制:防止打挂下游
    • 独占模式:只能QPS=1,资源要求大、不能并发、有顺序依赖
    • 共享模式:可以多个请求
      • 问:看到这两个名字,一般都会想到单个pod多个function?
  • 请求拒绝 load shedding

    • image-20221202165300557
  • 冷启动——冷启动可以好好听听

    • image-20221202165420398

      • 应该从冷启动池子里拿pod
      • 然后下载用户代码进行加载
    • 冷启动池的管理

      • 预先启动空跑pod,只启动runtime-agent,不包含任何业务代码

      • 保证一个空跑pod不会被多个function使用

        • pod带token,租约,续租,唯一校验
      • 避免调用到不好的pod上

        • image-20221202165420398

看起来冷启动的解决一般只有这种方式,那就是冷启动池,预先启动。

这里最多再加点智能预热的提前量。