Bir MVP için En İyi Mimari Hangisidir ? — Monolit, SOA, Mikro Servisler veya Sunucusuz Yapı Modeli

Açıkça söylemeliyim ki: Bu yazımız büyük şirketler, yeni şirketler ve büyümekte olan şirketler için ciddi önem arz etmektedir.

Bayram EKER
9 min readOct 13, 2022
Monolith, SOA, Mikro Servisler, Makro Servisler

Yeni bir proje hayata geçirmenin maliyetleri olduğu gibi riskleri de vardır. Başarılı olmanın en önemli adımı doğru mimariyi seçmektir. En büyük hata ise yanlış mimari ile yola çıkmaktır. Doğru bir mimari seçmediğiniz takdirde ileride geri dönülmesi zor bir çıkmaza girmeniz muhtemel.

Bu yazımızda: Monolithic Mimari, Servis Odaklı Mimari, Mikro Servisler, Makro Servisler, Mini Servisler veya Sunucusuz Yöntem gibi konuları başlıklar altında inceleyeceğiz.

MVP “Minimum Viable Product” Nedir?

Minimum Viable Product olarak bilinen MVP, yapacağımız ana ürünün hızlıca hedef kitlesinden feedback alabilmek ve ürüne pazarda bir ihtiyaç olup olmadığını anlamak için minimum efor ve fonksiyon setiyle ürünün hayata geçirildiği halidir. Ürünün odaklandığı alanda hedef kitlesine değer sunabilen en ufak yapıdır.

Minimum Viable Product

MVP ürün geliştirme sürecinde önemli bir rol oynar.

MVP metodu; gelecek adına kararlar almanızı daha da kolaylaştırır, ürünün early adopter hedef kitlesini bulmayı sağlar, geliştirme maliyetini azaltır, hipotezleri test etmenizi kolaylaştırır, erken aşamada bir pivot olanağı sağlar, ürüne yatırım almanızı kolaylaştırır, ürün için kullanacağınız teknolojileri test etmenizi sağlar.

Monolitik Mimari (Monolithic architecture)

Monolit; büyük, tek ve sert bir taş bloğuna atıfta bulunan eski bir kelimedir. Yazılım mühendisliğinde monolitik bir mimari: Tek, bir ve bölünmez yapıya sahip projelere atıfta bulunur. Monolitik mimari kavramı, bir uygulamanın farklı bileşenlerinin tek bir platformda ve tek bir programda birleştirilmesini ifade etmektedir. Genellikle monolitik bir uygulama; Bir veritabanı, kullanıcı arabirimi ve sunucu tarafı uygulama alanı kısımlarından oluşur. Yazılımın tüm parçaları birleştirilmiştir ve tüm işlevleri tek bir yerde yönetilir. Monolitik yazılımın yapısına ayrıntılı olarak bakalım.

monolit mimari

Monolitik mimari, küçük ekiplerin birlikte çalışması için rahattır, bu nedenle birçok startup yeni bir proje geliştirirken bu yaklaşımı seçer. Monolitik yazılımın bileşenleri birbirine bağlıdır ve aynı ortamdadır, bu da yazılımın dış kaynaklardan bağımsız olmasına yardımcı olur. Bu mimari aslında gelişmiş bir çözüm değil aksine geleneksel bir çözümdür ve bazı geliştiriciler modasının geçtiğini ifade eder. Bana kalırsa hala küçük projelerde tercih edilebilir.

Hangi durumda monolitik mimari avantajlı olabilir tecrübeli geliştiricilerden alıntı:

Google’da mikro servisleri kullanma konusunda bu olumlu deneyimlere sahip olmamıza rağmen, [Scaylr’da] tek parça bir yol izledik çünkü tek bir tek sunucuya sahip olmak iki mühendis olarak bizim için daha az iş anlamına geliyor.

Steven Czerwinski, Head of Engineering at Scaylr

Monolitik Mimarinin Avantajları ve Dezavantajları

avantaj ve dezavantaj

Monolitik Mimarinin Avantajları

1-) Kolay Geliştirme ve Hızlı Yayınlama

Geliştirmeyi kolaylaştırmak için entegre edebileceğiniz birçok araç vardır. Ayrıca, tüm işler daha kolay dağıtım sağlayan tek bir dizinde gerçekleştirilir. Monolitik bir yapıyla, geliştiricilerin değişiklikleri veya güncellemeleri ayrı ayrı dağıtmaları gerekmez, çünkü bunu bir kerede yapabilirler ve çok zaman kazanırlar.

2-) Bütünleşik Yapının Ölçeklenebilir Kolaylığı

Çoğu uygulama, denetim kayıtları, günlük kayıtlar, hız sınırlaması vb. gibi problemlerle karşılaşabilir. Bu sorunları tek elden çözmek ve tüm sistemi kolayca idare edebilmek gibi bir kolaylığı vardır.

3-) Daha İyi Performans

Monolitik yapıda, algoritma analizi doğru sağlanmış kod bloğumuz genellikle Mikro servis tabanlı uygulamalardan daha performanslıdır. Mikro Servis mimarisine sahip bir uygulamanın, her ekranı yüklemek için 40 farklı Mikro Servise 40 API çağrısı yapması gerekebilir, bu da açıkça daha yavaş performansa neden olur. Monolitik uygulamalar ise paylaşılan kod ve bellek sayesinde yazılım bileşenleri arasında daha hızlı iletişim sağlanmasına olanak sağlar.

Monolitik Mimarinin Dezavantajları

1-) Gelişen Projenin Yazılım Karmaşası

Zaman içinde içende bulunduğumuz proje alanı genişler , içerik kapsamı artar ve kod yapıları karmaşık hale gelir. Kod yapıları gerçekten çok büyük görünmeye başlar, özellikle yeni geliştiriciler için anlaşılması ve değiştirilmesi zor hale gelir. Ayrıca metod kaynaklarını ve bağımlılıkları bulmak da zorlaşır. bu doğrultuda büyüyen bir proje ile kod yapısı kalitesi de düşer ve entegre geliştirme ortamı (IDE) aşırı yüklenir. Projenizi hantallaştırır.

2-) Yeni Teknolojilere Adaptasyon

Projenize yeni teknolojiler eklemeniz gerekiyorsa, geliştiriciler monolitik yapının olması sebebiyle yeni teknolojileri entegre aşamasında ciddi engellerle karşılaşabilir. Bazen bu yeni teknoloji eklemek, tüm uygulamayı yeniden yazmak anlamına gelir, bu da maliyetli ve zaman alıcıdır.

3-) Sınırlı Çeviklik

Monolitik model aslında eski değil ve bazı durumlarda hala yerini koruyor. Etsy gibi bazı dev şirketler günümüzde mikro servislerin çok yaygın olmasına rağmen geleneksel mimari olan monolit mimarisini tercih ediyor.. Eğer kuruluş aşamasındaysanız, daha önce denenmemiş bir proje deniyorsanız ve mikro servislerle ilgili deneyiminiz yoksa, monolitik yazılım mimarisi faydalı olabilir. Monolitik, MVP(Minimum Viable Product) için en iyi tercih olabilir. Ancak, yukarıda belirtilen bazı sorunlar monolitik mimarinin kaçınılmaz dezavantajlarıdır.

Servis Odaklı Mimari — Services Oriented Architecture (SOA)

servis odaklı mimari

Servis Odaklı Mimari (SOA), iş uygulamaları oluşturmak için servisler adı verilen yazılım bileşenlerini kullanan bir yazılım geliştirme yöntemidir. Her servis, bir iş özelliği sunar ve servisler, farklı platform ve diller arasında birbiriyle iletişim de kurabilir. Geliştiriciler, servisleri farklı sistemlerde yeniden kullanmak veya birkaç bağımsız servisi karmaşık görevleri gerçekleştirmek amacıyla birleştirmek için servis odaklı mimariyi kullanır.

Servis Odaklı Mimarinin Avantajları ve Dezavantajları

avantaj dezavantaj

Servis Odaklı Mimarinin Avantajları

1-) Servislerin Yeniden Kullanılabilirliği

Servis odaklı projelerdeki fonksiyonel bileşenlerin bağımsız ve gevşek bağlı yapısı nedeniyle, bu bileşenler diğer servisleri etkilemeden birden fazla projede yeniden kullanılabilir.

2-) Geliştirme ve Onarma Kolaylığı

Her yazılım servisi bağımsız bir birim olduğundan, diğer servislere zarar vermeden güncellemesi ve bakımı kolaydır. Örneğin, büyük kurumsal uygulamalar, servislere bölündüğünde daha kolay yönetilebilir.

3-) Paralel Geliştirme

Servis odaklı bir mimari katmanlardan oluştuğu için geliştirme sürecinde paralelliği savunur. Bağımsız Servisler paralel olarak geliştirilebilir ve aynı anda tamamlanabilir.

Servis Odaklı Mimarinin Dezavantajları

1-) Karmaşık Yapının Yönetim Zorluğu

Servis Odaklı bir Mimari’nin ana dezavantajı karmaşıklığıdır. Her servis, mesajların zamanında teslim edilmesini sağlamak zorundadır. Bu mesajların sayısı bir seferde bir milyonun üzerinde olabilir, bu da tüm servisleri yönetmeyi büyük bir zorluk haline getirir.

2-) Yüksek Yatırım Maliyeti

Servis Odaklı Mimari: insan kaynakları, teknoloji ve geliştirme için büyük bir ön yatırım gerektirir.

3-) Servis Sayısı Arttıkça Yük Birikimi Artar

Servis Odaklı Mimari’de, bir servis başka bir servisle etkileşime girmeden önce tüm girdiler doğrulanır. Birden çok servis kullanıldığında bu, yanıt süresini artırır ve genel performansı düşürür.

Sonuç

Servis Odaklı Mimari yaklaşımı, bankalar gibi karmaşık ve kurumsal sistemler için en uygunudur. Bir bankacılık sisteminin mikro servislere girmesi son derece zordur. Ayrıca monolitik yaklaşım, tüm projeye zarar verebileceğinden bankacılık sistemi için de iyi değildir. En iyi çözüm, Servis Odaklı Mimari yaklaşımını kullanmak ve karmaşık uygulamaları yalıtılmış bağımsız servisler halinde düzenlemektir.

Mikro Servisler Mimarisi — Microservice architecture

Microservice mimarisi, tek bir uygulama geliştirirken modüler bir yapıda her biri küçük servis olarak düşünülmesi gereken ve her bir servisinde kendi işini ve iletişimini yürütebilen, çok karmaşık olmayan ve başka servislere bağımlılığı az olan mekanizmalara sahip bir yaklaşımdır.

mikro servis, monolitik mimari

Mikro Servis’ler yaklaşımı temel olarak yapılan iş ve doğru sonuç odaklı çalışırken, monolitik yaklaşım öncelikli olarak teknoloji katmanları, kullanıcı arayüzleri ve veritabanlarını üzerine yoğunlaşır. Mikro servisler yaklaşımı giderek daha fazla işletmenin çevik hale gelmesi ve DevOps’a geçmesiyle son yıllarda bir trend haline geldi.

Mikro Servis’ler, sistemlerdeki karmaşıklığı basitleştirme yolunda inanılmaz bir yol katettikleri için önemlidir. Sisteminizi veya uygulamanızı çok sayıda küçük parçaya bölerek, yinelemeyi azaltmak, uyumu artırmak ve parçalar arasındaki bağlantınızı azaltmak gibi büyük avantajlar sağlar. Böylece sistem bileşenlerini daha kolay anlaşılır, daha iyi ölçeklenebilir ve daha kolay değiştirilir hale getirebilirsiniz.

Kitap Önerisi : Microservices: Patterns and Applications: Designing fine-grained services by applying patterns

Yazar : Lucas Kraus

Monolitik bir yaklaşımdan mikro servis yapısına dönüşen birçok şirket örneği var. En öne çıkanlar arasında Netflix, Amazon, Twitter, eBay ve PayPal bulunmaktadır. Mikro Servis’lerin projenize uygun olup olmadığını belirlemek için bu yaklaşımın artılarına ve eksilerine bakalım.

Mikro Servis Mimarisinin Avantajları ve Dezavantajları

avantaj dezavantaj

Mikro Servis Mimarisinin Avantajları

1-) Geliştirme, Test etme ve Yayınlama Kolaylığı

Mikro Servis’lerin diğer mimarilere göre en büyük avantajları; küçük ve bağımsız olarak oluşturulabilmesi, test edilebilmesi ve kolayca canlı ortama alınabilmesidir. Dağıtım birimi küçük olduğu için geliştirmesi kolay ve yayınlaması da bir hayli hızlıdır. Ayrıca, bir servisin canlıya alınması, henüz tamamlanmamış bir başka servisin işlemlerini etkilemez. Ve buradaki son artı, sistemde problem olduğu zaman yazılımın tamamı değil sadece ilgili servis etkilenecektir.

2-) Artan Çeviklik

Mikro Servisler’le, geliştirici ekipleri servisler üzerinde bağımsız ve hızlı bir şekilde çalışabilir. Bir uygulamanın her bir parçası, Mikro Servis avantajı dolayısıyla birbirinden bağımsız olarak oluşturulabilir. Örneğin, tüm uygulama üzerinde çalışan 100 kişilik bir ekibiniz olabilir (monolitik yaklaşımda olduğu gibi) veya uygulama için farklı servisler geliştiren 10 kişilik 10 ekibiniz olabilir. Bunu görsel olarak hayal edelim.

Artan çeviklik, geliştiricilerin uygulamayı kapatmadan sistem bileşenlerini güncellemesine olanak tanır. Ayrıca, çeviklik, daha güvenli bir dağıtım süreci ve iyileştirilmiş çalışma süresi sağlar. Tüm uygulamanın başlatılmasını beklemeden gerektiği anda yeni özellikler eklenebilir.

3-) Yatay Ölçekleme

Dikey ölçeklendirme (aynı yazılımı çalıştıran ancak daha büyük makinelerde) her servisin kapasitesi ile sınırlandırılabilir. Ancak yatay ölçeklendirme (aynı havuzda daha fazla servis oluşturma) sınırlı değildir ve mikro servislerde dinamik olarak çalışabilir. Ayrıca yatay ölçekleme ile kendi kendini yürütebilir hale getirilebilir.

Mikro Servis Mimarisinin Dezavantajları

1-) Karmaşıklık

Mikro Servislerim en büyük dezavantajı karmaşıklıklarında yatmaktadır. Bir uygulamayı bağımsız mikro servislere bölmek, yönetilmesi gereken daha fazla yapı gerektirir. Bu tür bir mimari; dikkatli planlama, muazzam çaba, ekip kaynakları ve beceriler gerektirir. Yüksek karmaşıklığın nedenleri şunlardır:

  • Her servisin test edilmesi ve izlenmesi gerektiği için artan otomasyon talebi.
  • Her Servisin ayrı bir veritabanı olduğu için veri tutarlılığı ve işlem yönetimi zorlaşıyor.

2-) Farklı Programlama Dilleri

Farklı programlama dilleri seçme özelliği aslında bir probleme dönüşür. Farklı diller kullanmak dağıtımı zorlaştırır. Ayrıca, her servis farklı bir dilde yazıldığında ortaya hem geliştirici maliyeti hem de geliştirici uyumsuzluğu çıkacaktır.

3-) Güvenlik

Bir Mikro Servis uygulamasında, API aracılığıyla harici olarak iletişim kuran her işlevsellik, saldırı olasılığını artırır. Ama bu saldırılar, gerekli güvenlik önlemleri alınmadığında gerçekleşebilir.

Sonuç

Mikro Servisler iyidir, fakat her proje için uygundur diyemeyiz. Bu mimari, gelişen uygulamalar ve karmaşık sistemler için iyi bir seçim olacaktır. Deneyimli ekibiniz olduğunda ve projeniz servislere ayıracak kadar karmaşık hale geldiğinde mikro servis mimarisi seçmeyi düşünebilirsiniz.

Kısaca : Projeniz belirli bir büyüklüğe ulaştığında; Karmaşıklığı gidermek ve ölçeklenebilir olmasını sağlamak adına Mikro Servis yapısına geçebilirsiniz.

Sunucusuz Mimari — Serverless Architecture

Sunucusuz mimari, altyapı yönetimine ihtiyaç duymadan uygulamalar ve servisler oluşturmaya yönelik bir bulut bilişim yaklaşımıdır. Sunucusuz uygulamalarda, kod yürütme bir sunucu tarafından yönetilir ve geliştiricilerin sunucu bakımı ve tedariki konusunda endişelenmeden kod dağıtmasına olanak tanır. Aslında sunucusuz, “sunucu yok” anlamına gelmez. Uygulama hala sunucularda çalışıyor ancak AWS gibi bir üçüncü taraf bulut hizmeti bu sunucuların tüm sorumluluğunu üstleniyor. Sunucusuz bir mimari, ekstra kaynaklara, uygulama ölçeklendirmesine, sunucu bakımına ve veritabanı ve depolama sistemlerine olan ihtiyacı ortadan kaldırır.

Sunucusuz Mimari’de İki Kavram Vardır:

  • FaaS: Function as a Service (Servi Olarak İşlev) — Geliştiricilerin buluta fonksiyon kısımlarını yüklemesine ve bu fonksiyonların bağımsız olarak yürütülmesine izin veren bir bulut bilgi işlem modeli.
  • BaaS: Backend as a Service (Servis olarak Backend) — Sunucusuz bir mimari kullanırken geliştiriciler, sunucu yönetimi veya yürütme ortamları hakkında endişelenmeden ürünün kendisine odaklanabilir. Bu, geliştiricilerin yüksek güvenilirlik ve ölçeklenebilirlik ile ürünler geliştirmeye odaklanmasını sağlar.

Piyasada çok sayıda bulut sağlayıcısı var. En iyi sunucusuz bilgi işlem sağlayıcılarından bazıları şunlardır:

Sunucusuz Mimarinin Avantajları ve Dezavantajları

avantaj dezavantaj

Sunucusuz Mimarinin Avantajları

1-) Dağıtımı Kolay

Sunucusuz projelerde geliştiricilerin altyapı konusunda endişelenmesine gerek yoktur. Böylece geliştirici sadece projeye odaklanır. Geleneksel mimarilerde dağıtım saatler veya günler sürebilir ama Sunucusuz mimaride dağıtım son derece hızlı bir şekilde yapılır.

2-) Düşük Maliyet

Sunucusuz kullanım kaynak maliyetlerini azaltır. Veritabanları, bazı mantıklar ve sunucularla ilgilenmeniz gerekmediğinden, yalnızca daha kaliteli kod oluşturmakla kalmaz, aynı zamanda masrafları da azaltabilirsiniz. Sunucusuz bir model kullanırken, yalnızca kullandığınız CPU işlemleri ve bellek kapasitesi için ücretlendirilirsiniz.

3-) Yüksek Ölçeklenebilirlik

Birçok işletme sahibi, uygulamalarının Google veya Facebook gibi etkili ve ölçeklenebilir olmasını istiyor. Sunucusuz yaklaşım, Verileriniz arttıkça veya kullanıcı sayınız çoğaldıkça uygulamanızın performansını etkilemeden otomatik olarak ölçeklenir. Sunucusuz yaklaşımın bir diğer avantajı da çok sayıda isteği(request) karşılayabilirken, geleneksel bir yaklaşım, isteklerdeki ani artıştan etkilenebilir.

Sunucusuz Mimarinin Dezavantajları

1-) Uzun Süren İşlemlerde İyi Değildir

Sunucusuz bir model, uzun süren işlemler için uygun değildir. Kısa süreli işlemler için iyidir. Bir görev beş dakikadan uzun sürerse, sunucusuz bir uygulamanın ek FaaS işlevselliğine ihtiyacı olacaktır.

Sonuç

Sunucusuz yazılım mimarisi, tek seferlik görevlerin ve destek yazılımların gerçekleştirilmesi için faydalıdır. Hızla büyüyen ve sınırsız bir şekilde ölçeklenmesi gereken istemci ağırlıklı uygulamalar için harika çalışır.

MVP’niz için doğru mimariyi seçmek zor bir iştir ama tamamen hayatta kalıp kalamayacağınızı da belirleyen en büyük faktördür.

Okuduğunuz için teşekkür ederim. Daha fazlası için takip edebilir ve diğer yazılarımı da okuyabilirsiniz.

Bu konularda destek almak için herhangi bir platformdan iletişime geçebilirsiniz.

--

--

No responses yet