Soa, Service Oriented Architecture anlamına gelen bir kısaltma. Türkçesi servis odaklı mimari oluyor. Bu mimarinin hedefi uygulama katmanlarınızı farklı servislere bölüp sunucular üzerinden kullanmaktır. Bu durumda yazdığınız uygulama hangi platformda çalışırsa çalışsın, siz web servisleriyle (veya baska protokollerden) çağırdığınız katmanları kullanırsınız. Böylece birçok uygulama aynı katmanları kullanabilir veya uygulamalarınızı distributed(dağıtık) şekilde çalıştırabilirsiniz.
Ben bu makalede Soa’nın çok teknik kısımlarına girmeden sadece anlamı üzerine duracağım.
Soa’nin avantajlarını ÅŸu ÅŸekilde sıralayabiliriz :
- Birçok uygulama aynı katmanları ayni servis üzerinden kullanabilir. Bu durumda bir revizyon yapmaniz gerektiğinde istemci uygulamalara dokunmadan tek bir servis üzerinden değişiklikleri yapabilirsiniz.
- Mesela desktop bir uygulama yazıyorsanız, uygulamanızın istemci tarafında sadece kabuk bir arayüz bulunacağindan (smart client olabilir), geliştirme işlemi soyutlaşmış olur.
- Farklı platformlarda geliştirilen uygulamalar için aynı altyapıyı kullanabilirsiniz. Örneğin, uygulamanızın hem web, hem windows, hem linux, hem mobile hem de mac sürümleri bulunuyorsa bile hepsinde aynı altyapıyı kullanabilirsiniz
- Uygulamanızın farklı katmanlarını farklı sunucularda barındırabilirsiniz. Bu size daha kolay yönetim ve performans getirecektir.
- Uygulamanız için uygulama geliştirme arayüzü (API) oluşturabilir, arkanızı yaslanıp yabancı uygulamaların sizinkine entegre olmasını keyifle izleyebilirsiniz.
- Cloud Computing konseptine uygun uygulamalar hazırlayabilirsiniz.
Peki Soa Nasıl Sağlanıyor?
Soa için web servislerini veya WCF gibi daha yeni teknolojileri kullanabilirsiniz.
XML Web Servisleri : Veri iletimi için oluşturulmuş xml yapılarının kullanıldığı yöntemdir. XML Web servislerinde eger yazdığınız servis karşı tarafta karşılığı bulunmayan bir veri türü kullanmıyorsa (örnegin datatable) yazılan metodlar dil bağımsız olur. Yani Java ile yazılan bir web servisi .Net ile çağırabilirsiniz. Web servisi yazmak Java veya .Net gibi platformlarda resmen çocuk oyuncağıdır (ayrıntılar için şuraya bakabilirsiniz).
API Uygulamaları : Tam olarak Soa içerisinde sayılmasalarda yinede bahsetmek gerek. Büyük çoğunluğu, GET metoduyla (QueryString) gönderilen parametreleri işleyerek geriye sonuçlar döndüren yapılardan oluşur (Örnek).
WCF (Windows Communication Foundation) : .Net uygulamaları için kullanılabilecek, web servislerinin geliştirilmiş halidir. En temel avantajı, servisi açmak için bir web sunucusu kullanmanız gerekmemesidir. Bunun yerine kendi uygulamalarınızdan da yayın yapabilirsiniz (ayrıntılar için şuraya bakabilirsiniz).
Web Uygulamalarında Soa
Web uygulamaları için soa ilk bakışta gereksiz gibi görünsede en az diğer uygulama türleri için olduğu kadar gereklidir. Web uygulamalarında sunucuların dağıtık yapıda olması (gerek veritabanı sunucuları için (linked server) gerekse uygulama sunucuları için) performans açısından elzem bir uygulamadır.
Örnegin Facebook gibi uygulamalar, dağıtık şekilde birçok veritabanı ve uygulama sunucusu kullanırlar.
Diğer bir örnek olarak banka servisleri verilebilir. Uygulamalarınızın banka entegrasyonu olmasını istiyorsanız ilgili bankaların web servislerini kullanmanız gerekir.
Son bir not olarak soa uygulamalarında state yönetimine dikkat etmenin öneminden bahsetmek istiyorum. Birden fazla servis kullanırken her bir servis için state durumunu (yani session durumunu) kontrol etmek gerekir. Bu servisler herhangi bir state bilgisi barındırmayacaklarından bu katmanlarda durum yönetimini sıkı yapmak gerekir. Yoksa çok büyük bir güvenlik açığı oluşturmuş olursunuz.
Kaynaklar
