Sidekiq는 Redis 큐에서 작업을 가져와 처리하는 Ruby 백그라운드 작업 프로세서입니다. 백그라운드 작업을 통해 GitLab은 작업을 백그라운드로 이동시켜 요청/응답 주기를 더 빠르게 제공합니다.
Sidekiq를 사용하면 작업을 백그라운드에서 수행함으로써 애플리케이션을 확장할 수 있습니다.
구성
Client
Sidekiq 클라이언트는 어떤 Ruby 프로세스(일반적으로 Puma 또는 Passenger 프로세스)에서도 실행되며, 나중에 처리할 작업을 생성할 수 있습니다.
작업 생성 코드 2가지
MyJob.perform_async(1, 2, 3)
Sidekiq::Client.push('class' => MyJob, 'args' => [1, 2, 3]) # 하위 레벨의 일반적인 API
이 두 방법은 동일하며 작업을 나타내는 Hash를 생성하고, 그 Hash를 JSON 문자열로 직렬화한 후, 그 문자열을 Redis의 큐에 푸시합니다. 이는 작업자에게 전달되는 인수가 간단한 JSON 데이터 타입(숫자, 문자열, 불리언, 배열, 해시)이어야 함을 의미합니다.
복잡한 Ruby 객체(예: Date, Time, ActiveRecord 모델)는 올바르게 직렬화되지 않습니다.
Server
각 Sidekiq 서버 프로세스는 Redis의 대기열에서 작업을 가져와서 처리합니다.
웹 프로세스와 마찬가지로 Sidekiq는 Rails를 부팅하여 작업과 워커가 Active Record를 포함한 전체 Rails API를 사용할 수 있도록 합니다.
서버는 워커를 인스턴스화하고 주어진 인수를 사용하여 수행을 호출합니다.
Redis
Redis는 Sidekiq를 위한 데이터 저장소를 제공합니다. 모든 작업 데이터와 함께 런타임 및 기록 데이터를 저장하여 Sidekiq의 웹 UI를 구동합니다.