[SPRING] 최고의 스프링 배치 스케일링 전략
SPRING최고의 스프링 배치 스케일링 전략
우리는 잘 작동하는 간단한 배치 프로세스를 가지고 있습니다. 최근에 우리는 보고서를 생성하기 위해 새로운 배치 프로세스를 구현하는 새로운 reqmnt를 가지고 있습니다. 우리는이 보고서를 준비하기 위해 읽어야 할 데이터의 출처가 다릅니다. 특히 우리는 각 보고서에 대해 하나의보기를 가질 수 있습니다.
이제이 프로세스를 가능한 한 빨리 확장하고 완료 할 수있는 방식으로이 프로세스를 확장하려고합니다.
나는 다중 스레드 단계에 익숙하지만 다른 전략 (원격 청킹 및 파티션 단계)과 언제 사용할 것인지에 대해서는 잘 모릅니다.
우리의 경우 파일을 처리 + 쓰는 것은 자원에 더 많은 유인책을 제시합니다.
그러한 경우에는 어떤 접근법이 가장 적합합니다.
또는 db에서 데이터를 읽는 것이 파일 작성 + 처리와 동일한 리소스 인센티브라는 것을 알게 된 경우이 프로세스를 개선 / 확장해야하는 최선의 방법은 무엇입니까?
해결법
-
==============================
1.TLDR;
TLDR;
귀하의 설명을 바탕으로 나는 당신이 처리 및 쓰기 언급은 단계의 더 비싼 부분이기 때문에 당신이 동기화 리더와 멀티 스레드 단계를 시도 할 수 있다고 생각합니다.
그러나 독자가 데이터베이스 인 것을 보는 것은 분할 된 단계를 구성하고 작업하는 것이 매우 유용 할 것이라고 생각합니다. 설정하는 데 조금 더 시간이 걸리지 만 장기적으로는 더 나아질 것입니다.
사용:
사용하지 마십시오 :
다중 스레드 단계는 Spring 배치에서 사용되는 청크 지향 처리를 사용합니다. 스텝을 멀티 스레드 할 때 스프링 배치가 자신의 스레드에서 전체 덩어리를 실행할 수 있습니다. 이는 데이터 청크에 대한 전체 읽기 - 프로세스 - 쓰기 사이클이 병렬로 수행됨을 의미합니다. 이는 데이터 처리를위한 보장 된 순서가 없음을 의미합니다. 또한 상태 저장 ItemReaders (JdbcCursorItemReader 및 JdbcPagingItemReader는 모두 상태 저장)에서 작동하지 않습니다.
사용:
사용하지 마십시오 :
상태 저장 항목 판독기에서 멀티 스레드 단계를 사용할 수 없다는 한계를 피하는 한 가지 방법이 있습니다. 그들의 read () 메소드를 동기화 할 수 있습니다. 이것은 본질적으로 연속적으로 일어나는 읽기를 일으키지 만 (여전히 순서에 대해서는 보장 할 수 없지만) 처리와 쓰기가 동시에 일어나는 것을 허용합니다. 읽기가 병목 현상이 아니지만 처리 또는 작성이 적합한 경우이 옵션을 사용하는 것이 좋습니다.
사용:
사용하지 마십시오 :
단계 분할은 다중 스레드 단계와 약간 다릅니다. 분할 된 단계를 사용하면 실제로 완전한 뚜렷한 단계 실행을 수행 할 수 있습니다. 각 StepExecution은 데이터의 자체 파티션에서 작동합니다. 이렇게하면 각 리더는 특정 데이터 조각 만보고 있기 때문에 독자는 동일한 데이터를 읽는 데 문제가 없습니다. 이 방법은 매우 강력하지만 멀티 스레드 단계보다 설정하는 것이 더 복잡합니다.
사용:
사용하지 마십시오 :
원격 청킹은 매우 진보 된 Spring 배치 사용법입니다. 메시지를 보내고받을 수있는 내구성있는 미들웨어 (예 : JMS 또는 AMQP)가 있어야합니다. 원격 청킹을 사용하면 읽기는 여전히 단일 스레드이지만 각 청크가 읽힐 때 처리를 위해 다른 JVM으로 전송됩니다. 실제로 이는 멀티 스레드 단계가 작동하는 방식과 매우 유사하지만 원격 청킹은 둘 이상의 스레드와 달리 둘 이상의 프로세스를 활용할 수 있습니다. 즉, 원격 청킹을 사용하면 수직 확장과 달리 응용 프로그램의 수평 확장이 가능합니다. (TBH, 원격 청킹을 구현할 생각이라면 Hadoop과 같은 것을 고려해야한다.)
사용:
사용하지 마십시오 :
병렬 단계는 독립적으로 실행할 수있는 단계 이상을 가지고있을 때 유용합니다. Spring 배치는 별도의 스레드에서 단계를 병렬로 쉽게 실행할 수있게합니다.
from https://stackoverflow.com/questions/29107607/best-spring-batch-scaling-strategy by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트를 사용하지 않고 스프링 휴식 서비스 만들기 (0) | 2019.03.03 |
---|---|
[SPRING] Spring에서 @Value의 기본값으로 null을 설정할 수 있습니까? (0) | 2019.03.02 |
[SPRING] 스프링 보안을 이용한 싱글 사인온 통합 (0) | 2019.03.02 |
[SPRING] 요청 매개 변수를위한 커스텀 Spring 애노테이션 (0) | 2019.03.02 |
[SPRING] 로그인 한 사용자를 기반으로 런타임 중에 데이터베이스 스키마 변경 (0) | 2019.03.02 |