跳转至

字体与资源限制

自建实例时,这几个数字决定了它能扛多少人和多大的活。

CPU 限制

docker-compose.yml 默认给两个容器都设了 CPU 配额:

容器 配置 相当于
frontend cpu_quota: 50000、cpu_period: 100000 半个核
backend cpu_quota: 80000、cpu_period: 100000 0.8 个核

不想要这个限制,把那三行(cpu_count / cpu_quota / cpu_period)删掉或者注释掉; 想改强度就调 cpu_quota 的数值 —— 它是「每个 cpu_period 微秒里能用多少微秒」。

内存限制在 mem_limit / memswap_limit 里,默认 frontend 800 MB、backend 1500 MB。 渲染大尺寸纸张很吃内存,报内存不足的时候先动这两个值。

并发:同时只渲染 2 个

后端有个并发闸门:

MAX_CONCURRENT_EXECUTIONS = 2

同一时间最多 2 个渲染任务在跑,多出来的排队等。这是按中小机器的算力定的 —— 渲染是纯 CPU 密集的,开太多只会互相拖慢。机器很猛的话可以调大, 但要相应放宽 cpu_quota,不然它们还是在抢那 0.8 个核。

队列:满了就返回 503

MAX_ACTIVE_TASKS = 8

「排队中 + 处理中」的任务总数到 8,新的提交会被直接拒绝并返回 503, 前端据此弹出等待倒计时。任务不会无限堆积。

任务过期

TTL = 30 分钟

任务和它渲染出来的图片在 30 分钟后自动清理,磁盘不会被占满。 用户在这之前下载完就行,过期后同一个 task_id 返回 404。

过载保护

后端会看自己的 CPU 占用,超过阈值就给新请求返回 429,避免机器被压垮:

CPU_USAGE_LIMIT=90   # 默认 90(百分比),设为 100 相当于关掉

E2E 测试和桌面版会把它设成 100,就是为了不受这个守卫干扰。

限流

接口有基于来源 IP 的限流,默认是:

1000 per 5 minute

各个路由还有各自更细的限制(轮询和取结果的额度比提交任务宽松得多)。 被限流时返回 429。

字体

  • 打进镜像的字体 来自仓库的 font_assets/,镜像构建时就带上了。
  • 自己加的字体 放 ttf_files/,见 Docker 部署。
  • 两者都会出现在界面的字体下拉框里。

字体授权自己确认

代码是 MIT,字体不是。 仓库里自带的字体和用户上传的字体各有各的授权, 对外提供服务前请确认你有权分发它们。