Sayfalar

12 Temmuz 2012 Perşembe

SOA - Servis Odaklı Mimari

Merhaba Arkadaşlar!

Datawarehouse etkinliklerinden edindiğim bilgileri paylaşmaya devam ediyorum. Geçtiğimiz Pazar günü Mustafa Demirci Bey'in yaptığı sunum ile SOA (Service Oriented Architecture) üzerine hem teorik bilgi edindik hem de pratikte nasıl kullanıldığına dair küçük ve güzel bir örnekle pekiştirme yaptık. Burada bunlardan bahsetmek istiyorum.

Servis: Yinelenen iş adımı olarak tasvir edilir.
Servis odaklı olmak: İş uygulamalarını birbirlerine bağlı servisler olarak yapılandırma şeklidir.

Servisin tanımından da anlaşılacağı üzere bu mimarinin amacı yinelenen işlevleri tek bir defa oluşturup, yüzlerce kez kullanmak olarak açıklanabilir. Eminim bu tanımı fonksiyonel programlama dillerini bilenler olarak yüzlerce kez okudunuz. Bir işlevi tek bir kere yazıp istenen her durumda içeriğinden bağımsız olarak kullanmak! Üstelik parametre aktarım mantığı da tam olarak SOA ile uyuşuyor. Yani SOA'ya aslında o kadar da yabancı değilsiniz. Zira yapı aşağıdaki gibi;

Giriş Parametresi -> Servis-> Çıktı

Nasıl ki bir OOP programlamada bir sınıfın içeriği ve metodlarını bilmeden o sınıfı efektif olarak kullanabiliyorsanız, burada da servisin içeriğini bilmeden o servisi en etkili şekilde kullanmanız mümkündür. Zaten SOA'nın amacı da budur. Yani servis içeriğinden soyutlanmış olarak iş görürsünüz. Elbette SOA'nın tek nimetleri bu değil. Zira bu işi yapan başka seçenekler de mevcut. Peki nedir SOA'nın diğer özellikleri?

Öncelikle SOA tek bir uygulama değildir. SOA bir mimari yapısıdır ve orta katman yazılımıdır. Bu mimari oluşturulurken tüm seçenekler önceden düşünülmüş ve bir standarta bağlanmıştır. Şunu biliyoruz ki C ile yazılan bir uygulama işletim sistemine bağımlı olarak çalışır. Ancak SOA en başta belirttiği bu standartlara uyan bir uygulamayı SOA'nın uygulandığı mimaride çalıştırma garantisi verir.

SOA'da birden fazla sistem ve birden fazla iletişim protokolü sıkıntı çıkarmadan etkileşimli olarak çalışabilir. Bu protokoller ve uygulamalar birbirlerinden farklı olabilirler. Tüm bu farklı sistemler inanılmaz bir şekilde tek bir sistem gibi çalışarak verdiğiniz girdilere bağımlı tek bir çıktı üretebilir! SOA'nın asıl güzelliği buradadır. Fakat şunu unutmamak gerekir ki SOA ile çalışacak bir uygulamann henüz geliştirme aşamasındayken SOA ile uyumu göz önünde bulundurulmalıdır.

SOA'da yazılan bir servis farklı uygulamalar tarafından birbirlerini etkilemeden defalarca kullanılabilirler. Ayrıca SOA'da bir servis birden fazla servis içerebilir. Yani bir servisi farklı servisler kullanmak üzere çağırabilirler.

SOA'yı en mükemmel biçimde uygulayan firmalar IBM ve ORACLE'dır. Farklı şirketlerin SOA çözümleri mevcuttur. Ancak Oracle JDeveloper bunun için iyi bir örnek olabilir. Bu mimariyi kullanırken aslında XML bilmek gerekir. Fakat ayrıntılarda boğulacak kadar bilmek gerekmez. Zira o güzelim sürükle bırak mantığı sizin en iyi arkadaşınız olmaya devam edecektir. :) JDeveloper bunu en iyi sağlayan araçlardandır. Sadece çıkan ufak tefek sıkıntılarda kod kısmından XML'e müdahale etmek gerekebilir.

BPEL Nedir ve Nasıl Oluşturulur?
Peki pratikte bir iş-akışı oluşturmak için ne yapılır. Bilindiği üzere iş-akış şemalarına algoritma derslerinden alışığız. Bu şemalar belki o aşamadayken tek bir dil ile tek bir uygulama geliştirirken kullanılıyordu ama burada farklı servisler ve farklı uygulamalar ile kullanılacak. Üstelik belki de büyük bir projeyi yönetecek bir iş-akış şeması olacak. Bu şemalar oluşturulurken .bpel uzantılı olarak oluşturulurlar. Bussiness Process Execution Language olarak açılan bu isim aslında standart bir dili temsil eder. Bu dil ile iş akış şemaları oluşturulur ve biz sürükle bırak yaparken arka planda satırlarca XML kodları oluşur.

Bir bpel için JDeveloper'da new project ile bpel oluşturma seçilir. Buradan sonra bpelinizin senkron mu asenkron mu olacağını belirtirsiniz. (Senkron: İstek gönderilip sonuç alınır. Asenkron: İstek gönderilir ancak sonuç için beklenilmez.) Daha sonra amacınıza bağlı olarak girdi ve çıktı alacağınız şekli belirlersiniz. Örneğin müşteri numarası girilecek ve bakiye sorgusu alınacak gibi... Sonra bu değerlerin tiplerini belirlersiniz. String, integer gibi... Daha sonra ihtiyacınıza uygun aracı (transform activite) gibi seçerek sürükleyip bırakırsınız. Seçilen araca tıklanarak amacına uygun olarak isimlendirilir. Transformation sekmesinde ise aracın yapacağı işlem belirlenir. Source kısmına giriş değişkeni, target kısmına da çıktı hedefi verilir. Daha sonra aradaki bu bağlantı yine sürükle bırak ile sağlanır. İş akış bu şekilde tamamlandıktan sonra tüm proje sunucuya deploy edilir. Artık web tarayıcınızdan servisinizin çalışmasını kontrol edebilirsiniz. Aynı şekilde bu servisi farklı servislerle çalıştırabilirsiniz.

Bu sayede birleşik bir uygulama oluşturmuş olursunuz.
Birleşik Uygulama: Servis odaklı iş sürecini oluşturan ilişkili ve entegre servisler bütünüdür. Yani tümleşik olarak çalışan birbiriyle bağımlı gibi görünen ama birbirinden bağımsız servislerin ahenk içerisinde dans ettiği (Mustafa hocanın eğlenceli tabiriyle...) bir bütünlük söz konusudur. Hangi servisin ne yaptığı umrunuzda olmayabilir. Servisler tek başlarına anlamsız birer süreçtir. Fakat bu servis bir web uygulamasında işinizi gören     bir yapıya dönüşür. Örneğin kargo firmalarının kargo numarasına girerek kargonun iletim sürecini takip etmeyi sağlayan servisler gibi. Bu servis tek başına anlamsız olup web sitesine eklendiğinde çok işe yarar sonuçlar verir.

SOA'da servislerin aktivitesi bir veritabanını izler gibi izleme ekranından izlenir. Çıkan sıkıntılar bu ekrandan tespit edilir kolaylıkla giderilebilir. SOA'nın diğer avantajı da buradadır. Bir serviste çıkan problem diğerlerini etkilemeyecektir. Yani iş akışınızda yaşanan aksaklık tüm süreci öldürmez.

Daha fazla bilgi eminim kafa karıştırıcı olur. Eğer tüm bu bilgiler dikkatinizi çektiyse daha fazlası için;
w3school'un internet sitesini kullanabilirsiniz. Burada XML, XSL ve SOA hakkında ayrıntılı bilgiler mevcuttur.

Herkese iyi çalışmalar!

1 yorum:

  1. teşekkürler, benim için faydalı bir yazı oldu.

    YanıtlaSil