Kalıcı Depolama: Kapsayıcılar Çağında Uzun Süreli Bellek
Yayınlanan: 2023-04-17Kalıcı depolama, verilerin uçucu olmayan bir şekilde tutulmasını ifade eder, böylece bir cihaz veya uygulama kapatıldıktan veya yeniden başlatıldıktan sonra bile kullanılabilir durumda kalır. Verilerin depolanması ve alınması, web uygulamalarının kullanıcı bilgilerini ve durumlarını kaydetmesine ve güvenilir bir şekilde çalışmasına olanak tanır.
Yekpare uygulamalarda, sunucu ve depolama birlikte yaşadığı için depolama erişimi kolaydır. Ancak, coğrafi olarak dağıtılmış sistemler, depolama sisteminin dünya çapındaki tüm bileşenler tarafından kullanılabilir durumda kalması gerektiğinden, erişimi daha karmaşık hale getirir.
Kapsayıcılık, sorunu daha da karmaşık hale getirir çünkü kapsayıcılar hafif, durumsuz ve kısa ömürlüdür - veri depolamak için uygun olmayan özellikler. Bu nedenle, herhangi bir kalıcı depolama çözümü, başka bir karmaşıklık katmanı ekleyerek kapsayıcılarla sorunsuz bir şekilde çalışabilmelidir.
Bu makale, türlerini, mimarisini ve kullanım durumlarını keşfederek kalıcı depolamayı ayrıntılı olarak ele alıyor. Ayrıca, Docker'da toplu depolama ile kalıcı toplu depolama arasındaki farkı gösteren uygulamalı bir tanıtım sağlar.
Kalıcı Depolama Türleri
Geleneksel dönen diskler (sabit disk sürücüleri veya HDD'ler), katı hal sürücüleri (SSD'ler), ağa bağlı depolama (NAS) ve depolama alanı ağları (SAN'lar) dahil olmak üzere birkaç geçici olmayan depolama türü vardır.
- HDD'ler, dönen manyetik ortam disklerini kullanarak dijital verileri depolayan ve alan elektro-mekanik veri depolama aygıtlarıdır. Diskler, verileri okuyan ve yazan hareketli bir aktüatör kolunda manyetik kafalar kullanır.
- Bazen yarı iletken depolama aygıtları, katı hal aygıtları veya katı hal diskleri olarak adlandırılan SSD'ler , verileri kalıcı olarak depolamak için genellikle hareketli parça içermeyen birbirine bağlı flaş aygıtları kullanan tümleşik devre düzenekleri kullanır. Sabit yapıları, onları HDD'lerden daha hızlı ve daha güvenilir kılar.
- Ağa bağlı depolama, Yeni Teknoloji Dosya Sistemi (NTFS) veya dördüncü genişletilmiş dosya sistemi (EXT4) gibi bir dosya sistemi kullanılarak yerel bir ağ aracılığıyla bağlanan bir grup HDD, SSD veya her ikisidir.
- SAN'lar , teyp kitaplıkları veya disk dizileri gibi ağa bağlı yüksek hızlı, blok düzeyinde depolama aygıtlarıdır. Bağlantıları, işletim sistemine yerel depolama olarak görünür ve yerel alan ağı (LAN) üzerinden erişilemez.
Kalıcı Depolama Mimarisi
Kalıcı depolamaya yönelik, her biri benzersiz kullanım durumlarına ve sınırlamalara sahip üç yaklaşım vardır.
Nesne Kalıcı Mimarisi
Nesne kalıcı mimari yaklaşımı, verileri bir ilişkisel veya anahtar-değer veritabanında nesneler olarak depolamak için nesne-ilişkisel eşlemeyi (ORM) kullanır. Bu yaklaşım, verilerin tanımlanmış bir şeması olmadığında kullanışlıdır, çünkü verinin depolanması ve alınması ORM tarafından gerçekleştirilir.
Kalıcı Mimariyi Engelle
Blok kalıcı mimarisi, büyük dosyaları depolarken kullanışlı olan blok düzeyinde depolama aygıtları kullanır. Bu yaklaşım, depolama kapasitesini artırmak için birden fazla blok kullanabileceğiniz için büyük miktarda veri depolarken faydalıdır.
Filestore Kalıcı Mimarisi
Adından da anlaşılacağı gibi, dosya deposu kalıcı mimari yaklaşımı, verileri depolamak için bir dosya sistemi kullanır. Yöntemlerden biri, verileri depolamak için merkezi bir yol sağlayan veritabanı sunucularının kullanılmasını içerir. Kinsta'nınki gibi bulut barındırma çözümleri, uygulamalara kolayca bağlanan ve kalıcılık sunan veritabanı sunucularını kullanır.
Filestore kalıcı mimarisi, dosyaların sık sık alınmasını gerektiren uygulamalarda ve bunları yönetmek için bir arabirime ihtiyaç duyduğunuzda yardımcı olur.
Kalıcı Depolama Kullanım Durumları
Bu bölümde, her bir depolama türünün bazı kullanım durumları ele alınmaktadır.
Nesne Kalıcı Depolama
- Bulut depolama: Nesne kalıcı depolama, resimler, videolar ve belgeler gibi büyük miktarlarda yapılandırılmamış verileri depolamak ve almak için bulut depolama çözümlerinde yaygın olarak kullanılır. Bulut sağlayıcıları, müşterilere ölçeklenebilir, yüksek düzeyde kullanılabilir ve dayanıklı depolama hizmetleri sağlamak için nesne depolamayı kullanır.
- Büyük veri analitiği: Nesne kalıcı depolama, genellikle veri analizi, makine öğrenimi ve yapay zeka için kullanılan büyük veri kümelerini depolamak ve yönetmek için büyük veri analitiğinde kullanılır. Nesne depolama, verilere hızlı ve verimli bir şekilde erişilmesini sağlayarak, onu büyük veri mimarilerinin önemli bir bileşeni haline getirir.
- İçerik dağıtım ağları: Nesne kalıcı depolama, içerik dağıtım ağlarında (CDN'ler), görüntüler, videolar ve statik dosyalar gibi içeriği küresel bir sunucu ağında depolamak ve dağıtmak için kullanılır. Nesne depolama, CDN'lerin konumdan bağımsız olarak dünya çapındaki kullanıcılara yüksek hızlı içerik sunmasına olanak tanır.
Kalıcı Depolamayı Engelle
- Yüksek performanslı bilgi işlem (HPC) : HPC ortamları, oldukça büyük hacimli verilerin hızlı ve verimli bir şekilde işlenmesi. Blok kalıcı depolama, HPC kümelerinin bilimsel simülasyonlar, hava durumu modellemesi ve finansal analiz gibi büyük veri kümelerini depolamasına ve almasına olanak tanır. Blok depolama, verilere yüksek performanslı, düşük gecikmeli erişim sağladığı ve işleme sürelerini önemli ölçüde iyileştirebilen paralel giriş/çıkış (G/Ç) işlemlerine izin verdiği için genellikle HPC için tercih edilir.
- Video düzenleme: Video düzenleme uygulamaları, büyük video dosyalarına yüksek performanslı ve düşük gecikmeli erişim gerektirir. Ayrıca, video dosyalarını gerçek zamanlı olarak işlemek ve düzenlemek için saniyede önemli sayıda G/Ç işlemini ve düşük gecikmeyi barındırmaları gerekir. Blok depolama, bu yetenekleri sağlayarak onu video düzenleme iş akışları için ideal bir çözüm haline getirir.
- Oyun: Oyun uygulamaları ayrıca oyun varlıklarına ve oyuncu verilerine erişmek için yüksek performans ve düşük gecikme süresi gerektirir. Blok depolama, büyük miktarda veriyi hızlı bir şekilde depolar ve alır, oyun ortamlarının derhal yüklenmesini ve oyun sırasında yanıt vermesini sağlar.
Filestore Kalıcı Depolama
- Medya ve eğlence: Video düzenleme, animasyon ve işleme uygulamaları genellikle kalıcı depolama kullanır. Bu uygulamalar, video, ses ve resimler gibi büyük medya dosyalarına yüksek performans ve düşük gecikmeli erişim gerektirir. Filestore, birden çok istemci tarafından erişilebilen paylaşılan bir dosya sistemi sağlar ve bu da onu bu uygulamalar için ideal bir depolama çözümü haline getirir.
- Web içeriği yönetimi: Web içeriği yönetim sistemleri (CMS'ler), metin, resimler ve multimedya dosyaları gibi web sitesi içeriğini depolamak ve yönetmek için paylaşılan dosya sistemlerinde filestore kalıcı depolamayı kullanır. Filestore, web sitesi içeriği için merkezi bir konum sağlayarak yönetimi ve güncellemeyi kolaylaştırır. Aynı zamanda birden fazla kullanıcının aynı içerik üzerinde aynı anda çalışmasını sağlayarak işbirliğini ve üretkenliği artırır.
Konteynerlerde Kalıcı Depolama
Konteynerler hafif, taşınabilir, güvenli ve basittir ve farklı uygulamalar arasında bir füzyon sunar. Kapsayıcının yeniden başlatılması ve kaldırılması arasında verileri kalıcı hale getirecek bir mekanizmaya sahip olmaları gerekir. Konteynerlerin dosya depolaması veya geleneksel uygulamalar gibi bir dosya sistemi vardır, ancak bunları yeni değişikliklerle yeniden oluşturduğunuzda kalıcı olmayan tüm verileri kaybedersiniz.
Bu nedenle kapsayıcılar, toplu depolamayı dahil etme veya bir depolama birimi bağlama seçeneği sunar. Konteynerler, depolama hacimlerini bir dizin olarak ele alır. Birime yazılan tüm veriler ana bilgisayar dosya sistemine gider.
Kapsayıcılar için kalıcı depolama bu şekilde çalışmalıdır çünkü bir kapsayıcı yeniden başlatıldığında yeni bir örnek oluşturulur ve eski örnek atılır. Bir kapsayıcı, verilerin tutarlı bir görünümüne sahip değilse, kapsayıcı yeniden başladığında veriler kaybolacaktır. Bir depolama birimi, verileri oturumlar ve kapsayıcı yeniden başlatmaları boyunca koruyarak, taşınmış veya yeniden başlatılmış olsa bile kapsayıcının durumunu korumasına izin verir.
Hacim ve Kalıcı Hacim
Konteynerler, kalıcı verileri depolamak için 2 yol sağlar: birimlerin kullanılması ve kalıcı birimlerin kullanılması. Aralarında önemli bir fark var. Bir kapsayıcı, birim depolamadaki verileri yönetir. Bir kapsayıcıyı durdurduğunuzda veriler kalır ve kapsayıcıyı yeniden başlattığınızda kullanılabilir. Ancak, bir kapsayıcıyı sildiğinizde veya kaldırdığınızda, temeldeki birim depolamayı da sildiğiniz için veriler kaybolur.
Kalıcı birim depolama veya bağlama bağlamaları, verileri kabın dosya sistemi dışında depolamanın bir yoludur. Bu şekilde, kapsayıcıyı sildiğinizde bile veriler kaybolmaz. Manuel olarak silinene kadar kalıcıdır.
Aşağıdaki bölüm, her iki cilt tipini de örneklerle göstermektedir.
Kapsayıcı Kalıcı Depolama Demosu
Docker konteynerleriyle kalıcı depolamayı göstermek için küçük bir web uygulaması oluşturduk. Docker'ı yükleyerek ve bu GitHub deposundan kodu alarak takip edebilirsiniz.
Uygulama, kullanıcı girişi için 2 alan içeren temel bir formdur:
- Başlık
- Belge Metni
Kullanıcı girişini kaydettikten sonra, dosyayı Geribildirim dizininde Başlık alanında sağlanan adla açarak erişebilirsiniz. Belge Metni alanından gelen girdi, dosyanın içeriğidir.
Birim Depolama Nasıl Kullanılır
Uygulamayı kendi makinenize yükledikten sonra, Dockerfile'da gösterildiği gibi birim depolamayı kullanabilir.
Şimdi, görüntüyü oluşturup kabı çalıştırıyorsunuz. Bunu yapmak için aşağıdaki komutları yürütün.
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Uygulama çalıştığında, geri bildirim göndermek için localhost:3000'e gidin.
Kaydet'e tıklayın ve girişin başarıyla depolanıp depolanmadığını görmek için localhost:3000/feedback/test.txt dosyasına gidin.
Girişin devam edip etmediğini görmek için kabı çıkarın ve yeniden başlatın.
docker stop feedback-app docker start feedback-app
Şimdi aynı URL'yi ziyaret ederseniz, geri bildirimin hala orada olduğunu görürsünüz. Ancak kabı kaldırıp yeniden başlatırsanız ne olur?
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app feedback-node:volumes
Yeniden başlatıldıktan sonra, bu URL'ye geri dönerseniz, kapsayıcıyı kaldırdığınızda veriler kaybolduğu için artık mevcut değildir. Hacim verileri yalnızca kabı durdururken kalır, kaldırırken değil.
Bu sorunu azaltmak ve kapsayıcıyı çıkardığınızda bile verileri sürdürmek için, kalıcı birim depolama veya adlandırılmış depolama kullanmalısınız. İlk olarak, kapları ve görüntüleri temizlemelisiniz.
docker stop feedback-app docker rm feedback-app docker rmi feedback-node:volumes
Kalıcı Birim Depolama Nasıl Kullanılır
Bunu test etmeden önce, VOLUME özniteliğini Dockerfile'den kaldırmalı ve görüntüyü yeniden oluşturmalısınız.
docker build -t feedback-node:volumes . docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
Gördüğünüz gibi, ikinci komutta, kabı kaldırdığınızda bile devam eden, kabın dışındaki kalıcı birimi tanımlamak için -v
bayrağını kullanıyorsunuz.
Önceki adımda olduğu gibi, geri bildirim eklemeyi deneyin ve kapsayıcıyı durdurup kaldırdıktan ve yeniden başlattıktan sonra geri bildirime erişin.
docker stop feedback-app docker rm feedback-app docker run -d -p 3000:80 --name feedback-app -v feedback:/app/feedback feedback-node:volumes
Gördüğünüz gibi, kapsayıcıyı durdurup kaldırdıktan sonra bile verilere erişilebilir ve kalır.
Özet
Kalıcı depolama, kapsayıcılı uygulamalar için hayati önem taşır çünkü verilerin bir kapsayıcının yaşam döngüsünün dışında kalmasına izin verir. Kapsayıcılı uygulamalar için 2 ana kalıcı depolama türü, her birinin avantajları ve kullanım durumları olan birimler ve bağlama bağlantılarıdır.
Birimler, kapsayıcının dosya sisteminde depolanırken, bind mount'lara doğrudan ana makineden erişilebilir.
Kalıcı depolama, verilerin kapsayıcılar arasında paylaşılmasını sağlayarak karmaşık, çok katmanlı uygulamalar oluşturmayı mümkün kılar. Kalıcı depolama, önemli verileri depolamak için güvenilir ve esnek bir yol sağlayarak, kapsayıcılı uygulamaların kararlılığını ve sürekliliğini sağlamak için gereklidir.
Web uygulamalarınızı geliştirmek için Docker kullanıyorsanız, Kinsta'nın Uygulama Barındırma hizmetiyle Dockerfile dağıtımlarını yapılandırmanın çok kolay olduğunu göreceksiniz.