Telegram’ın sadece bir mesajlaşma uygulaması olmadığını biliyor muydunuz? Arkasında, küresel veri merkezlerinde depolanan milyarlarca medya dosyasını yöneten, MTProto adı verilen özel bir protokol çalışıyor. Bu sistem, gelişmiş güvenlik ve dağıtılmış mimarisiyle dikkat çekiyor. Ancak kullanıcıların veya geliştiricilerin, bu "kapalı bahçe"nin ötesine geçip medya dosyalarını doğrudan indirmesi oldukça karmaşık bir süreç. Bu noktada, yüksek performanslı bir Telegram indirici motoru devreye giriyor. Peki, bu sistem nasıl çalışıyor?
MTProto’nun Sırlarını Çözmek: Protokolün İç Yüzü
Telegram’ın medya dosyalarını indirmek, sıradan bir web sitesindeki bir dosyayı indirmekten çok farklı. Bu süreç, Remote Procedure Call (RPC) adı verilen uzaktan işlem çağrılarından oluşan karmaşık bir dizi adımı içeriyor. İşte temel adımlar:
- Dosya Parçalama (Sharding): Büyük videolar, sabit boyutlu "chunk" adı verilen parçalara bölünüyor. Bu parçalar, dünyanın farklı bölgelerindeki veri merkezlerinde (DC 1-5) depolanıyor.
- Eşsiz Erişim Kimliği (access_hash): Her dosya, benzersiz bir erişim kimliğiyle tanımlanıyor. Bu kimlik, dosyanın doğru veri merkezinden alınmasını sağlıyor.
- Segmentli İndirme: İndirme işlemi, dosyanın tamamını tek seferde indirmek yerine, parçalar halinde yapılıyor. Her parça için offset (başlangıç noktası) ve limit (kaç byte indirileceği) hesaplanıyor.
Ancak burada kritik bir sorun var: Telegram’ın Bot API’si, doğrudan veri merkezlerine yapılan bağlantılara göre daha yavaş ve sınırlı. Bu nedenle, gerçek kullanıcı oturumlarını simüle eden bir sistem geliştirmek gerekiyor. Bu yaklaşım, API’nin kısıtlamalarını aşarak, dosyaları doğrudan veri merkezlerinden indirmeyi mümkün kılıyor.
Web Linklerinden Medya ID’lerine: Gerçek Zorluk
Kullanıcılar genellikle bir Telegram kanalındaki veya grubundaki bir videoyu indirmek istiyor. Bunun içinse, web üzerindeki bir bağlantıdan, Telegram’ın iç sisteminde kullanılan medya ID’sine ulaşılması gerekiyor. Bu süreç şu adımlardan oluşuyor:
- OpenGraph Etiketlerinin Çekilmesi: Örneğin,
t.me/channel/123gibi bir bağlantıdan, OpenGraph etiketleri aracılığıyla medya önişlemeleri alınıyor. Ancak bu önişlemeler genellikle sadece küçük resimler veya düşük çözünürlüklü videolar içeriyor.
- Peer Tanımlaması: Kanalın benzersiz kimliği (ID) çözümleniyor.
- MessageID’nin Bulunması: Hedef video hangi mesajda yer alıyorsa, o mesajın ID’sine ulaşılıyor.
- Belge Nesnesinin Çekilmesi: Bu adımda, dosyanın hash’i, boyutu ve MIME türü (örneğin,
video/mp4) gibi kritik bilgiler alınıyor. Bu veriler, doğrudan indirme işleminin temelini oluşturuyor.
Yüksek Eşzamanlılık için Arka Uç Mimarisi: Asenkron I/O
Yüksek trafikli bir sistemde, geleneksel bloklama tabanlı indirme yöntemleri performans kaybına neden oluyor. Bu sorunu aşmak için, Python Asyncio, Telethon (özel versiyon) ve Redis tabanlı bir mimari kullanılıyor. İşte nasıl çalıştığı:
- Çoklu Bağlantılarla Paralel İndirme: Aynı dosya için birden fazla veri merkezine paralel bağlantılar kuruluyor. Böylece, dosyanın farklı parçaları aynı anda indiriliyor.
- Sırasız İndirme, Düzenli Montaj: Parçalar rastgele bir sırada indiriliyor, ancak kullanıcıya ulaştırılmadan önce bellekte sıraya diziliyor. Bu, Time to First Byte (TTFB) süresini önemli ölçüde azaltıyor.
- Akış Tabanlı Yazma (Streaming Write-out): İndirilen veriler doğrudan kullanıcıya aktarılıyor. Bu sayede, sunucunun bellek kullanımı %90’dan fazla azaltılıyor. Örneğin, 1GB’lık bir video dosyası sunucuda hiçbir zaman tamamen yüklenmiyor.
Telegram’ın Hız Sınırlarını Aşmak: FloodWait Hatasıyla Mücadele
Telegram, aşırı yüklenme durumlarında FloodWaitError adı verilen bir hata gönderiyor. Bu hatayı önlemek için kullanılan stratejiler şunlar:
- Çoklu Hesap Havuzu: Birden fazla kullanıcı hesabı üzerinden dağıtılan istekler, yükün dengelenmesini sağlıyor.
- Üstel Geri Çekilme (Exponential Backoff): Bir veri merkezinde yoğunluk tespit edildiğinde, sistem otomatik olarak yedek bir veri merkezine geçiyor.
- Redis ile Meta Veri Önbelleği: Popüler dosyaların meta verileri önbelleğe alınıyor. Bu sayede, aynı dosyanın tekrar indirilmesi gerektiğinde, veri merkezlerine ekstra istek yapılmıyor.
FFmpeg ile Gerçek Zamanlı Dönüştürme: Dosyaların Web’e Uygun Hale Getirilmesi
Telegram’da bazı videolar, ses ve görüntü akışları ayrı olarak depolanıyor veya web’e uygun olmayan formatlarda (örneğin, .mkv) bulunabiliyor. Bu dosyaları kullanıcı dostu hale getirmek için FFmpeg kullanılıyor:
- Kayıpsız Muxing (Lossless Muxing): Dosyanın kodlama biçimi web’e uygun olduğunda (örneğin, H.264/H.265), sadece konteyner formatı değiştiriliyor. Örneğin,
.mkvformatındaki bir dosya, yeniden kodlama yapılmadan.mp4formatına dönüştürülüyor. Bu işlem, `-c copy` komutu ile gerçekleştiriliyor ve milisaniyeler içinde tamamlanıyor.
- Anında Dönüştürme: Bu işlem, sunucu CPU’sunu neredeyse hiç kullanmıyor ve sonuçta herhangi bir cihazda sorunsuzca oynatılabilen bir dosya elde ediliyor.
Kullanıcı Arayüzünde Hız Odaklı Tasarım
Front-end geliştirme süreci, hız ve basitlik üzerine odaklanıyor:
- Vanilla JS Kullanımı: Ağır framewok’lardan kaçınılıyor. Böylece, kullanıcılar yavaş internetlerde bile anında yanıt alabiliyor.
- Progressive Web App (PWA) Desteği: Web sitesi, masaüstü cihazlara kurulum yapılabilen bir PWA olarak tasarlanıyor. Bu, kullanıcıların uygulama gibi bir deneyim yaşamasına olanak tanıyor.
- Güvenlik Önlemleri: Tüm medya analizi ve indirme işlemleri sunucu tarafında gerçekleştiriliyor. Kullanıcılar üçüncü taraf uzantıları yüklemek zorunda kalmıyor.
Telegram’ın kapalı ekosisteminden medya indirmek, teknik olarak oldukça karmaşık bir süreç. Ancak doğru mühendislik yaklaşımıyla, bu engeller aşılabiliyor. Geliştirilen bu sistem, hem kullanıcıların hem de geliştiricilerin ihtiyaçlarına yanıt veriyor. Gelecekte, bu tür sistemlerin daha da optimize edilmesiyle, medya indirme işlemlerinin hem daha hızlı hem de daha güvenilir hale geleceğini öngörmek zor değil.
Yapay zeka özeti
Telegram’dan yüksek performanslı medya indirme motoru nasıl geliştirilir? MTProto protokolü, asenkron I/O ve FFmpeg kullanarak dosyaları saniyeler içinde indirin.