본문 바로가기

AWS Design Pattern/일괄 처리 패턴

Job Observer - 작업 감시와 서버 추가 삭제

ㅁ  풀어야 할 문제

배치 처리 부하분산으로 작업 요청을 큐로 관리하고 큐의 작업 요청을 여러 대의 배치 서버가 병렬로 처리하는 방법이 있다. 그러나 준비한 배치 서버 수는 피크 수준에 맞춘 수이기 때문에 피크 외 시간대에는 배치 서버의 자원이 남아 비용 효율이 낮아진다.

또 예상 이외로 부하가 배치 시스템에 몰릴 경우 응답 성능이 떨어진다.

 

  해결/패턴

기존에는 서버 자원을 동적으로 추가하고 삭제할 수 없었기 때문에 피크나 허용 비용 범위 내에서 배치 서버를 준비했다.

비용 효율이 좋지 않아 예상하지 못한 부하에 대응할 수 없었다. 클라우드에서는 부하를 감시하고 가상 서버를 자동으로 줄이고 늘리는 구조를 제공하고 있다.

이 구조를 이용하면 부하에 따라 서버를 추가하고 삭제할 수 있게 되며, 비용 효율이 좋고, 예상 외의 부하에 대응할 수 있게 된다. 구체적으로 작업 요청(큐잉 메시지)에 대해 그 양을 감시하고, 필요에 따라 일괄 처리 서버를 자동으로 추가하고 삭제한다.

 

  구현

AWS에서는 Auto Scaling 이라고 하는 EC2 자동 추가 삭제 기능이 있어 CloudWatch라는 자원 감시 툴과 연동하여 감시 항목 값에 따라 EC2를 추가 하고 삭제할 수 있다.

 CloudWatch로 감시할 수 있는 항목은 AWS가 제공하는 큐 서비스인 SQS내의 메시지 수가 있다.

작업 요청을 SQS에서 관리하고 Auto Scaling CloudWatch를 사용하면, 큐 내의 메시지 수(작업 요청)에 따라 일괄 처리 서버를 자동으로 추가하고 삭제할 수 있는 시스템 구축이 가능하다.

 

-       작업 요청을 SQS의 메시지로 InQueue한다.

-       배치 서버가 SQS에서 메시지를 DeQueue하여 처리한다.

-       Auto Scaling으로 배치 처리 서버가 자동으로 추가, 삭제할 수 있도록 설정하고, 추가, 삭제에 대한 트리거는 SQS 메시지 수(CloudWatch)로 한다.

 

  장점

-       작업 서버 EC2 인스턴스 수는 작업 수와 연동되어 비용 효율이 좋아진다.

-       병렬 처리를 하기 때문에 작업 전체를 단시간에 실행할 수 있다.

-       작업 서버 EC2에 장애가 발생해도 SQS 메시지(작업 요청)가 남아 있어 EC2가 복구되면 바로 처리가 가능하여 장애에 강한 시스템이 된다.

 

  주의점

-       EC2 인스턴스는 시간단위로 요금이 부과되고, 짧은 시간이라도 한 번 가동하고 종료하면 한 시간 분량의 요금이 부과된다. 가동, 종료 타이밍에 주의가 필요하다.

-       Queuing Chain 패턴이나 Priority Queue 패턴과 같이 사용할 수 있다.