Yazılım Mimarileri


Son zamanlarda yazılım sektöründe adını sıkça duyuran ve büyük şirketler tarafından sıklıkla kullanılan yazılım mimarileri nedir, nelerdir, haydi gelin konuşalım.

full-stack-developer-nasil-olunur

Yazılım Mimarisi nedir?

Günümüz teknoloji çağında gelişen ihtiyaçlarla birlikte birbiriyle entegre çalışan büyük sistemler kuruluyor.

Bir seyahatiniz için havaalanına doğru arabanızla yola çıkıp kırmızı ışıkta beklerken, havaalanına ulaştıktan sonra uçak biletinizi satın alırken ve yola çıktığınızı haber vermek için bir yakınınızı ararken kısacası hayatımızın her anında bir seri yazılımlar bütünüyle işlerimizi hallediyoruz.

Hal böyleyken bu sistemler de ihtiyaçlara yetişmek için kaçınılmaz bir şekilde büyüyerek karmaşık bir yapıya bürünüyor.

İşte büyüyen ve sürekli büyümeye devam eden bu sistemlerin organize çalışmalarını sürdürebilmek için, oluşan karmaşıklığı en iyi şekilde yönetmek gerekiyor.

Burada ise devreye “mimariler” giriyor.

Mimariler, bir sistemi belirli bir düzen halinde modüllere ayırır. 

Bu sayede karmaşık sistemleri anlamak kolaylaşır. O sistem üzerinde çalışan farklı departmanlardaki çalışanlar birbirleriyle rahatlıkla iletişim halinde kalabilir. 

En önemlisi ise sistem bunlar sayesinde “sürdürülebilir” bir yapıya kavuşur.

Bir yazılımın en önemli prensiplerinden biri “sürdürülebilir” olmasıdır.

Basit bir örnekle bunu pekiştirelim:

4 katlı bir inşaat düşünelim. İnşaat bitirildikten sonra 2.katı iptal etmek istersek bunu yapamayız. Çünkü temel mimarisinde kolonlar bize izin vermeyecektir.

İşte yazılımlar inşaat projeleri gibi tek seferde yapılıp bitirilen sistemler değillerdir.

İnsanların ihtiyaçlarına göre, mevzuata göre yazılımlar gerektiği zaman şekillenebilmeli ve değişimlere ayak uydurarak sürdürülebilir olmalıdır.

Şimdi sıklıkla kullanılan birkaç yazılım mimarisinden bahsedelim.

  • Monolitik (Monolithic Architecture)
  • SOA (Service Orianted Architecture)
  • Mikro Servisler (MicroServices Architecture)

Monolitik Mimari (Monolithic Architecture)

Klasik, her zaman kullandığımız; kullanıcı(client), sunucu(server) ve veri tabanından(database) oluşan temel mimaridir. 

Client sunucuya istek gönderir. Örn. /products, /product/1234

Sunucu gelen istek üzerine veritabanına bakar.

İstek gönderilen veri, veritabanından getirilir.

Sunucuda MVC deseninde üç katman vardır.

Presentation Layer(view dosyaları, html vs.)

Business Layer(controllers ve ana aksiyonlar vs.)

Data Access Layer(db bağlantısı)

Business getProduct metodunu data access’e gönderir. Oradan db’deki veri business’a gelir.

Businessdan ise presentation layer’a gider.

Monolitik mimaride sunucunun kaynakları yetersiz kaldığında veya veritabanı artık isteklere yetişememeye başladığında sunucu kendini kopyalayarak eşler.

Örneğin Product Service’den gelen isteklerde böyle bir sorunla karşılaşıldı. Bu eşleme işlemi gerçekleştirilir. Fakat yoğunluk sadece Product Service’de olmasına rağmen her şey kopyalanarak eşlenmiş olur. Bu da gereksiz yere fazladan maliyet oluşturacaktır.

Peki isteklerin Product Service’e gelen yüke göre kopyalanmış sunuculardan hangisine erişeceği nasıl belirtiliyor? Load Balancer’larla.

Load balancer’lar kullanıcılardan gelen isteği duruma göre server’lara paylaştırmayı hedefler. bkz. Apache, NGINX…

Avantajlar ve Dezavantajlar

Tek bir proje olduğu için geliştirmesi, testleri ve dağıtımı kolay bir şekilde yapılabilir.

Fakat aynı şekilde tek bir proje olduğu için projenin sürdürülebilirliği zorlaşır. Tek bir değişiklikte bütün proje tekrardan yayınlanması gerekir ve bunun gibi birçok sorunla karşılaşılır.


SOA (Service Orianted Architecture)

Monolitik mimariden farklı olarak servislerin her biri ayrı birer proje olarak tasarlanır.

Dolayısıyla servisler birbirlerine ve tek bir teknolojiye bağımlı olmadan çalışabilir.

Örneğin 3 tane servise sahip olan bir şirket düşünelim. 

Bayideki adam başka bir servis, 

Müşteri hizmetlerindeki adam başka bir servis,

Pazarlamadaki adam başka bir servis kullanıyor.

Ve bu servislerde yapılan bütün işlemler ortak veri tabanına gidiyor.

İşte bu kadar fazla kullanıcı ile ortak bir veritabanına(-larına) erişmeye çalışınca yine birçok sorun karşımıza çıkıyor.

Avantajlar ve Dezavantajlar

Buradaki en önemli faydalardan biri servislerin platform bağımsız olarak geliştirilebilir olmasıdır. Örneğin:

Pazarlama için gereken servisi Java’yla,

bayiler için gereken servisi Node.js ile,

müşteri hizmetleri için gereken servisi .Net ile geliştirebiliriz.

O dönemdeki yazılım geliştirici potansiyeline ve gelişen teknolojilere göre en uygun seçim yapılarak tüm sistemi etkilemeden farklı sistemler üzerinde çalışılabilir, eklemeler, düzenlemeler yapılabilir.

Dezavantaj olarak ise şunları sayabiliriz:

Kullanıcıdan bir istek gönderildiğinde istek, servislere ulaşmadan önce ESB denilen bir doğrulama işleminden geçer. Örneğin Account Service’e bir istek gidecek diyelim. ESB bu isteği alıyor, doğruluyor ve Account Service’e yönlendiriyor.

İşte bu şekilde ayrı ayrı servislere erişmek için çok fazla istek gönderileceğinden dolayı ESB’ye binecek olan yük artacaktır. Bu istek yükünün kontrol altına alınabilmesi için ise sunucunun bant genişliğinin arttırılması gerekecek dolayısıyla proje maliyeti de doğru orantılı olarak artacaktır.


Mikro Servisler Mimarisi (Microservices Architecture)

SOA’ya çok benzeyen mikro servislerde temel fark her bir servisin kendi sunucusu ve veritabanı olmasıdır.

Bu nedenle aslında her bir servis başlı başına bir projedir.

Her bir proje sadece tek bir görevi üstlenir ve o görevi en iyi şekilde yapar.

Her biri ayrı ayrı sunucularda olduklarından birbirleriyle iletişim kurmaları için API gateway kullanılır. REST API’lerle içerik aktarıldığı için servislerde kullanılan programlama dili farketmez. REST API’yi bize sağlayabilecek bir yapı yeterli olacaktır.

Dolayısıyla her bir servis için istenilen herhangi bir teknolojiyle çalışılabilir. 

Bir servisi Ruby, bir servisi Java ve başka bir servisi farklı bir teknolojiyle yazıp çalıştırabiliriz.

Genel olarak; mimarilerin avantajlarını ve dezavantajlarını daha iyi anlayabilmek için birbirleriyle kıyaslamalı şekilde düşünürsek aklımıza daha rahat oturtabiliriz. 

Evet, bugünkü yazımızda sektörde sıklıkla kullanılan mimariler hakkında konuştuk.

Umarım ki bilgilendirici bir içerik olmuştur. Yeni yazılarımızda görüşmek üzere.

Keyifli okumalar ..:)


Beğendin mi? Arkadaşlarınla paylaş!

2
1 paylaş, 2 Puanlar
Emrecan Ay

0 Yorum

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir