TroubleShooting 2

Spring Batch 성능 개선기(병렬처리)

최근 회사에서 프로젝트를 진행하며 사용했던 Spring Batch 성능 개선기를 기록해보려합니다. 먼저, 간략하게 배치가 어떤 흐름으로 동작하는지를 알아보면 1. 대상 상품 조회(Reader)대상 2. 상품중 비즈니스 로직으로 필터링(Processor) 3. api 호출 및 결과 db 저장(Writer) 와 같이 동작하고 있습니다. 1. 병목 지점 찾기 위 프로세스로 동작하는 프로토타입 레벨의 배치는 대상 상품 30 ~ 40만개 기준 4시간 ~ 6시간 정도가 소요되고 있었습니다. 별도의 커스텀한 설정을 따로 하지 않았기 때문에 싱글 쓰레드 기반으로 동작할 것이고 하나씩 순차적으로 처리되고 있습니다. step을 분리하여 병목지점을 분석한 결과는 다음과 같은데요. Mongo DB 단건 저장 3번의 api c..

TroubleShooting 2024.04.05

모니터링 습관화하기

최근들어 근무시간에 틈이 날때마다 서버 모니터링을 습관화하려고 모니터링 솔루션을 이용해 자주 들여다보곤한다. 우리가 기대하는 서버의 히트맵은 아래와 같지만, 특정 API, 특정 로직, 특정 쿼리에 병목지점이 있다면 아래와 같이 히트맵이 위로 튀곤한다. 이걸 분석해서 병목지점을 해소하고 원인을 파악하는 재미가 은근 쏠쏠하다고 느꼈다. 대부분의 경우에는 정말 간단한 휴먼 에러의 경우가 많은 것 같은데, 이런 것들을 잡아내기 어려운 이유가 간헐적으로 발생하며 서버 모니터링을 주기적으로 하지 않는 이상 병목 지점이라는 것조차 느끼기 힘든 것 같다. 서버에 대해 에러 응답 비율이 높아지면 알림을 받을 수 있도록 별도의 설정을 하더라도 간헐적으로 발생하기 때문에 방치되는 경우가 많다. 실제로 모니터링 중 발견한 간..

TroubleShooting 2024.01.11
반응형