Programlama dilleri ana çerçevede ikiye ayrılırlar. Low Level and High Level Programming Languages (Düşük Seviye ve Yüksek Seviye Programlama Dilleri). Low Level programlama dillerine Assembly örnek gösterilebilir. Bu sınıftaki dillerin anlamlandırılabilirliği, sürdürülebilirliği ve hata ayıklaması zordur. Ayrıca fiziksel hafıza adreslerinin hatırlanmak zorunda olması ve de en önemlisi farklı instruction set (buyruk kümesi)’ lere sahip makinalar arasında taşınması mümkün değildir.
Bunun yanında High Level programlama dilleri ise makina bağımsızdır ve bu sayede sadece yapılması buyrulan probleme odaklıdırlar. Problemi çözmesi tasarlanmış program çeşitli ara elemanlar (lexical analyzers, syntax analyzers, intermediate code generator ve semantic anayzers vs.) yardımıyla makina diline çevrilir.
JAVA, C++ veya C# gibi programlama dilleri ilk çıktığı zamanlarda senkron metot yapıları aktif olarak kullanılmaktaydı. Senkron yapılar büyük yazılımlarda ciddi sorunlar oluşturabilmekteydi. Senkron yapılardan kısaca bahsetmek gerekirse senkron programlama, yazılımda her bir işlemin sıra ile yapılmasıdır. Birden fazla işlemi aynı anda yapamadığı için yapılması gereken işlemlerin tamamlanması çok uzun sürmektedir.
İhtiyaçların çoğalması, donanım kaynakların verimli kullanılması ve zaman tasarrufu düşünüldüğünde senkron yapılar maalesef yetersiz kalmaktadır. Yazılım dünyası farklı çözümler aradığında asenkron metot yapıları senkron metot yapılarına uyarlanarak destek sağlandı. Bu gelişme tarihte yaşanılan en büyük gelişmelerden birisidir. Bundan öncesinde asenkron işlemler callback fonksiyonlarıyla ve aynı işi birden fazla metoda bölerek yapılabiliyordu. Ancak bu yöntem anlaşılmaz, zor ve hata yapmaya açıktı. Derleyici çoğu işi programcıya bırakıyordu.
Asenkron yapılardan kısaca bahsetmek gerekirse; Asenkron programlama, işin parçalara ayrılıp tüm işlemlerin aynı anda sürdürülmesini sağlar. Asenkron Programlama ile programımız içerisinde yazdığımız bir kod işletilirken, aynı program içerisinde diğer kodlar da işletilebilir. Bu sayede kullanıcı programımızın bir bölümünü kullanırken, başka bir bölümü ile de işlem yapabilir. Bu özellikle mobil uygulamalar için hayati bir önem taşıyor. Asenkron programlama, multi threading ile karıştırılmamalıdır. Asenkron olarak yazacağımız kodlar tek bir thread üzerinde de çalışabilir. Asenkron programlamanın özelliği farklı thread’lerde çalışması değil, verdiğimiz işi parçalara ayırarak programımız üzerinde birden fazla işin aynı anda yürütülmesini sağlamaktır. Bu sayede sistem üzerinde bulunan donanım kaynaklarının verimli bir şekilde kullanılması ve zamandan ciddi derecede tasarruf sağlandı.
Geçmişten günümüze ihtiyaçların çoğalmasıyla birlikte yazılım projelerinde kullanıcı deneyimi ve performans göz önünde bulundurularak farklı yazılım dillerine yönlendirilmeye başlandı fakat o yazılım dilinin kurallarının dışına çıkılamamaktaydı.
C++, C#, Java, Angular, Python, Ruby, Php, .Net vs.. yazılım dillerinde geliştirilen projeler belirli bir zaman sonrasında ihtiyaçların artması ile hakimiyeti oldukça zorlaştırdı. Hakimiyetin zorlaşmasıyla birlikte sistemde geliştirme yapmak ve alınan hataları çözümlemek oldukça zaman almaktadır. Yazılım dünyası farklı çözümler aradığında uygulamaları parçalamanın hakimiyetin, sistemdeki geliştirmelerin ve alınan hataların çözümlenmesini gibi sorunların Servis Odaklı Mimari (Service Oriented Architecture) veya Mikro Servis (Microservices) mimarisi sayesinde ciddi oranda çözüldüğü görüldü.
MIcroservIces Nedir?
Microservices kısa tabiriyle , küçük , otonom ve bir arada çalışan servislerdir. Yazılım projesine yeni fonksiyonellikler eklendikçe , kodlar büyür. Bir zaman sonra, projeye hakim olmak, eklentiler yapmak ve karşımıza çıkan sıkıntıları çözmek zor bir hal almaya başlar. Normalde, monolitik bir proje içerisinde , bu gibi problemlerle mücadele edebilmek için kodumuzda olabildiğince soyutlamalar ve modüller oluştururuz.
Özet olarak Microservices kavramı, ilk konuşulmaya başlandığı zaman ‘Servis Odaklı Mimari(SOA)’ için alternatif bir “mimari model” olarak yorumlandı. Ancak sonradan SOA’ya alternatif bir “model” ya da “yaklaşım” olmadığı anlaşıldı. Şuan da ise Microservices, SOA mimarisinin karmaşıklığını, pratikleştiren ve yönetimini kolaylaştıran bir mimari tasarım stili olarak yorumlanabiliyor. Sırayla detaylarına bakalım:
SERVICE ORIENTED ARCHITECTURE (SERVİS ODAKLI MİMARİ)
Servis odaklı mimari veya hizmet yönelimli mimari, bilgisayarda sistemlerin işlevselliklerini iş süreçleri etrafında gruplaştırarak sistem geliştirmesi ve bütünleştirilmesinde yol gösteren bir yazılım tasarımı felsefesidir.
Birbirinden farklı servislerin birleşip belirli yapılar oluşturarak uyumlu çalışmasını sağlayan bir yaklaşımdır. Yani servis içinde servistir. Farklı bir tanım vermek gerekirse birden fazla uygulamanın kendi içindeki modüllerinin/fonksiyonlarının başka uygulamalar tarafından kullanılabilecek şekilde tasarlandığı bir yaklaşımdır.
Normalde çok katmanlı uygulamalarda hep bir katmanın diğer bir katmanı çağırması gerekir. Bu yaklaşımda hiyerarşinin düzgün olması gerekmektedir.
SOA’nın sektörde iyi bir yer edinmesini sağlayan özellikleri şunlardır:
- Artan kullanıcı memnuniyeti.
- Operasyonel verimlilik.
- Rakiplere karşı avantaj sağlama.
- Bilgi işlem maliyetlerindeki azalma.
- İş yaşam döngüsünün kısalması gibi avantajlarını sayabiliriz.
Service Oriented Architecture (Servis Odaklı Mimari) Dezavantajları Neler?
Tamam gayet güzel ilk başta karmaşık görünen işler yavaş yavaş toparlanmaya başladı. Fakat bunun dezavantajları olmadı mı?
Tabi ki de dezavantajları oldu. SOA ile birlikte ’Monolithic (Sistemin bir bütün olarak ele alınması)’lik yüzünden programın tüm bilişenleri, modüler yazılım programlarından farklı olarak merkezileşmiş bir yapıya sahip olmaya başladı. Yapılmak istenen değişiklikler tüm sistemi etkiliyordu. Teknolojiye bağlı hale geliniyor.”Scale” etmek başta kolay ama sonra çok daha zorlaşıyordu. Tüm bu nedenler ile birlikte IT’nin değişen iş süreçlerine kolay bir şekilde adapte olamaması da dezavantajlardır. İşte tam bu noktada devreye Microservices mimari stili devreye girer.
Microservice mimari stili ile geliştirilen uygulamalar, pratikte birbirinden bağımsız birkaç servisin beraberce kullanıldığı uygulamalar olarak karşımıza çıkıyor. Mobil, web ya da masa üstü, hatta konsol uygulamaları, bu sayede aynı servisleri kullanarak geliştiriliyor. Dolayısıyla, aynı iş mantığı farklı platformlara kolaylıkla sağlanıyor. Microservices’lerin en önemli noktası; bu servislerin kendi başlarına çalışan, tek bir sorumluluğu olan, bağımsız servisler olmalarıdır.
Microservices iş mantıklarını ve kurallarını kendi içinde tutmalıdırlar. “Ne yapıldığı” servisler tarafında, “nasıl yapıldığı” ise servisleri kullanan uygulamalar tarafında olmalıdır. Bu sayede iş mantığı tek bir yerde olup, sadece orada gelişecektir.
İş kabiliyetlerine göre ayrıştırılan servisler, tek başlarına çalışabilen servisler olmalıdır. Dolayısıyla platform, sistem, dil ya da framework bağımlılıkları yoktur. Yani bir e-ticaret sitesindeki kategori yönetimini sağlayan servisler .NET ile yazılabilirken, ürün görsellerini sağlayan servis node.js ile geliştirilebilir. Ödeme servisleri Scala ile olurken, istatistiksel verileri sağlayan kısımlar R dili ile yazılabilir. .NET servisleri, Windows sunucularda olurken, node.js *Unix tabanlı bir sistemde bulunabilir. Bu sayede belli bir teknolojiye bağımlılık da ortadan kalkmış oluyor.
Microservices Kazandırdığı Bazı Ek Özellikler
- Deploy etmek, değiştirmek kolay
- Platform, dil, framework bağımsız
- Scale edilebilir uygulamalar
- Test edilebilir uygulamalar
- Hızlı uygulama geliştirme
Peki Monolithic Mimari Yaklaşımı Her Zaman Kötü Mü?
Tabi ki de hayır. Projede hangi mimari yaklaşımın kullanılacağı, projenin ihtiyaçlarına göre belirlenmelidir. Sırf son dönemde Microservices mimarisi popüler olduğu için projeyi ihtiyaçlarına göre değerlendirmeden Microservices mimarisiyle geliştirmek hata olacaktır.
SOA’nın Önemli Standartları:
SOAP (simple object access protocol) – servis iletişimini destekleyen mesajdır. XML tabanlı uygulamalarda HTTP üzerinden bilgi alışverişini sağlayan protokoldür. Platform ve dil bağımsızdır.
WSDL (web services description language) – herhangi bir servisin arayüzünü tanımlayan (tanımlı işlemler/fonksiyonlar, giren çıkan mesajların formatları, ip ve port adresleri) xml tabanlı dildir.
UDDI (universal description, discovery and integration) – web servis hakkında bilgilerin depolandığı dizinlerdir. .Net platformu üzerine kurulmuştur. SOAP üzerinden iletişim kurar.
WS-BPEL – servislerin birleştirilmesindeki iş akışları için kullanılan bir standarttır.
Yazılım teknolojisinin temel yapı taşı donanım teknolojisidir. Donanım tarafında yapılan optimizasyonlar yazılımın kararlı çalışmasını ve performanslı çalışmasını sağlar.
Bugün bilgi teknolojilerinin temelini oluşturan sunucular, kullanıcıların yaşamlarının önemli bir parçası haline geldi. Kullandığımız dijital araçların büyük çoğunluğu, online servis ve hizmetlerin ise neredeyse tamamı sunucular yardımıyla bize sunuluyor. Peki sunucular neden hayatın bu kadar içinde? 7 gün 24 saat aralıksız çalışan sunucular hakkında ne kadar bilgi sahibisiniz?