SOA Nedir?

Yazılım dünyasında birçok şeyi bildiğimi zannediyorum. Bilmediğim diğer şeylerin ise aslında bana çok da uzak olmadıklarını SOA ile gördüm… CV’lerde, iş ilanlarında hep birşeylerin kısaltması yazılır. Ben bunların isimlerini (kısmen) bilmiyorum. Ama yaptıkları iş; evet onları biliyorum. Bunlardan biri SOA.
Serkan Yazıcıoğlu kaynaklı bir tanım buldum, sizlerle paylaşıyorum… Sizin de bu tanımı bildiğinizi, kullanıdığınızı, sadece adının ne olduğunu bilmediğinizi varsayıyorum değerli yazılımcı rakiplerim =)
SOA (Service Oriented Architecture) birbirlerinden farklı servislerin daha karmaşık yapılar oluşturabilmesi için bir harmoni içerisinde beraber çalışabilmesi yaklaşımıdır. Dolayısıyla servis tabanlı mimari yaklaşımı ile tasarlanmış bir sistemin alt sistemi ise doğal olarak servisin ta kendisidir. Servisler ise birbirleri ile iletişime geçebilen yapılardır.

Detaylar:

Klasik mimari bize katmanların birbirleri ile konuşmasını ve üst katmanın alt katmanı çağırmasını söylemektedir. Katmanlı mimari dediğimiz bu yapının oluşturulabilmesi için belirli işleri yapan katmanların bölünmesi ve düzgün bir hiyerarşi ile birbirleri ile konuşabilmeleri şarttır. SOA ise en basit haliyle bu katmanların servis olarak oluşturulmasıdır. Tekrar basit mantık ile devam edecek olursak normal şartlarda oluşturduğumuz data katmanını bir servis haline getirdiğimiz taktirde aslında bir servis yapısına adım atmış oluruz. Bu sayede data katmanımız sadece tek bir uygulamaya değil içeriden ve dışarıdan birden fazla uygulamaya hizmet verebilir hale gelir. Anlıyacağınız üzere SOA bir framework veya kütüphane gibi elle tutulabilir bir altyapı değil, mimari bir yaklaşımdır.

SOA’nın S’si

İlk başta “servis tabanlı mimari” yaklaşımının tanımına bakıldığında servis kelimesinin web servisler (XML Web Services, WCF vs.) ile bağdaştırılması çok olası olmakla birlikte hatalı bir düşüncedir. Tabi ki özellikle WCF teknolojisi SOA yaklaşımı için çok uygun bir altyapı olsa da sadece IIS üzerinde host edilmediğini düşünmemiz gerekir. Örnek vermek gerekirse bir WCF servisini Windows servisi üzerinde host edebildiğinde ve tcp üzerinden connection kurulduğunda makinenin hiçbir internet veya intranet bağlantısı olmayabilir. Sadece windows servislerinin kullanılması da farklı bir yaklaşımdır. Bus servis olarak tasarladığınız bir windows servisi veritabanındaki kayıtları devamlı kontrol ederek işlem yapabilir. Veya hiç windows veya WCF servislerine girmeden direk MSMQ altyapısı da bu yaklaşım için kullanılabilicek bir diğer teknolojidir. Saydığım teknolojiler tabi ki hep MS ürünleri, bir de işin MS olmayan kısmı var ama buranın üzerinde şimdilik çok fazla odaklanmayalım.

Neden SOA?

Tekrar Kullanılabilirlik

Sebeplerden ilkine ve belki de en önemlisine aslında az önce değinmiş olduk. SOA’nın temelinde birden fazla uygulamaya veya kullanıcıya (client) ulaşabilme ihtiyacı bulunmaktadır. Yani tanımlama yapmak gerekirse amaç tekrar kullanılabilirliktir. Biraz işin pratiğine bakalım. Örnek olmak gerekirse bir adet ASP.NET web sitesi geliştirildi fakat müşteriden bir de IOS uygulaması talebi geldi. Bu isteğin ardından IOS için web servisler yazılır ve bundan sonra yapılacak tüm güncellemeler iki taraf için de ayrı ayrı yapılır. Sonuç olarak tekrar kullanılabilirliği göz ardı etmiş, geliştirme maliyetini ve hata çıkma ihtimalini de ikiye katlamış olduk. Bu gibi sıkıntılara yol açmamak için baştan servis mimarisine uygun bir tasarım işlerimizi çok kolaylaştıracaktır.

SOA1

Benzer bir durumda sizin kontrolünüzde geliştirilmeyen (3rd Party) uygulamaların sisteminize entegre olma isteğidir. Bu gibi durumlarda önceden yazılmış servisler işimizi kolaylaştıracaktır.

SOA2

Heterojen Sistemleri Bağlayabilme

Günümüz yazılım dünyasında ortak bir altyapının oluşması mümkün değildir. Sistemlerin teknolojisinin farklı olabileceği gibi aynı teknolojide farklı versiyonda sistemler ile de karşılabiliriz.

Bağlılığı Azaltma (Loose Coupling)

Servisler birbirlerine sınıflar ile değil şema ve kontratlar ile bağlıdırlar. Dolayısıyla da bağlılık azdır. Bir servisin yerine aynı şemaya uyan başka bir servis çok daha rahatlıkla getirilebilir. Örnek vermek gerekirse bir Java servisininin yerine .NET servisi konulabilir veya aynı şemada ama farklı bir iş akışında başka bir servis ile değişiklik yapılabilir.

Ayrıca bağlılığı azaltmak sistemde oluşabilecek darboğazları da azaltır. Örnek vermek gerekirse E-mail gönderme servisindeki bir hatadan dolayı iletişim sayfası yavaşlamaz.

Basitleştirme ve Gizleme (Facade)

Karmaşık yapıların ve karmaşık servislerin daha basit bir arayüz üzerinden sunulması için bu tarz bir mimari kullanılabilir. Bu tarz bir yaklaşım daha çok farklı yazılımcılara servis açtığınızda teknik karışıklıktan ve iş akışlarından uzak tutmak için tercih edilir. Arka taraftaki sistemlerin ve kullanılan teknolojilerin neler olduğu gibi kapsamlı bir bilgilendirmeden ziyade sadece servis hakkında bilgilendirme tüketici (consumer) için yeterli olacaktır. Burada tüketiciden kastım servisi kullanan diğer sistem, servis veya uygulamadır.

Bazı durumlarda tüketcinin rolüne, yetkisine vs. göre farklı verilerin gösterilmesi gerekebilir. Bu gibi durumlarda servis üzerinde filtrelenmiş bir veri iletimi ideal güvenliği sağlayacaktır. Bkz: DTO

Soyutlama

Her servis kendi işinden sorumludur. Şifreleri üretmesini istediğiniz servisiniz sadece şifreleri üretirken login işlemini yapan servis sadece kullanıcı adı ve password bilgilerini kontrol eder. Her bir parça birbirinden ayrı ayrı tasarlandığı için uygulama daha basit parçalara bölünmüş olur. Bu da kodun okunabilirliği arttırırken, bakım süresini kısaltır.

SOA Yaklaşımı Nerelerde Kullanılmalı

SOA yaklaşımı daha çok heterojen, birden fazla sistemin (işletim sistemi gibi), tüketicinin (consumer), uygulamanın (client) yer aldığı yapılarda tercih edilmelidir. Aksi taktirde fazladan bir esneklik sağlamanın karşılığı fazladan bir maliyet olarak karşımıza çıkacaktır. Basit, tek client üzerinden çalışan uygulamalarda klasik katmanlı mimari tercih edilmeye devam edilebilir.
Teşekkür ederim.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s