Telegram 데이터 센터 아키텍처 및 인프라의 미스터리

Telegram 데이터 센터 아키텍처 및 인프라의 미스터리

Telegram의 인프라는 사용자 계정, 메시지 라우팅 및 미디어 저장소를 처리하는 지리적으로 분산된 데이터 센터(DC) 시스템을 기반으로 구축되었습니다. 이 아키텍처는 단일 기관의 법적 접근을 복잡하게 만들기 위해 사용자 데이터를 여러 관할 구역에 분산시키도록 설계되었지만, 이는 최종 사용자에게 다양한 성능 및 투명성 문제를 야기합니다.

지리적 분산 및 사용자 라우팅

Telegram은 등록 시점의 지리적 위치를 기반으로 사용자를 특정 데이터 센터에 할당하며, 이는 애플리케이션의 지연 시간(latency)과 성능에 직접적인 영향을 미칩니다. 현재 위치에서 물리적으로 멀리 떨어진 DC에 연결된 사용자는 종종 더 느린 응답 시간을 경험합니다. \n* DC2: 모든 MTProto 클라이언트의 주요 연결 지점 역할을 하며, 러시아 및 우크라이나 사용자를 위한 주요 허브입니다. 러시아어권 기술 커뮤니티에서는 서비스 중단을 설명할 때 "DC2 down"이라는 문구가 흔히 사용됩니다.

  • DC5: 주로 한국과 같은 지역에서 가입한 사용자를 포함하여 아시아 사용자를 지원합니다. 일부 사용자는 DC5가 중국 사용자들의 불만과 상관관계가 있는 중단을 경험한다고 보고합니다.
  • Miami DC: 미국 동부 해안에 위치한 사용자는 Miami 데이터 센터에 할당되었을 때 높은 응답성("snappy fast")을 보고하며, 이는 빈번한 요청을 수행하는 앱에서 물리적 근접성이 지연 시간에 얼마나 중요한지를 강조합니다.

데이터 저장 및 미디어 처리

Telegram은 대역폭과 성능을 최적화하기 위해 계정 메타데이터 및 메시지 저장과 대용량 미디어 파일 저장을 분리합니다.

  • 계정 데이터: 사용자의 프로필과 메시지 내역을 관리하는 특정 DC에 저장됩니다.
  • 미디어 저장소: Telegram은 미디어를 위해 두 개의 전용 DC를 사용합니다. 다른 DC에서도 미디어 전송을 허용할 수 있지만, 전용 미디어 허브를 우선시하기 위해 이러한 전송의 대역폭은 일반적으로 제한됩니다.

인프라 보안 및 관할 구역 전략

Telegram은 공식적으로 사용자 데이터를 서로 다른 관할 구역의 서로 다른 서버에 저장함으로써 당국국이 사용자 정보에 접근하는 것을 더 어렵게 만든다고 주장합니다. 그러나 이러한 파편화된 접근 방식은 인프라의 실제 보안에 대해 상당한 외부의 추측과 비판을 불러일으켰습니다.

관할 구역 추측

일부 분석가들은 사용자의 DC 분산이 "Five Eyes" 정보 동맹이나 기타 지정학적 경계와 일치할 수 있다고 제안하며, 이는 프랑스에서의 Telegram CEO의 체포와 같은 법적 조치나 정치적 압력에 따라 데이터 소유권이 이동될 수 있음을 시사합니다.

외부 관리 의혹혹

최근 보고서들은 Telegram의 인프라가 Telegram 자체 직원의 인지 없이 FSB(러시아 연방 보안국)의 인프라를 관리하는 개인들에 의해 관리되고 있다고 주장합니다. 이러한 주장은 데이터의 라우팅 및 관리 과정에서 잠재적인 백도어 또는 시스템적 취약점이 존재할 수 있음을 시사합니다.

기술적 구현 및 기술 부채

개발 관점에서는 Telegram의 DC 아키텍처가 상당한 기술 부채의 원천으로 간주되기도 합니다. 현대적인 사용자별 "sticky master election" 방식을 사용하는 대신, Telegram은 커스텀 방식의 경직된 DC 할당 시스템에 의존합니다. 이는 팀의 모든 새로운 개발자가 글로벌 콘텐츠 전송을 위한 표준 산업 관례와 다른 독자적인 라우팅 로직을 학습해야 함을 의미합니다.

"이것은 엄청난 양의 커스텀 코드와 기술 부채로 보입니다. 모든 새로운 소프트웨어 개발자는 아마도 이것을 배워야 할 것입니다. 왜 사용자별 sticky master election 방식을 사용하고 특별한 데이터 센터를 두지 않는 방식은 안 될까요?"

데이터 센터 식별 방법

개발자와 파워 유저를 위해, Telegram API를 사용하여 계정이 어느 데이터 센터에 할당되었는지 식별하는 것이 가능합니다. 구체적으로, help.getConfig 메서드를 사용하여 현재 설정을 조회하고 계정과 관련된 DC를 결정할 수 있습니다.

Sources