Ana SOA hizmet tasarımı ilkelerinden biri Hizmet Oluşturulabilirlik ilkesidir ( https://en.wikipedia.org/wiki/Service_composability_principle ).
Buradaki fikir, mevcut hizmetleri yapı taşı olarak kullanarak yeni hizmetler oluşturarak, hızlı bir şekilde yeni hizmetler geliştirebilir. Yeni yöntemler uygularken nesnelerin varolan yöntemlerini nasıl çağırdığınıza benzer şekilde. SOA'nın üretkenlik artışının çoğunun geleceği yer burasıdır.
Birisi bunu pratikte gerçekten yapıyor mu? Bunu yazılı metinde sürekli tekrarladım, ama gerçek dünya uygulamalarını kendim yaşamaya çalışmadım. Metnin çoğu aynı zamanda işlemlerin ele alınışından bahsetmemektedir , bu da bana, kompozit hizmetler gerçekleştirmenin önündeki en büyük engel gibi görünmektedir.
Öncelikle, önemsiz olmayan hizmetleri oluşturmadan önce işlemlerle ilgili sorunu çözmeniz gerekir. Elbette, örnekte "findCurrentTime ()" ve "writeLogMessage ()" hizmetleri varsa, işlemler hakkında endişelenmek kolaydır, ancak "depositMoney ()" ve "withdrawMoney ()" gibi gerçek dünya örneklerine sahipken bu kolay değildir.
İki seçeneği biliyorum:
- WS-Atomic Transaction vb. İle gerçek işlemleri gerçekleştirin
- A'ya yapılan çağrıyı "cancelA ()" ile telafi eden veya B çağrısı başarısız olursa buna benzer bir telafi tabanlı çözüm uygulayın
Bunların her ikisi de benim için çok sorunlu / yakın değil:
- WS-Atomik İşlem
- bir sürü karmaşıklık, bulduğum çoğu tavsiye sadece "kıçından acı, yapma" uyarısında bulundu
- destek sınırlıdır, örneğin açık kaynaklı ESB'ler alırsanız, ServiceMix, Mule veya WSO2 ana alternatifleri desteklemez
- tazminatlar
- tazminatlarla başa çıkmak benim için çok karmaşık görünüyor. Hizmet A başarılı olursa ve hizmet B'den asla yanıt alamazsak ve başarısız veya başarılı olup olmadığını bilmiyorsak ne yapacağız? Bu tür bir mantığı manuel olarak kullanmak (birleştirme hizmetlerinin uygulayıcısı olarak) bileklerimi kesmemi istiyor - bu, bazı araçların benim için yapması gereken bir iş!
- Ayrıca önemsiz olmayan hizmetlerde tazminat yöntemlerine nasıl sahip olabileceğinizi de görmüyorum. Diyelim ki A hizmetiniz "depositMoney ()" dır ve bu başarılı olur, başka bir işlem hızla parayı başka bir yere aktarır ve sonra "compensateDepositMoney ()" alırız, şimdi ne yapacağız? Büyük bir solucan kutusu gibi görünüyor.
Bana göre, hizmet kompozisyonu öyle temel bir SOA ilkesi gibi görünüyor ki, hizmetleri (uygun bir şekilde) oluşturamazsanız gerçekten SOA'nın avantajlarından yararlanamazsınız . Gerçek nedir? SOA kullanıcılarının% 90'ı gerçek hizmet bileşimi olmadan "şifreli SOA" kullanıyor mu? Ya da çoğu kullanıcı aslında hizmet kompozisyonunu kullanıyor ve bunun zorluğunu abartıyorum?