İçeriğe atla
HexaTransfer
Bloga dön
Teknik incelemeler

Dağıtık Dosya Depolama Açıklaması: Nasıl Çalışır

IPFS ve Ceph gibi dağıtık dosya depolama sistemlerini anlayın. Modern depolamada çoğaltma, tutarlılık ve hata toleransı.

Dağıtık dosya depolama, verileri birçok düğüme yayar; böylece hiçbir makine tek bir darboğaz veya tek hata noktası olmaz. Tasarım seçimleri — veriyi nasıl yerleştireceğiniz, nasıl çoğaltacağınız, düğüm arızalarını nasıl ele alacağınız, tutarlılığı nasıl koruyacağınız — Ceph (nesne/blok/dosya), GlusterFS (POSIX), HDFS (büyük veri toplu işlem), MinIO (S3 uyumlu) ve IPFS ile Filecoin gibi içerik adresli sistemler arasındaki ayrımı oluşturur. Her biri farklı iş yüklerini hedefler ve değiş tokuşlar gerçektir. Bu sistemlerin gerçekte nasıl çalıştığının somut bir özeti aşağıda verilmiştir.

Çoğaltma ve Silme Kodlama

Düğüm arızasına karşı iki strateji koruma sağlar. Çoğaltma, birden fazla tam kopya saklar: Ceph'in varsayılanı 3x çoğaltmadır, yani 1 GB'lık bir nesne 3 GB ham depolama kullanır. Gerekçesi kolay, okuma hızlı, depolamada pahalı. Silme kodlama, Reed-Solomon kodları kullanarak veriyi k veri parçasına artı m eşlik parçasına böler; (10,4) düzen, 14 parça saklar ve %200 yük yerine yalnızca %40 yük ile 4 arızaya dayanır. MinIO varsayılan olarak silme kodlamayı kullanır; Backblaze Vaultları 17+3 Reed-Solomon kullanır. Yeniden yapılandırma birden fazla parça gerektirebileceğinden silme kodlama okumaları daha yavaştır; bu nedenle sıcak veriler sıklıkla çoğaltma, soğuk veriler ise silme kodlama kullanır.

Tutarlı Karma ve Veri Yerleşimi

Bir sistem hangi nesnenin hangi düğümde saklanacağına nasıl karar verir? Karger ve arkadaşlarının akademik çalışmasında (1997) tanıtılan ve DynamoDB ile Cassandra tarafından popülerleştirilen tutarlı karma, anahtarları bir halkaya hashler ve her aralığı bir düğüme eşler. Düğüm eklemek veya kaldırmak yalnızca anahtarların bir bölümünü karıştırır, tüm veri setini değil. Ceph, Ceph, nesneleri bir topoloji haritasına (raf, sıra, veri merkezi) göre yerleştiren deterministik bir algoritma olan CRUSH'ı (Ölçeklenebilir Karma Altında Kontrollü Çoğaltma) kullanır; bu sayede çoğaltmalar farklı arıza bölgelerine düşer. Fiziksel düğüm başına sanal düğümler (vnodes) yük dengesizliğini düzeltir.

Tutarlılık Modelleri: Güçlü, Nihai ve Nedensel

CAP teoremi, tutarlılık, kullanılabilirlik ve bölüm toleransını aynı anda sağlayamayacağınızı söyler; ikisini seçersiniz. Güçlü tutarlılık (doğrusallaştırılabilirlik), okumaların en son yazmayı gördüğü anlamına gelir; Spanner ve etcd gibi sistemler bunu Paxos veya Raft gibi konsensüs protokolleri aracılığıyla sağlar. Nihai tutarlılık (DynamoDB, Cassandra, tarihsel olarak bazı işlemler için S3), verilen zaman içinde çoğaltmaların yakınsadığı, yayılım sırasında eski okumaların mümkün olduğu anlamına gelir. Nedensel tutarlılık, tam doğrusallaştırılabilirlik olmadan neden-etki sırasını korur. Dosya depolama, aynı nesne için okumalar-sonrası-yazmalar için güçlü tutarlılıkla meta veriler (listeleme, boyut) için sıklıkla nihai tutarlılığı kabul eder.

Ceph Mimarisi: OSD'ler, Monitörler, Yöneticiler ve MDS'ler

Ceph dört daemon türü çalıştırır. OSD'ler (Nesne Depolama Daemon'ları) nesneleri saklar ve çoğaltır; bir küme tipik olarak dönen veya NVMe diskler üzerinde 10 ila 1.000 OSD'ye sahiptir. Monitörler (MON'lar) Paxos aracılığıyla küme durumunu korur; 3 veya 5 MON çekirdek sağlar. Yöneticiler (MGR'ler) metrikleri açar ve gösterge paneli barındırır. MDS'ler (Meta Veri Sunucuları) CephFS POSIX dosya sistemi katmanına hizmet verir. RADOS Gateway (RGW) aracılığıyla nesne depolama, S3 ve Swift API'lerini sunar. RBD aracılığıyla blok depolama, OpenStack birimlerini ve VM disklerini destekler. Tek kod tabanı, üç kişilik; /etc/ceph/ceph.conf ve CRUSH harita düzenlemeleriyle ayarlanır.

HDFS ve Hadoop Mirası

HDFS (Hadoop Dağıtık Dosya Sistemi), MapReduce ve Spark işleri için büyük sıralı okumaları hedefler. Dosyalar 128 MB veya 256 MB bloklara bölünür; her blok varsayılan olarak DataNode'lar genelinde 3 kez çoğaltılır. NameNode, tüm meta verileri bellekte tutar; bu da ölçeği NameNode başına yaklaşık 500 milyon dosyayla sınırlar. HDFS Federasyonu ve HDFS Router, çok ad alanı desteği ekler. HDFS küçük dosyalar için (meta veriler baskın) veya POSIX uyumluluğu için iyi değildir, ancak TB ölçekli veri setleri üzerinde analitik için mükemmeldir. Ayrıca bulut çağında hesaplama depolamadan ayrıştıkça nesne depolama (S3, GCS) tarafından yerinden ediliyor.

İçerik Adresli Depolama: IPFS ve Filecoin

IPFS (Gezegenlerarası Dosya Sistemi), içeriği konum yerine karma (CID, İçerik Tanımlayıcı) ile tanımlar. Aynı içerikli bir dosyayı depolayan herkes aynı CID'yi üretir. Alma işlemi, içeriği tutan düğümleri bulmak için bir DHT (Dağıtık Karma Tablosu, Kademlia tabanlı) kullanır. Filecoin ekonomik teşvikler ekler; madenciler PoRep (Çoğaltma Kanıtı) ve PoSt (Uzay-Zaman Kanıtı) aracılığıyla içeriği sakladıklarını kanıtlar ve FIL tokeni kazanır. IPFS, arşivleme ve merkezi olmayan yayıncılık için uygundur (NFT meta verisi, web3 siteleri); DHT arama gecikmesi (yüzlerce milisaniyeden saniyelere) nedeniyle etkileşimli iş yükleri için yavaştır.

Nesne Depolama: S3, R2, B2 ve MinIO

Nesne depolama düz bir anahtar-değer API'si sunar: bir nesneyi anahtar ile PUT edin, geri GET alın. Dizin yok, POSIX semantiği yok. Bu basitlik büyük ölçeği mümkün kılar; AWS S3, 11 dokuzlu dayanıklılıkla trilyonlarca nesne depolar. Cloudflare R2, Backblaze B2, Wasabi ve DigitalOcean Spaces gibi klonlar, farklı arka uçlarda S3 API'sini uygular. MinIO, Kubernetes'te StatefulSet olarak genellikle ticari donanımda S3 uyumlu depolama sağlayan açık kaynak AGPL v3 olarak yerinde çalışır. Nesne depolama, API'nin basit olması, fiyatlandırmanın net olması ve dayanıklılığın güvenilir olması nedeniyle bulut depolama pazarını büyük ölçüde kazandı.

Pratikte Silme Kodlama: Yeniden Yapılandırma Nasıl Çalışır

Silme kodlamalı bir sistemde bir düğüm öldüğünde, kalan düğümler kaybolan parçaları yeniden yapılandırır. (10,4) Reed-Solomon kodu için, 14 parçanın herhangi bir 10'u, sonlu bir alan üzerindeki matris cebiri yoluyla orijinal 10 veri parçasını yeniden yapılandırır. Yeniden yapılandırma yükü hayatta kalan düğümlere düşer; 100 düğümlü bir kümede 1 düğüm kaybetmek, kayıp parça başına 10 diğer düğümden okuma tetikler. Yeniden yapılandırma sırasındaki bant genişliği, önemli bir operasyonel endişedir. Ceph gibi sistemler, üretim G/Ç'yi etkilemekten kaçınmak için yeniden yapılandırma hızını sınırlar. Yerel Yeniden Yapılandırma Kodları (Azure tarafından kullanılan LRC) ve Hitchhiker kodları gibi daha yeni kodlar, kısmi okumalara izin vererek yeniden yapılandırma bant genişliğini azaltır.

Kuyruk Gecikmesi ve Riskli Paralel İstekler

Dağıtık sistemlerin uzun kuyrukları vardır. Yavaş bir diske veya tıkanık bir ağa çarpan bir istek, medyanın 10 katı sürebilir. Google'ın "Ölçekte Kuyruk" makalesi (Dean & Barroso, 2013) teknikleri resmileştirdi: riskli paralel istekler iki düğüme çift okuma gönderir, hangisi kaybederse iptal eder; bağlı istekler yalnızca birinin gerçekten yürütmesini koordine eder. Ceph, DynamoDB ve Spanner hepsi varyasyonları kullanır. Dosya transfer sistemleri için, bir nesneyi paralel olarak birden fazla çoğaltma üzerinden okumak ve ilk yanıtı almak, biraz daha fazla bant genişliği karşılığında p99 gecikmesini dramatik biçimde azaltır.

Arıza Bölgeleri ve Veri Çeşitliliği

Üç çoğaltmanın tamamı aynı rafta ve rafın üst anahtarı arızalanırsa üç çoğaltma yerleştirmek yardımcı olmaz. Arıza bölgesi farkındalığı, çoğaltmaların farklı raflara, sıralara veya veri merkezlerine yerleştirilmesi anlamına gelir. Ceph'in CRUSH kuralları "en az 2 kopyayı farklı raflarda, 1 kopyayı farklı veri merkezinde" kodlar. Bulut nesne depolama bunu şeffaf biçimde halleder; S3 Standard 3+ Erişilebilirlik Bölgesinde depolar. Bölgeler arası çoğaltma için S3 Çapraz Bölge Çoğaltma (CRR), nesneleri başka bir bölgeye eşzamansız olarak yansıtır; olağanüstü durum kurtarma ve bölgesel veri yerleşimi uyumluluğu için kullanışlıdır.

Dosya Transfer Hizmetleri için Pratik Çıkarımlar

Bir dosya transfer hizmeti, genellikle POSIX dosya sistemi yerine nesne depolaması üzerine inşa edilir. S3 uyumlu arka uçlar (AWS S3, Cloudflare R2, MinIO), ekibin Ceph veya GlusterFS çalıştırması gerekmeden dayanıklılık ve ölçeği halleder. Hizmet, kimlik doğrulama, ön imzalı URL'ler, meta veriler ve kullanıcıya yönelik özellikler ekler. HexaTransfer, istemci tarafı AES-256-GCM şifrelemesiyle S3 uyumlu bir arka uç kullanır; böylece dağıtık depolama katmanı dayanıklılığı hallederken uygulama katmanı dosya içeriklerini her katmandan gizli tutar.

hexatransfer.com'da deneyin — ücretsiz, hesap gerekmez, maksimum 10 GB.

Uçtan uca şifreleme ile büyük dosyaları güvenle gönderin

Uçtan uca şifreleme ile 10 GB'a kadar dosya ücretsiz aktarın. Hesap gerekmez. Dosyalarınız yüklenmeden önce tarayıcınızda şifrelenir — başka kimse okuyamaz.

Dosya gönder