学习资料:bytedance.feishu.cn/file/boxcns…
-
Function Runtime 函数运行时
-
-
基础镜像 + 代码加载
-
runtime-agent——代理,类似knative里的sidecar
-
function runtime类似knative里的user-container
-
问:这里runtime-agent时怎么load Function的,如果只是简单拉起pod的话,和knative也没区别了?
-
函数实例生命周期 Function Instance Lifecycle
-
-
问:java 等动态代码可以预先启动?
- 预先启动也需要很多时间吧,怎么个预先启动法。
-
-
-
-
- 问:这里的SIGINT信号是由每个proxy自己来发的吗?没有一个中心控制器来管理吗,比如knative里的activator
-
-
函数调用路径 Function Invocation Path
-
- 这里的workemanager和hostagent就是冷启动过程,类似knative里的activator
- 问:这里冷启动没有queue吗?应该也有吧,不然就会有请求被丢弃了。
-
-
函数路径管理 Function Route Management
-
就绪检测:healthcheck
- 问:必须/ping吗?不能自定义healthcheck路径吗?
-
pod状态检测:
- 依赖k8s和kubelet
-
-
并发控制
- 限制单实例请求并发:防止自己被打挂
- 集群请求并发限制:防止打挂下游
- 独占模式:只能QPS=1,资源要求大、不能并发、有顺序依赖
- 共享模式:可以多个请求
- 问:看到这两个名字,一般都会想到单个pod多个function?
-
请求拒绝 load shedding
-
冷启动——冷启动可以好好听听
-
- 应该从冷启动池子里拿pod
- 然后下载用户代码进行加载
-
冷启动池的管理
-
预先启动空跑pod,只启动runtime-agent,不包含任何业务代码
-
保证一个空跑pod不会被多个function使用
- pod带token,租约,续租,唯一校验
-
避免调用到不好的pod上
-
-
看起来冷启动的解决一般只有这种方式,那就是冷启动池,预先启动。
这里最多再加点智能预热的提前量。