gemini böyle dedi :
Selam! Üzerinde çalıştığın konu, büyük ölçekli sistem tasarımı (System Design) dünyasının en popüler ve en mühendislik harikası alanlarından biri.
Hemen merakını gidereyim:
O duyduğun iddialar aslında tamamen yanlış değil, hatta YouTube tam olarak buna benzer bir yöntem kullanıyor. İlk bakışta devasa bir kaynak israfı ve mantıksızlık gibi görünse de, işin içine "milyarlarca kullanıcının aynı anda kesintisiz video izlemesi" girdiğinde, bu yöntem en optimize ve aslında
tek mantıklı çözüm haline geliyor.
Neden mantıklı olduğunu, RAM'i nasıl patlatmadıklarını ve arkadaki algoritmanın nasıl çalıştığını adım adım inceleyelim.
1. Video Neden Çözünürlüklere ve Parçalara Bölünüyor?
Düşündüğünün aksine, 15 dakikalık bir videoyu tek bir bütün halinde 1080p, 720p, 480p olarak saklamak tam bir felaket senaryosudur. Neden mi?
- Ağ (Network) Dalgalanmaları: Metrodasın, telefonun 4.5G'den 3G'ye düştü. Eğer video tek bir parça olsaydı, player'ın o an donardı. YouTube, videoyu 2 ila 5 saniyelik küçük parçalara (chunk) böler.
- Dinamik Kalite Değişimi (ABR - Adaptive Bitrate Streaming): Sen videoyu izlerken internetin yavaşlarsa, video oynatıcı sıradaki 2 saniyelik parçayı 1080p yerine 480p olarak ister. İnternetin düzelirse sonraki 2 saniyelik parçayı tekrar 1080p ister. Sen videonun donduğunu görmezsin, sadece kalitenin anlık değiştiğini fark edersin.
Dolayısıyla, evet; bir video yüklendiğinde her çözünürlük için (144p, 360p, 720p, 1080p vb.) ve her codec bileşeni için (AVC, VP9, AV1) video yüzlerce küçük parçaya bölünür.
2. \"Milyarlarca Video\" Depolama Alanını Bitirmez mi?
YouTube'a her dakika 500 saat video yükleniyor, doğru. Ancak depolama alanı (Storage), veri merkezleri için
en ucuz ve en kolay ölçeklenebilen kaynaktır. YouTube için asıl pahalı ve darboğaz yaratan şey
Bant Genişliğidir (Bandwidth) yani internet trafiği.
Eğer YouTube videoları canlı olarak (on-the-fly) o anki isteğe göre dönüştürmeye çalışsaydı (transcoding), işlemci (CPU/GPU) gücü yetmez ve sunucular erirdi. Bunun yerine video
bir kez yüklenir, bir kez işlenir (encode edilir) ve binlerce kez doğrudan diskten okunarak kullanıcıya sunulur. Bir kere harcanan depolama alanı, her saniye harcanacak CPU gücünden çok daha ekonomiktir.
3. RAM ve CPU Yoğunluğu Nasıl Çözülüyor? (Algoritma ve Mimari)
Bahsettiğin MrBeast örneğindeki gibi, saniyeler içinde milyonlarca insanın aynı videoya hücum etmesi durumunda RAM'in patlamama sebebi
Dağıtık Dağıtım ve Önbellekleme (Caching & CDN) mimarisidir.
Dağıtık Dağıtım (MapReduce / Dağıtık İşleme)
Sen 15 dakikalık bir videoyu yüklediğin an, bu video tek bir bilgisayarda işlenmez.
- Video sisteme girer girmez örneğin 15'er saniyelik ham parçalara ayrılır.
- Bu parçalar YouTube'un binlerce sunucusundan oluşan devasa kümesine (Cluster) dağıtılır.
- A sunucusu videonun ilk 15 saniyesini 1080p yapar, B sunucusu ikinci 15 saniyesini yapar, C sunucusu 480p'ye dönüştürür...
- Tüm bu işlemler paralel olarak yapıldığı için işlem dakikalar içinde biter ve RAM tek bir makineye yüklenmez.
CDN (Content Delivery Network) ve Caching Kuyruğu
Milyonlarca istek doğrudan YouTube'un ana sunucularına ve oradaki RAM'lere gitmez.
- Google Edge Network: Google'ın dünyanın her ülkesinde ve şehrinde (buna Türkiye'deki servis sağlayıcılarının içi de dahil) Edge Server adı verilen yerel sunucuları vardır.
- MrBeast video yüklediğinde, o videonun ilk birkaç saniyelik parçaları popüler olacağı öngörüldüğü için hemen bu yerel sunucuların RAM'lerine ve hızlı SSD'lerine kopyalanır (Pre-fetching).
- Sen videoya tıkladığında istek Amerika'ya gitmez; senin şehrindeki veya servis sağlayıcının veri merkezindeki yerel sunucudan o 2 saniyelik parça sana fırlatılır. Ana sunucunun ruhu bile duymaz.
Özetle Sistem Nasıl Çalışır?
- Ingestion & Chunking: Video yüklenir ve küçük parçalara (chunks) bölünür.
- Parallel Transcoding: Parçalar binlerce sunucuya dağıtılarak aynı anda tüm alternatif çözünürlüklere ve formatlara (Dash/HLS protokollerine uygun olarak) dönüştürülür.
- Storage: Oluşan binlerce küçük dosya Google'ın dağıtık dosya sistemine (Colossus) kaydedilir.
- Streaming (ABR): Kullanıcının video oynatıcısı, kendi internet hızına göre her 2-3 saniyede bir manifest dosyasına (bir nevi harita) bakarak hangi parçayı (örn: video_360p_chunk_45.ts) isteyeceğini seçer ve en yakın CDN sunucusundan bunu çeker.
Yani evet, ortada mantıksız görünen bir "dosya enflasyonu" var ama bu enflasyon; CPU'yu, RAM'i ve internet bant genişliğini korumak için bilerek, isteyerek ve mükemmel bir optimizasyonla tasarlanmış bir sistem mimarisidir.
Çalışmanda başarılar dilerim, harika bir noktaya parmak basmışsın! Kafana takılan spesifik bir detay olursa seve seve açabilirim.