SOA Nedir Hoca?
Ölkemizde henüz rağbet görmese de hizmet temelli mimari yani SOA, önümüzdeki 5 senenin popüler temayülü olma yolunda. Tamam bu cümle güzel, akıcı, yasal. Ama SOA veya "hizmet"in ne olduğuna yabancı bir kişi için ne ifade eder?
İşbu söyleşide, soğuk yazılım geliştirme makalelerinde gördüğünüz SOA tasvirinden uzak şeyler bulacaksınız. En azından fakir öyle umud ediyor. Tevfik Allah'tan.
Derdimiz Nedir?
Efendim derdin tarifi biraz geniş.
Artık bilgisayar gani. Elinizdeki cep telefonu bile bilgisayar özellikleri taşıyor. Ve malesef "iletişim çağındayız." Kopuk bir çağ bu. (Bir sonraki çağı bekliyorum ben heyecanla.) Bu kadar nimet, yeni ihtiyaçlar doğuruyor ademoğlu için.
Bu iletişim imkanı bu kadar yaygınlaşmamışken, programcılar bileşen temelli mimariyle tekrar kullanılabilir kod parçaları meselesini çözmüşlerdi. Bir kere yazıp, elli yerde kullanabileceğiniz küçük birimler oluşturuyordunuz. (MS Örneği: COM)
İletişim çağı, bileşen temelli mimariyi de bozdu. Mühendisler, ya madem bileşenlerimiz var elimizde, bunları neden uzak makinelerde çalıştırmıyoruz, diye sorunca... Dağıtık bileşen mimarileri doğdu. Yine bir kere yazdınız ama bu sefer elli yere değil, tek yere koydunuz. Yine elli uygulama, sizin bileşeninizi kullandı. "Application Server" denen şeyler icat oldu. (MS Örneği: DCOM, COM+)
Sandınız ki dert bitti, herkes mutlu oldu. Hayır efendim. Biter mi? Bu sefer de platform çeşitliliği, evrensellik kaygısını ortaya çıkardı. Yazdığımız bileşen aynı cins platformlarda çalışıyor ama farklı bir cinsle karşılaştığımızde elimiz ayağımıza dolaşıyordu. Şu dağıtık bileşen midir nedir o mimarinin tekrar ele alınması gerekliydi.
İşte dert buydu. Dert budur. SOA denen felsefe de bu derdin çözümünü adreslemektedir.
Peki nasıl?
SOA Teorisi
SOA'dan bahsederken felsefe dedik az önce. Maksatlıydı o. Zira, SOA denen şey, bir ürün veya teknoloji olmamakla birlikte bir firmanın tasarrufu altında da değil.
SOA diyor ki, yapacağımız işler sınırları sârih (açık), (explicit boundary) bir hizmet paketi içerisinde dursun. Bu paketler akıllı (autonomus) olsun. Mukavelelerle (contract) haberleşsin, işlesin.
SOA sadece konsepti belirliyor, geri çekiliyor aslında.
Günümüzde SOA ile uyuşan bir çok uygulama görmekteyiz. Meselâ ülkemizde çılgın atan "Web 2.0" paradigması, o özündeki birlikteliği sağlamak için çevrim-içi hizmetlere dayanıyor. Nerede bir hizmet var ise orada SOA izi bulmak mümkündür.
Bildiğimiz Web Servisleri (XML Web Services) de SOA mimarisini uygulamanın ana yöntemlerinden birisi.
Çıkaracağımız ders şudur ki; SOA büyük büyük adamların kafa yorup ürettiği bir ilkeler topluluğu. Ne kadarını uygulayacağınız size kalmış. Hesap soran yok.
Teorisine daha detaylı inmek isteyenler için adres: http://www.oasis-open.org/committees/download.php/19679/soa-rm-cs.pdf.
Kendi Kendine SOA
Eğer SOA'yı uyguladım diyorsanız ürününüzün aşağıdaki ilkeleri taşıyor olması lâzım:
- Tekrar tekrar kullanılabilirlik.
- Tanecikli yapı. (Hâni çikolata tanecikleri gibi. Ayrıştırılabilir.)
- Modülerlik. (Tak-çalıştır.)
- Bileşenli olma.
- Birbiriyle çalışabilirlik. (Interoperability.)
- Endüstriyel standartlara uygunluk.
Ayrıca sunduğunuz "hizmet"in:
- Kapsüllenmiş. (Salça gibi bir kapsülü olmalı yani.)
- Gevşek bağlı. (Bu çok önemli. X kişisi olmadan restorana gidememek kabul edilmiyor.)
- Kendi kendini tarifi etmiş. Kendini soyutlamış, izale etmiş. (Gülüyorum ama içim kan ağlıyor ilkesi.)
- Akıllı. (Kendi kararlarını kendi veren, aklı başında, özgür bir birey gibi.)
- Kaliteli. (Ucuz etin yahnisi de servisi de ucuz olur.)
- Keşfedilebilir, bulunabilir. (Sarı çizmeli Mehmet Ağa olmamalı yani.)
olması da gerekiyor.
Kolay SOA
Yukarıdaki ilkeleri uygulamaktan acizim diyorsanız hâzır SOA iskeletleri aramaya başlıyorsunuz. Microsoft da sesinizin yankısını dinleyenlerden. .NET 3.0'a koyduğu Windows Communication Foundation (WCF) iskeleti, yukarıdaki ilkelerle bir uygulama hizmeti oluşturmayı epey kolaylaştırıyor.
WCF, Web Servisleri'nin adını değişmişi diyebilirsiniz. Haksız da sayılmazsınız. Çünkü SOA'ya da aynı eleştiriler yöneltiliyor.
.NET perspektifinden bakıldığında, web servislerinin durduğu noktadan sıyrılmak gerekiyordu zaten. Hem Remoting, hem Web Servisleri, vs. WCF tüm dağıtık işleri birleştirip SOA ilkelerini dayatıyor bize. İyi de yapıyor hani. Artık uygulamanızın iş yapan kısımlarını bir "hizmet" olarak fikretmeye başlıyorsunuz. Ön yüz, yani kullanıcı son noktası, "hizmet"leri kullanan bir müşteri hükmünde kalıyor.
İlerisi...
SOA 2.0 veya Advanced SOA kavramları ortaya atılmış durumda. Mâlum SOA'nın şu hâlinde "olay" denen programlama yapısına yer verilmiyor. Bu gelişmiş sürümde SOA'ya olay güdümlü mimariyi de sokuyorlar. Bunu yapan Oracle aslında. Henüz yaygın kabul görmüş bir girişim değil.
SOA öksüz çocuk değil. Hızla ilerliyor ve kamu oyunda gördüğü kabul düzeyi artıyor. Lider yazılım firmaları da samimi olarak destekliyor. Microsoft desteklediği gibi Sun da destekliyor demek istiyoruz. Ortada kalmazsınız.
Bir müesseseye bağımlı olmaktansa evrensel ve açık standartlar düzleminde hareket etmek her zaman yeğdir. Bunu ActiveX bilgileri çöpe gidenler çok daha iyi anlarlar efendim.
Kalemin ucu bitmiş. Yeni bir kalemle, yeni bir söyleşide buluşmak üzere.
SOA ile.

