<aside>
💡 Futures-based asynchronous runtime 이란 ?
'Future
'는 비동기 프로그래밍에서 사용되는 개념으로, 어떤 연산의 결과가 나중에 사용될 수 있도록 예약하는 것을 의미합니다. Future는 연산이 완료될 때까지 기다리지 않고 즉시 반환되며, 연산의 결과는 Future가 완료되었을 때 사용할 수 있습니다. 이는 연산이 백그라운드에서 수행되고, 그 결과는 나중에 필요할 때 검색될 수 있음을 의미합니다.
'Asynchronous
'는 동시에 여러 작업을 처리하는 데 사용되는 프로그래밍 방식입니다. 이 방식에서 작업은 다른 작업의 완료를 기다리지 않고 독립적으로 실행됩니다. 이는 효율적인 자원 사용과 더 빠른 응답 시간을 가능하게 합니다.
결론적으로 a futures-based asynchronous runtime은 비동기적으로 실행되는 프로그램 또는 작업을 관리하기 위해 'futures'를 사용하는 실행 환경 또는 프레임워크를 의미합니다.
</aside>
Vector의 모든 비동기 작업과 통신은 Tokio 런타임에 의해 스케줄링되고 관리됩니다. 비동기 작업은 채널을 통해 통신하며 작업 또는 프로세스 간에 데이터를 교환할 때 사용합니다.
*Tokio는 Rust의 비동기 런타임 라이브러리입니다.
Vector의 Task는 Source, Transform, Sink 3가지로 나위어지고, 각각을 노드로 취급합니다. 각 노드는 독립적인 비동기 작업을 수행하여 시스템이 여러 작업을 동시에 수행할 수 있게 합니다.
데이터 파이프라인에서 Stateless transforms(상태를 유지하지 않는 변환 작업)를 sources에 통합시킴으로써 동시성을 확보하고, 시스템의 복잡성을 줄입니다.
*만일, Stateless transforms가 source에 통합되지 않았을 경우 비동기 작업을 별도로 분리해야 하기 때문에 시스템이 보다 복잡해질 수 있습니다.
Transform은 사용 목적에 따라 tasks transforms 또는 stateless function transfomrs을 각기 다르게 사용합니다.
Task transforms
Task transforms는 상태를 가지거나 복잡한 작업을 수행하는 변환이 필요할 때 사용합니다.
Task transforms는 이전 상태나 데이터에 의존하기 때문에 병렬처리를 할 수 없다는 단점이 있습니다. 이 같은 결함은 시스템 내부에서 병목 현상을 유발할 수 있으며 전체 파이프라인의 성능에 악영향을 미칠 수 있습니다.
Task transforms는 플러그인 명세의 state에 stateful로 표기됩니다. 대표적으로 dedupe transform
플러그인 있습니다.
Stateless function transforms
Stateless function transforms는 앞서 Concurrency Model에서 설명했다시피 이전의 노드 혹은 이전 처리 단계의 상태나 데이터에 의존하지 않는 변환입니다. 이러한 특성은 각 노드가 독립적으로 동작함과 동시에 병렬처리가 가능한 이점을 제공합니다.
Stateless function transforms는 플러그인 명세의 state에 stateless로 표기됩니다. 대표적으로 remap transform
플러그인이 존재합니다.