Barındırma dünyasında tanık olduğumuz sürekli teknolojik gelişmeyle, kullandığımız sistemlerin terminolojisine ve anlamına aşina olmak gerekir.Yapmamız gereken önemli bir ayrım, her ikisi de barındırma endüstrisinde yaygın olarak kullanıldığı ve yine de genellikle karıştırıldığı için sanal makineler ve konteynerler arasındadır.
Sık sık ortaya çıkan tartışma hangi teknolojinin daha iyi olduğu, sanallaştırma mı yoksa konteyner teknolojisi mi ? Yanıt, kullanıcının ihtiyaçlarına ve iş gereksinimlerine büyük ölçüde bağlı olduğu için basit bir cevap değildir. Bu soruyu cevaplamaya çalışmak için, öncelikle bu teknolojilerin her ikisi, nasıl kullanıldıkları, hangi durumlarda en faydalı oldukları ve avantajların ve dezavantajlarının neler olduğu hakkında bir özet sunacağız.
Sanallaştırma (Virtualization)
Sanal makinelerin işlevlerini daha iyi anlamak için, neden ilk başta yaratıldıklarını anlamamız gerekir. Bare-metal sunucular işlem gücü ve kapasitesinde iyileştikçe, bu sunucular üzerinde çalışan uygulamalar ve hizmetler mevcut kaynakların tümünü etkin bir şekilde kullanamadılar ve bu kaynaklar aslında israf edildi. Sanallaştırma, tek bir sunucudaki tüm kullanılabilir rezervlerden daha iyi yararlanmak için oluşturuldu. Bu durum, birden fazla sanal makinenin aynı miktarda kaynağı daha iyi kullanmasına izin verdi.
Sanallaştırma Nedir?
Sanallaştırma, büyük bir sunucunun fiziksel ortamı çerçevesinde birden çok daha küçük sanal sunucuyu oluşturmanızı sağlar. Fiziksel sunucu üzerinde çalışan sanallaştırma yazılımı temel olarak kendi işletim sistemi, sürücüler, kitaplıklar ve uygulamalarla birlikte kaynakları her sanal sunucuya tahsis eder. Bu sanal sunucular birbirlerinden izole edilmiştir ve sanallaştırılmış bir platformda çalıştırdıkları hakkında hiçbir bilgiye sahip değildir veya diğer sanal makinelerle kaynak paylaştıklarının farkında değildir.
Sanallaştırma için hayati olan yazılıma hipervizör denir. Hipervizör donanım, yazılım veya firmware tabanlı olabilir. Aslında, fiziksel sunucuyu sanal makinelerden ayıran ve birden fazla işletim sisteminin bu sistem içinde yan yana çalışmasına izin veren sanal bir katmandır. Hipervizör, sanal makinelerin ana fiziksel sunucu kaynaklarını kullanarak belirli bir miktarda kaynağa erişmesini ve bunların ayrı kalmasını ve yapılandırıldığı gibi her sanal makineye bölünmesini sağlar. VM’ler ayrıca başka bir sanal makinedeki uygulamaları etkilemeden kendi alanlarındaki uygulamaları güncelleyebilir ve değiştirebilir.VM’ler, izolasyonla birlikte her VM’de bulunan uygulamaların daha iyi kontrolünü sağladığından, artırılmış bir güvenlik seviyesi de sağlayabilir. Bir VM’ye virüs bulaşır veya bozulursa, diğer sanal makinelerden ve ana sunucudan ayrı tutulur. VM, bulundukları fiziksel sunucunun diğer bölümlerindeki kötü amaçlı olayların farkında değildir.Her sanal makine esas olarak ana makine sunucusunun donanımının sanal bir kopyası olduğundan ve kendi işletim sistemini kullandığından, çok fazla bellek ve işlem gücü tüketirken kaynak ağır ve yavaş olabilir. Her sanal makinenin boyutu da büyük olabilir, bu da taşınabilirliğini sınırlar ve böylece kolayca paylaşılamaz.
Kapsayıcılaştırma (Konteyner, Containerization)
Konteyner Nedir?
Kapsayıcılaştırma, sanallaştırma sorunlarının çoğunu çözmek için geliştirilmiştir. Konteynerların amacı, bir uygulamayı ve onun bağımlılıklarını kendi ortamında çalıştırmaktır. Bu, aynı sistem kaynaklarını ve aynı işletim sistemini kullanırken tek başlarına çalışmasına olanak tanır. Kaynaklar ayrı işletim sistemleri görevleri yürütmek için harcanmadığından, konteynerlar, uygulamaların çok daha hızlı ve hafif bir şekilde dağıtılmasına olanak tanır. Her konteyner görüntüsünün boyutu yalnızca birkaç megabayt olabilir, bu da paylaşmayı ve taşımayı kolaylaştırır.
Bir konteyner motoru, çok sayıda konteyneri kolayca yönetebilir, böylece gerektiğinde konteyner oluşturabilir, ekleyebilir ve çıkarabiliriz. Konteynerların bakımı da basitleştirilmiştir, çünkü hataları tek bir işletim sisteminde güncellememiz ve düzeltmemiz çoğu zaman yeterli olur. Aynı donanıma birden fazla uygulamanın tahsis edilmesi, donanım kullanımını geliştirdiğinden konteynerların donanım maliyetlerini düşürdüğünü de belirtmek gerekir.
Bununla birlikte, konteynerizasyonun dezavantajları da söz konusu. En önemlisi güvenliktir, çünkü ana bilgisayar çekirdeğindeki herhangi bir güvenlik açığı tüm konteynerları da etkileyecektir. Ayrıca, kötü amaçlı yazılım durumunda, güvenliği ihlal edilen konteyner sonlandırılabilir ve yeni bir temiz görüntü ile değiştirilebilir. Sanal makinelerde bulunan bazı hayati özellikler de konteynerlarda mevcut değildir, bu da sistemi güvende tutmayı çok daha zor hale getirir. Sunucuda yalnızca bir işletim sistemi çalıştığından, tüm uygulamaların aynı işletim sistemine dayanması gerekir, bu da kullanılabilecek uygulamaların uyumluluğunu ve çeşitliliğini sınırlar.
Virtualization vs Containerization
Bu teknolojilerin her birine bir göz attıktan sonra soru şu: hangisi kullanılmalı? Cevap, birkaç farklı noktaya bağlı olmasıdır. Esasen, her işletme ve uygulamanın farklı ihtiyaçları, gereksinimleri ve amacı olacaktır. Konteynerlara karşı sanallaştırma seçimi, iş geliştirme ve operasyonel modele ve uygulamaların yazılma ve üretilme şekline bağlıdır. Her ikisi de bağımsız sanal paketler oluşturan yazılım teknolojileridir, ancak kullanıcının ihtiyaçlarına en uygun olanı seçmek için aşağıdaki noktalara bakacağız.
- Hız : Hız söz konusu olduğunda, konteynerların bir uygulamayı dağıtmak ve çalıştırmak için gereken süreyi önemli ölçüde azaltması amaçlanmıştır. Konteyner, işletim sistemi zaten çalıştığından hemen başlar, bu nedenle uygulama herhangi bir gecikme olmadan başlatılır. Özellikle uygulama test döngüsünde zaman kazandığından bir geliştirme ortamı için mükemmel bir çözümdür. Öte yandan, sanal makinelerin tam önyükleme işlemini içeren tüm işletim sistemini başlatması gerekir. Bu, hizmetlerin başlatılmasını da içerecek ve bir konteynerın başlamasından daha uzun sürecektir. Aralarındaki fark donanım özelliklerinize göre max. 1-2 dakika olacaktır.
- Kaynaklar : Sanal sunucular ayrı işletim sistemleri çalıştırdığından ve her sistem işleminin sanallaştırma katmanından geçmesi gerektiğinden, belirli miktarda ek yük oluşturulur ve bu da daha fazla kaynağın kullanılmasına neden olur. Bu durum, sanal makineler herhangi bir kullanıcı işlemi çalıştırmasalar bile belleği tükettiği için özellikle bellek kullanımı için geçerlidir. Ancak, CPU sanallaştırma nispeten kolay ve ekonomiktir, bu nedenle sanal makinenin CPU yükü çok daha küçük olabilir. Konteynerlar söz konusu olduğunda, oldukça hızlı bir şekilde başlayabilirler, bu nedenle bellek tüketimi artmaz. Aynı işletim sistemini, bir hipervizör olmadan geçmek için kullandıkları için çok daha az ek yük vardır.
- Güvenlik ve izolasyon : Güvenlik ve izolasyon konusunda sanallaştırma kazanır, çünkü sanal makineleri birbirinden ayrı ve izole tutar. Virüs bulaşmış bir sanal makine diğerini etkilemez ve her sanal makine tamamen yalıtılmış bir ortamda çalıştığı için kendi güvenlik protokollerini kullanır. Bununla birlikte, konteynerlar yalnızca veri ve uygulamaları işlem düzeyinde izole ettiğinden, daha az güvenli bir ortam sağlar ve ana bilgisayar sisteminin güvenlik protokollerine bağlıdır.
- Taşınabilirlik ve uygulama paylaşımı : Konteyner görüntüleri sanal makinelerden çok daha küçük olduğundan, ana bilgisayarın dosya sisteminde aktarılması ve yerden tasarruf edilmesi daha kolaydır. Sanal makinelerde ise çekirdek, sistem kütüphaneleri, konfigürasyon dosyaları, işletim sisteminin gerektirdiği tüm dizinler ve tüm yardımcı programlar dahil olmak üzere tüm işletim sisteminin bir kopyası olmalıdır. Bu, görüntünün boyutunu önemli ölçüde artırır ve taşımak o kadar kolay değildir. Konteyner görüntüleri herhangi bir şekilde paylaşılabilir ve uygulama paylaşım merkezlerine(github v.b.) yüklenebilir. Sanal makine görüntülerinin bu tür merkezi hubları yoktur ve genellikle bunun yerine başka bir sunucuya yüklenmesi gerekir.
- İşletim sistemi gereksinimleri : En iyi, bir işletmenin özel bir işletim sisteminin tüm işlevselliğini gerektiren birden fazla uygulama çalıştırması gerektiğinde kullanılır. Bununla birlikte, uygulamaların çoğu aynı işletim sistemi gereksinimlerine sahipse, konteynerlar çok daha pratik bir çözüm olacaktır.
- Uygulama yaşam döngüsü : Konteynerlar, kısa sürede kurulabildikleri, taşınabilir oldukları ve çok daha hızlı başlatılabildikleri için kısa süreli uygulama ihtiyaçları için son derece uygundur. Bununla birlikte, bunlar özel bir işletim sistemi, işleme ve depolama kaynaklarının eksikliği ile sınırlıdır. Konteynerlar, en büyük öncelik en az sayıda sunucuda çalışan uygulama sayısını en üst düzeye çıkarmak olduğunda kullanılmalıdır. Sanal makineler, daha sağlam ve çok yönlü bir sanal ortamda çalıştıkları için uzun süre kullanılması gereken uygulamalar için çok daha uygundur.
Hibrit Çözümler ?
Her iki teknolojinin avantajlarının bir araya getirilmesi için sanallaştırma ve konteynerları birleştirmenin de yolları olduğunu belirtmek gerekir. Böyle bir kombinasyon hibrit konteyner mimarisi olarak adlandırılır ve sanal bir makineyi bir konteynerın içine veya sanal bir makinenin içine bir veya daha fazla konteyner koyarak birleştirebilir. Bu şekilde, bir konteyner içindeki bir uygulamanın hızlı ve hafif kurulumuyla sanal makinenin güvenliğini ve izolasyonunu elde edebiliriz.
Özetlemek gerekirse, her teknolojinin farklı bir amaca hizmet ettiğini ve bu teknolojiyi seçmenin büyük ölçüde kullanıcı ve uygulama ihtiyaçlarına ve sunucu kapasitesine bağlı olduğunu görebiliriz. Hem sanallaştırma hem de konteynerların önemli avantajları ve dezavantajları olduğu için, birini seçerken bu noktalar göz önünde bulundurularak dikkatle yapılması gerekir. Daha verimli bir şekilde karar vermek için aşağıdaki tabloda karşılaştırmaya hızlı bir genel bakış görebiliriz.
Virtualization | Containerization |
Daha güvenli ve tamamen yalıtılmış | Proses seviyesinde daha az güvenli ve izole |
Ağır, yüksek kaynak kullanımı | Hafif, daha az kaynak kullanımı |
Donanım düzeyinde sanallaştırma | İşletim sistemi sanallaştırma |
Her sanal makine çalışır kendi işletim sistemi | Tüm konteynerlar ana bilgisayarın işletim sistemini paylaşır |
Dakikalar halinde başlatma süresi | Milisaniye cinsinden daha hızlı başlar |