Skip to content

[ Spring Batch ] > Spring Batch 성능 개선 #12

@IMWoo94

Description

@IMWoo94

Spring Batch 적용하기

Spring Batch 성능개선

  • Spring Batch 의 확장을 통해서 성능을 개선해보자.
  • 물론 이러한 확장에 비례하여 성능이 꼭 우수해지는 것은 아니다.
    확장을 통한 성능 개선은 애플리케이션의 환경과 팀원간의 의견이 필수적이다.

Multi-threaded Step

Untitled
  • 일반적인 Step 의 처리 방식을 동기 방식에서 비동기 방식으로 변경하여 Multi 처리가 가능하도록 개선
  • 이를 통해서 Step 을 진행 하는 속도에 향상을 기대할 수 있다.
  • 단, Multi Thread 환경임으로 레이스 컨디션과 같은 이슈를 조심해야 하며 Thread-safe 하게 구현해야 한다.
  • 반영
    • Step 의 taskExector 를 비동기 실행기로 변경을 해주면 간단하게 구현이 가능하다.
      image

Parallel Steps

Untitled
  • 모든 Step 에 대해서 병렬이 아닌 특정 Step 에서만 병렬 처리를 하기 위한 경우에 사용되는 방식이다.
  • Flow 안에 주어진 Step 으로 묶어서 진행하고 이후 처리 로직에 따라 Step 을 추가 및 제어 할 수 있다.

Partitioning

Untitled
  • 매니저 ( 마스터 ) 를 이용해 데이터를 더 작은 Chunk (파티션) 으로 나눈 다음 파티션에서 슬레이브가 독립적으로 작동하는 방식
  • 컨셉에서는 멀티쓰레드 Step , 파티셔닝 큰 차이는 없어 보입니다.
    • 멀티 쓰레드 Step 은 단일 Step 을 Chunk 단위로 쓰레드를 생성해 분할 처리를 합니다.
      • 어떤 쓰레드에서 어떤 데이터를 처리할지 세밀하게 조절이 불가능
      • Step 의 ItemReader, ItemWriter 가 Thread-safe 유무가 중요하다.
    • 파티셔닝은 독립적인 Step 을 구성하고, 그에 따른 별도의 StepExecution 환경을 가지게 하여 처리 합니다.
      • 멀티쓰레드로 작동하지만, ItemReader, ItemWriter 의 Thread-safe 유무가 중요하지 않습니다.
      • 이러한 이유는 멀티 쓰레드 이지만, 각각의 Thread 마다 step 을 구성하는 것을 독립적이기 때문 입니다.

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions