SOA mimarisi nedir?

26 Nisan 2016 4 dk okuma süresi 194 okunma

Soa (Service oriented architecture - servis odaklı mimari); 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. Basit ve klasik bir örnek vermek gerekirse projenizde bir data katmanı bir de business katmanı olduğunu varsayalım. Business katmanı data katmanını çağırarak veritabanı işlemlerini halleder, tek taraflıdır ve proje bazlı olmuş olur. Fakat data katmanını bir servis olarak oluşturursanız tek taraflı olmaktan çıkar ve istenilen her yerden kullanıma izin verir. Bu şekilde uygulamanın nereden ve/veya hangi platformda çalıştığının önemi kalmaz. SOA noktadan noktaya (point-to-point) entegrasyonlardaki bağımlılıkları ortadan kaldırır.

SOA 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.

SOA Bileşenleri

Service - Servisler SOA'nın en temel üyesidir.

Policies (ilkeler) - servisin ilkelerini, kurallarını belirtir. Yani kullanıcıların servisi ne gibi kısıtlamalarla ve ilkelerle kullanacağını belirtir.

Contracts (sözleşmeler) - servisin desteklediği mesajlar sözleşmeler ile kullanıcılara sunulur.

Endpoints (uç noktalar) - Servisin bulunduğu adresi belirtir ve URI formatındadır. Yukarıdaki sözleşmeler bu endpointler tarafından kullanıcılara sunulur.

Messages (mesajlar) - SOA'nın iletişim bölümüdür.

Service Consumer (kullanıcı/tüketici) - Servislere yukarıdaki mesajlar ile iletişim kuran bileşenlerdir. Bu son kullanıcı da olabilir, farklı bir serviste olabilir veya 3.parti bir yazılım da olabilir.

SOA'nın Avantajları

Tekrar Kullanılabilirlik

Projelerde tekrar kullanılabilirlik çok önemlidir. Zaten SOA, Rest gibi mimarilerin ortaya çıkış nedeni de budur. Basit bir örnek vermek gerekirse, Instagram'ın ilk başta sadece bir websitesi olduğunu ve web sitesinin çok katmanlı (n-layer) mimari ile geliştirildiğini varsayalım. Yani elinizde data, business ve presentation katmanları var. Geniş bir kullanıcı kitlesine ulaştıktan sonra ve sürekli değişen/gelişen teknoloji nedeniyle mobil kullanım oranı artış gösterdi ve mobil uygulama geliştirme kararı verdiniz. Bu mobil uygulamasını yazarken yine veritabanı işlemleri için bir katmana ihtiyacınız var, fakat o da ne, data katmanı web uygulamasında kullanılıyor ve ios/android üzerinde kullanamıyorsunuz. İşte bu noktada tekrar bir katman yazmaktansa bir servis yazıp, hem web hem de mobil uygulamaları bu servis üzerinden iletişime geçirebilirsiniz.

Soyutlama (Abstract)

Soyutlama servislerde çok önemlidir. Her servis sadece ve sadece kendi işinden sorumlu olmalıdır. Örneğin bir servis sadece veritabanından istenilen tablo bilgilerini çekerken bir diğeri tabloya ekleme yapar. Bu nedenle uygulamalar küçük ve basit parçalara bölünmüş olur. Böylece kod okunabilirliği ve bakımı çok daha kolay olur.

Basitleşme ve Gizleme (Facade)

Servisinizi birden çok yazılım veya yazılımcıya açtığınızı varsayalım. Yazılımcıların veya yaptıkları yazılımların sizin servisinizden beklediği tek şey istediği şeyin cevabıdır. Yani backend tarafında neyin nasıl çalıştığının bir önemi yoktur. Bu sayede sadece servis ve kullanacakları fonksiyonların bilgilerini almaları yeterlidir.

Bağlılık Azaltması (Loose Coupling)

Bu bağlılık konusu nedense gördüğüm birçok kişide kafa karışıklılığına sebep oluyor fakat işin aslı çok basit. Amacı bir servisin bağımlılığının en aza indirgenmesi. Yazılan servisin bağımsız olma durumu, yani .Net ile yazılmış bir servisin yerine Ruby ile yazılmış bir servisin gelmesi. İlk bakışta nasıl olur ya birisi .Net birisi Ruby, 2 farklı dünya dediğinizi biliyorum, fakat bunu anlamak için servis'lerin nasıl çalıştığına kısaca bir göz atalım. Servisler birbirine şema ve kontratlar ile bağlıdır. Bu nedenle aynı şemaya uyan birbirinden farklı servisler birbirleri ile yer değiştirebilirler.

Soa Nerelerde Kullanılır

Birden çok sistemin yer aldığı yapılarda kulanılır. Örnek vermek gerekirse bir banka uygulamanızın olduğunu varsayın ve hem web, hem mobil hem de 3. parti yazılımlara hizmet verdiğinizi düşünün. Burada servis odaklı mimari kullanarak birden çok uygulamaya hizmet vermeniz gerekmekte. Her projeyi kendi içerisinde katmanlara ayırıp aynı işi yapan katmanlar yazmaktansa servis'ler yazarak her uygulamayı bu servislerden beslemek çok daha mantıklı.

Yazılarıma abone olmak ister misiniz?
Spam yapılmaz, sadece bildirim amaçlıdır. İstediğiniz zaman abonelikten çıkabilirsiniz.
İlginizi çekebilecek diğer yazılar.
İnternet üzerindeki birçok bilgi malesef çöp. Çöpten kasıt faydasız anlamında değilde aynı içeriğin 3-5 kelimesinin değiştirilerek tekrar yayınlanmasıdır. Aramalarda üst sıralarda çıkmak için mutlaka kaliteli içeriğe sahip olmak gerekir. Bu yazı size nasıl kaliteli içerik yazmanız gerektiğini gösterir.

Fonksiyonel programlama nedir, fonksiyonel programlamaya kısa bir giriş

Günümüz şartlarında motivasyon ve üretkenlik çok önemlidir. Gün içerisinde birçok kez motivasyonunuzu kaybedebilirsiniz fakat bunu geri kazanmanın ve konsantre olmanın birçok yolu var.