Foundry Streaming 연산 사용량
Foundry Streaming은 병렬 워커에 전용 자원을 할당하여 메시지를 기다리고 변환한 뒤 다음 단계로 전달합니다. 실시간 처리와 아카이브 저장은 서로 다른 종류의 연산으로 집계합니다.
| 종류 | 처리 내용 | 사용량 분류 |
|---|---|---|
| 실시간 처리 | 새 데이터에 사용자 정의 변환을 계속 적용합니다. | streaming |
| 아카이브 | 스트리밍 저장 계층의 데이터를 Foundry 영구 저장 계층으로 옮깁니다. | 배치 transform |
상시 처리의 자원과 시간
실시간 처리 사용량은 실행한 전체 경과 시간과 할당 자원에 따라 계산합니다. vCPU, 메모리 또는 병렬성을 늘리거나 오래 실행하면 사용량이 증가합니다.
스트림 자원은 정적으로 할당되므로 실행 중에는 경과 시간당 일정한 compute-seconds를 사용합니다. 피크 입력량에 맞춰 할당한 자원은 입력량이 줄어도 유지되며, 아무 데이터가 들어오지 않아도 사용량이 발생합니다. 사용자가 중지할 때까지 실행이 계속됩니다.
기본 streaming_usage_rate는 0.5입니다. 기업 계약을 적용하는 환경에서는 실제 사용량 및 비용 계산 전에 계약 조건을 Palantir 담당자와 확인합니다. compute-seconds는 연산 사용량 단위이며 통화 금액과 구분합니다.
실시간 사용량 산식
D는 실행 시간(초), R은 streaming_usage_rate, N은 프로필의 병렬 task manager 수입니다. 메모리는 GiB 단위를 사용하며, 메모리 대 코어 비율은 7.5입니다. job manager와 task manager의 자원 값을 각각 대입합니다.
job_manager_compute_seconds
= max(job_manager_vCPU, job_manager_GiB / 7.5) * R * D
task_manager_compute_seconds
= max(task_manager_vCPU, task_manager_GiB / 7.5) * R * D * (N + 1)
total_live_compute_seconds
= job_manager_compute_seconds + task_manager_compute_seconds
병렬 워커는 서로 같은 자원을 사용합니다. task manager 산정에는 N + 1 항이 적용되므로 단순히 N개 워커의 CPU 시간만 더하는 방식과 구분합니다.
아카이브 작업
아카이브는 스트림의 핫 저장소에서 새 데이터를 읽어 지속적인 보관과 이력 추적을 위한 Foundry 저장소로 옮기는 배치 작업입니다. 스트림이 활성 상태인 동안 10분마다 실행하며, 마지막 아카이브 이후의 데이터를 처리합니다. 새 데이터가 없으면 아카이브 연산 사용량은 0입니다.
아카이브는 Spark 드라이버 하나를 사용하고 최소 프로필인 1 vCPU 및 4GiB RAM으로 실행합니다. 산식에는 실시간 처리의 R 계수를 적용하지 않습니다.
archive_compute_seconds
= max(num_vCPU, GiB_RAM / 7.5) * execution_seconds
실시간 처리는 빈 입력에서도 상시 사용량이 발생하지만, 아카이브는 처리할 데이터와 실제 실행 시간에 따라 사용량이 발생한다는 차이가 있습니다.
사용량 조사
Resource Management의 Usage by resource에서 스트림을 찾고 Details를 선택하면 데이터셋별 사용량을 확인할 수 있습니다.
스트림 처리 비용은 해당 스트림이 만드는 체크포인트 데이터셋에 귀속됩니다. 이 데이터셋은 처리 사용량의 지속적인 기록이며 Resource Management에서 streaming 범주로 표시됩니다.
스트림을 중지하면 해당 실행이 데이터셋의 History에 나타납니다. 과거 실행의 프로필을 확인하면 당시의 성능과 사용량을 해석할 수 있습니다. 아카이브 작업은 실행할 때마다 Builds에 연산 지표를 게시하므로 그곳에서 각 작업의 자원 할당을 조사합니다.
자원 조정 기준
사용량에 가장 큰 영향을 주는 요소는 스트림의 자원 규모입니다. task manager별 vCPU, 파티션별 메모리와 파티션 수가 실행 기간 동안 유지됩니다.
- 최대 동시 입력량을 감당할 수 있게 할당합니다. 처리 능력보다 입력이 많으면 스트림이 뒤처집니다.
- 자원을 바꾸려면 프로필을 변경하고 스트림을 다시 시작해야 합니다.
- 필요 이상으로 큰 프로필을 사용하지 않고, 필요한 스트림만 계속 실행되도록 관리합니다.
- 몇 분의 지연을 허용하면 같은 데이터량을 작은 마이크로배치로 처리하여 상시 연산 사용량을 줄일 수 있습니다.
10분 실행 예제
다음은 사용량 계산을 위한 가상 스트림이며, 운영 스트림은 보통 더 오래 계속 실행됩니다.
| 항목 | 예시 값 |
|---|---|
| Job manager vCPU | 0.5 |
| Job manager RAM | 1GiB |
| Task manager vCPU | 0.5 |
| Task manager RAM | 2GiB |
| 병렬성 N | 2 |
| 실행 시간 D | 600초 |
| R | 0.5 |
job manager는 max(0.5, 1 / 7.5) × 0.5 × 600 = 150 compute-seconds입니다. 초당 0.25 또는 시간당 900 compute-seconds에 해당합니다.
task manager는 max(0.5, 2 / 7.5) × 0.5 × 600 × (2 + 1) = 450 compute-seconds입니다. 초당 0.75 또는 시간당 2,700 compute-seconds에 해당합니다.
실시간 처리 합계는 600 compute-seconds입니다. 아카이브 작업의 사용량은 이 합계와 별도로 계산합니다.