스트리밍 endpoint 개요
X 스트리밍 endpoint는 볼륨별로 분류됩니다:데이터 전송 및 지연 시간
X API 스트리밍 endpoint는 데이터 hydration 및 전송을 우선시합니다. 모든 메타데이터가 포함된 hydrated Post 데이터를 확실히 받을 수 있도록, 이 스트림은 P99 지연 시간이 약 6-7초입니다.전송 보장
고용량 스트림
Firehose 및 Sample (1% 및 10%) 스트림과 같은 고용량 스트림의 경우, 모든 Post의 99%가 생성 시간으로부터 1분 이내에 전송됩니다. 이 보장은 전체 데이터 피드의 고용량, 연속적인 특성에 기반합니다.저용량 스트림
Filtered Stream과 같이 상대적으로 저용량인 스트림의 경우, 필터의 구체성 및 일치하는 Post의 결과 볼륨에 따라 전송 시간이 달라질 수 있습니다.사용 사례에 더 낮은 지연 시간이 필요한 경우, 속도에 최적화되어 최소한의 지연으로 데이터를 전송하는 Powerstream을 고려하세요.
클라이언트 설계
스트리밍 endpoint로 솔루션을 구축할 때, 클라이언트는 다음을 수행해야 합니다:- 스트리밍 endpoint에 HTTPS 스트리밍 연결 설정
- 낮은 데이터 볼륨 처리 — 연결을 유지하면서 Post 객체와 keep-alive 신호를 감지
- 높은 데이터 볼륨 처리 — 비동기 프로세스를 사용해 스트림 수신과 처리를 분리하고, 클라이언트 측 버퍼가 정기적으로 비워지도록 보장
- 클라이언트 측 볼륨 추적 관리
- 연결 해제 감지 및 자동 재연결
스트리밍 endpoint 연결
X API 스트리밍 endpoint에 연결한다는 것은 매우 오래 지속되는 HTTP 요청을 생성하고 응답을 점진적으로 파싱하는 것을 의미합니다. 개념적으로, HTTP를 통해 무한히 긴 파일을 다운로드하는 것으로 생각할 수 있습니다. 연결이 설정되면 X 서버는 연결이 열려 있는 동안 계속 연결을 통해 Post 이벤트를 전송합니다.데이터 소비
스트림의 JSON 객체는 field가 임의의 순서로 나타날 수 있으며, 모든 상황에서 모든 field가 존재하지는 않습니다. Post는 정렬된 순서로 전송되지 않으며, 중복 메시지가 발생할 수 있습니다. 시간이 지남에 따라 새로운 메시지 유형이 스트림에 추가될 수 있습니다. 클라이언트는 다음을 허용해야 합니다:- field가 임의의 순서로 나타남
- 예기치 않거나 누락된 field
- 정렬되지 않은 Post
- 중복 메시지
- 언제든지 등장할 수 있는 새로운 메시지 유형
버퍼링
스트리밍 endpoint는 데이터가 사용 가능해지는 대로 빠르게 전송하며, 이는 높은 볼륨으로 이어질 수 있습니다. X 서버가 스트림에 새 데이터를 쓸 수 없는 경우(예: 클라이언트가 충분히 빨리 읽지 않는 경우), X 서버 측에서 콘텐츠를 버퍼링합니다. 그러나 이 버퍼가 가득 차면 연결이 끊어지고 버퍼링된 Post는 손실됩니다. 앱이 뒤처지고 있는지 식별하는 한 가지 방법은 수신된 Post의 타임스탬프를 현재 시간과 비교하고 시간 경과에 따라 추적하는 것입니다. 스트림 지연을 최소화하려면:- 스트림을 빠르게 읽기 — 읽는 동안 처리 작업을 하지 마세요. 활동을 다른 스레드/프로세스/데이터 저장소로 넘겨 비동기 처리하세요
- 충분한 대역폭 확보 — 데이터 센터는 대규모의 지속적인 볼륨과 스파이크(정상 볼륨의 5-10배)에 대한 인바운드 대역폭이 필요합니다
시스템 메시지에 대한 응답
Keep-alive 신호
최소 20초마다 스트림은 열려 있는 연결을 통해\r\n 캐리지 리턴 형태의 keep-alive 신호(하트비트)를 보냅니다. 이는 클라이언트의 시간 초과를 방지합니다. 클라이언트는 이러한 문자를 허용해야 합니다.
HTTP 라이브러리에서 읽기 시간 초과를 구현하는 경우, 이 기간 내에 데이터가 읽히지 않으면 HTTP 프로토콜이 이벤트를 던지도록 의존할 수 있습니다. 이러한 시간 초과를 감지하고 재연결을 트리거하기 위해 HTTP 메서드를 오류/이벤트 핸들러로 래핑하는 것이 좋습니다.
오류 메시지
스트리밍 endpoint는 스트림 내 오류 메시지를 전달할 수 있습니다. 클라이언트는 변경되는 메시지 페이로드를 허용해야 합니다. 오류 메시지 형식 예시:버퍼가 가득 차서 강제 연결 해제되었음을 나타내는 오류 메시지는 백업으로 인해 전달이 방해받는 경우 클라이언트에 도달하지 않을 수 있습니다. 재연결을 시작하기 위해 이러한 메시지에만 의존해서는 안 됩니다.
사용량 추적
예기치 않은 편차에 대비해 스트림 데이터 볼륨을 모니터링하세요. 볼륨이 크게 감소하면 연결 해제 이외의 문제를 나타낼 수 있습니다 — 스트림은 여전히 keep-alive 신호와 일부 데이터를 받고 있지만, Post 볼륨이 감소하면 조사해야 합니다. 모니터링을 만들려면:- 설정된 시간대에 예상되는 Post 수를 추적하세요
- 볼륨이 임계값 아래로 떨어지고 회복되지 않으면 알림을 시작하세요
- 특히 규칙을 수정할 때나 Post 활동이 급증하는 이벤트 중에는 큰 증가도 모니터링하세요
스트리밍 endpoint를 통해 전달된 Post는 월간 Post 볼륨에 포함됩니다. 사용을 최적화하려면 소비를 추적하고 조정하세요. 볼륨이 높은 경우, 규칙에
sample: 연산자를 추가하여 매칭을 100%에서 sample:50 또는 sample:25로 줄이는 것을 고려하세요.멀티스레드 처리
멀티스레드 애플리케이션을 구축하는 것은 고용량 스트림을 처리하는 데 핵심입니다. 모범 사례:- 스트림 스레드 — 연결을 설정하고 수신된 JSON을 메모리 구조나 버퍼링된 스트림 리더에 쓰는 경량 스레드
- 처리 스레드 — 버퍼에서 소비하고 무거운 작업을 수행하는 별도의 스레드: JSON 파싱, 데이터베이스 쓰기 준비, 또는 기타 애플리케이션 로직
다음 단계
연결 해제 처리
연결이 끊길 때 우아하게 재연결
고용량 처리
고처리량 스트림 처리
복구 및 이중화
복원력 있는 스트리밍 애플리케이션 구축