Telegram, kullanıcılarına sunduğu anlık mesajlaşmanın ötesinde, dağıtık bir nesne depolama sistemi olarak da çalışır. MTProto adı verilen özel şifreleme protokolüyle milyonlarca dosyayı güvenli ve verimli bir şekilde yönetir. Ancak bu sistem, üçüncü taraf geliştiriciler için büyük bir gizem barındırır: Dosyalar, erişim hash’leriyle korunan parçalı (chunk) yapılarla saklanırken, sunucular dünya genelindeki veri merkezleri (DC’ler) arasında dağıtılmış durumdadır. Peki, yüksek performanslı bir Telegram video indireci nasıl inşa edilir?
MTProto’nun Sırrı: Dosya Altyapısının Derinlerine İniş
Telegram’ın web tabanlı indirmeleri desteklediği yaygın bir yanılgıdır. Aslında, uygulamanın "İndir" düğmesine tıkladığınızda, arka planda basit bir HTTP isteği değil, uzaktan prosedür çağrısı (RPC) zincirleri tetiklenir. Bu süreç, aşağıdaki gibi katmanlı bir mimariyi gerektirir:
- Verinin Parçalara Ayrılması: Büyük videolar, sabit boyutlu "parçalar" (chunks) halinde bölünür. Her parça, benzersiz bir access_hash ile tanımlanır ve belirli bir veri merkezinde (DC1 ila DC5 arasında değişen) saklanır. Örneğin, 1080p bir video DC4’te bulunurken, aynı kullanıcının başka bir dosyası DC2’de yer alabilir.
- Doğrudan Erişim Gerekliliği: Standart Bot API’leri, 2 GB’ın üzerindeki dosyaları indirmez ve sıkı hız sınırlamalarına sahiptir. Bu nedenle, kullanıcı oturumu taklit eden ve Bot API aracısını devreden çıkaran doğrudan DC bağlantıları gereklidir.
- Segmentli İndirme Algoritması: İndirme işlemi, dosyanın toplam boyutuna göre offset ve limit değerlerinin hesaplanmasını içerir. Bu sayede, her seferinde sadece gerekli parçalar çekilir ve bant genişliğinden maksimum verim alınır.
Web Linkinden Medya Kimliğine: Arka Uç Dönüşümü
Kullanıcılar genellikle basit bir bağlantıyla — örneğin t.me/kanal/123 — video indirmek ister. Ancak bu bağlantılar, doğrudan medya dosyasına değil, yalnızca bir önizleme (preview) bağlantısına işaret eder. Bu engeli aşmak için, arka uç sisteminin aşağıdaki adımları otomatik olarak gerçekleştirmesi gerekir:
- Açılış Grafik Etiketlerinin Çözümlenmesi: Web sayfası, OpenGraph etiketleri aracılığıyla video meta verilerini (varsa) sunar. Ancak bu veriler genellikle düşük çözünürlüklü veya kırpılmış versiyonlardadır.
- Peer ve Mesaj Kimliğinin Belirlenmesi: Kanalın benzersiz kimliği (peer_id) ve ilgili mesajın konumu (message_id) tespit edilir.
- Doküman Nesnesinin Çıkarılması: Yapı, dosyanın benzersiz file_id’sini, boyutunu ve MIME türünü içerir. Bu veriler, doğrudan medya dosyasının konumunu ve özelliklerini ortaya çıkarır.
Bu süreç, kullanıcıya sadece bir bağlantıyı yapıştırmasını sağlarken, arka planda karmaşık bir medya kimliği eşleştirme işlemi gerçekleştirir.
Async I/O ve Yüksek Rekabetçilik: Arka Uç Mimarisi
Telegram’dan video indirmek, geleneksel bloklama tabanlı HTTP istekleriyle mümkün değildir. Bunun yerine, Python Asyncio ve Telethon kütüphanelerinin kombinasyonu, aşağıdaki gibi katmanlı bir mimariyle optimize edilmiştir:
- Eşzamanlı Bağlantılar: Aynı video için birden fazla veri merkezine (DC’lere) paralel bağlantılar kurulur. Bu, hem indirme hızını hem de güvenilirliği artırır.
- Kayan Pencere (Sliding Window) Algoritması: Parçalar, rastgele sırayla talep edilir, ancak bir tamponda doğru sırada birleştirilir. Bu yaklaşım, giriş/çıkış (I/O) bekleme sürelerini minimize eder.
- Akışlı Yanıt (Streaming Response): Veriler, tamamen belleğe yüklenmek yerine, doğrudan kullanıcıya aktarılır. FFmpeg entegrasyonu sayesinde, veriler anında encode edilir ve MP4 formatına dönüştürülür — tüm bu işlemler, sunucunun bellek kullanımını %90’dan fazla azaltır.
Bu mimari, Time to First Byte (TTFB) süresini önemli ölçüde kısaltırken, aynı zamanda sunucu kaynaklarını son derece verimli kullanır.
Flood Wait Hatasından Kaçınma: Akıllı Sıralama Stratejileri
Telegram, aşırı istekleri FloodWaitError ile cezalandırır. Bu hatayı önlemek ve sistemin kararlılığını sağlamak için, aşağıdaki stratejiler uygulanır:
- Çoklu Hesap Havuzu: Farklı Telegram hesapları arasında yük dağılımı yapılır. Her hesap, belirli bir DC’ye yönlendirilir ve böylece bir hesabın banlanması tüm sistemi etkilemez.
- Üstel Geri Dönüş (Exponential Backoff): Eğer bir DC’de yoğunluk algılanırsa, sistem otomatik olarak başka bir DC’ye geçer ve istekleri mikro saniyelik gecikmelerle yeniden gönderir.
- Redis Tabanlı Meta Veri Önbelleği: Popüler dosyaların meta verileri (boyut, format, codec bilgileri) önbelleğe alınır. Bu sayede, aynı dosyayı indirmek isteyen kullanıcılar için gereksiz RPC çağrıları önlenir.
Bu yöntemler, sürekli ve güvenilir bir indirme deneyimi sunmayı sağlar.
Lossless Muxing: FFmpeg ile Gerçek Zamanlı Dönüşüm
Bazı Telegram videoları, ses ve video akışlarını ayrı olarak saklar veya web tarayıcıları tarafından desteklenmeyen konteyner formatlarında bulunur. Bu durumlarda, FFmpeg devreye girer:
- Kopyalama İşlemi (c copy): Eğer video codec’i (H.264/H.265) zaten web uyumluysa, yalnızca konteyner formatı değiştirilir (örneğin, .mkv’den .mp4’e). Bu işlem, pixel kaybı olmadan gerçekleştirilir ve milisaniyeler içinde tamamlanır.
- Gerçek Zamanlı Akış: Veriler, FFmpeg’e doğrudan aktarılır ve çıktı akışı kullanıcıya anında sunulur. Bu sayede, kullanıcıların dosyaları indirirken uzun bekleme süreleri yaşaması engellenir.
Frontend’in Rolü: Hız ve Kullanılabilirlik Odaklı Tasarım
Arka uç kadar önemli olan frontend, kullanıcı deneyimini optimize etmek için utilitary-first (araç odaklı) bir yaklaşım benimser:
- Vanilla JavaScript: Ağır framework’lerden kaçınılır, böylece sayfa yüklenme süresi, zayıf internet bağlantısında bile neredeyse anında gerçekleşir.
- PWA Desteği: Kullanıcılar, sitesini masaüstüne "kurabilir" ve çevrimdışı modda bile çalıştırabilir. Bu özellik, tekrarlanan kullanımlarda performansı artırır.
- Güvenlik: Tüm medya çözümleme işlemleri sunucuda gerçekleştirilir. Kullanıcılara, tarayıcı uzantıları yükleme riski olmadan, doğrudan güvenli bir deneyim sunulur.
Geleceğe Bakış: Sürekli İyileştirme ve Yenilikler
Yüksek performanslı bir Telegram indirici inşa etmek, sadece kod yazmaktan ibaret değil — ağ protokolleri, veri akışı optimizasyonu ve kullanıcı deneyimi arasındaki hassas dengeyi kurmayı gerektirir. Gelecekte, bu sistemlerin yapay zeka destekli trafik tahmini ve coğrafi olarak dağıtılmış veri merkezlerine daha fazla odaklanması bekleniyor. Ayrıca, kullanıcıların kişiselleştirilmiş indirme profilleri oluşturmasına olanak tanıyan makine öğrenmesi tabanlı öneri sistemleri de geliştirilme aşamasındadır.
Telegram’ın kapalı ekosistemini açmak, geliştiriciler için her zaman bir meydan okuma olmuştur. Ancak doğru araçlar ve stratejilerle, bu engeller yüksek performanslı, güvenilir ve kullanıcı dostu çözümlere dönüştürülebilir.
Yapay zeka özeti
Telegram’dan video indirmek için MTProto’nun gizli mimarisini çözün. Async I/O, flooding engelleme ve FFmpeg entegrasyonuyla nasıl optimize edilir? Ayrıntılı kılavuz.