Computer >> 컴퓨터 >  >> 프로그래밍 >> Ruby

Ruby on Rails에서 Sidekiq을 사용한 마스터 백그라운드 처리

Sidekiq을 사용하면 Ruby 개발자는 시간이 많이 걸리는 작업을 백그라운드로 이동하여 빠르고 반응이 빠른 웹 애플리케이션을 유지할 수 있습니다.

멀티스레딩을 핵심으로 하는 Sidekiq은 한 번에 많은 작업을 처리할 수 있습니다. 이로 인해 Sidekiq은 무거운 로드를 처리하거나 이메일 전송이나 파일 처리와 같은 작업을 수행하는 Ruby 또는 Rails 애플리케이션의 중요한 부분이 됩니다. 백그라운드 처리가 없으면 장시간 실행되는 작업이 애플리케이션의 메인 스레드를 차단하여 응답 시간이 느려지고 사용자 경험이 저하됩니다.

이번 게시물에서는 Sidekiq을 효과적으로 활용하여 백그라운드 작업을 관리하고 처리하는 방법에 중점을 둘 것입니다.

시작해 보세요!

사이드킥의 기본

본질적으로 Sidekiq은 모든 기능을 갖춘 Ruby용 백그라운드 처리 프레임워크입니다. 이를 통해 백그라운드 작업을 동시에 실행할 수 있으며 이는 응답성이 뛰어나고 안정적인 웹 애플리케이션에 매우 중요합니다. 이메일 보내기, 이미지 크기 조정, CSV 파일 처리 등 시간이 많이 소요되는 작업을 Sidekiq을 사용하여 백그라운드에서 수행할 수 있습니다.

Sidekiq의 아키텍처는 멀티스레딩과 "작업자" 개념에 크게 의존합니다. 그러나 Sidekiq 6.3.0부터 Sidekiq::Worker 모듈은 Sidekiq::Job를 위해 더 이상 사용되지 않습니다. "근로자"라는 용어는 혼란스러울 수 있습니다:

프로세스를 말하는 건가요? 스레드? 일종의 직업? 개발자들이 작업자라는 용어 사용을 중단할 것을 권장합니다.

매우 빠른 인메모리 데이터베이스인 Redis는 여기서 중요한 역할을 하며 이러한 백그라운드 작업을 저장하는 대기열 시스템 역할을 합니다.

참고: Sidekiq은 저장소로 Redis를 사용하지만 이 문서에서는 Redis 구성 및 사용법에 대해 자세히 다루지 않을 것입니다.

Sidekiq for Rails 설치 및 설정

시작하려면 Ruby 버전 2.5 이상과 Redis 서버 버전 4 이상을 실행해야 합니다.

이제 Sidekiq Ruby gem을 설치할 준비가 되었습니다.

먼저 애플리케이션의 Gemfile에 Sidekiq을 추가하세요.

 

그런 다음 프로젝트 디렉터리에 설치하세요:

 

이제 Sidekiq이 설치되었으므로 구성해야 합니다. Railsapplication에서 Sidekiq을 ActiveJob로 구성합니다. 어댑터. config/application.rb 열기 그리고 applicationclass 정의 안에 다음 줄을 추가하세요:

 

예를 들어 Redis 인스턴스를 가리키도록 Sidekiq 이니셜라이저를 생성하여 Sidekiq을 추가로 구성할 수 있습니다. 이것은 애플리케이션이 시작될 때 실행되는 Rails의 특수 스크립트입니다.

config/initializers에서 , sidekiq.rb라는 파일을 생성하세요. . 이 파일 내에서 다양한 Sidekiq 구성을 지정할 수 있습니다. 예를 들면:

 

이 구성은 Sidekiq에게 로컬 Redis 서버에 연결하도록 지시합니다. 물론 프로덕션 환경에서는 로컬 URL을 실제 Redis 서버의 URL로 바꾸게 됩니다(환경 변수를 위한 좋은 장소입니다).

그리고 그게 다야! Sidekiq을 설치하고 구성했으므로 이제 Rails 애플리케이션의 백그라운드에서 작업 생성 및 처리를 시작할 준비가 되었습니다.

사이드킥 작업 설정

기본 Sidekiq 작업을 설정하고 초기화하는 방법은 다음과 같습니다.

 

실제로 작업을 대기열에 추가하여 실행하려면 perform_async를 호출합니다. 작업 클래스에 대한 메소드는 다음과 같습니다:

 

이 줄은 작업을 사용할 수 있게 되자마자 실행되는 기본 대기열에 작업을 추가합니다. 인수 'some_name' 및 42가 수행 메소드 SomeNameForAJob에 전달됩니다. 실행 시.

여기에서 Sidekiq 클라이언트는 작업을 Redis의 대기열에 푸시하고 Sidekiq 서버는 작업을 처리할 준비가 되면 대기열에서 해당 작업을 가져옵니다.

첫 번째 Sidekiq 작업 만들기

Sidekiq에서 작업은 작업 클래스로 표시되며 수행해야 하는 작업은 perform에 정의됩니다. 방법. 기본 Sidekiq 작업을 만들어 보겠습니다.

 

이 코드 조각에서는 HelloNameJob 클래스를 만들었습니다. . 여기에는 name의 두 가지 인수가 필요합니다. 및 times . 수행되면 지정된 횟수만큼 콘솔에 인사말을 인쇄합니다. 물론 이것은 간단한 예이다. 실제 애플리케이션에서는 perform 메소드에는 백그라운드에서 실행하려는 모든 코드가 포함될 수 있습니다.

이제 작업을 실행하세요. perform_async로 전화하시면 됩니다. 클래스의 메서드를 사용하고 perform의 인수를 전달합니다. 메소드가 기대됩니다. HelloNameJob를 예약하는 방법은 다음과 같습니다. 방금 만들었습니다:

 

이렇게 하면 "Hello, Jeff!"를 인쇄하는 작업이 대기열에 추가됩니다. 다섯 번.

특정 시간에 작업을 수행해야 하는 경우 perform_in를 사용할 수 있습니다. 또는 perform_at 방법. 예:

 

이 예에서 'Meredith'는 5분 동안 그녀의 인사말을 세 번 받게 되는 반면, 'Jeff'는 그의 인사말을 두 번 받기 위해 이틀을 기다려야 합니다.

Sidekiq 고급 사용법

Sidekiq은 작업을 백그라운드로 오프로드하는 데 국한되지 않습니다. 또한 작업 재시도 및 작업 우선순위 지정 등 작업을 구성할 수 있는 고급 기능도 제공합니다.

자동 작업 재시도

Sidekiq의 가장 강력한 기능 중 하나는 자동 작업 재시도입니다. 기본적으로 처리되지 않은 예외로 인해 작업이 실패하면 Sidekiq은 지수 백오프로 작업을 다시 시도합니다. sidekiq_options을 지정하여 재시도 횟수를 맞춤설정할 수 있습니다. 수업시간에는 이렇게 하세요:

 

이 예에서 작업이 실패하면 Sidekiq은 포기하기 전에 해당 작업을 10번 다시 시도합니다.

작업 우선순위

작업 우선순위 지정은 Sidekiq이 제공하는 또 다른 고급 기능입니다. 작업을 다른 대기열에 할당하고 각 대기열의 우선순위를 설정하여 작업의 우선순위를 제어할 수 있습니다. 작업을 정의할 때 대기열을 지정하는 방법은 다음과 같습니다:

 

이 예에서 ThisJob에 대한 작업 중요 대기열에 배치됩니다. Sidekiq 서버를 시작할 때 대기열이 처리되어야 하는 순서를 지정할 수 있습니다.

이는 Sidekiq의 고급 기능을 활용하여 백그라운드 작업 처리를 미세 조정하는 방법에 대한 몇 가지 예입니다. Sidekiq을 사용하면 작업이 애플리케이션의 요구 사항에 가장 적합한 방식으로 효율적이고 안정적으로 처리되도록 하는 도구를 갖게 됩니다.

Sidekiq을 통한 모니터링 및 확장

Sidekiq에는 작업 처리 기능을 모니터링하고 확장하기 위한 표준 기능이 함께 제공됩니다. 웹 기반 대시보드를 통해 작업 대기열을 실시간으로 확인할 수 있습니다. 처리된 작업과 실패한 작업의 수는 물론 현재 작업과 예약된 작업에 대한 자세한 정보를 확인할 수 있습니다.

Sidekiq 대시보드를 사용하려면 Rails 경로 파일에 마운트하세요. config/routes.rb에서 , 추가:

 

이 줄을 추가한 후 서버에서 '/sidekiq'로 이동하여 대시보드에 액세스할 수 있습니다.

AppSignal로 Sidekiq 모니터링

보다 포괄적인 모니터링을 위해 Sidekiq은 AppSignal과 같은 애플리케이션 성능 모니터링 도구와 잘 통합됩니다. AppSignal의 Sidekiq 대시보드는 실패 및 재시도된 작업, 작업 기간, Redis 메모리 사용량을 포함하여 Sidekiq 작업에 대한 자세한 통찰력을 제공합니다.

Ruby on Rails에서 Sidekiq을 사용한 마스터 백그라운드 처리

이러한 종류의 정보는 애플리케이션을 확장할 때 병목 현상을 식별하는 데 매우 중요합니다. 그 외에도 AppSignal의 경고는 대기열 길이와 같은 이상 현상을 파악하는 데 도움이 되므로 대기열이 언제 증가했는지 알 수 있습니다.

Ruby on Rails에서 Sidekiq을 사용한 마스터 백그라운드 처리

Rails를 사용하여 AppSignal을 Sidekiqsetup에 통합하는 것은 간단합니다. AppSignal의 Ruby gem은 추가 구성 없이 Sidekiq 서버 미들웨어에 삽입됩니다. 이는 ActiveJob에서도 작동합니다!

문서에 언급된 설정을 사용하면 Rails에서 실행되지 않는 Sidekiq 애플리케이션에 AppSignal을 사용할 수도 있습니다.

Sidekiq 사용 사례

Sidekiq의 가장 일반적인 사용 사례 중 두 가지는 비동기 이메일 전송과 예약 보고서 생성입니다. 이러한 예 중 하나를 자세히 살펴보겠습니다.

이메일, 특히 첨부 파일이 크거나 수신자가 많은 이메일의 경우 전송하는 데 상당한 시간이 걸릴 수 있습니다. 백그라운드 작업에서 이메일 전송을 처리하면 이메일이 처리되는 동안 애플리케이션이 사용자 요청에 계속 응답할 수 있습니다.

다음은 Rails 애플리케이션에서 이메일을 보내기 위한 Sidekiq 작업의 간단한 예입니다:

 

이 예에서는 ResetPasswordJob UserMailer을 사용합니다 클래스를 사용하여 사용자에게 비밀번호 재설정 이메일을 보냅니다. 보낼 이메일을 대기열에 추가하려면 ResetPasswordJob.perform_async(user_id)로 전화하세요. 응용 프로그램의 다른 곳에서.

그러나 일반적인 Rails 애플리케이션에서는 이메일 전송을 위해 별도의 Sidekiq 작업을 생성할 필요가 없는 경우가 많습니다. Rails는 이메일을 보내는 데 사용되며 백그라운드 처리를 위해 Active Job과 잘 통합되는 Action Mailer 프레임워크를 제공합니다.

다음은 Active Job 및 Action Mailer를 사용하여 비밀번호 재설정 이메일을 보내는 방법의 예입니다.

 

이 예에서는 deliver_later를 호출합니다. 메일러에서는 백그라운드 작업으로 보낼 이메일을 자동으로 대기열에 넣습니다. 그 뒤에서 Active Job은 Sidekiq을 사용하여 이러한 작업을 관리합니다.

그러나 재시도 동작 또는 대기열 우선 순위 지정 등 작업에 대한 더 많은 제어를 원하거나 Action Mailer만큼 쉽게 ActiveJob과 통합되지 않는 작업을 처리하는 경우에는 별도의 Sidekiqjob을 생성하는 것이 적절합니다.

이러한 유연성은 Sidekiq의 성능 및 사용 용이성과 함께 Rails 애플리케이션에서 다양한 백그라운드 작업을 처리하는 데 유용한 도구가 됩니다.

마무리

이 게시물에서는 Sidekiq을 소개하고 기본 사항을 살펴보고 설치 및 설정에 대해 자세히 알아보고 유용한 작업을 생성 및 실행하는 방법을 살펴보았습니다.

또한 Sidekiq의 고급 기능을 살펴보고, 실제 사용 사례를 살펴보고, Ruby 애플리케이션의 성능과 확장성을 향상시키는 데 있어 Sidekiq의 중요한 역할에 대해 논의했습니다.

이 소개에서 얻은 지식을 바탕으로 이제 귀하의 Rails 앱에서 Sidekiq을 더욱 효과적으로 사용할 수 있는 준비가 되었습니다.

즐거운 코딩 되세요!

추신 Ruby Magic 게시물이 보도되는 즉시 읽으려면 Ruby Magic 뉴스레터를 구독하고 단 하나의 게시물도 놓치지 마세요!