Lbluetape4k · leader
단일 Leader 상세 모델 EN

Redis · Lettuce · 차이 중심 안내서

Leader 1 → N
독립 슬롯.

LeaderGroupElector는 token과 lease 모델을 그대로 두고 경계 하나만 바꿉니다. 최대 maxLeaders개의 후보가 독립적인 slot token을 소유할 수 있습니다.

슬롯 용량 시뮬레이션

동기식 모델 · 결정적 tick · 외부 요청 없음

Lettuce
LeaderElector1 lock → 1
LeaderGroupElector1 group → N occupied slots
Redis group slots · token + TTL
activeCount0
availableSlots0
isFullfalse
tick 0waitTime 2minLeaseTime 1group autoExtend 미제공

최근 이벤트

tick후보연산tokenTTL결과

01 · 차이 모델

같은 lease, 제한된 다중성

상세 LeaderElector 자료에서 acquire, 소유권 token, TTL, 만료, release를 먼저 설명합니다. 여기서는 허용된 후보마다 독립적인 slot token이 생기는 차이만 봅니다.

하나의 논리 그룹

모든 후보는 같은 lockName을 사용합니다.

N개의 독립 token

활성 token은 최대 maxLeaders개입니다.

LeaderGroupState

activeCount, availableSlots, isFull로 현재 용량을 읽습니다.

업무 partition 아님

token은 소유권 증거이지 안정적인 shard 번호가 아닙니다.

02 · 용량 설정

동시성 상한을 명시합니다

maxLeaders

동시에 슬롯을 소유할 수 있는 후보 수입니다. 직접 API는 1 이상을 허용합니다.

waitTime

그룹이 포화일 때 후보가 슬롯을 기다리는 상한입니다.

leaseTime

각 slot token의 TTL입니다.

minLeaseTime

짧은 작업도 최소 소유 시간을 지킵니다.

그룹 autoExtend 옵션은 없습니다.

명시적인 active-lock 연장은 고급 계약으로 존재하지만 이 차이 중심 자료에서는 애니메이션하지 않습니다.

03 · 직접 API

슬롯을 얻은 호출만 실행됩니다

val group = connection.leaderGroupElection(
    LeaderGroupElectionOptions(
        maxLeaders = 3,
        waitTime = 500.milliseconds,
        leaseTime = 10.seconds,
    )
)

val value = group.runIfLeader("thumbnail-workers") {
    processNextClaimedBatch()
}

val state: LeaderGroupState =
    group.state("thumbnail-workers")
처리 전에 claim 하십시오.

processNextClaimedBatch()에는 여전히 queue 또는 claim table이 필요합니다. 슬롯 허용 자체는 작업을 고유하게 분배하지 않습니다.

04 · Spring Boot

같은 경계를 선언적으로 적용합니다

@LeaderGroupElection(
    name = "thumbnail-workers",
    maxLeaders = 3,
    waitTime = "PT0.5S",
    leaseTime = "PT10S",
)
fun processNextClaimedBatch(): BatchSummary? =
    service.processNextClaimedBatch()

직접 LeaderGroupElectionOptionsmaxLeaders >= 1을 허용하지만 Spring 시작 검증은 @LeaderGroupElection.maxLeaders > 1을 요구합니다. 단일 리더에는 @LeaderElection을 사용합니다.

반환형 경계

T?, suspend T?, Mono<T>를 지원합니다. 슬롯별 stream lease 연장이 정의되지 않아 Flux<T>와 Kotlin Flow<T>는 거부합니다.

05 · 만료와 회복

만료된 슬롯은 나중 후보에게 열립니다

만료 후 진입 시나리오에서 작업 시간이 leaseTime보다 길면 기존 token의 TTL이 0이 됩니다. 그 token은 stale이며, 이후 후보가 새로운 token으로 빈 슬롯에 진입합니다.

tick 6  slot-token-A-1  TTL 0  → expired
tick 6  node-D          acquire → slot-token-D-3

// 기존 token은 새 소유자의 슬롯을 release할 수 없습니다.
멱등성과 fencing을 설계하십시오.

리스 만료 뒤 이전 작업이 계속될 수 있으므로 부작용은 중복 실행을 견디거나 stale writer를 거부해야 합니다.

고정 기준

0.4.0 소스와 설계 근거