规格与限制#
包含对软件、网络、硬件环境的要求及限制, 例如不支持在 windows 环境上的部署。
1. ds-worker 启动参数规格限制#
名称 |
含义 |
默认值 |
约束 |
|---|---|---|---|
unix_domain_socket_dir |
指定 unix domain socket 文件创建的路径 |
~/.datasystem/unix_domain_socket_dir/ |
有效的路径格式&长度不超过 80 个字符 |
2. function-agent K8S POD pids 资源规格限制#
名称 |
含义 |
默认值 |
约束 |
|---|---|---|---|
平均每个 CppRuntime 所需 pids 资源 |
基于 function-agent K8S POD pids 资源规格限制 ( |
51 |
function-agent K8S POD 内函数系统组件占用 60 pids 的资源,此外对 CppRuntime (不带数据系统) 每个 runtime 需要预留 27 个以上 pids 的资源,(带数据系统) 每个 runtime 需要预留 51 个以上 pids 的资源。修改 K8S POD pids 资源规格,需修改 kubelet 的 |
3. function-master K8S POD 资源规格限制#
名称 |
含义 |
默认值 |
约束 |
|---|---|---|---|
.Values.global.resources.functionMaster.limits.memory |
3 Gi |
当集群实例规模大于 10000 , 建议该参数设置大于 5 Gi ,否则可能出现 function-master 内存不足 oom 。( k8s 部署当前支持的最大规格不超过 20000 实例) |
4. openYuanrong runtime 及 runtime-manager 资源占用情况说明#
openYuanrong资源池 pool pod 内,会运行 runtime 及 runtime-manager 。当 runtime 实例被拉起时,这两个组件本身也会占用内存。因此,能提供给用户代码的内存资源,小于 pool 本身的资源配额。具体来说,不同语言 runtime 进程占用 RSS 的情况如下。数据随实际场景和软件版本更迭存在波动,供参考(单位 MB )。
测试内容 |
Java |
Python |
Cpp |
|---|---|---|---|
Sleep 60s |
175 |
107 |
95 |
100 次 invoke |
176 –> 181 |
107 |
95 |
注:以上数据来自 MultiLanguageRuntime 版的 runtime 。
runtime-manager 占用的内存为 25 MB - 27 MB.
以一个正在运行的空载 cpp runtime 实例为例, runtime 和 runtime-mananger 占用的内存 RSS 之和约为 110 MB. 对于一个配额为 128 MB 的资源池 pod ,可供用户使用的内存不超过 18 MB 。容易导致 runtime 和 runtime-manager 因为 OOM 被杀。
用户需根据其代码运行占用的内存,和其代码的动态链接库 .so 文件加载占用的内存,自行评估合理的资源池内存大小配置。
5. etcd 部署规格说明#
etcd 配置说明#
参数名称 |
含义 |
默认值 |
参数影响 |
|---|---|---|---|
|
指收到多少个写请求后就触发生成一次快照,并对 Raft 日志条目进行压缩。 |
100000 |
执行快照前,数据需要保存在内存中,如果值过大,会消耗较多的内存,如果值过小,可能频繁触发快照,影响写入性能。 |
|
后端存储的最大存储字节限制,单位 B |
8589934592 |
当写入数据超过这个限制时,etcd 将停止接受新的写入操作 |
|
自动压缩策略, 配置 periodic 表示定期压缩,配置 revision 表示按照修订版本数量压缩 |
revision |
如果 etcd 非定时写入数据,建议配置 revision 策略 |
|
指定自动压缩的保留值,对于 periodic 策略,表示保留的时间窗口,对于 revision 策略,表示保留的修订版本数量 |
1000 |
自动压缩会清理旧的修订版本,减少 etcd 的存储空间占用,但可能会对性能产生一定影响 |
性能基线配置#
Cpu |
Memory |
quota-backend-bytes |
snapshot-count |
auto-compaction-mode |
auto-compaction-retention |
集群节点数 |
最大并发实例创建数 |
注册函数数量 |
最大运行中实例数 |
|---|---|---|---|---|---|---|---|---|---|
4C |
8G |
8589934592 (8G) |
20000 |
revision |
5000 |
<100 |
<1000 |
<1000 |
<2000 |
8C |
16G |
8589934592 (8G) |
50000 |
revision |
10000 |
<500 |
<2000 |
<5000 |
<5000 |
16C |
32G |
8589934592 (8G) |
100000 |
revision |
25000 |
<1000 |
<5000 |
<10000 |
<10000 |
Cpu 和 Memory 参考配置(修改 etcd 部署 StatefulSet):
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: "4"
memory: 8Gi
压缩参数和 DB Size 参考配置(修改 etcd 部署 StatefulSet):
# 新增如下环境变量
# 配置 auto-compaction-mode 压缩模式
- name: ETCD_AUTO_COMPACTION_MODE
value: "revision"
# 配置 auto-compaction-retention 配置压缩参数
- name: ETCD_AUTO_COMPACTION_RETENTION
value: "10000"
# 配置 quota-backend-bytes DB Size(配置单位为 bytes)
- name: ETCD_QUOTA_BACKEND_BYTES
value: "8589934592"
# 配置 snapshot-count
- name: ETCD_SNAPSHOT_COUNT
value: "20000"
特别说明#
最大并发实例创建数增大,请增大 Cpu,Memory, 自动压缩参数。
注册函数数量/最大运行中实例数增大,请增大 Memory,DB Size。
集群节点数增大,请增大 Cpu,Memory。
当内存不足时,请减少保存快照数量,防止 etcd 发生 OOM。
etcd 性能依赖磁盘,请尽量使用高性能磁盘,参照官网 etcd。