Silme kodlaması, dağıtılmış depolama sistemleri için önemli bir veri koruma yöntemidir. Bu blog yazısı, silme kodlamasının kurumsal veri koruma gereksinimlerini nasıl karşıladığını ve MinIO'da nasıl uygulandığını açıklıyor.
Donanım arızası, özellikle de sürücü arızası yaygın olduğundan, veri koruması her türlü kurumsal ortamda önemlidir.
Geleneksel olarak, donanım hata toleransını sağlamak için farklı türde RAID teknolojileri veya yansıtma/çoğaltma kullanıldı. Yansıtma ve çoğaltma, verilerin bir veya daha fazla tam yedek kopyasına dayanır; bu, depolamayı tüketmenin maliyetli bir yoludur. RAID5 ve RAID6 gibi daha karmaşık teknolojiler, depolama yükünü azaltırken aynı hata toleransını sağlar. RAID, tek bir düğümde veri koruması için iyi bir çözümdür ancak arızalı sürücüleri tekrar çevrimiçi duruma getirmek için gereken zaman alıcı yeniden oluşturma işlemleri nedeniyle ölçeklenemez.
Birçok dağıtılmış sistem, veri koruması için orijinal verilerin 3 farklı sürücüye tam olarak yazıldığı ve herhangi bir sürücünün orijinal verileri onarabildiği veya okuyabildiği 3 yönlü çoğaltma kullanır. Çoğaltma yalnızca depolama kullanımı açısından verimsiz olmakla kalmaz, aynı zamanda arızadan kurtarıldığında operasyonel olarak da verimsizdir. Bir sürücü arızalandığında sistem, arızalı sürücüyü değiştirmek için sağlam sürücüyü tamamen yeni bir sürücüye kopyalarken, düşük performansla kendisini salt okunur moda geçirir.
Silme kodlaması, dayanıklı ve verimli olduğundan dağıtılmış depolama için veri korumasına uygulanır. Veri dosyalarını veri ve eşlik bloklarına böler ve bunu, kodlanmış verilerin bir kısmı mevcut olmasa bile birincil verilerin kurtarılabileceği şekilde kodlar. Yatay olarak ölçeklenebilir dağıtılmış depolama sistemleri, kodlanmış verileri birden fazla sürücü ve düğümde kaydederek veri koruması sağlamak için silme kodlamasına dayanır. Bir sürücü veya düğüm arızalanırsa veya veriler bozulursa orijinal veriler, diğer sürücülere ve düğümlere kaydedilen bloklardan yeniden oluşturulabilir.
Silme kodlaması, verileri düğümler ve sürücüler arasında şeritleyerek diğer teknolojilerle aynı sayıda sürücü arızasını çok daha iyi bir verimlilikle tolere edebilir. Pek çok farklı silme kodlama algoritması vardır ve Reed-Solomon gibi Maksimum Uzaklıkla Ayrılabilir (MDS) kodlar en yüksek depolama verimliliğini sağlar.
Nesne depolamada korunacak veri birimi bir nesnedir. Bir nesne n sürücüde saklanabilir. Eğer k potansiyel bir arızayı gösteriyorsa k < n olur ve MDS kodları ile sistem n - k sürücü arızalarını tolere etmeyi garanti edebilir, bu da k sürücülerin herhangi bir nesneye erişim için yeterli olduğu anlamına gelir.
Boyutu M bayt olan bir nesne düşünüldüğünde, kodlanan her nesnenin boyutu M/k olur (meta verinin boyutu göz ardı edilir). Yukarıda gösterilen, n = 5 ve k = 3 için yapılandırılmış silme kodlamasıyla N yönlü çoğaltmayla karşılaştırıldığında, dağıtılmış bir depolama sistemi, depolama verimliliğini %80 artırırken 2 sürücünün kaybını tolere edebilir. Örneğin, 10 PB veri çoğaltma için 30 PB'den fazla depolama gerekirken, nesne depolama, aynı verileri silme kodlamasını kullanarak güvenli bir şekilde depolamak ve korumak için 15-20 PB gerektirecektir. Silme kodlaması, verilerin eşlik bloklarına farklı oranları için yapılandırılabilir ve bu da çeşitli depolama verimliliği sağlar. MinIO, ortamınızdaki gereksinimleri belirlemenize yardımcı olacak yararlı bir silme kodu hesaplayıcısına sahiptir.
MinIO, mümkün olan en yüksek performansı sağlamak için montaj kodunda yazılan nesne başına, satır içi silme kodlamasıyla ( referans için resmi MinIO belgeleri) verileri korur. MinIO, hızlı silme kodlaması için birden fazla düğümde ana bilgisayar CPU kaynaklarından tam olarak yararlanmak üzere Intel AVX512 talimatlarını kullanır. Standart bir CPU, hızlı NVMe sürücüleri ve 100 Gbps ağ, silme kodlu nesnelerin neredeyse kablo hızında yazılmasını destekler.
MinIO, nesneleri istenen herhangi bir artıklık düzeyine göre yapılandırılabilen veri ve eşlik bloklarına ayırmak için Reed-Solomon kodunu kullanır. Bu, 8 eşlik yapılandırmasına sahip 16 sürücülü bir kurulumda, bir nesnenin 8 veri ve 8 eşlik bloğu olarak şeritlendiği anlamına gelir. Eşlik veya veri olsun, 7 ((n/2)–1) kadar sürücüyü kaybetseniz bile, kalan sürücülerden verileri güvenilir bir şekilde yeniden oluşturabilirsiniz. MinIO'nun uygulaması, birden fazla cihaz kaybolsa veya kullanılamasa bile nesnelerin okunabilmesini veya yeni nesnelerin yazılabilmesini sağlar.
MinIO, silme kümesinin boyutuna bağlı olarak nesneleri veri ve eşlik bloklarına böler, ardından verileri ve eşlik bloklarını, her sürücünün nesne başına birden fazla blok içermeyeceği şekilde bir kümedeki sürücülere rastgele ve eşit bir şekilde dağıtır. Bir sürücü birden fazla nesne için hem veri hem de eşlik blokları içerebilirken, sistemde yeterli sayıda sürücü olduğu sürece tek bir nesnenin sürücü başına birden fazla bloğu yoktur. Sürümü oluşturulmuş nesneler için MinIO, herhangi bir sürücüde sıfır çakışmayı korurken veri ve eşlik depolaması için aynı sürücüleri seçer.
Aşağıdaki tablo, yapılandırılabilir veriler ve eşlik seçenekleri ve eşlik eden depolama kullanım oranlarıyla MinIO'daki silme kodlamasının örneklerini sağlar.
Toplam Sürücüler (n) | Veri Sürücüleri (d) | Eşlik Sürücüleri (p) | Depolama Kullanım Oranı |
---|---|---|---|
16 | 8 | 8 | 2.00 |
16 | 9 | 7 | 1.79 |
16 | 10 | 6 | 1.60 |
16 | 11 | 5 | 1.45 |
16 | 12 | 4 | 1.34 |
16 | 13 | 3 | 1.23 |
16 | 14 | 2 | 1.14 |
MinIO'nun arka uç düzeni aslında oldukça basittir. Gelen her nesneye bir silme seti atanır. Silme kümesi temel olarak bir sürücü kümesidir ve bir küme, toplam disk miktarına göre belirlenen bir veya daha fazla silme kümesinden oluşur.
MinIO'da kullanılan formatı ve düzeni anlamak için basit bir örneğe bakalım.
Formatın, verilerin eşlik sürücülerine oranıyla ilgili olduğuna dikkat etmek önemlidir - ister her biri tek sürücülü dört düğümümüz olsun, ister her biri 100 sürücülü dört düğümümüz olsun (MinIO sıklıkla yoğun JBOD yapılandırmalarında dağıtılır).
Dört düğümümüzü, her biri 100 sürücülü, varsayılan olarak 16 silme kümesi boyutunu kullanacak şekilde yapılandırabiliriz. Bu mantıksal düzendir ve silme kodlama hesaplamalarının tanımlarının bir parçasıdır. Her 16 sürücü, 8 veri ve 8 eşlik sürücüsünden oluşan bir silme kümesidir. Bu durumda silme seti, veri ve eşlik sürücülerine eşit olarak bölünmüş 400 fiziksel sürücüyü temel alır ve 175'e kadar sürücünün kaybını tolere edebilir.
MinIO'nun nesneyle atomik olarak yazılan XL meta verileri, o nesneyle ilgili tüm bilgileri içerir. MinIO'da başka meta veri yoktur. Bunun sonuçları dramatiktir; her şey nesneyle bağımsızdır, her şey basit ve kendi kendini tanımlar niteliktedir. XL meta verileri, silme kodu algoritmasını gösterir; örneğin, iki eşlikli iki veri, blok boyutu ve sağlama toplamı. Sağlama toplamının veriyle birlikte yazılması, MinIO'nun akış verilerini desteklerken belleğin optimize edilmesine olanak tanır, akış verilerini bellekte tutan, ardından diske yazan ve son olarak bir CRC-32 sağlama toplamı oluşturan sistemlere göre açık bir avantaj sağlar.
Büyük bir nesne olduğunda, yani. 10 MB'tan büyük bir dosya MinIO'ya yazıldığında, S3 API bunu çok parçalı bir yüklemeye böler. Parça boyutları, yükleme sırasında müşteri tarafından belirlenir. S3, her bir parçanın en az 5 MB (son parça hariç) ve en fazla 5 GB olmasını gerektirir. Bir nesne, S3 spesifikasyonuna göre 10.000'e kadar parçadan oluşabilir. 320 MB boyutunda bir nesne düşünün. Bu nesne 64 parçaya bölünürse MinIO, parçaları parça.1, parça.2,...parça.64'e kadar sürücülere yazacaktır. Parçalar kabaca eşit boyuttadır; örneğin, çok parçalı olarak yüklenen 320 MB'lık nesne 64 5 MB'lık parçaya bölünür.
Yüklenen her parça, şerit boyunca silme koduna sahiptir. Bölüm.1, yüklenen nesnenin ilk kısmıdır ve tüm parçalar, sürücüler boyunca yatay olarak şeritlenmiştir. Her parça kendi veri bloklarından, eşlik bloklarından ve XL meta verilerinden oluşur. MinIO, yazma işlemlerini döndürür, böylece sistem her zaman aynı sürücülere veri ve aynı sürücülere eşlik yazmaz. Her nesne bağımsız olarak döndürülerek kümedeki tüm sürücülerin tekdüze ve verimli kullanılmasına olanak sağlanırken aynı zamanda veri koruması da artırılır.
Bir nesneyi geri almak için MinIO, nesnenin nereye kaydedildiğini belirlemek üzere bir karma hesaplaması gerçekleştirir, karma değerini okur ve gerekli silme kümesine ve sürücülere erişir. Nesne okunduğunda XL metadata'da anlatıldığı gibi veri ve eşlik blokları bulunur. MinIO'da varsayılan silme ayarı 12 veri ve 4 eşliktir; bu, MinIO'nun herhangi bir 12 sürücüyü okuyabildiği sürece nesnenin sunulabileceği anlamına gelir.
Silme kodlamasının, dağıtılmış sistemlerde veri koruması için kullanılan diğer teknolojilere göre birçok önemli avantajı vardır.
Silme kodlamasının nesne depolama için RAID'den daha uygun olmasının birkaç nedeni vardır. MinIO silme kodlaması, birden fazla sürücünün ve düğümün arızalanması durumunda nesneleri veri kaybına karşı korumakla kalmaz, aynı zamanda MinIO nesne düzeyinde koruma sağlar ve iyileştirir. Her seferinde bir nesneyi iyileştirme yeteneği, hacim düzeyinde iyileşen RAID'e göre önemli bir avantajdır. Bozuk bir nesne MinIO'da saniyeler içinde, RAID'de ise saatler içinde geri yüklenebilir. Bir sürücü bozulur ve değiştirilirse MinIO yeni sürücüyü tanır, onu silme kümesine ekler ve ardından tüm sürücülerdeki nesneleri doğrular. Daha da önemlisi, okuma ve yazma işlemleri birbirini etkilemez ve bu sayede geniş ölçekte performans sağlanır. Petabaytlarca depolama alanında yüz milyarlarca nesne içeren MinIO dağıtımları var.
MinIO'daki silme kodu uygulaması, veri merkezinde operasyonel verimliliğin artmasına neden olur. Çoğaltma işleminden farklı olarak, sürücüler ve düğümler arasında verilerin uzun süreli yeniden oluşturulması veya yeniden senkronize edilmesi gerekmez. Önemsiz görünebilir, ancak nesneleri taşımak/kopyalamak çok pahalı olabilir ve 16 TB'lık bir sürücünün arızalanması ve veri merkezi ağı üzerinden başka bir sürücüye kopyalanması, depolama sistemi ve ağ üzerinde büyük bir vergi oluşturur.
Bu blog yazısı merakınızı uyandırdıysa, daha uzun bir Silme Kodlama Astarımız var. MinIO'yu indirin ve verileri silme kodlamasıyla korumaya bugün başlayın.
Burada da yayınlandı.