
distributor 서비스는 클라이언트로부터 들어오는 로그 스트림을 처리하는 역할을 담당합니다. 이는 로그 데이터의 write path에서 첫 번째 단계입니다. distributor가 스트림 세트를 받으면 각 스트림을 정확성과 설정된 테넌트(또는 글로벌) 제한 내에 있는지 확인하여 유효성을 검사합니다. 유효한 청크는 배치로 분할되어 여러 ingester에 병렬로 전송됩니다.distributor 앞에 로드 밸런서를 배치하는 것이 중요합니다.distributor는 상태를 유지하지 않는(stateless) 컴포넌트입니다. 이로 인해 가장 중요한 쓰기 경로의 구성 요소인 ingester에서 가능한 많은 작업을 확장하고 오프로드(offload)하는 것이 쉽습니다. 이렇게 유효성 검사 작업을 독립적으로 확장할 수 있음으로써 Loki는 ingester를 과부하로부터 보호할 수 있습니다(악의적이든 아니든). distributor는 문 앞의 보안요원처럼 모두가 적절히 차려입고 초대장을 갖고 있는지 확인합니다. 이것은 또한 복제 요인에 따라 쓰기를 확산(fan-out)하는 것도 가능하게 합니다.distributor가 수신하는 데이터를 변형하는 유일한 방법은 라벨을 정규화하는 것입니다.Loki는 라벨을 결정적으로 캐시하고 해싱할 수 있게 됩니다.distributor는 테넌트당 최대 비트레이트에 따라 들어오는 로그를 속도 제한할 수 있습니다. 이는 테넌트당 한계를 확인하고 현재 디스트리뷰터 수로 나누어 계산합니다. 이를 통해 클러스터 레벨에서 테넌트별 속도 제한을 지정할 수 있으며, 디스트리뷰터 수를 확장 또는 축소함에 따라 테넌트당 제한도 조정할 수 있게 됩니다.<aside>
💡 distributor는 내부적으로 링(ring) 구성 요소를 사용하여 자신을 피어로 등록하고 활성 디스트리뷰터의 총 수를 얻습니다. 이는 ingester가 링에서 사용하는 "키"와는 다르며, distributor 자체의 링 구성에서 가져옵니다.
</aside>
distributor가 모든 유효성 검사 작업을 완료하면 데이터를 쓰기를 책임지는 ingester 컴포넌트로 전달합니다.distributor는 replication_factor만큼의 데이터를 ingester에게 전달합니다. (기본값: 3입니다)