2026 OpenClaw MeshMac 실전: 공유 게이트웨이 rate limit·세션 동시성 상한
MeshMac 다중 노드가 OpenClaw 공유 게이트웨이를 쓰면 CI·웹훅 버스트가 CPU·fd·업스트림 쿼터를 고갈시킵니다. HowTo+FAQ: 트래픽 분류, 토큰 버킷·세션 상한, CI·채널 동시성, 헬스 셰딩, 로그 필드. 엣지 한도는 Nginx·Caddy TLS 매트릭스와 함께 보세요.
왜 공유 게이트웨이가 터지는가 (다중 노드 협업 관점)
자동화 경로가 한 리스너에 몰리면 부하는 가산됩니다.
- 예산 미공유 — RPS·동시 세션 상한을 문서에 고정하지 않으면 팀이 동시에 상한을 가정합니다.
- 재시도 증폭 — 429 후 무작정 재시도는 부하를 키웁니다. 태스크 큐·재시도와 정책을 맞춥니다.
- LB 뒤 불일치 — 복제마다 리미터가 다르면 쏠립니다. 로드밸런싱·페일오버 기준을 참고하세요.
토큰 버킷 vs 연결·세션 상한 (결정 표)
토큰 버킷은 요청 폭주를, 세션·연결 상한은 장시간 작업을 묶습니다. 보통 둘 다 둡니다.
| 메커니즘 | 적합한 경우 | 시작 가이드(튜닝) |
|---|---|---|
| 테넌트별 토큰 버킷 | 웹훅 POST 폭주·REST 폴링 | 리필 5~20 rps·버스트 30~60 |
| 글로벌 토큰 버킷 | 공유 LLM·벤더 API 쿼터 보호 | 벤더 쿼터 − 안전 마진 |
| 동시 세션 캡 | 장시간 에이전트·도구 실행 | 노드당 2~8, 합 ≤ 게이트 천장 |
| TCP·업스트림 연결 한도 | 디스크립터 고갈 방지 | ulimit -n 여유를 둔 하드 캡 |
게이트웨이 한도 설계 5단계
- 경로 태그 —
대화형·ci_ingest·internal_worker로 나누고route_class로 로깅합니다. - 식별자 — IP·API 키·
tenant_id등 안정 키로 버킷을 분리합니다. - 두 숫자 — 지속 RPS+버스트, 동시 세션·업스트림 연결 상한을 클래스마다 둡니다.
- 큐보다 빡세게 — 입장 통제가 큐 증속보다 촘촘해야 엣지 거절이 이득입니다.
- 다크 런 —
would_block만 세고 한 릴리스 뒤 강제합니다.
CI·메시지 채널과의 동시성 결합
GHA matrix concurrency·채팅 웹훅 합이 게이트 예산 이하인지 Runbook에 적습니다. 워커 수×노드 수로 최악 팬인을 먼저 냅니다.
헬스 프로브·자동 셰딩
병합 헬스 실패·p95 SLO 위반 시 503·Retry-After로 유입을 줄이고 리미터를 잠시 조입니다. 준비·워커·의존성을 한 exit로 합칩니다.
실패 관측·로그 필드
거부·셰딩마다 동일 스키마로 남깁니다.
mesh_node_id·client_id·route_class·limit_nameretry_after_ms·HTTP 코드·queue_depth_hint
런북에 적을 숫자·체크
- 클래스별 RPS·버스트·동시 세션 세 줄표를 위키에 고정.
- 429=한도, 503=과부하·의존성으로 태그 통일.
- 워커×노드 ≤ 게이트 천장을 분기마다 검증.
FAQ
역프록시만으로 충분한가요?
per-IP·키는 엣지, 세션 의미는 게이트웨이. 한쪽만으론 장기 세션 누수를 못 막습니다.
한도를 올리면 될까요?
먼저 CI·웹훅 동시성을 내리세요. 게이트만 올리면 업스트림이 병목입니다.
메시 전체가 같은 시간에 깨어나면?
크론·재시도에 지터, 복제본엔 동일 리미터.