문제
현재 진행 중인 프로젝트에서 ECS와 Autoscaling을 사용하여 서버를 확장하게 된다면 기존 계획과 다르게 문제가 될 거라고 판단했습니다. 아래 그림처럼 동일한 instance가 여러 개 생성된 상태에서 spring batch가 동작하여 matching 작업을 진행하게 되면 주문이 여러 번 매칭 되거나 누락되는 문제가 발생할 수 있다 생각이 들었습니다.
방법 1
Logistics API Server와 Logistics mathcing Server 애플리케이션을 분리
매칭 서버를 EC2 1개로 구성 ( Spring Batch 사용) -> 성능 향상 시 Scale Up을 통해 해결
Logistics API서버는 ECS로 생성
방법 2
AWS queue service, Lambda와 Cron을 지원하는 AWS Eventbridge를 이용
Event Bridge로 Triger를 터트려 큐에 적재 후 순차적으로 처리하는 방식
해결
방법 두가지를 고민하다가 멘토링을 진행하고 있는 멘토님의 조언을 받아 방법 1의 경우 배치 서버가 트래픽이 늘어날 경우에 대비해서 확장하기 어렵고 클라우드를 사용하는 상황에서 배치 서버가 실시간으로 실행하고 있다는 점도 단점으로 생각되어서 방법 2번으로 해결을 진행하였습니다. Lambda로 처리한 그룹화 처리 부분도 추후 성능 문제시 EC2로 교체가 용이하다 판단되었습니다.
1. Amazon EventBridge에 매칭 시간(오전, 오후 한 번씩)을 등록하여 람다 함수를 실행
물류 API를 호출해서 센터별 송장을 정렬 및 특정 최소 개수로 그룹화 진행
{ centerCode: “A01”, Date:”2022-07-26”, Meridiem:”오전”}
람다 1 : SELECT * FROM InvoiceWHERE centerCode = “A01” AND status = “매칭 전” AND deliveryDate = date
람다 2 : SELECT * FROM InvoiceWHERE centerCode = “B01” AND status = “매칭 전” AND deliveryDate = date
2. 정렬되고 그룹화된 데이터를 큐에 추가
3. Logistic App에서 que데이터 수신
4. que에서 받아온 local Code기반으로 배송 App에 배송기사 할당 요청
5. 주문 데이터 업데이트
6. 배송 App API 호출하여서 매칭 정보 update요청
'사이드프로젝트 > chan' 카테고리의 다른 글
CDK 사용중 테스트 및 AWS 환경에서 properties 문제 (0) | 2022.09.16 |
---|---|
[infra] MSA구성에 따른 인증 / 인가 로직 구현 (0) | 2022.09.02 |
[service]여러 서비스 사용에 따른 Integration Test (0) | 2022.09.02 |
[service] 라이더 할당시 동시에 할당되는 문제 해결 (0) | 2022.09.02 |
[Infra] AWS CDK(Type Script)를 이용하여 인프라 구성하기 (0) | 2022.09.02 |