Modern bilişim altyapılarında hangi yapı kullanılır?
Modern Altyapı Kavramı Nedir? Neleri İçerir?
Modern altyapı dediğimiz kavram aslında günümüzde büyük şirketlerin ve büyük web sitelerinin kullandığı mimarilerin genel adıdır. Modern altyapı kavramlarına başlamak için bilmemiz gereken ilk detay bu yapının bileşenleridir. Modern altyapının temelini mikroservisler oluşturmaktadır. Daha sonrasındaki konteyner(container), kubernetes, serverless ve devops gibi kültürel kavramlar aslında bizi mikroservis dünyasına daha hızlı adapte etmek ve işlerimizi kolaylaştırmak için ortaya çıkmış kavramlardır. Günün sonunda amacımız bulut üzerinde çalışan bir altyapı oluşturmak. Bulut sistemler aslında ülkemizde çokça anlaşılan ve tam anlamıyla kullanılan bir kavram değil ne yazık ki. Bir çok alanda sadece hosting için kullanılıyor olsada bulut sistemlerin gücü bunlarla sınırlı değil. Modern altyapıyı çalıştırabilir halde tutabilmek için DevOps ve SRE kültürlerini de iyi bilmek gereklidir.
Mikroservis Mimarisi Nedir?
Mikro hizmetler ya da mikroservisler olarak adlandırılan mikroservis mimarisi, bulut uygulamaları oluşturmaya yönelik bir mimari yaklaşımdır. Bu yaklaşım temelde, büyük ve karmaşık bir uygulamanın, her bir parçanın kendi sorumluluk alanına sahip olduğu, daha küçük bağımsız parçalara ayrılmasına izin verir. Her uygulamada bir dizi servis oluşturulur, bu küçük bağımsız servisler kendi süreçlerinde çalışır ve servisler birbiriyle uygulama programlama arayüzü olarak bilinen API’lar aracılığıyla iletişim kurar. Temelleri konteyner kavramı ortaya çıkmadan ve web uygulamalarında modern döneme girilmeden atılan mikroservis mimarisi, zamanla “en iyi” uygulamalar geliştirmenin bir yolu olarak öne çıkar.
Mikroservis mimarisinin e-ticarette kullanımına dair bir örnek verelim. E-ticaret platformumuz ürün arama, ürün katalogu, alışveriş sepeti, yönetici arayüzü, ödeme ve sipariş değerlendirme olmak üzere 6 modülden oluşsun. Mikroservis mimarisinde tüm bu modüller küçük, bağımsız ve birbiriyle bağlantılı yazılım paketleri olarak çalışır. Her bir modülün geliştirme ve dağıtım süreçleri, sistemin genel işleyişi etkilenmeden gerçekleştirilebilir.
Mikroservis mimarisinin genel tanımından sonra, özellikle monolitik mimarinin özelliklerine odaklanarak dönüşümün nerede, nasıl gerçekleştiğini daha açık görebiliriz. Zira bugün mikroservis mimarisinin getirdiklerini anlamak için bir önceki yaygın yaklaşıma göz atmak gerekir.
Microservice Mimarisi avantajları:
mikroservisler ayrı ayrı modüler yapıda farklı projeler ve farklı teknolojiler ile yapıldığı için birisinde hata oluşsa yahut shutdown olsa bile diğerleri zarar görmez. Her bir mikroservis birden fazla instance olarak yayına alınacağı için birisi çökse yahut zarar görse sorun olmaz diğer devrede çünkü.
Microservice Mimarisi avantajları:
implementasyon, ağ üzerinden iletişim ve sunucuların birbiri ile iletişiminin sağlanması, debug etme(adım adım çalıştırma) ve hata yönetimi kolay değildir. Donanım kaynakları tüketimi pahalı ve maaliyetlidir.
Konteyner (container) nedir?
Konteyner, kod, çalışma zamanı, kitaplıklar, ortam değişkenleri ve yapılandırma dosyaları dahil olmak üzere bir yazılımı çalıştırmak için gereken her şeyi içeren bağımsız yürütülebilir bir pakettir. Konteynerler, uygulamaların çalışması için tutarlı ve yalıtılmış bir ortam sağlayarak, uygulamaların farklı geliştirme, test ve üretim aşamaları gibi farklı sistemlerde tutarlı bir şekilde çalışmasına olanak tanır. Bu, farklı ortamlarda uygulama geliştirmeyi, test etmeyi ve dağıtmayı ve ayrıca uygulamaların dağıtımını ve ölçeklendirmesini yönetmeyi kolaylaştırır.
Konteyner ile ilgili daha detaylı bilgi için “Docker Nedir ve Nasıl Kullanılır?” yazımızı okuyabilirsiniz.
Kubernetes nedir?
Başlangıçta Google tarafından oluşturuldu ve daha sonra Cloud Native Computing Foundation’a bağışlandı. Kubernetes Ayrıca Docker benzeri bir sistemdir, açık kaynaklıdır, Apache altında lisanslanmıştır ve Go programlama dili kullanılarak yazılmıştır. Kapsayıcıya alınmış uygulamaların dağıtımını ve yönetimini otomatikleştirmek için kullanılır. Ek olarak, Docker dahil olmak üzere konteyner çalıştırmak için farklı ortamları destekler.
Sonuç olarak, Kubernetes bir düzenleme platformu farklı makinelerin farklı konteynerlerine, bunların yönetimine ve aralarındaki kargo dağıtımına yardımcı olmaktan sorumlu konteyner. Özellikle bu projeyi bu tür senaryoların önemli bir parçası haline getiren organizasyondur …
- Otomatik zamanlama.
- Kendi kendini iyileştirme yetenekleri.
- Otomatik kullanıma sunma ve dağıtımlar.
- Yük dengeleme ve yatay ölçek.
- Daha yüksek kaynak kullanımı yoğunluğu.
- İş ortamlarına yönelik işlevler.
- Merkezi uygulama yönetimi.
- Kendi kendine ölçeklenebilir altyapı.
- Bildirime dayalı konfigürasyon.
- Güvenilirlik.
Kubernetes Avantajları:
- Kapsüller ile servisin kolay organizasyonu.
- Bulut sektöründe kapsamlı deneyime sahip Google tarafından geliştirildi.
- Devasa bir topluluk ve kapsayıcı düzenleme araçları.
- Yerel SAN’lar ve genel bulutlar dahil olmak üzere çeşitli depolama seçenekleri.
Kubernetes Dezavantajları:
- Daha karmaşık göçler.
- Karmaşık kurulum ve yapılandırma süreci.
- Mevcut Docker araçlarıyla uyumsuz.
- Manuel bir kümenin uygulanması karmaşıktır.
Serverless Nedir?
Serverless, geliştiricilerin sunucuları kişisel olarak yönetmek zorunda kalmadan uygulamalar oluşturmasına ve çalıştırmasına olanak tanıyan, bulutta yerel bir geliştirme modelidir. Bunun yerine, sunucu yönetimi bulut sağlayıcı tarafından gerçekleştirilir.
Serverless Computing (Sunucusuz Bilgi İşlem) Nedir?
Serverless computing, geliştiricilerin temel altyapı hakkında endişelenmeden kod yazmasına ve çalıştırmasına olanak tanıyan bir bulut bilgi işlem modelidir. Bu modelde bulut sağlayıcı, sunucular, depolama sistemleri ve ağ kaynakları dahil olmak üzere uygulamayı çalıştırmak için gereken altyapıyı dinamik olarak yönetir. Sunucuları yönetmeniz ve sağlamanız gereken geleneksel bilgi işlem modellerinin aksine, sunucusuz bilgi işlemde yalnızca kullandığınız kadar ödersiniz, çünkü hizmet sağlayıcı talebe göre ölçeği büyütme veya küçültmeyle ilgilenir. Bu, geliştiricilerin zaman alıcı ve maliyetli olabilen altyapıyı yönetmek yerine kod yazmaya odaklanmasını kolaylaştırır.
Serverless Computing Avantajları:
1. Ölçeklenebilirlik
Sunucusuz teknoloji, gelen iş yüküne göre uygulamaları otomatik olarak ölçeklendirebilir ve uygulamanın her zaman kullanıcılar tarafından kullanılabilir olmasını sağlar.
2. Düşük maliyetler
Bulut sağlayıcıları sadece işlevlerin gerçek kullanımı için ücret aldığından, geliştiriciler boşta kalan kaynaklar için ödeme yapmak zorunda kalmayarak maliyetten tasarruf edebilir.
3. Daha hızlı pazara sürüm süresi
Geliştiriciler altyapıyı yönetmek yerine yalnızca kod yazmaya odaklanabilir, bu da yeni özellikleri devreye almak için gereken süreyi azaltabilir.
4. Artırılmış çeviklik
Sunucusuz teknoloji, geliştiricilerin yeni kodu kolayca devreye alıp test edebildikleri için hızlı bir şekilde deney yapmalarını ve yinelemelerini sağlar.
Serverless Computing Dezavantajları:
1. Altyapı üzerinde sınırlı kontrol
Bulut sağlayıcıları altyapıyı yönettiğinden, geliştiriciler ortamın ağ ve güvenlik gibi belirli yönleri üzerinde sınırlı kontrole sahip olabilir.
2. Hata ayıklama ve test etme
Geliştiricilerin olayları simüle etmesi veya özel test çerçeveleri yazması gerekebileceğinden sunucusuz işlevlerde hata ayıklama ve test etme zor olabilir.
DevOps Nedir?
DevOps, müşterilere sürekli değer sağlamak için insanları, süreçleri ve teknolojileri bir araya getirir. Dev (geliştirme) ve ops (işlemler) kelimelerinin birleşimi olan DevOps, geliştirme ve yönetim etkinliklerinin bağlantılı olduğu bir yazılım geliştirme yöntemidir. Bu yöntem, önceden izole edilmiş farklı disiplinler arasında koordinasyon ve iş birliğini gerektirir. Örneğin kalite kontrol ve güvenlik ekipleri de DevOps modelindeki daha geniş ekibin bir parçasıdır.
Yöntem, bir Devops geliştiricisi, yazılım test uzmanı ve diğer ekip üyeleri arasındaki süreçleri otomatikleştiren bir dizi prosedürden oluşur. Amaç ise yazılım oluşturmayı, test etmeyi ve piyasaya sürmeyi daha hızlı ve daha güvenilir hale getirmektir. Konsept, tarihsel olarak ayrı silolarda faaliyet gösteren ekipler arasında iş birlikçi bir kültür geliştirmeye dayanır.
DevOps mühendisler FreeBSD, Puppet, Linux, AWS, Kubernetes ve Docker gibi tekniklerden yararlanır. Peki çok yaygın olarak yararlanılan Amazon Web Services, AWS DevOps nedir? AWS DevOps, şimdiye kadar yapılmış en kapsamlı ve IaaS, PaaS hizmetlerini kapsayan bulut servisidir. Tüm şirketlere DevOps kullanarak oluşturulan ürünleri (ürün oluşturulmasını da kapsar) sunmak için farklı ve uyarlanabilir hizmetler sunar.
Avantajları:
- İş birliği arttıkça pazarlama süresi doğal olarak azalır.
- Teknolojinin sürekli gelişmesiyle pazara ayak uydurmak gerekir ve DevOps buna ortam sunar.
- Süreç bir döngü halinde ilerlediği için devamlılık sağlanır.
- DevOps ile süreç otomatize edildiği için hızlı ürün ortaya çıkar ve insan hata riski ortadan kalktığı için güvenilirlik sağlanır.
- İki ekip beraber bu süreci yönettiği için de ortalama kurtarma süresi de hızlanır.
Dezavantajları:
- Ops ekipleri monitoring sürecinde sistemde oluşan sorunları dev ekibine bildiriyor. Bu işlem otomatik olduğu için dönüşler hızlı olur. Bu yüzden dev takımı oluşan sorunlara karşı daha hızlı çözüm üretmek zorunda kalır. Bu dev takımı için daha fazla efor saf etmesine sebep olduğundan geliştiriciler tarafından bir dezavantajken müşteri açısından avantaj olabilir.
- Süreç otomatikleştikçe güvenlik riskleri oluşabilir.
- Sürekli gelişen ve ilerleyen teknolojiye ekiplerin ayak uydurma süreci yıpratıcı olabilir.