diff --git a/README.md b/README.md index e69832d3..30eb0c31 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,7 @@ Mock 不会写引用标记:探索运行里报告撰写节点照样跑完,但 ## 生产部署 -**不用 Docker:** `./scripts/prod.sh` 构建前端并由后端一并托管页面,单进程、不热重载,启动于 +**不用 Docker:** `./scripts/prod.sh` 构建前端并由后端一并托管页面,缺省一个进程(`--workers` 起多个,要 PostgreSQL)、不热重载,启动于 http://127.0.0.1:8000 。前端产物不存在或比源码旧时才重新构建,`--build` / `--no-build` 强制构建或跳过。 `--port`(或 `AGENTLAB_PORT`)改端口;`--host` 监听所有网卡,默认同样**不开登录**,多人使用请开登录 ([身份与权限](#身份与权限))。 @@ -1126,6 +1126,10 @@ AGENTLAB_WORKERS=4 … | `AGENTLAB_WORKER_LEASE_S` | 30 | 租约多长(至少是心跳的 3 倍):进程没了(强杀、断电)多久之后别的进程接手 | | `AGENTLAB_SCHEDULER_TICK_S` | 15 | 调度循环一拍的间隔 | +连接数照上一节「连接数的账」按进程数乘,另外每个进程多一条专门收发进程间通知(LISTEN / NOTIFY)的连接,不占连接池;跨进程的锁 +(咨询锁)持锁期间占连接池里的一条。前面放 PgBouncer(事务模式)时,通知那一条要直连 PostgreSQL(事务模式下 LISTEN 收不到通知), +会话级的咨询锁也要求直连或会话模式——多进程部署建议应用库直连。 + **认领和租约。** 每个进程在库里登记一行(主机、pid、启动时的随机串),隔一拍心跳续租约。运行、问数据的一轮、后台任务(探查、起草、 剖析、评测、影子起草)、处理中的文档、执行中的发布单都记着认领它的进程;租约按进程算,进程没了它认领的行一起到期。平稳关停的进程 交班、删掉自己的登记,别的进程马上接手;强杀的等租约过期。启动时的整理只碰属主不在了的行,绝不碰别的活进程的。接手的规矩: