Dilimizde “Anlık Görüntü” olarak da bilinen Snapshot, bir sanal makinanın belirli bir zaman diliminde belirli bir noktadaki durumunu gösterir. Eğer sanal makinanız varsa Snapshot teknolojisinden en iyi şekilde nasıl yararlanabileceğinizi merak ediyor olabilirsiniz. Bu yazımızda Snapshot’ın nasıl çalıştığını, hangi amaçlarla kullanıldığını ve nasıl kullanılmaması gerektiğini konuşacağız.
Bilgisayar sistemlerinde Snapshot, bir sanal sunucu diskinin o anki görüntüsünü alarak verileri başka bir dosyaya yeniden yazan bir teknolojidir. Tek komutla gerçekleştirilebilen bu işlemde kritik bir detay ise Snapshot’ın yalnızca diskteki değişiklikleri almasıdır, yani diski bütün olarak yeniden yazmaz.
Snapshot sanallaştırma sürecinde oldukça sevilen bir mekanizmadır ancak sıklıkla yanlış amaçlarla kullanılmaktadır. Pratikliği sebebiyle sunucuda yedekleme yerine Snapshot alarak aynı işlemi gerçekleştirdiğinizi düşünüyor olabilirsiniz. Ancak bu yanlış anlaşılma büyük sorunlar doğurabilir.
Snapshot bir yedekleme çözümü değildir, backup veya cloning işlemleri yerine kullanılamaz. Günümüzde Snapshot, geleneksel mimarilerde çalışan servislerde update gibi işlemler yapılacağı sırada bir sorun çıkması halinde 30-60dk öncesine geri dönebilmek için kullanılır. Yani elimizde bir hafta sürecek bir update takvimi varsa Snapshot almamızın bir anlamı olmayacaktır. Bunun yanında Snapshot alındığında sunucunun o anki durumu tamamen geri getirilmesi oldukça zordur ve efor ister. Bu durum tek bir detaya geri dönebilmek için gereksiz miktarda fazla veri saklanacağı anlamına gelir.
Yalnızca değişiklikleri kopyalayan Snaphot’lar chain yapısına sahiptir. Özetle, aldığınız her Snapshot’ı bir zincirin halkası olarak düşünebilirsiniz. Bu yapının zaafiyet oluşturmaması için takibinin iyi yapılması gerekmektedir. Aradaki halkalardan birinin silinmesi ve o anlık değişiklikleri barındıran dosyanın kaybolması durumunda sanal makineyi bütünüyle geri getirmek neredeyse imkansız olacaktır.
Gerçekten çalışan bir yedek almak için storage, backup veya cloning gibi çözümlere yönelmeliyiz. Örneğin bir Kubernetes ortamında yedekleme yapmak istiyorsak ilgili YML dosyalarının ve Docker imajlarının yedeklerini almak bütün sistemi yedeklemek anlamına gelir. Bu şekilde gerçekten kurtarıcı ve kullanışlı bir sistem oturtmuş oluruz.
Snapshot’ı yedekleme amaçlı kullanmak maliyet açısından da dezavantaj getirebilmektedir. Alınan Snapshot’lar hipervizörde çalışmaya hazır birer Virtual Machine (Sanal Makina) olarak görülmektedir. Yani her Snapshot alışınızda yeni bir VM oluşturmuş olursunuz. Anlık olarak geri dönmek isteyebileceğiniz her kopya gereksiz sayıda VM tutarak faturanıza olumsuz olarak yansıyacaktır. Snapshot’ların birkaç gün içerisinde silinmesi en uygunudur, aksi takdirde sanal makinede performans düşebilir. Daha uzun süreli Snapshot’ların silinme işlemi de daha uzun zaman almaktadır.
Yedekleme uzun süreli bir işlemdir. Snapshot ise uzun süre silinmeden beklediğinde düşük performansla başlayarak makinanın çökmesine kadar gidebilecek birtakım problemlere sebep olabilir. Yedekleme çözümü olarak sunulan ve bu amaçla geliştirilmiş ürünler hem teknik olarak yeterli ve hem de maliyet açısından daha uygun seçeneklerdir.
Sonuç olarak Snapshot kontrollü bir şekilde kullanıldığında saatlik işlemler için oldukça kullanışlıdır ancak uzun süreli bir yedekleme alternatifi olarak ele alınamaz. Sanal ortamda kullandığınız mekanizmalar hakkında temel bilgileri gözden geçirerek kaynaklarınızı boşuna harcamak gibi tehlikelerin önüne geçebilirsiniz. Bunun için blogumuza göz atarak almayı düşündüğünüz veya alıyor olduğunuz hizmetlerle ilgili diğer yazılara da göz atabilirsiniz.