분산 워크플로 제어면

Sharded workflow control plane

중앙 조정자의 부담을 워크플로별 조정자에게 나눠 동시 실행을 확장합니다.

···
html
<div class="scene"><div class="title">CONTROL PLANE: CENTRAL / SHARDED</div><div class="compare"><div class="mode" id="central"><b>ONE COORDINATOR</b><div class="nodes"><span>QUEUE</span><span>ONE</span><span>ENGINE</span></div><small>one metadata path</small></div><div class="mode" id="sharded"><b>WORKFLOW SHARDS</b><div class="nodes"><span>W1</span><span>W2</span><span>W3</span></div><small>slots shared by gate</small></div><div class="handle" id="handle"></div></div><div class="muted" id="planeState">Drag to compare the routing paths</div></div>
css
.scene{width:min(94vw,760px);height:min(86vh,320px);padding:clamp(10px,2.5vmin,18px);border:1px solid var(--line);border-radius:14px;background:var(--surface);color:var(--fg);font:500 clamp(11px,1.3vw,16px)/1.25 "Pretendard Variable",Pretendard,-apple-system,sans-serif;display:flex;flex-direction:column;gap:clamp(7px,1.6vmin,12px);overflow:hidden}.scene *{box-sizing:border-box}.title{font-weight:750;color:var(--accent)}.muted{color:var(--muted)}.mono{font-family:ui-monospace,monospace}.row{display:flex;align-items:center;justify-content:center;gap:clamp(5px,1.4vmin,12px);flex:1;min-height:0}.tile{border:1px solid var(--line);border-radius:8px;background:var(--bg);padding:clamp(6px,1.6vmin,12px);text-align:center;min-width:0}.on{border-color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.pulse{animation:pulse 1.6s infinite alternate}@keyframes pulse{to{border-color:var(--accent);transform:translateY(-3px)}}.compare{display:flex;position:relative;gap:5px;flex:1;min-height:0}.compare:before{content:"";position:absolute;left:10%;right:10%;bottom:11px;height:2px;background:var(--line)}.mode{flex:1;border:1px solid var(--line);border-radius:8px;padding:7px 7px 23px;display:flex;flex-direction:column;justify-content:space-around;text-align:center;min-width:0}.mode b{color:var(--accent)}.mode small{font-size:1em;color:var(--muted)}.nodes{display:flex;justify-content:center;gap:4px}.nodes span{border:1px solid var(--line);border-radius:5px;padding:6px 2px;flex:1}.mode.active .nodes span{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 13%,var(--surface))}.handle{position:absolute;bottom:5px;width:14px;height:14px;border-radius:50%;background:var(--accent);left:50%;transition:left .55s;transform:translateX(-50%)}
js
let side=0;function tick(){side=1-side;document.getElementById('handle').style.left=side?'75%':'25%';document.getElementById('central').classList.toggle('active',!side);document.getElementById('sharded').classList.toggle('active',!!side);document.getElementById('planeState').textContent=side?'Many coordinators own subsets':'One coordinator handles every instance'}tick();setInterval(tick,1250);document.querySelector('.compare').addEventListener('pointermove',e=>{if(e.buttons){const x=(e.clientX-e.currentTarget.getBoundingClientRect().left)/e.currentTarget.clientWidth;document.getElementById('handle').style.left=Math.max(10,Math.min(90,x*100))+'%'}})

Cloudflare의 2026년 Workflows V2는 계정별 단일 조정자가 모든 인스턴스 메타데이터를 처리하던 병목을 분산했습니다. 워크플로별 조정자가 일부 인스턴스를 관리하고 별도 슬롯 관리자가 동시 실행 용량을 배분합니다. 핵심은 인스턴스 상태의 책임을 각 실행 엔진에 두고 중앙에는 최소 정보만 남기는 것입니다.

데모의 비교 슬라이더는 중앙 경로의 대기열과 분산 경로의 여러 조정자를 보여줍니다. 이 구조는 제어면 확장 사례이며 모든 시스템의 성능 수치를 일반화하지 않습니다.

언제 쓰나

장기 실행 인스턴스 생성량이 늘어 중앙 메타데이터 조정자가 병목일 때 검토합니다.

페이지로 열기 ↗