<개요>
- S3보안버켓으로 파일을 올려서 Athena 작업중
- 1개의 CSV파일(2.65GB) 12개의 컬럼
- AthenaJDBC42.jar 사용
s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC-2.0.16.1000/docs/Simba+Athena+JDBC+Driver+Install+and+Configuration+Guide.pdf
- Query수행메소드 AOP로깅작업
- Spring boot -> Hikari max pool size = 20
<현상>
- Application 에 동시에 쿼리작업 요청시 아래와 같이 수행시간이 점차 늘어나는 현상
(마치 순차적으로 수행되는 것처럼 보이는..)
mysql이나 다른 database에서는 이러한 현상이 없기 때문에 Application의 문제는 아닐 것으로 추정
-Athena의 History메뉴에서 쿼리수행시간을 조회했을 때 개별쿼리의 수행시간에는 이상한 부분이 보이지 않음
<분석중>
-Athena의 하나의 테이블에서 동시에 수행할 수 있는 쿼리 수에 제한이 있다.
-Athena JDBC Driver에서 동시수행에 제한을 둔다.
-SimbaAthenaJDBC-2.0.16.1000 소스 분석중
<확인결과>
- Athena의 경우 Service 용도가 아니며 quota제한이 있어서 동시에 많은 요청이 올경우 내부적으로 순차처리를 하게 된다.
<해결방안>
1. wait/notify 로직구성
- 데이터분석API 호출시 기본적으로 @Async호출한다.
- API호출전에 현재 호출count를 확인하여 일정수치 이상일 경우 object.wait()로 대기하도록 한다.
- 호출이 성공하면 count를 증가시킨다.
- 비동기호출을 마치고 응답을 받으면 callback으로 호출count를 감소시키고 object.notify하도록 한다.
2. Athena로 많은 수의 요청이 집중되지 않도록 하여 timeout 및 오류현상을 해결할 수 있었으나 여전히 병목구간으로 남아있기 때문에 다음과 같은 추가조치를 진행중이다.
- 분산처리 가능한 대안 검토
- Redis를 이용한 캐시적용
'AWS Architecture' 카테고리의 다른 글
AWS S3-Athena 사용중 JDBC Driver동시성 문제 #2 (0) | 2021.11.04 |
---|---|
AWS SDK for Java (CloudWatchLogsAsyncClient 사용법) (0) | 2021.07.15 |
AWS Redshift with Spring JPA on Docker #2 (0) | 2020.09.07 |
AWS Redshift with Spring JPA on Docker #1 (1) | 2020.07.13 |
AWS Aurora vs RedShift (0) | 2020.04.20 |