首页 产品 为什么选 OCTO 解决方案 文档 关于
文档中心 / 部署运维 / 生产资源规格建议
← 返回文档中心

生产资源规格建议

OCTO 文档中心 · 部署运维

  • docker/docker-compose.yaml
  • helm/octo/values.yaml
  • docker/README.md
  • 03-deployment-ops/基础设施依赖映射.md
  • 02-architecture/OCTO全组件服务清单.md
  • 基于行业通用经验推算(标注推算)

OCTO 生产资源规格建议 v1.0

⚠️ 重要声明:本文档资源规格中,凡标注"来源:xxx"的为官方配置文件硬提取值;凡标注"经验推算,待实际部署验证"的为基于官方默认值和行业通用经验推算,未经实际压测验证。官方未给出明确资源推荐值的部分已明确标注。实际部署前请根据业务场景压测调整。


§1 资源规划原则

1.1 资源消耗与用户规模的关系

因素 影响的组件 增长特征
在线并发用户数 WuKongIM(长连接)、octo-server(API)、nginx 近似线性增长
日消息量 MySQL(写)、Redis(缓存)、WuKongIM(存储) 线性增长,影响磁盘IO
消息附件(图片/文件/语音) MinIO(存储)、nginx(带宽) 非线性,取决于附件使用率和平均大小
搜索索引(开启search时) OpenSearch(内存/磁盘)、Kafka(磁盘) 与消息总量正相关
文档/网盘文件(开启docs/drive时) MinIO(存储)、docs-backend(CPU/内存)、Tika(CPU) 非线性,取决于文档/文件数量和体积
AI摘要/语音(开启summary/speech时) summary-api/worker、octo-speech CPU密集,受LLM API并发影响

来源:组件功能分析(OCTO全组件服务清单.md)+ 行业IM系统通用经验推算。

1.2 存储增长关键因素

  • 消息文本:MySQL消息分表,单条消息约1-3KB(不含附件),增长缓慢。
  • 消息附件:占存储增长的主要部分。图片/文件/语音消息存入MinIO,需预估人均日上传量。
  • OpenSearch索引:消息全文索引,约为原始消息文本的1.5-3倍(含分词索引 overhead),经验推算待验证。
  • 日志:nginx访问日志 + octo-server应用日志,建议配置日志轮转。

1.3 部署形态选择

  • Docker Compose单机:适合 <200人规模或PoC评估,所有服务在一台主机。
  • Kubernetes (Helm):适合 ≥200人或需要高可用的场景,支持多副本和水平扩缩。

§2 用户规模档位定义

🔴 P1 Round3 PS-06纠偏(2026-09-22产品管家源码确认):官方源码/部署文档中查无并发用户数、连接数上限、WuKongIM容量的任何数字。下表S/M/L/XL人数档位是本知识库自拟的经验推算,无官方证据支撑,不得对客户作为承诺口径报出。官方仅提供资源基线:Docker核心栈最小≥4GiB RAM+≥10GiB磁盘;开搜索再加OpenSearch~1GiB+Kafka~0.5-1GiB。售前报规模必须先做压测。

档位 注册用户(经验估算) 日活(估) 并发在线(估) 日均消息量(估) 典型场景
S PoC/小团队 <50人 <30 <20 <5,000条 团队试用/评估
M 中小团队 50-200人 30-120 20-80 5K-30K条 部门级协作
L 中型企业 200-500人 120-300 80-200 30K-100K条 全公司部署
XL 大型企业 500+人 300+ 200+ 100K+条 规模化/多Space

注:🔴全部为经验推算,无官方证据,待实际部署压测验证。并发在线数按日活的60-70%估算,日均消息量按人均50-200条/天估算。实际值因使用强度差异很大。官方唯一确认的资源基线:docker/README.md最小4GiB RAM+10GiB磁盘(docker核心栈);helm values.yaml server默认单副本requests 100m/256Mi limits 2C/2Gi。


§3 各档位资源规格表

3.1 总资源汇总

3.1.1 核心服务(必选,所有档位)
档位 总CPU核数 总内存 总磁盘(初始) 部署形态建议
S (经验档<50人) 4核 8 GiB 100 GiB SSD Docker Compose单机
M (经验档50-200人) 8核 16 GiB 200 GiB SSD Docker Compose单机 或 K8s单节点
L (经验档200-500人) 16核 32 GiB 500 GiB SSD K8s 3节点起步
XL (经验档500+人) 32+核 64+ GiB 1+ TiB SSD K8s 5+节点,基础设施独立部署

总资源含OS开销,为经验推算,待实际部署验证。官方README给出的最低要求是≥4 GiB RAM、≥10 GiB空闲磁盘(来源:docker/README.md L169),但那是最低启动门槛,非生产规格。

3.1.2 可选Profile模块增量
模块 S档增量 M档增量 L档增量 XL档增量 说明
summary (智能摘要) +0.5核/+1GiB +1核/+2GiB +2核/+4GiB +4核/+8GiB LLM API调用为主,CPU开销在LLM响应处理
speech (语音转写) +0.5核/+1GiB +1核/+2GiB +2核/+4GiB +4核/+8GiB 音频处理;调云端ASR时本地CPU开销低
docs (文档协同) +0.5核/+1GiB +1核/+2GiB +2核/+4GiB +4核/+8GiB Hocuspocus WS长连接 + Yjs CRDT
drive (网盘) +0.5核/+1GiB +1核/+2GiB +2核/+4GiB +4核/+8GiB 文件管理API,存储开销在MinIO
fleet (回路) +0.5核/+1GiB/+10GiB磁盘(PG) +1核/+2GiB/+20GiB +2核/+4GiB/+50GiB +4核/+8GiB/+100GiB 独立PostgreSQL,Daemon管理
search (搜索-OS+Kafka+indexer) +2核/+3GiB/+40GiB磁盘 +4核/+6GiB/+80GiB +8核/+12GiB/+200GiB +16核/+24GiB/+500GiB OpenSearch内存消耗大
doc-index (文档索引) +0.3核/+0.5GiB +0.5核/+1GiB +1核/+2GiB +2核/+4GiB 轻量Kafka消费者
drive-index (网盘索引+Tika) +1核/+2GiB +2核/+4GiB +4核/+8GiB +8核/+16GiB Tika文本提取CPU密集

增量为经验推算,待实际部署验证。叠加多个模块时注意不是简单相加——部分基础设施(如Kafka)被多个indexer共享。


3.2 各服务CPU/内存明细

3.2.1 核心基础设施
服务 S档 CPU/Mem M档 CPU/Mem L档 CPU/Mem XL档 CPU/Mem 来源/依据
mysql 0.5核 / 1GiB 2核 / 4GiB 4核 / 8GiB 8核 / 16GiB Helm默认resources未设置(resources: {});S档值基于典型MySQL 8.0小部署推算,M/L/XL为经验推算待验证
redis 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认resources未设置;S档值基于redis:7-alpine典型占用推算,经验推算待验证
minio 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB 4核 / 8GiB Helm默认resources未设置;MinIO内存主要受并发上传下载影响,经验推算待验证
wukongim 0.5核 / 512MiB 1核 / 1GiB 2核 / 2GiB 4核 / 4GiB Helm默认resources未设置;长连接数是主要因素,每万连接约耗1-2核(经验推算待验证)
3.2.2 核心应用服务
服务 S档 CPU/Mem M档 CPU/Mem L档 CPU/Mem XL档 CPU/Mem 来源/依据
octo-server 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB 4核 / 8GiB Helm默认: requests 100m/256Mi, limits 2/2Gi(来源:values.yaml server.resources);S/M档符合默认limits,L/XL需调高limits为经验推算
nginx 0.2核 / 256MiB 0.5核 / 512MiB 1核 / 1GiB 2核 / 2GiB Helm默认resources未设置;nginx资源消耗低,主要受带宽和并发连接影响,经验推算待验证
octo-web 0.2核 / 256MiB 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm默认resources未设置;SPA静态资源服务+厚路由nginx,消耗低,经验推算待验证
octo-admin 0.1核 / 128MiB 0.2核 / 256MiB 0.5核 / 512MiB 1核 / 1GiB Helm默认resources未设置;管理后台使用频率低,经验推算待验证
octo-matter 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认: requests 100m/256Mi, limits 2/2Gi(来源:values.yaml matter.resources);含LLM API调用
marketplace 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 1核 / 2GiB Helm默认: requests 100m/256Mi, limits 1/1Gi(来源:values.yaml marketplace.resources)
3.2.3 可选Profile应用服务
服务 S档 CPU/Mem M档 CPU/Mem L档 CPU/Mem XL档 CPU/Mem 来源/依据
summary-api 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认resources未设置(resources: {});经验推算待验证
summary-worker 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认resources未设置;异步LLM调用,经验推算待验证
octo-speech 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认: requests 100m/256Mi, limits 2/2Gi(来源:values.yaml speech.resources)
speech-admin 0.1核 / 256MiB 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm默认: requests 50m/128Mi, limits 1/512Mi(来源:values.yaml speech.admin.resources)
octo-docs-backend 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm默认: requests 100m/256Mi, limits 1/1Gi(来源:values.yaml docs.resources);Hocuspocus WS+Yjs CRDT
octo-drive 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm values.yaml中未包含drive配置(官方未提供推荐值);经验推算待验证
octo-fleet 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB Helm values.yaml中未包含fleet配置(官方未提供推荐值);经验推算待验证
fleet-postgres 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB 镜像postgres:16-alpine,经验推算待验证
3.2.4 搜索管线服务(search profile)
服务 S档 CPU/Mem M档 CPU/Mem L档 CPU/Mem XL档 CPU/Mem 来源/依据
search-opensearch 1核 / 2GiB 2核 / 4GiB 4核 / 8GiB 8核 / 16GiB Helm默认: requests 500m/1Gi, limits 2/2Gi, JVM -Xms512m -Xmx512m(来源:values.yaml search.opensearch);S/M档符合默认limits,L/XL需调高JVM堆(经验推算)。docker-compose JVM默认-Xms512m -Xmx512m(来源:docker-compose.yaml L1539)
search-kafka 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB 4核 / 8GiB Helm默认: requests 250m/512Mi, limits 1/1Gi(来源:values.yaml search.kafka.resources)
es-indexer 0.2核 / 256MiB 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm默认: requests 100m/128Mi, limits 500m/512Mi(来源:values.yaml search.indexer.resources)
search-producer 0.2核 / 256MiB 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm默认: requests 100m/128Mi, limits 500m/512Mi(来源:values.yaml search.producer.resources);注意K8s路径用独立producer,Docker Compose默认用octo-server内置producer
doc-indexer 0.1核 / 256MiB 0.2核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm values.yaml中未包含docIndexer resources(官方未提供推荐值);轻量消费者,经验推算待验证
drive-indexer 0.2核 / 256MiB 0.3核 / 512MiB 0.5核 / 1GiB 1核 / 2GiB Helm values.yaml中未包含driveIndexer resources(官方未提供推荐值);经验推算待验证
tika 0.5核 / 1GiB 1核 / 2GiB 2核 / 4GiB 4核 / 8GiB Apache Tika文本提取,CPU密集型,官方未提供推荐值,经验推算待验证

3.3 K8s副本数建议

服务 S档 M档 L档 XL档 依据
octo-server 1 2 2-3 3+ Helm默认replicas: 1(来源:values.yaml server.replicas);多副本可提升可用性,octo-server无状态
octo-web 1 1-2 2 2+ Helm默认: 1;SPA静态服务,可多副本
octo-admin 1 1 1 2 Helm默认: 1;低频使用,单副本足够
octo-matter 1 1-2 2 2+ Helm默认: 1
marketplace 1 1 1-2 2 Helm默认: 1(且默认enabled: false)
nginx 1 2 2 3+ Helm无显式replicaCount配置;作为入口建议至少2副本
mysql 1 1 1(主从) 1(主从/MGR) 有状态服务,S/M档单实例;L档起建议主从,经验推算
redis 1 1 1(Sentinel) 3(Cluster) 有状态服务,经验推算
minio 1 1 1(分布式) 4+(分布式) Helm默认单实例;L档起建议分布式模式,经验推算
wukongim 1 1 2(集群) 3+(集群) 有状态长连接服务,集群需WuKongIM集群支持,经验推算待验证
summary-api 1 1 2 2+ Helm默认: 1
summary-worker 1 1 2 2+ Helm默认: 1
octo-speech 1 1 2 2+ Helm默认: 1
octo-docs-backend 1 1 2 2+ Helm默认: 1;Hocuspocus多副本需注意WS粘性
octo-drive 1 1 2 2+ 官方未提供推荐值,经验推算
octo-fleet 1 1 2 2+ 官方未提供推荐值,经验推算
search-opensearch 1 1 3 3+ Helm默认单节点;L档起建议3节点集群(含副本分片),经验推算
search-kafka 1 1 3 3+ Helm默认单KRaft节点;L档起建议3节点KRaft集群,经验推算
es-indexer 1 1 2 3+ Helm无显式replicaCount;消费组可水平扩展

副本数≥2的建议均为经验推算,待实际部署验证。数据库/消息队列/搜索引擎的集群化需要额外配置,不是简单增加replica数。


3.4 JVM堆大小建议(OpenSearch)

档位 JVM堆(-Xms/-Xmx) 配置方式 依据
S -Xms512m -Xmx512m docker: OCTO_SEARCH_OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m
helm: search.opensearch.javaOpts: "-Xms512m -Xmx512m"
来源:docker-compose.yaml L1539 + values.yaml默认值
M -Xms1g -Xmx1g docker: OCTO_SEARCH_OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
helm: search.opensearch.javaOpts: "-Xms1g -Xmx1g"
经验推算:消息量增大需更大堆,建议堆内存不超过容器内存的50%
L -Xms2g -Xmx2g 同上,调整值 经验推算,待验证
XL -Xms4g -Xmx4g 或更高 同上 经验推算,待验证。OpenSearch官方建议堆不超过32GB(压缩指针阈值)

OpenSearch官方最佳实践:JVM堆内存设置为可用内存的50%(预留另一半给文件系统缓存),且不超过32GB。

Kafka运行在JVM上但helm values.yaml未显式配置KAFKA_HEAP_OPTS,Kafka 3.8默认堆为1GB(Kafka默认启动脚本)。M/L/XL档建议设置`KAFKA_HEAP_OPTS="-Xms1g -Xmx1g"`或更高,经验推算待验证。


§4 磁盘容量规划

4.1 Docker Compose命名卷与Helm PVC对照

卷/PVC Helm默认Storage Size S档建议 M档建议 L档建议 XL档建议 增长因素
系统盘(OS+Docker镜像) — 50 GiB 100 GiB 100 GiB/节点 100 GiB/节点 Docker镜像约5-10GB(全模块),系统+日志
mysql-data 20 GiB(来源:values.yaml mysql.storage.size) 30 GiB 50 GiB 100 GiB 200+ GiB 消息数据增长:约1-3KB/条文本消息;附件元数据+索引。建议预留至少3个月数据量
redis-data 10 GiB(来源:values.yaml redis.storage.size) 10 GiB 10 GiB 20 GiB 50 GiB Redis主要是缓存和会话队列,增长有限;bot_task队列和搜索cursor占少量空间
minio-data 50 GiB(来源:values.yaml minio.storage.size) 50 GiB 100 GiB 300 GiB 1+ TiB 最大增长项:消息附件(图片/文件/语音)、头像、贴纸、文档附件、网盘文件、市场资源。取决于用户附件使用强度
wukongim-data 10 GiB(来源:values.yaml wukongim.storage.size) 10 GiB 20 GiB 50 GiB 100+ GiB WuKongIM消息/通道/离线消息存储;增长与消息量正相关
opensearch-data 20 GiB(来源:values.yaml search.opensearch.storage.size) 20 GiB 50 GiB 100 GiB 300+ GiB 搜索索引:约为原始文本的1.5-3倍;文档/网盘索引额外增大;经验推算待验证
kafka-data 10 GiB(来源:values.yaml search.kafka.storage.size) 10 GiB 20 GiB 50 GiB 100 GiB Kafka日志保留(默认7天?需确认);消费后可清理,但需保留峰值余量
server-logs/nginx-logs — 10 GiB 20 GiB 50 GiB 100 GiB 日志增长,建议配置logrotate轮转保留7-30天;经验推算
speech storage 10 GiB(来源:values.yaml speech.storage.size) 10 GiB 20 GiB 50 GiB 100 GiB 语音消息音频文件(如开启语音存储);如语音消息通过MinIO存储则可能重复计算
fleet-postgres-data —(helm未含fleet) 10 GiB 20 GiB 50 GiB 100 GiB Fleet回路业务数据;经验推算待验证
search-dlq-spill 1 GiB(来源:values.yaml search.indexer.dlqSpill.size) 1 GiB 2 GiB 5 GiB 10 GiB DLQ spill持久化,增长有限
search-backfill-state — 1 GiB 1 GiB 2 GiB 5 GiB search-tools profile回填状态持久化;经验推算待验证

Helm默认PVC大小为官方初始配置值,仅适用于PoC/S档。M/L/XL档磁盘建议为经验推算,待实际部署验证。

4.2 MinIO存储增长估算

数据类型 单条估算大小 月增长估算(100人活跃) 说明
聊天图片 100KB-2MB 5-20 GiB/月 取决于截图/照片频率
文件附件 100KB-50MB 10-100 GiB/月 波动最大,取决于文件传输频率
语音消息 30KB-500KB(60s) 1-5 GiB/月 3MB/60s上限(来源:VOICE_MAX_FILE_SIZE=3MB)
头像/贴纸/聊天背景 <100KB/个 <1 GiB/月 可设上限,增长极慢
文档附件(octo-docs-attachments) 取决于文档 5-50 GiB/月 启用docs后才有
网盘文件(octo-drive) 无上限 10-500+ GiB/月 启用drive后,增长不可预测,建议设置配额
市场资源(marketplace) 技能ZIP≤20MiB <1 GiB/月 MAX_UPLOAD_MB=20(来源:marketplace配置)

⚠️ 以上增长估算为经验推算,待实际部署验证。文件附件类数据波动极大,强烈建议:

1. 部署前预估用户附件使用习惯

2. 设置MinIO存储告警(使用率>70%告警)

3. 网盘模块建议配置用户/Space存储配额

4. 定期清理过期临时文件

4.3 MySQL数据增长估算

数据类型 单条大小 月增长(100人,日均1万消息)
文本消息 1-3KB 1-3 GiB/月
系统消息/通知 <1KB <500 MiB/月
用户/群组/Bot元数据 — <100 MiB/月(几乎不增长)
Matter任务数据 — <500 MiB/月

经验推算待验证。消息分表(message, message1-4),每张表建议不超过1000万行。

4.4 OpenSearch索引增长估算

索引 估算方式 月增长(100人,日均1万消息)
octo-message 原始文本×2-3倍 2-9 GiB/月
octo-doc(启用doc-index) 取决于文档数量和大小 5-50 GiB/月
octo-drive(启用drive-index) Tika提取文本+元数据 10-100+ GiB/月

经验推算待验证。OpenSearch索引可设置ILM(Index Lifecycle Management)策略自动过期旧数据。


§5 网络带宽建议

档位 上行带宽建议 下行带宽建议 说明
S (<50人) 10 Mbps 50 Mbps 可共享普通办公带宽
M (50-200人) 50 Mbps 100 Mbps 建议独立带宽或QoS保障
L (200-500人) 100 Mbps 500 Mbps 需独立带宽,文件上传下载是带宽消耗主力
XL (500+人) 500+ Mbps 1+ Gbps 建议CDN加速静态资源和文件下载

经验推算,待实际部署验证。带宽主要消耗在:

- 消息附件上传/下载(走MinIO,经nginx代理)

- 语音消息上传/下载

- WebSocket长连接(文本消息流量小,可忽略)

- 文档/网盘文件传输(启用docs/drive时增加)

如使用外部对象存储(COS/OSS/S3)而非内置MinIO,则文件流量不经OCTO服务器,带宽需求大幅降低。

网络要求(来源:docker/README.md L170):需出站网络访问docker.io(或配置镜像mirror)拉取镜像。


§6 Docker Compose单机各档位配置建议

6.1 S档(<50人,4核8GB)

6.2 M档(50-200人,8核16GB)

# 示例:在关键服务下添加deploy.resources(经验推算,待验证)
services:
  mysql:
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 4G
        reservations:
          cpus: '0.5'
          memory: 1G
  octo-server:
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 2G
  # OpenSearch堆调大
  search-opensearch:
    environment:
      OPENSEARCH_JAVA_OPTS: "-Xms1g -Xmx1g"  # 从默认512m调大到1g

⚠️ Docker Compose的`deploy.resources`仅在Docker Swarm模式下生效;非Swarm模式需使用`mem_limit`/`cpus`等旧版参数或通过宿主机cgroup手动限制。经验推算待验证。

6.3 L档(200-500人,16核32GB)

  • MySQL/Redis/MinIO考虑使用外部托管服务(云RDS/云Redis/对象存储)
  • OpenSearch JVM堆设为-Xms2g -Xmx2g
  • 宿主机ulimit调大:vm.max_map_count=262144(OpenSearch要求)

6.4 系统调优(所有档位)

# OpenSearch要求(来源:docker-compose.yaml ulimits注释)
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf

# 文件描述符(OpenSearch nofile已设65536)
sudo sysctl -w fs.file-max=65536
ulimit -n 65536

# Docker日志限制(防止磁盘写满)
# 在/etc/docker/daemon.json中配置:
{
  "log-driver": "json-file",
  "log-opts": {"max-size": "100m", "max-file": "3"}
}

来源:docker-compose.yaml search-opensearch ulimits配置(nofile soft:65536) + OpenSearch官方vm.max_map_count要求。


§7 K8s Helm各档位values.yaml修改参考

7.1 S档(默认值即可,PoC/小团队)

  • server: requests 100m/256Mi, limits 2/2Gi
  • matter: requests 100m/256Mi, limits 2/2Gi
  • speech: requests 100m/256Mi, limits 2/2Gi
  • speech-admin: requests 50m/128Mi, limits 1/512Mi
  • docs: requests 100m/256Mi, limits 1/1Gi
  • marketplace: requests 100m/256Mi, limits 1/1Gi
  • search.opensearch: requests 500m/1Gi, limits 2/2Gi
  • search.kafka: requests 250m/512Mi, limits 1/1Gi
  • search.indexer: requests 100m/128Mi, limits 500m/512Mi
  • search.producer: requests 100m/128Mi, limits 500m/512Mi
  • mysql: 20Gi, redis: 10Gi, minio: 50Gi, wukongim: 10Gi, speech: 10Gi
  • search.opensearch: 20Gi, search.kafka: 10Gi, search.dlqSpill: 1Gi

7.2 M档(50-200人)修改示例

# values-m.yaml 经验推算,待验证
server:
  replicas: 2
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
    limits:
      cpu: "2"
      memory: 2Gi

matter:
  replicas: 1

mysql:
  storage:
    size: 50Gi
  resources:
    requests:
      cpu: 500m
      memory: 1Gi
    limits:
      cpu: "2"
      memory: 4Gi

redis:
  storage:
    size: 10Gi
  resources:
    requests:
      cpu: 250m
      memory: 512Mi
    limits:
      cpu: "1"
      memory: 2Gi

minio:
  storage:
    size: 100Gi
  resources:
    requests:
      cpu: 500m
      memory: 1Gi
    limits:
      cpu: "2"
      memory: 2Gi

wukongim:
  storage:
    size: 20Gi
  resources:
    requests:
      cpu: 500m
      memory: 512Mi
    limits:
      cpu: "2"
      memory: 2Gi

search:
  opensearch:
    javaOpts: "-Xms1g -Xmx1g"
    storage: { size: 50Gi }
    resources:
      requests: { cpu: 1, memory: 2Gi }
      limits:   { cpu: "2", memory: 4Gi }
  kafka:
    storage: { size: 20Gi }
    resources:
      requests: { cpu: 500m, memory: 1Gi }
      limits:   { cpu: "1", memory: 2Gi }

nginx:
  resources:
    requests:
      cpu: 250m
      memory: 256Mi
    limits:
      cpu: "1"
      memory: 512Mi

以上修改为经验推算,待实际部署验证。未列出的服务保持默认值即可。

7.3 L档(200-500人)修改要点

  • octo-server replicas: 2-3,limits提高到4核/4Gi
  • OpenSearch JVM堆调至-Xms2g -Xmx2g,PVC: 100Gi
  • Kafka PVC: 50Gi
  • MinIO PVC: 300Gi
  • MySQL PVC: 100Gi,考虑主从架构
  • 基础设施(mysql/redis/minio)强烈建议迁移到云托管服务
  • 配置HPA(HorizontalPodAutoscaler)基于CPU/内存自动扩缩

以上为经验推算,待实际部署验证。L档建议进行专项压测后确定最终规格。

7.4 XL档(500+人)修改要点

  • 所有应用服务replicas≥2,关键服务≥3
  • OpenSearch 3节点集群,JVM堆4-8GB
  • Kafka 3节点KRaft集群
  • MySQL主从或MGR集群
  • MinIO分布式模式(4节点起步)
  • 基础设施独立部署(不与应用混部)
  • 考虑读写分离、分库分表
  • 全链路压测后确定规格

经验推算,待实际部署验证。XL档必须经过专项压测,本文数字仅作初始参考。


§8 扩容触发指标

以下指标和阈值均为经验推算,待实际部署验证,建议结合监控系统实际数据调整。

8.1 扩容触发条件

指标 关注组件 扩容阈值 扩什么
CPU使用率持续 >70% octo-server/matter/summary 5分钟以上 增加应用副本数或提高limits
内存使用率持续 >80% octo-server/OpenSearch 5分钟以上 提高内存limits;OpenSearch调JVM堆
MySQL连接数接近上限 mysql >80% max_connections 优化连接池/读副本/分库
MySQL慢查询增多 mysql 慢查询>10/min 加索引/读副本/分库分表
Redis内存使用率 >80% redis 持续 扩容内存/配置淘汰策略
MinIO磁盘使用率 >70% minio — 扩容磁盘/加节点/清理过期数据
WuKongIM连接数接近上限 wukongim 单节点>5000连接 WuKongIM集群化
OpenSearch查询延迟 >500ms search-opensearch P95>500ms 扩容OS节点/调JVM堆/优化索引
Kafka消费延迟(lag)持续增长 search-kafka/es-indexer lag>10000条持续增长 增加indexer副本/扩容Kafka
磁盘使用率 >80% 所有PVC — 扩容磁盘(MySQL/MinIO/OS优先)
WebSocket连接异常/消息延迟 wukongim/nginx 用户反馈消息延迟 检查资源瓶颈,扩容wukongim/nginx
HTTP 5xx错误率 >1% nginx/octo-server 持续1分钟 检查后端服务状态,可能需要扩容

8.2 必配监控项

组件 核心监控指标
主机 CPU/内存/磁盘使用率/磁盘IO/网络IO
容器 各容器CPU/内存/重启次数
MySQL QPS/TPS/连接数/慢查询/复制延迟/InnoDB缓冲命中率
Redis 内存使用率/连接数/命中率/key数量
MinIO 磁盘使用率/请求延迟/流量
WuKongIM 在线连接数/消息投递延迟
octo-server 请求QPS/P95延迟/错误率/goroutine数量
OpenSearch 查询延迟/索引速率/JVM堆使用率/磁盘使用率
Kafka 消息生产/消费速率/consumer lag/磁盘使用率
nginx 请求QPS/活跃连接数/5xx率/流量

官方未提供具体监控方案和Grafana模板,以上为通用监控最佳实践推算。


§9 已知约束和待验证项清单

9.1 官方未提供推荐值的项

项 说明
Docker Compose无资源限制 docker-compose.yaml中没有任何deploy.resources.limits/reservations配置,所有服务无资源约束(来源:docker-compose.yaml全文grep)
MySQL/Redis/MinIO/WuKongIM/Web/Admin/Nginx Helm resources为空 resources: {},官方未设默认CPU/内存请求和限制(来源:values.yaml)
Summary-api/worker Helm resources为空 resources: {}(来源:values.yaml summary)
官方最低配置仅含RAM和磁盘 docker/README.md仅给出"≥4 GiB RAM, ≥10 GiB free disk"最低启动要求(来源:docker/README.md L169),未给生产推荐
fleet/drive Helm配置缺失 values.yaml中未包含fleet和drive的resources/storage配置(官方未提供推荐值)
doc-indexer/drive-indexer/tika资源配置 helm values中未包含这些服务的resources配置(官方未提供推荐值)
Kafka JVM堆配置 docker-compose.yaml和values.yaml均未显式设置KAFKA_HEAP_OPTS

9.2 待验证项

项 风险 验证方式
S/M/L/XL档位的CPU/内存具体数值 配置不足导致OOM或性能问题;配置过高浪费资源 按档位搭建环境压测(建议用消息发送脚本模拟并发)
磁盘增长速率 MinIO磁盘写满导致服务不可用 上线后首月密切监控磁盘增长曲线
OpenSearch JVM堆与数据量的关系 堆过小导致OOM或查询慢;堆过大浪费资源 按数据量逐步调整,监控GC和查询延迟
WuKongIM单节点连接数上限 连接数过多导致wukongim不稳定 逐步增加并发连接数压测
octo-server单实例最大并发 不知道单实例能承载多少QPS API压测(消息发送/文件上传/WS连接)
Kafka单节点吞吐上限 消息量大时Kafka成为瓶颈 消息生产/消费压测
MySQL单表承载上限 消息分表(5张)在大数据量下性能 插入千万级行测试查询性能
多副本下WebSocket粘性会话 octo-docs-backend Hocuspocus多副本WS是否需要粘性 多副本部署测试协同编辑
K8s环境下docker-compose已有profile但helm未覆盖 fleet/drive/docs-html/doc-index/drive-index在helm中未完整配置 确认helm chart版本是否包含这些服务
语音/摘要模块LLM API并发限制 第三方LLM API可能有QPS/RPM限制 根据LLM提供商配额调整副本数

9.3 部署前检查清单

  • [ ] 根据用户规模档位选定服务器配置(参考§3)
  • [ ] 预留足够磁盘空间,尤其是MinIO存储(参考§4)
  • [ ] 配置Docker/K8s日志轮转,防止日志写满磁盘
  • [ ] 设置OpenSearch所需的vm.max_map_count=262144
  • [ ] 如需HTTPS,准备TLS证书和反向代理配置
  • [ ] 配置监控告警(CPU/内存/磁盘/服务健康状态)
  • [ ] 规划备份策略(MySQL/MinIO/OpenSearch数据备份)
  • [ ] 修改所有默认密码和Token(preflight服务会拦截CHANGE_ME占位符)
  • [ ] 如启用search profile,按runbook完成backfill和alias绑定
  • [ ] 生产环境务必设置MinIO/MySQL/WuKongIM端口绑定为非0.0.0.0(默认已loopback,来源:docker-compose.yaml端口配置)

附录A:数据来源索引

数据项 来源文件 具体位置
最低配置要求(4GiB/10GB) docker/README.md L169
Search profile资源基线 docker/README.md L1664-1679 (OpenSearch~1GiB, Kafka~0.5-1GiB, indexer~50-100MiB)
OpenSearch JVM默认值 docker/docker-compose.yaml L1539 (OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m)
OpenSearch ulimits docker/docker-compose.yaml L1546-1551 (memlock:-1, nofile:65536)
Helm server resources helm/octo/values.yaml L313-319 (100m/256Mi → 2/2Gi)
Helm matter resources helm/octo/values.yaml L408-414 (100m/256Mi → 2/2Gi)
Helm speech resources helm/octo/values.yaml L468-474 (100m/256Mi → 2/2Gi)
Helm speech-admin resources helm/octo/values.yaml L486-492 (50m/128Mi → 1/512Mi)
Helm docs resources helm/octo/values.yaml L523-529 (100m/256Mi → 1/1Gi)
Helm marketplace resources helm/octo/values.yaml L552-558 (100m/256Mi → 1/1Gi)
Helm OpenSearch resources helm/octo/values.yaml L584-586 (500m/1Gi → 2/2Gi, JVM 512m)
Helm Kafka resources helm/octo/values.yaml L594-596 (250m/512Mi → 1/1Gi)
Helm indexer resources helm/octo/values.yaml L601-603 (100m/128Mi → 500m/512Mi)
Helm producer resources helm/octo/values.yaml L632-634 (100m/128Mi → 500m/512Mi)
Helm PVC默认大小 helm/octo/values.yaml mysql:20Gi, redis:10Gi, minio:50Gi, wukongim:10Gi, opensearch:20Gi, kafka:10Gi
Docker Compose无deploy.resources docker/docker-compose.yaml 全文grep无`deploy:\ resources:`段(搜索服务段除外,OS仅有ulimits)
MinIO bucket清单 基础设施依赖映射.md §三(13个bucket)
MySQL数据库清单 基础设施依赖映射.md §一(octo/octo_matter/octo_summary/octo_speech/octo_docs/octo_marketplace/octo_drive)
Named volumes清单 基础设施依赖映射.md §六(10个核心卷 + fleet-postgres-data + drive-config)
服务清单与端口 OCTO全组件服务清单.md 全文