병렬 처리

파티셔닝

  • 큰 작업을 여러 개의 더 작은 작업으로 나눠서 병렬로 실행할 수 있도록 한다.
  • 많은 레코드를 처리할 떄 유용하다.
  • 아키텍쳐에 따라 여러 쓰레드 등을 활용할 수 있다.
  • 더 작은 ‘파티션’으로 나눠서 독립적이고 동시에 처리할 수 있도록 한다.

이점

  • 확장성:
    • 더 작은 작업으로 나눠서 파티셔닝은 여러 프로세서나 기기에서 자원을 더 잘 활용하게 하고 작업량에 따라 쉽게 확장하거나 축소할 수 있게 한다.
  • 성능 향상
    • 데이터를 더 작은 청크로 동시에 처리하면 전반적인 실행 시간을 줄이고 성능 개선을 할 수 있다.
  • 장애 허용:
    • 파티션이 실패하면 다른 파티션과 독립적으로 재시도할 수 있어서 배치 작업의 견고성을 향상시킨다.
  • 로드밸런싱
    • 여러 파티션에 걸쳐 워크 로드를 고르게 분배함으로써 단일 자원이 병목 현상이 되는 경우를 방지할 수 있다.
  • 세분화된 자원 관리
    • 파티션별로 쓰레드 풀과 같은 자원을 구성하여 자원 할당에 대한 더 섬세한 제어를 할 수 있다.

전략

1. 범위 파티셔닝 : 특정 값에 따라 데이터를 나누는 것을 포함
2. 해시 파티셔닝 : 해시 함수를 사용해서 레코드가 속하는 파티션을 결정
3. 사용자 정의 파티셔닝 : 애플리케이션의 특정 요구에 맞게 유연성을 제공할 수 있다.
4. 동적 파티셔닝 : 런타임에 정확한 파티션 수를 결정할 수 있어서 적응 가능한 처리가 가능 ### 원격 청크 처리를 통한 파티셔닝 - Master/Slave가 별도의 JVM에서 실행될 수 있는 분산 시스템에서 자주 사용 #### 구성 요소 1. 원격 청크 처리 프레임워크 : springCloudDataFlow 2. 메시지 브로커 : Kafka 등

구현 단계

  1. 마스터 단계 구성 : 메시지 큐에 청크를 전송
  2. 원격 슬레이브 설정 : 슬레이브는 메시지를 수신하고 청크를 이에 따라 처리
  3. 오류 처리 : 서로 간 통신이 네트워크 실패와 같은 추가적인 복잡성을 초래하므로 적절한 오류 처리 필요

다중 쓰레드 실행

  • Step을 다중 쓰레드로 실행으로 병렬 처리함으로써 처리 속도를 높일 수 있다.

병렬 처리 이해

  • 기본적으로 작업 수행 방식을 변화시킨다.
  • 단계를 순차적으로 실행하는 대신, 작업을 동시에 처리할 수 있다
  • SimpleAsyncTaskExecutor
  • SyncTaskExecutor

주요 개념

  1. 동시성 vs.병렬성 : 동시성은 여러 작업을 동시에 관리할 수 있는 능력, 병렬성은 여러 작업을 동시에 실행하는 것
  2. 다중 쓰레딩 : 여러 쓰레드가 메모리와 CPU같은 자원을 공유할 수 있는 방식

Step을 다중쓰레딩하는 이유

  1. 성능 향상
  2. 자원 활용
  3. 확장성

Step MultiThreading 원리

  1. TaskExecutor 추상화를 제공, 쓰레드 실행 모델을 정의할 수 있는 능력을 제공한다.
    1. SimpleAsyncTaskExectuor: 각 작업에 대해서 새로운 쓰레드를 생성한다. 너무 많은 쓰레드 생성 시 자원 경합을 초래할 수 있다.
    2. ThreadPoolTaskExecutor : 재사용할 수 있는 쓰레드를 사용하는 더 효율적인 방법이다.
  2. 파티셔닝 : 단계를 독립적으로처리할 수 있는 여러 슬라이스 또는 조각으로 파티셔닝할 수 있다.
  3. Chunk 지향 처리 : 조각의 크리를 정의해서 이를 병렬로 진행할 수 있다.