InfoGrab DocsInfoGrab Docs

Sidekiq 멱등 job

Sidekiq job의 멱등성 선언, 중복 제거 전략 및 TTL 설정 방법을 설명합니다.

job은 네트워크 장애나 버그 등 다양한 이유로 실패할 수 있습니다. 이를 해결하기 위해 Sidekiq에는 기본 재시도 메커니즘이 내장되어 있으며, GitLab 내 대부분의 워커는 이를 기본으로 사용합니다. job이 실패 후 다시 실행되더라도 애플리케이션이나 사용자에게 큰 부작용이 없어야 하므로, Sidekiq은 job을 멱등적이고 트랜잭션적으로 만들도록 권장합니다. 일반적으로 워커를 멱등적으로 간주할 수 있는 조건은 다음과 같습니다: 동일한 인수로 여러 번 안전하게 실행할 수 있어야 합니다. 애플리케이션의 부작용은 한 번만 발생해야 합니다 (또는 두 번째 실행의 부작용이 영향을 미치지 않아야 합니다). 좋은 예로 캐시 만료 워커를 들 수 있습니다. 멱등 워커에 예약된 job은, 동일한 인수를 가진 아직 시작되지 않은 job이 이미 큐에 있을 경우 중복 제거 됩니다. 워커가 멱등적임을 보장하기 # 다음 공유 예제를 사용하여 job을 두 번 실행했을 때의 영향을 확인하세요. it_behaves_like 'an idempotent worker' 공유 예제는 job_args 가 정의되어 있어야 합니다. 정의되지 않은 경우 인수 없이 job을 호출합니다. 공유 예제가 실행될 때, job의 부작용을 피하는 mock이 설정되어 있으면 안 됩니다. 예를 들어, 워커가 서비스의 execute 메서드를 스텁하지 않고 호출할 수 있도록 허용해야 합니다. 이렇게 해야 job이 진정으로 멱등적임을 검증할 수 있습니다. 공유 예제에는 몇 가지 기본 테스트가 포함되어 있습니다. 공유 예제 블록 내에 워커에 특화된 멱등성 테스트를 추가할 수도 있습니다. it_behaves_like 'an idempotent worker' do it 'checks the side-effects for multiple calls' do # `perform_idempotent_work` will call the job's perform method 2 times perform_idempotent_work expect(model.state).to eq('state') end end 워커를 멱등적으로 선언하기 # class IdempotentWorker include ApplicationWorker # Declares a worker is idempotent and can # safely run multiple times. idempotent! # ... end idempotent! 호출은 perform 메서드가 다른 클래스나 모듈에 정의되어 있더라도 최상위 워커 클래스에만 두는 것을 권장합니다. 워커 클래스에 멱등 표시가 없으면 cop이 실패합니다. job이 여러 번 안전하게 실행될 수 없다고 판단되면 cop을 건너뛰는 것을 고려하세요. 중복 제거 # 멱등 워커에 대한 job이 큐에 추가될 때, 아직 시작되지 않은 동일한 job이 이미 큐에 있다면 GitLab은 두 번째 job을 삭제합니다. 처음 예약된 job이 동일한 작업을 수행할 것이므로 작업이 건너뛰어집니다. 두 번째 job이 실