ㅁ 풀어야 할 문제
정해진 시간에 실행되는 배치 처리는 많은 시스템에서 이루어지고 있고, 그 방법으로는 항상 가동 중인 서버 위에 스케줄러(예를 들어 UNIX의 cron)를 사용하는 경우가 많다.
그러나 실제 배치 처리를 하는 시간은 짧고, 그 시간 이외의 서버 자원은 낭비가 되며 비용 효율이 낮아진다. 이런 용도의 일괄 처리 서버 자원을 얼마나 효율적으로 사용하는지가 항상 문제였다.
ㅁ 해결/패턴
기존에는 정해진 시간에 실행되는 배치 처리 서버에도 당연히 항상 가동 중인 서버를 할당해야 했다. 그리고 다른 기능(처리)도 부여하여 서버 자원의 이용 효율을 높이려고 노력했다.
클라우드에는 필요할 때만 가상 서버를 이용할 수 있어 일괄 처리를 하는 경우에만 가상 서버를 가동할 수 있게 되었다.
정해진 시간에 실행되는 일괄 처리는 가상 서버를 정해진 시간에 가동되는 구조가 필요하다. 이것은 클라우드의 스케줄링 기능을 이용하면 구현할 수 있다.
ㅁ 구현
AWS에서는 [Auto Scaling]이라는 EC2 인스턴스를 자동으로 추가하고 삭제하는 기능을 가지고 있어서 정해진 시간에 실행되는 일괄 처리에 이용할 수 있다.
- 가동할 때 해당 처리를 수행하는 AMI(서버 이미지)를 준비한다.
- Auto Scaling으로 지정한 시각에 AMI에서 EC2가 가동되도록 설정한다.
- 처리 완료 후에는 EC2가 종료되도록 EC2 자체에 Auto Scaling을 설정한다.
ㅁ 장점
- 정해진 시간에 일괄 처리하는 EC2 인스턴스는 항상 가동되지 않는다. 처리를 하는 시간에만 EC2 인스턴스가 가동하기 때문에 많은 비용 절감을 기대할 수 있다.
- 배치 처리 종료 시간을 정하기 어려운 경우, EC2 인스턴스의 배치 처리가 끝나고 나서 Ec2 인스턴스가 자신을 종료시키는 방법도 자주 사용된다.
- EC2 인스턴스는 시간 단위로 요금이 부과되고, 한 시간이 안되게 사용했더라도 한 번 가동하고 종료하면 한 시간 분량의 요금이 부과된다. 가동, 종료 타이밍에 주의가 필요하다.
'AWS Design Pattern > 일괄 처리 패턴' 카테고리의 다른 글
Job Observer - 작업 감시와 서버 추가 삭제 (0) | 2021.02.05 |
---|---|
Priority Queue - 작업 우선 순위 변경 (0) | 2021.02.05 |
Queuing Chain - 큐를 통한 시스템간의 낮은 의존도 구성 (0) | 2021.02.05 |