Bulut Mimarisinin Temelleri
Bulut Mimarisinin Temelleri
Bulut Bilişim Tipleri
Özel Bulut (Private Cloud)
Bulut servislerinin kullanıcıya özel olarak sunulmasıdır.
Sunulan kaynaklar diğer kullanıcılarla paylaşılmaz, kullanıcı kendisine sunulan
bulut servislerinin ölçeklenebilirlik, elastiklik gibi özelliklerini
kullanırken kontrol ve uyarlanabilirlik özelliklerine de sahip olur. Özel bulut
servisleri IaaS ve Paas modeli ile sağlanabilir. Iaas, Servis Olarak
Altyapı(ağ,depolama..) ve PaaS, Servis Olarak Platform(işletim sistemi, web
sunucusu, veritabanı sunucusu...) anlamına gelmektedir.
Dahili veya kurumsal bir bulut olarak da adlandırılan özel bulut,
şirketlere barındırılan bilgisayar altyapısı üzerinden özelleştirilmiş
kaynaklardan sağlanan ek kontrol ve özelleştirme sayesinde, işletmelerin
self-servis, ölçeklenebilirlik(scalability) ve elastikiyet(elasticity) gibi
genel bir bulutun pek çok avantajını sağlar
Genel Bulut (Public Cloud)
Internet üzerindeki sunucular ile sağlanan ve herkese açık
olan bulut hizmetidir. Genel bulut, bir hizmet sağlayıcının sanal makineler
(VM'ler), uygulamalar veya depolama gibi kaynakları, internet üzerinden herkese
açık hale getirdiği standart bulut bilişim modeline dayanır.
Sunulan hizmetler kullanıcılara ücretsiz veya ücret
karşılığı sağlanabilir. Kullandığın kadar öde modeli de uygulanmaktadır.
Özel bulutların aksine, genel bulutlar firmaları şirket içi
donanım ve uygulama altyapısı satın almak, yönetmek ve bakım yapmak zorunda
kalmaktan kurtarabilir - bulut hizmeti sağlayıcısı sistemin tüm yönetim ve
bakımından sorumlu tutulur.
Melez Bulut (Hybrid Cloud)
Melez bulut, genel bulut ile özel bulut arasında veri ve
uygulamaların paylaşılmasını sağlayarak bulut ortamını entegre eder. En kısa
ifadeyle, kurum içi kaynakların gelen bulut kaynaklarıyla bütünleştirilmesidir.
Genellikle, melez bulut, bir genel bulut hizmetinin ve kurum
içi bir özel bulutun kombinasyonunu ifade eder; Bununla birlikte, melez bulutlar,
farklı sağlayıcılar tarafından sağlanan genel bulutlardan veya bulut ile
geleneksel IT'nin bir kombinasyonundan oluşabilir. Aslında, geleneksel IT
altyapısında mevcut sistemlerin bir genel bulut hizmeti ile birleştirildiği bir
kurulum şu anda hibrit bulutun en yaygın kullanımı halidir.
Melez bulut kullanmak, yalnızca şirketlerin bilgi işlem
kaynaklarını ölçeklendirmesine olanak tanımakla kalmaz aynı zamanda kısa süreli
talep artışlarını karşılamak için büyük sermaye harcamaları yapma ihtiyacını ve
işin daha hassas veri veya uygulamalar için yerel kaynakları ayırması
gereksinimini ortadan kaldırır.
Genel Bulut Servis Modelleri (Public Cloud Services)
Bu konuyla ilgili aşağıdaki görsel ile başlayalım. IaaS,
PaaS ve SaaS ile ilgili olan bu görsel aşağıdaki anlatım öncesi bir fikir
verecektir.
Tek tek IaaS, PaaS ve SaaS maddelerine geçmeden önce konuyu
basitleştirmek adına yakın zamanda okuduğum bir yazıdaki örnekle başlamak
istiyorum.
Tek başına, altyapı(IaaS) kullanışlı değildir - orada sadece
duran ve birisinin belirli bir sorunun çözümünde üretken olmasını bekleyen bir
yapıdan başka birşey değildir. Ülkedeki ulaşım sistemini düşünün. Tüm bu yollar
inşa edilmiş olsa bile, insanlar ve eşyaları taşımak için araba ve kamyon
olmadan kullanışlı olmazlar. Bu benzetmede, yollar altyapıya(IaaS), arabalar ve
kamyonlar ise altyapının üzerine oturan ve insanları ve eşyaları taşıyan
platformdur(PaaS). Eşyalar ve insanlar ise teknik alanda yazılım(SaaS) ve bilgi
olarak düşünülebilir.
Servis Olarak Altyapı – IaaS (Infrastructure As A Service)
IaaS, bilgi işlem, depolama, ağ oluşturma ve diğer
kabiliyetleri Internet üzerinden sunmanın bir yöntemidir. IaaS, şirketlerin
temel bulut altyapısını satın almak, yönetmek ve desteklemek zorunda kalmadan
web tabanlı işletim sistemlerini, uygulamaları ve depolamayı kullanmalarını
sağlar. IaaS platformlarının en popüler örnekleri Amazon Web Hizmetleri (AWS)
ve Microsoft Azure'dur.
Kullanıcılar, genel ortam için bir IT operasyon yönetimi
konsolu olarak hizmet veren Web tabanlı bir grafik kullanıcı arayüzü
kullanarak, bu altyapıyı kendi başlarına yönetebilirler. Altyapıya API erişimi
bir seçenek olarak sunulabilir.
En kısa ifadeyle IaaS, kullanıcılara depolama, ağ oluşturma,
sunuculara ve buluttaki diğer bilgi işlem kaynaklarına ücret karşılığı erişim
sağlayan servistir.
Kullanıcı, kendi ihtiyaçları doğrultusunda CPU, RAM ve
Depolama miktarını belirler ve bu özellikleri sağlayan bir VM(virtual
machine)’i servis sağlayıcıdan satın alır. Bu VM alındıktan sonraki adımlarda işletim
sistemi bakımı ve yönetimi, servis konfigürasyonu kullanıcı tarafından gerçekleştirilir.
Servis Olarak Platform – PaaS (Platform As A Service)
PaaS, IaaS’e ek olarak yazılım, geliştirme araçları, iş
zekası (BI) hizmetleri, veritabanı yönetim sistemleri gibi sistemler de içerir.
Yazılım lisansları, uygulama altyapısı, geliştirme araçları ve diğer kaynakları
satın alma ve yönetme zorunluluğundan kurtarır. Bu hizmetler bulut sağlayıcısı
tarafından verilmektedir.
PaaS, geliştiricilerin internet üzerinden uygulamalar ve
hizmetler oluşturmasına izin veren bir platform ve ortam sağlar.
PaaS, SaaS'tan daha düşük bir seviyede çalışır ve temel
olarak yazılımın geliştirilip dağıtılabileceği bir platform sağlar. PaaS
sağlayıcıları, altta yatan sunucu donanım ve ağ altyapısını bakımı ve sunucularla
uğraşma zorluğunu üstlenir ve kullanıcılara sadece iş tarafına odaklanmayı sağlayan bir ortam sunar.
Servis Olarak Yazılım – SaaS (Software As A Service)
SaaS, yazılımın bulutta barındığı ve internet üzerinden
erişildiği bir abonelik tabanlı modeli ifade eder. Basitçe web veya bir API
aracılığıyla erişilen bulut tabanlı uygulamalar olarak tanımlanır.
Depolama ve işleme işlemlerini bulut sunucularında
gerçekleştirilir ve servise erişmek ve kullanmak için oldukça basit ve yaygın
bir istemci (genellikle bir web tarayıcısı) kullanılır. Hizmet sağlayıcısı,
donanım ve yazılımı yönetir ve hizmet sözleşmesi ile uygulamalarınızın ve
verilerinizin kullanılabilirliğini ve güvenliğini sağlar.
Web tabanlı email hizmetleri, sosyal medya, web tabanlı
müzik dinleme hizmeti veren uygulamalar SaaS’e örnek olarak verilebilir.
Konteyner’lar ve MikroServisler (Containers And Microservices)
Konteyner
Container, bir uygulamanın kodunu, yapılandırmalarını ve
bağımlılıklarını, tutarlılık, verimlilik, üretkenlik ve sürüm denetimi için
yapı taşları olarak paketleyen bir sanallaştırma(virtualization) yöntemidir.
Container, yazılımın paylaşılan bir işletim sisteminde
izoleli olarak çalışabilen bir biçimde paketlenmesinin bir yoludur. VM'lerin
aksine, container bir işletim sistemi paketlemez; yalnızca yazılımı çalıştırmak
için gereken kütüphaneler ve ayarlara ihtiyaç vardır. Bu, yazılımın nerede
konuşlandırıldığına bakılmaksızın yazılımın daima aynı şekilde çalışacağını
garanti eder.
Container teknolojisi ile uygulamaların deploy edilmesi çok
daha kolay ve VM’e göre çok çok hızlıdır. Continuous Integration gibi yazılım
geliştirme süreçlerinde geliştiricilerin otomasyona bağladığı derleme ve test
süreci sonrasında yayın süreci gelmektedir, yayın(deployment) sürecinin
sorunsuz gerçekleşmesi çok önemlidir. Üretilen ve test edilen bir yazılımın
kullanıcının deneyimine sunulma aşamasında kullanıcının işlerini kesintiye
uğratmadan deployment tamamlanmalı ve bu işlemler hatasız gerçekleşmelidir.
Container’lar bu alanda da önemli kolaylık getirmiştir ve kullanımları
yaygınlaşmaktadır.
Konteynerlar bir konteyner engine üzerinde çalışır ve bu
container engine aşağıdaki işletim sisteminden bağımsız olarak çalışır, alttaki
yapının VM veya fiziksel bir makina olmasının önemi yoktur.
Konteynerlar için endüstri standardı Docker olarak
söylenebilir. Çoğu büyük platform Docker engine desteğine sahiptir ve Docker
imajlarını bu engine üzerinde çalıştırmaktadır. Bu imajlara Dockerfile ismi
verilir ve Dockerfile içerisinde konfigürasyon tanımları, uygulamalar,
servisler vb gerekli tüm şeyler bulunur.
MikroServisler ve Konteyner Orkestrasyonu
Diyelim ki uygulamamız büyüyor ve tek bir blok olarak
giderek daha fazla fonksiyon eklemeye devam ettik. Uygulama çok fazla CPU ve
RAM tüketen ve yönetimi neredeyse imkansız bir hale gelmeye başladı. Bu durumda
ne yapmak gerekir?
Uygulamamızı daha küçük parçalara ayırmaya karar verir ve
her biri belirli bir görev veya fonksiyon için sorumlu daha küçük bölümlere
yani mikroservislere(microservices) ayırmaya karar veririz.
İşte bu durumda bir ihtiyaç daha ortaya çıkıyor o da Konteyner
Orkestrasyonu(Container Orchestration), konteynerların otomatik olarak
düzenlenmesi, koordinasyonu ve yönetimi anlamına gelir. Bir uygulama için bir
den çok container kullanılabilir ve bu container’lar arasında uyumun sağlanması
için container’ların yönetilmesi, yayınlanması, konfigürasyonu işlemlerinin
gerçekleştirilmesi bu şekilde olmaktadır. Örnek tool olarak Kubernetes verilebilir.
Bulut Kimlik Yönetimi
Hesap Koruma Yöntemleri
Bulut kaynaklarına erişimde kimlik yönetimi ve kullanılan
hesapların koruması önemli konulardan biridir. Örneğin yönetici hesabı tüm
kaynaklara, servislere erişim hakkına ve tüm kullanıcıların yetkilerini
belirleme onları blok etme hakkına sahiptir ve güvenliği bu nedenle oldukça
önemlidir. Bu güvenliği sağlamak için bazı noktalara dikkat etmek gerekir.
Bunlar:
·
Şifre güvenliği
Şifrelerin tahmin edilememesi için şifre
belirlemede akılda kalan veya tahmin edilebilen şifreler yerine içinde büyük
küçük harf kombinasyonu ve rakam içeren daha karmaşık şifreler kullanılmalıdır.
Brute Force gibi şifre kırma ataklarına karşı güçlü şifrelerin belirlenmesi
önemli bir güvenlik konusudur.
·
Çok faktörlü kimlik doğrulama (Multi Factor
Authentication)
Hesabınıza güvenli bir şekilde erişilmesine
yardımcı olmak için kullanılır ve hesaba giriş işlemini her biri farklı bir
faktör kategorisinden doğrulayarak kullanıcıyı tanımlama işlemidir.
·
Koşullu Erişim (Condition Access) ve Sahtekarlığı
Algılama(Fraud Detection)
Koşullu erişim, kullanıcılara konum, aygıt
ve uygulama düzeyinde içeriğe dayalı kontroller sağlayan ilkeler tanımlaya
imkan veren yöntemdir. Örneğin bir kullanıcının belirlenen IP’ler dışında başka
bir IP aralığından bağlanması engellenebilir.
Fraud Detection, sahtekarlık veya hile ile sisteme
girmeye çalışanların algılanmasıdır. Örneğin bir kullanıcı kendi hesabına ilk
girişi Türkiye,İstanbul’dan yapmış ve bu işlemden beş dakika sonra İngiltere’den
giriş yapmaya çalıştığını düşünelim. Bu işlem şüpheli olarak kabul edilip Fraud
Detection kuralları ile algılanıp bloklanabilir.
Yukarıda saydığım güvenlik önlemlerine yenileri de
eklenebilir fakat ne kadar önlem alınırsa alınsın bu bir sistemin tamamen
güvenli olduğu anlamına gelmez. Her zaman birilerinin bir yöntem veya açık
bulup sisteme erişme imkanı olabileceği olasılığı göz ardı edilmemelidir. Olası
sızmalara veya saldırılara maruz kalınan durumlarda sistemin işleyişinin
devamına yönelik de bazı önlemler geliştirilmelidir. Örneğin bir bulut
ortamında admin hesabının yaratılan tüm ortam üzerinde tam yetkisi vardır.
Uygulamaların ve servislerin tek ortamda olduğunu ve bunun bir admin ile
yönetildiğini varsayalım. Admin hesabı ile ilgili bir sorun yaşandığında tüm
ortamın çalışamaz hale gelmesi sözkonusudur. Buna karşı uygulamaların ve
servislerin farklı ortamlara dağıtılması, birbirini yedeklemesi ve bu
ortamların farklı admin hesaplarıyla yönetilmesi daha güvenli olacaktır. Bu
şekilde bir hesap ile sorun yaşandığında sistemin diğer ortamlardan ayağa
kalkarak devamlılığının sağlanması daha sağlıklı olacaktır.
Rol Tabanlı Erişim Kontrolü
Rol tabanlı erişim kontrolü (Role Based Access Control - RBAC),
kullanıcıların rollerine dayalı olarak bilgisayar veya ağ kaynaklarına erişimi
düzenleyen bir yöntemdir. Örneğin bulut sisteminde bir yönetici hesabı ve
veritabanı işlemleri yapan başka hesaplar olsun. Tüm bu hesaplara aynı hakları
verip tüm kaynaklara erişimi açmak güvenlik riskleri oluşmasına yol açar. Bunun
yerine kullanıcılara ve yöneticilere gerektiği kadar ve gereken ölçüde hak
verilmeli ve bu hakların sistemde nasıl bir risk oluşturabileceği önceden
analiz edilmelidir.
Sunucusuz Bilgi İşlem (Serverless Computing) (FaaS)
Diğer adıyla Servis Olarak Fonksiyonlar (Functions as a
Service - FaaS).
Öncelikle belirtmek gerekiyor ki bu serverless isimlendirmesi
kullanılmasına bakılmaması gerekiyor, çünkü bu konu tamamen serverlar üzerinde
geçiyor ve onlara bağımlı. Bu nedenle başlığın verdiği önyargıyı yazının
başında kırmak önemli. Serverless programming bulut servis sağlayıcısının sunduğu
fonksiyonlar ile gerçekleştiriliyor.
Önemli üç nokta var:
·
Sunucuların geliştiriciden tamamen soyutlanması,
yani geliştiriciler sunucu ile ilgili herhangi bir bilgiye sahip olmak zorunda
değil. Kullanılan altyapı için bir ücretlendirme yok.
·
Tüketim ve çalıştırma temelli faturalandırma,
sunucunun alanı,performansı fiyatta belirleyici değil. Fiyat ne kadar
çalıştırıldığı ile ilgili ücretlendirme var.
·
Olay güdümlü ve anında ölçeklenebilir olan servisler.
Bulut platformunun sunduğu fonksiyonlar, API ve hizmetler kullanılıyor. Kodlama
olay güdümlü ve stateless yazılıyor. Yazılan kodun verimi ücretlendirmeyi de
doğal olarak etkiliyor.
Olay güdümlü sistemler için yeni bir mimari kalıptan
bahsediyoruz. Bu nedenle, sunucu içermeyen işlevler genellikle diğer hizmetler
arasında bağlayıcı olarak veya olay odaklı bir mimaride kullanılır. Kısa ömürlüdür,
durum bilgisi tutmaz, mevcut hizmetlerinizden veya üçüncü parti kaynaklardan
faydalanır, bir kaç saniye içinde işini yapar.
Sunucusuz bilgi işlem, kod çalıştırma işleminin, geleneksel uygulama
geliştirme ve sunuculara dağıtma yöntemi yerine tamamen bir bulut sağlayıcısı
tarafından yönetildiği bir mimaridir. Geliştiricilerin, kod dağıtırken
sunucuları yönetmek, hazırlamak ve korumak için endişe duymamaları anlamına
gelir. Daha öncesinde bir geliştirici, ne kadar depolama ve veritabanı kapasitesi
gerekiyor bunu tanımlamak zorundaydı ve toplam süreç bu nedenle yavaşlamaktaydı
fakat bu yöntemle bu tip endişelere gerek duyulmamaktadır.
Sunucusuz uygulamalar oluşturmak, uygulama
geliştiricilerinin bulut veya lokaldeki sistemin yönetilmesi ve çalıştırılması
ile ilgilenmek yerine uygulama geliştirmeye odaklanabileceği anlamına gelir. Bu
azaltılmış yük, geliştiricilerin ölçekli ve güvenilir ürünler geliştirmek için daha
fazla zaman ve enerjiyi ürüne ayırmalarını sağlar. Bu hizmeti veren hizmet
sağlayıcıların örnek ürünleri, AWS Lambda, Azure WebJobs, IBM OpenWhisk, Google
Cloud Functions olarak sıralanabilir.
Yorumlar