- 3FS, DeepSeek tarafından geliştirilen yüksek performanslı açık kaynaklı bir dağıtık dosya sistemi olup büyük ölçekli veri işleme ve yüksek throughput'u destekler
- Normal bir dosya sistemi gibi çalışır, ancak gerçekte veriyi birden fazla makineye dağıtarak saklar ve kullanıcının bunu fark etmesini gerektirmeyen bir soyutlama sunar
- 4 ana bileşen (Meta, Mgmtd, Storage, Client) üzerinden metadata, düğüm yönetimi, gerçek veri depolama ve kullanıcı isteklerinin işlenmesi birbirinden ayrılarak çalıştırılır
- CRAQ algoritması sayesinde güçlü tutarlılık ve hata toleransı sağlanır; yazma istekleri zincir yapısı boyunca güvenli biçimde yayılır
- 3FS, diğer dağıtık dosya sistemlerine kıyasla gerçek dünyada uygulanabilirlik ve performans ölçeklenebilirliği açısından ayrışır
3FS nedir?
- 3FS, Fire-Flyer File System ifadesinin kısaltmasıdır; DeepSeek tarafından yayımlanan bir dağıtık dosya sistemidir
- DeepSeek'in açık kaynak yayımlama haftasında birlikte duyuruldu
- Normal bir dosya yolu gibi görünür, ancak gerçekte birden fazla makineye dağılmış veriyi soyutlayarak sunar
Dağıtık dosya sistemi nedir?
- Kullanıcıya yerel dosya sistemi gibi görünür, ancak gerçekte veriyi birden fazla sunucuda dağıtık olarak depolar
- Örneğin
/3fs/stage/notes.txt yolu tek bir dosya gibi görünür, ama aslında birden fazla sunucuya bölünerek saklanır
- Kullanıcı
mkdir, cat gibi komutlarla bunu normal bir dosya gibi kullanabilir
Neden dağıtık dosya sistemi kullanılır?
- Büyük hacimli veriyi (petabayt ölçeği) ve yüksek throughput'u destekler
- Hata toleransı (fault tolerance) ve yedeklilik (redundancy) sayesinde güvenilirlik sağlar
- Gerçek kullanım örnekleri:
- HDFS + Spark gibi paralel işleme çerçeveleri
- ML eğitim pipeline'larında checkpoint alma
- Google'ın Colossus sistemi
- Meta'nın fotoğraf depolama sistemi Haystack
- Yapay zeka için depolama örnekleri: JuiceFS vs CephFS
3FS bileşenleri
- Toplam 4 ana düğüm türünden oluşur
Meta
- Dosya yolları, öznitelikler ve konumlar gibi metadata'yı yönetir
- RPC ile istemci isteklerini işler (
open, stat, close vb.)
- Meta bilgiler FoundationDB içinde saklanır
Inode, dosyanın boyutu, sahibi gibi bilgileri saklar
DirEntry, yolu inode'a bağlar (sembolik bağlantıya benzer şekilde tek bir dosya için birden fazla yol bulunabilir)
Mgmtd
- Kümenin düğüm kaydı ve durum denetiminden sorumludur
- Düğümler açılışta kendilerini kaydeder ve düzenli olarak heartbeat gönderir
- Merkezi yönlendirici görevi görür; düğümlerin birbirleriyle doğrudan bağlantı sürdürmesi gerekmez
- CRAQ zinciri yapılandırması için gerekli ayar bilgilerini de yönetir
Storage
- Gerçek verinin depolanmasından sorumludur
- Rust tabanlı ChunkEngine ile disk bloklarını yönetir
- Disk bloklarının boyutu, offset'i, checksum'u ve sürümü gibi bilgileri izler
- Kullanıcı bloklarla doğrudan etkileşime girmez; bunun yerine bir arayüz sunulur
- Meta bilgiler LevelDB içinde saklanır
- Çeşitli worker'lar bulunur
AllocateWorker yeni blok tahsis eder
PunchHoleWorker kullanılmayan blokları geri kazanır
AioReadWorker, io_uring kuyruğu üzerinden asenkron okuma işlemlerini yürütür
- Yazma sırasında CRAQ zinciri boyunca bir sonraki düğüme iletim yapılır
Client
- Kullanıcı isteklerini işler ve diğer düğümlerle iletişim kurar
- İş akışı:
- Mgmtd'ye düğüm konumunu sorar
- Meta'ya dosya işlemi isteği gönderir
- Storage ile veri aktarımı yapar
CRAQ algoritması
- Chain Replication with Apportioned Queries ifadesinin kısaltmasıdır ve güçlü tutarlılık (linearizability) sağlar
- Yazma akışı:
- Yazma yayılımı, Head → Middle → Tail sırasıyla ilerler
- Ara aşamalarda veri dirty olarak işaretlenir (okunamaz)
- Tail'de commit tamamlandıktan sonra clean durumu geriye doğru yayılır
- Okuma akışı:
- clean ise hemen döndürülür
- dirty ise en güncel veriyi almak için tail'e istek gönderilir
Performans açısından CRAQ
- Yazma hızı, en yavaş düğüm tarafından sınırlandırılır
- Sık erişilen dirty verilerde okuma istekleri tail üzerinde yoğunlaşarak okuma darboğazı oluşturabilir
- Örneğin Zipfian workload altında performans düşebilir
- 5 düğümlü bir kümede 3 kopya tutularak arıza durumunda performans kaybı en aza indirilir
Diğer dağıtık dosya sistemlerinden farkları
- Yapı benzer olsa da gerçek dünyadaki uygulanabilirlik ve uygulama yaklaşımı açısından farklılıklar vardır
- Karşılaştırma ölçütleri:
- Hangi workload'larda güçlü olduğu
- Performans ayarlarında ne kadar esnek olduğu
- Dağıtım kolaylığı
- Throughput ölçeklenebilirliği
- SLO içinde gecikme yönetimi
- Güvenilirlik
- Teknik ayrıntılar:
- Darboğazların nedenleri ve bunların nasıl ele alındığı
- Lock kullanılıp kullanılmadığı
- Kullanılan veri yapıları
- Hedef donanım
- Kullanılan hata toleransı algoritması veya hata düzeltme yöntemi
Blog serisinin bir sonraki konusu
- Gerçek performans analiziyle DeepSeek'in iddialarının doğrulanması planlanıyor
- İncelenecek başlıklar:
- FUSE darboğazı hakkında DeepSeek'in iddiası
- Performans grafiklerinin yeniden üretilebilirliği
- Performans düşüşü yaşanan durumların analizi
- Darboğaz unsurları (CPU, bellek, disk, ağ)
- Hangi workload'larda iyi performans verdiği
- Mevcut sistemlerle karşılaştırmalı analiz
- Mevcut sistemlerin sorunları çözme biçiminden farkları
- Doğrudan iyileştirme olasılıklarının incelenmesi
Ek kaynaklar
2 yorum
Benim de düşündüğüm bir sorundu, bunu da ..
Hacker News görüşü
S3FS, çeşitli dağıtık dosya sistemleriyle karşılaştırılan ölçeklenebilir bir metadata dosya sistemi
fuseistemcisini desteklemesi ve (2) NVMe depolamayı desteklediği için disk I/O ile sınırlı olmamasıBu sistemleri değerlendirirken teorik sınırlar, verimlilik ve pratik kısıtlar dikkate alınmalı
SeaweedFS ile karşılaştırma ilgi çekici
Neden CephFS kullanılmadığına dair bir soru
JuiceFS ile karşılaştırmaya dair bir soru
Küçük ölçekli işletme ve homelab kullanıcısı olarak, büyük ölçekli dağıtık dosya sistemlerini kullanma ihtimali düşük görünüyor
Kurulum karmaşık, ancak derin öğrenme iş yükleri için hangi özelliklerin vazgeçilmez olduğu net değil
DeepSeek'in dağıtık dosya sistemini devre dışı bırakmanın ne kadar kolay olduğuna dair bir soru
Bunun birden fazla cihaza dağıtılmış ZFS sürücüleriyle kopyalanıp kopyalanamayacağına dair bir soru