[대규모 서비스를 지탱하는 기술] Appendix - 작업큐(Job-Queue) 시스템

June·2022년 1월 6일
0

웹 서비스와 요청

웹 서비스에서는 기본적으로 요청이 동기적으로 실행된다. 즉, 요청에 기인하는 모든 처리가 끝난 다음에 응답이 반환된다. 따라서 계속 성장해가는 웹 서비스에서는 데이터가 서서히 축적되면서 데이터를 추가하고 갱신하는 처리가 점점 무거워진다. 이런 경우에 작업큐 시스템을 사용함으로써 나중으로 미뤄도 되는 처리를 비동기로 실행할 수 있고 사용자 경험도 개선할 수 있다.

작업큐 시스템 입문

웹 애플리케이션의 일부 처리를 가장 간단하게 비동기화하는 방법은 비동기화 하고자 하는 처리를 독립된 스크립트로 해서 해당 스크립트를 애플리케이션 내부에서 호출하는 방법이다. 이렇게 함으로써 아주 간단하게 작업처리를 비동기화할 수가 있다. 단, 이 방법에서는 스크립트 시작과 초기화의 오버헤드가 커서 성능이 좋지는 않다. 또한 일시적으로 대량의 비동기 처리를 실행시키려 하면 그 수만큼의 프로세스를 실행시키려고 하기 떄문에 이것도 성능상 단점이 된다.

어느 정도 양이 있는 비동기 처리를 안정적으로 수행하려면 작업큐와 워커를 한 세트로 한 작업큐 시스템을 이용하는 것이 일반적이다. 작업큐 시스템에서는 작업큐에 실행하고자 하는 처리(작업)를 등록하고, 워커가 큐에서 작업을 추출해서 실제로 처리한다. 작업큐를 통해서 일시적으로 대량의 처리가 등록되었을 때 부하의 변동을 흡수할 수가 있다. 워커는 항상 실행해둠으로써 작업을 처리할 떄 초기화 오버헤드를 거의 없앨 수 있다.

0개의 댓글