SOA "düz İngilizce" nedir? [kapalı]


112

SOA'nın neyle ilgili olduğunu açık bir İngilizce ile açıklayabilir misiniz? Burada SOA'yı duyuyorum, orada SOA ama ne olduğunu ve ne için kullanıldığını tam olarak anlayamıyorum. Basit bir kavram mıydı ve daha sonra büyük bir şeye mi dönüştü?

Wiki dahil tüm belgeler biraz soyuttur ya da belki ben bir aptalım ve anlamıyorum. Bu konuda bir aptalın rehberi var mı?

Bu üç harfin arkasında tam olarak ne var?


7
Bence, insanlar SOA'yı soyut bir şekilde açıklamayı bırakırlarsa, yalnızca onu zaten anlayan insanlar anlayabilir ve "Merhaba dünya" kodlama örneklerini gösterebilir. Demo kodu daha yüksek sesle konuşuyor.
Phil

@Phil - Cevabımı kontrol et. Bir benzetme kullanmayı denedim.
Niklas


3
Amazon, aslında mükemmel bir örnek. Bir noktada Bezos , Amazon'un kod tabanının her parçasının bir API olması ve web isteklerine yanıt vermesi gerektiğinde ısrar etti . Makale burada: apievangelist.com/2012/01/12/… . Bunu oturum açtığınızda görebilirsiniz - Amazon kendi oturum açma sistemi için OpenID kullanır! Çoğu web sitesi, oturum açmak için yerleşik bir sistem kullanır. Bir avantajı, tüm siteleri ve hizmetleri için aynı girişi kullanabileceklerini düşünmem.
Ürdün Reiter

Yanıtlar:


49

Sen bulabilir - (? SOA ve Web Servisleri Açıklaması SOA nedir) Bu makaleyi yararlı.

Küçük bir teaser:

  • SOA, basit, iyi tanımlanmış arabirimlere sahip olan ve gerekli bir işlevi gerçekleştirmek için gevşek bir bağlantı aracılığıyla düzenlenmiş ayrık yazılım aracılarından oluşacak şekilde bir mimari uygulama tarzıdır.

  • SOA'da servis sağlayıcı ve servis tüketicisi olmak üzere 2 rol vardır. Bir yazılım aracısı her iki rolü de oynayabilir. SOA tamamen yeni bir kavram değildir - ancak bu makale esas olarak web hizmetlerinde uygulanan SOA'ya odaklanmaktadır.


6
Mmmmm ... CORBA, IDL, istemci-sunucu ... 1980'lerin canını yakan sesler! ;-D
CesarGon

64

SOA, bazı çok eski fikirler için yeni bir rozet:

  • Kodunuzu yeniden kullanılabilir modüllere bölün.

  • Değişme ihtimali olan herhangi bir tasarım kararını bir modüle dahil edin.

  • Modüllerinizi, farklı faydalı şekillerde birleştirilebilecekleri şekilde tasarlayın (bazen "aile" veya "ürün grubu" olarak adlandırılır).

Bunların hepsi temel yazılım geliştirme ilkeleridir ve çoğu ilk olarak David Parnas tarafından ifade edilmiştir.

SOA'daki yenilikler:

  • Bunu bir ağ üzerinde yapıyorsun.

  • Modüller, prosedür çağrıları gibi daha geleneksel programlama dili mekanizmaları yerine, ağ üzerinden birbirlerine mesaj göndererek iletişim kurarlar. Özellikle, hizmet odaklı bir mimaride parçalar genellikle değişebilir durumu (geleneksel bir programdaki küresel değişkenler) paylaşmaz. Veya durumu paylaşırlarsa, bu durum, kendisi bir aracı olan ve birden çok eşzamanlı istemciyi kolayca yönetebilen bir veritabanında dikkatlice kilitlenir.


43

Daha da gelişmiş sözcükler ve teknik terimler kullanarak Hizmet Odaklı Mimariyi (SOA) açıklayan birçok yanıt görüyorum. Bunu sıradan İngilizce bir benzetme kullanarak meslekten olmayan kişi için açıklamaya bir şans vermek istiyorum .

Ancak öncelikle bir SOA
SOA'nın açıklaması aşağıdaki resimde görüldüğü gibi üç katman halinde açıklanabilir. Bir tarafta Tedarikçimiz var, diğer tarafta Tüketicimiz var , iki tarafın iletişim kurduğu bir Köprü ile ayrılmış .

Tüketici, işi için gerekli olan bir dizi Uygulamayı kullanır ve sağlayıcı, bu uygulamalara bilgi sağlayan Bileşenleri kullanır . Ortak bir mimari kullanarak bir dizi Hizmet aracılığıyla iletişim kurarlar.


görüntü açıklamasını buraya girin


Benzetme
Bir şehir veya kasaba gibi birçok yönden daha büyük bir topluluğun parçası olan kır tarafında bir ev hayal edin. Şehir, su ve elektrik sağlamak, sanitasyon yapmak, ulaşım sağlamak ve diğer hizmetleri sağlamak için kendi karmaşık sistemlerine sahiptir. Ev bu modelde tüketici, Şehir (veya topluluk) sağlayıcısı ve borular, kanalizasyon, kontrol çizgileri, optik fiberler vb olmasıdır Altyapı onlar haberleşmesini sağlayan.

Bu model, genel olarak bir SOA ile karşılaştırılabilir. Evdeki insanlar radyatörler, bilgisayarlar, tuvaletler, lambalar, yerden ısıtma, küvetler vb. Gibi bir dizi farklı "uygulama" kullanır. Bu uygulamalar, şehrin suyu nasıl ürettiği, elektriği nasıl oluşturduğu veya atıkları uzun süre nasıl idare ettiği umurunda değildir. çalıştığı gibi. Şehrin bileşenleri, jeneratörler, su pompaları ve sanitasyon alanlarıdır. Evin tüm bu ihtiyaçlarını karşılıyor ama onu uygun gördüğü şekilde kullanmak evin elinde.

Umarım bu, en azından birine bir SOA'nın daha iyi bir resmini vermiştir.


27

Diyelim ki dört aşçınız var. SOA'da birbirlerinden nefret ettiklerini varsayarsınız, bu nedenle birbirleriyle mümkün olduğunca az konuşmalarına izin vermeye çalışırsınız.

Bunu nasıl yaptın? Peki, önce rolleri ve arayüzü tanımlayacaksınız - aşçı 1 salata yapacak, 2 aşçı çorba yapacak, 3 pişirecek biftek vb. Daha sonra yemekleri iyi organize edilmiş masaya yerleştireceksiniz (yani bunlar arayüzler) ve "Herkes lütfen yaratımınızı size verilen tabaklara yerleştirin. Başkalarını umursamayın." deyin.

Bu şekilde, dört aşçının birbirleriyle olabildiğince az konuşması gerekir, bu da yazılım geliştirmede çok iyidir - birbirlerinden nefret ettikleri için değil, fiziksel konum, karar verme verimliliği vb. Gibi diğer nedenlerle.

Aynı zamanda bulaşıkları (servisleri) istediğiniz gibi yeniden birleştirebileceğiniz anlamına gelir. Örneğin, tatlıyı bir kafeye servis yapmak için kullanabilir ya da sadece çorbayı alıp başka bir şirketten satın aldığınız bir ekmekle birleştirerek daha ucuz bir menü sunabilir veya diğer restoranların salatalarınızı kendi yemekleriyle birleştirmesine izin verebilirsiniz. .

SOA'nın en başarılı uygulamalarından biri Amazon'daydı. Tasarımları nedeniyle tüm altyapılarını yeniden paketleyip Amazon Web Hizmeti olarak satabilirler.

* Bu, SOA'nın yalnızca bir yönüdür.


17

SOA mimari bir tarzdır, ancak aynı zamanda heterojen uygulamanın nasıl geliştirilmesi ve entegre edilmesi gerektiğine dair bir vizyondur . SOA'nın temel amacı, monolitik uygulamalardan uzaklaşmak ve bunun yerine uygulamalar oluşturmak için oluşturulabilen bir dizi yeniden kullanılabilir hizmete sahip olmaktır.

IMHO, SOA yalnızca kurumsal düzeyde anlamlıdır ve tek bir uygulama için hiçbir şey ifade etmez.

Birçok kuruluşta, her departmanın kendi kurumsal uygulamaları kümesi vardır ve

  1. Benzer özellik birkaç kez uygulandı

  2. Verilerin (örn. Müşteri veya çalışan verileri) birkaç uygulama arasında paylaşılması gerekir

  3. Uygulamalar departman merkezlidir.

SOA ile amaç, yeniden kullanılabilir hizmetlerin işletme genelinde erişilebilir kılınması, böylece uygulamanın oluşturulabilmesi ve bunlardan oluşturulabilmesidir. SOA'nın vaadi

  1. Benzer özellikleri tekrar tekrar uygulamaya gerek yok (örneğin, bir müşteri veya çalışan hizmeti sağlama)

  2. Uygulamaların birlikte entegrasyonunu ve ortak verilere veya özelliklere erişimi kolaylaştırır

  3. Kurumsal merkezli geliştirme çabası.

SOA vizyonu, teknolojik bir değişimin yanı sıra organizasyonel bir değişim gerektirir. Bazı problemleri çözerken, aynı zamanda diğerlerini de ortaya çıkarır, örneğin güvenlik SOA ile monolitik uygulamadan çok daha zordur. Bu nedenle, SOA çalışıp çalışmadığına dair tartışmaya tabidir.

Bu, SOA'nın 1000 ft'lik görünümüdür. Ancak burada bitmiyor. İş süreci orkestrasyonu (BPM), kurumsal hizmet veriyolu (ESB), karmaşık olay işleme (CEP), vb. Gibi SOA'yı tamamlayan başka kavramlar da vardır. Hepsi BT / iş uyumu , yani BT'ye nasıl sahip olunacağı sorununu ele alır. işi etkin bir şekilde destekleyebilme.


1
evet, ancak başka biri Oracle SOA gibi her şeyi kontrol etmek veya Microsoft WCF kullanmak için monolitlerini satın almanızı veya kullanmanızı istiyor. Her zaman bir monolit olmayacak mı?
johnny

WCF ve Oracle SOA, bir SOA çözümü ile ilgisi olmayan teknoloji bağımlılıklarıdır. Konsept, belirli bir teknolojiye değil, kolayca bakımı yapılabilen bağımsız hizmetlere dayanmaktadır.
BentOnCoding 01

4
SOA'nın organizasyon düzeyinde "büyük" anlamından bahsetmek için +1. Diğer cevapların çoğu, yazılım bileşenine odaklanıyor, ki bu kesinlikle resmin tamamı değil (insanların çok zaman kullandığı anlam olsa bile).
occulus

10

SOA, Hizmet Odaklı Mimari'nin kısaltmasıdır.

SOA, yazılım uygulamalarını, farklı yazılım modüllerinin yüksek derecede yeniden kullanılabilirlikle sorunsuz bir şekilde entegre edilebileceği şekilde tasarlıyor ve yazıyor.

İnsanların çoğu, SOA'yı istemci / sunucu yazılımı-web hizmetleri yazmak olarak kısıtlıyor. Ancak SOA için çok küçük bir bağlam. SOA bundan çok daha büyüktür ve son birkaç yıldır web servisleri birincil iletişim aracı olmuştur, bu muhtemelen insanların SOA'yı genel olarak SOA'nın sınırlarını ve anlamını kısıtlayan web servisleri olarak düşünmelerinin sebebidir.

Herhangi bir bağımlılık olmadan kendi başına çalışabilecek kadar bağımsız bir veritabanı erişim modülü yazmayı düşünebilirsiniz. Bu modül, veritabanı erişimine ihtiyaç duyan herhangi bir ana bilgisayar yazılımı tarafından kullanılabilen sınıfları açığa çıkarabilir. Ana bilgisayar uygulamasında başlatma yapılandırması yoktur. İhtiyaç duyulan veya gerekli olan şey, veritabanı erişim modülü tarafından sunulan sınıflar aracılığıyla iletilir. Bu sınıfları servis olarak adlandırabilir ve modülü servis etkin olarak değerlendirebiliriz.

SOA uygulamak, DRY'yi [Kendinizi tekrar etmeyin] zorlayarak yüksek derecede yeniden kullanılabilirlik sağlar ve bu da yüksek düzeyde bakım yapılabilir bir yazılımla sonuçlanır. Sürdürülebilirlik, herhangi bir yazılım mimarisinin düşündüğü ilk şeydir - SOA size bunu verir.


6

Anladığım kadarıyla, oradaki temel kavram, diğer sistemlere faydalı bir şeyler sağlayan ve sistemin içindeki her şeyi yapma eğiliminde olan büyük sistemler kurmaktan kaçınan küçük "hizmetler" yaratmanızdır .

Böylece etkileşim için kullanacağınız bir protokol tanımlarsınız (örneğin, SOAP web servisleri olabilir) ve "büyük hedefinize" ulaşmak için "bazı işler yapan sisteminizin" küçük servislerle etkileşime girmesine izin verirsiniz. .


2
Lütfen mimari sorularda tahmin etmeyin. Stackoverflow, geçen yıl göz attığınız bir makaleden rastgele bir tahmin değil, Uzman yanıtları alabileceğiniz bir yerdir. Bu cevabın herhangi bir oy alması üzücü.
BentOnCoding 01


4

Büyük organizasyonlarda olma eğilimi, zamanla her şeyin ya her yerde ya monolitik ya da farklı sistemler olması ya da her ikisinden de biraz olmasıdır. Sonunda biri gelir ve ortalığı karıştırdığımızı söyler. Şimdi, bir tür monotlitik olarak yönlendirilecek her şeyi yeniden tasarlamak (birine para) yapmak, paradigmayı kime ödediğinize bağlıdır, ancak aynı zamanda ana / monolitten bağımsız olarak parçalar ve parçalar ekleyebileceksiniz.

Yani Oracle'ın SOA'sını satın alırsınız ve Oracle tüm parçalarınızın patronu olur. Gelen diğer tüm oyuncular bir servis (web servisi veya sahip olduğu her neyse) aracılığıyla SOA ile çalışmak zorundadır. Oracle monolith her şeyi halleder (monolit aşağılayıcı değildir). Oh evet, önde ASP.NET MVC veya başka bir şey var.

önemli olan şey, sistemin içine ve dışına herhangi bir etki olmaksızın bir şeyler taşımak ve satıcı Oracle SOA'yı, Microsoft WCF'yi hepsinin beyni olarak tutmak. her şey akıcı, çok az veya hiç etkisi olmadan içeri ve dışarı hareket eden şeyler, insan hizmetleri bile, sadece bilgisayarlar değil.

Bana göre bu, iyi bir ön uç ile bir dizi web hizmeti (veya gelecekte onlara ne diyorsak) anlamına geliyor. Ve eğer veritabanına sahipseniz, sadece veritabanına girin ve moda sözcükler hakkında endişelenmeyi bırakın. sorun değil.



3

Peki, görüyorsunuz .. SOA, Servis Odaklı Mimari anlamına gelir .... En basit bir deyişle, çok genel bir kod parçası yazarsınız, yani birçok uygulamada kullanılabilecek bir şey yapar ... bir adres defteri veya bir hesap makinesi olabilir. ve bu kodu IIS'de başlatırsınız. Yani kodunuz üzerinden bir hizmet veriyorsunuz. Yani siz bir servis sağlayıcısınız. Şimdi birisi benzer bir kod kullanmak istiyor ve sonra kodu tekrar yazmak zorunda kalmıyor. Kodunuzu, belki bir web hizmeti aracılığıyla kullanır. Böylece bir hizmet tüketicisi olur. Bu nedenle, bu tür hizmetleri kullanarak bir program yapmaya SOA denir. Hizmet sağlayıcı ve tüketici diff programlama dillerini kullanıyor olsalar bile etkileşim halinde olabileceğinden gevşek bağlantı oradadır. Umarım anlarsın.


3

ittoolbox bloglarından.

Aşağıda, geçmiş tasarım teknikleriyle olan benzerlikler ve farklılıklar özetlenmektedir:

• SOA'ya karşı Yapılandırılmış Programlama o Benzerlikler: En çok parametrelerin iletildiği ve işlevin çalışmasının çağrıcıdan soyutlandığı alt rutin çağrılarına benzer - örneğin CICS bağlantısı ve yürütme ve COBOL CALL ayrılmış sözcüğü. Kitaplar, tipik olarak hizmetler için bir XML şeması olarak tanımlanan veri yapısını tanımlamak için kullanılır. o Farklılıklar: SOA gevşek bir şekilde bağlıdır, bu da bir hizmetteki değişikliklerin tüketici üzerinde daha az etkiye sahip olduğunu ("çağıran" program) ve hizmetlerin diller ve platformlar arasında birlikte çalışabilir olduğunu ima eder.

• SOA ve OOA / OOD o Benzerlikler: Kapsülleme, Soyutlama ve Tanımlı Arayüzler o Farklılıklar: SOA gevşek bir şekilde birleştirilir, sınıf hiyerarşisi veya kalıtım yoktur, Düşük seviyeli soyutlamalar - sınıf seviyesi ve işletme hizmeti

• SOA ve eski Bileşen Tabanlı Geliştirme (CBD) - ör. CORBA, DCOM, EJB o Benzerlikler: Bileşenleri birleştirerek yeniden kullanın, Arayüzler, Uzaktan çağrılar o Farklılıklar: Standartların geniş şekilde benimsenmesi, XML Şemaları ve Sıralanmış Nesneler, Hizmet Düzenleme, Yeniden kullanım için tasarım daha kolay, hizmetler iş odaklı mı BT odaklı mı, iş hizmetleri elbette ayrıntılı (kapsam olarak geniş)

• SOA (entegrasyon için) ile Kurumsal Uygulama Entegrasyonu (EAI) o Benzerlikler: En iyi uygulamalar (iyi tanımlanmış arayüzler, standartlaştırılmış şemalar, olay odaklı mimari), yeniden kullanılabilir arayüzler, ortak şemalar o Farklılıklar: Standartlar, benimseme ve geliştirilmiş araçlar


3

Yukarıdaki yanıtları okuduğumda, bana SOA'nın geliştiricilerin (en azından iyi olanların) ilk günden beri yaptığı şey olduğunu düşünüyorum.


2

Aynı zamanda paralel (özellikle SIMD) programlamada yaygın bir konu olan "Array of Arrays" ("Array of Structs" ın tersine) anlamına da gelebilir, ancak burada kastettiğin bu değil sanırım!


Yorumsuz biraz olumsuz oylama !!
Tom

2
@Downvoters: Soru, Toms'un cevabını olumsuz etkilemeye yetecek kadar bağlam sunmuyor. Sırf herkesin hizmet mimarileri bağlamında SOA terimiyle felç olması, bunu yanlış yapmaz.
Sebastian Mach

1
@phresnel Etiket soa ve hızlı bir saniye için bunun üzerine gelirseniz, sorgunun bağlamının net bir açıklamasını göreceksiniz.
BentOnCoding 01

4
@Robotsushi: Etiketi kısa bir süre için araştırabilirseniz , açıklamanın Toms'un yanıtından bir yıldan daha uzun bir süre sonra eklendiğini görebilirsiniz.
Sebastian Mach

Sanırım bir sorunun bağlamından emin değilseniz, uzman bir cevap veremezsiniz. Sorunun doğasına ilişkin yorumda yer alan basit bir soru, bu gizemi hızla çözebilirdi.
BentOnCoding 01

2

SOA, Kurumsal Hizmet Veriyolu ile ilgili teknolojilerinin satışına yardımcı olmak için teknoloji satıcıları tarafından icat edilen bir terimdir. Buradaki fikir, kuruluştaki küçük ada uygulamalarınızın (örneğin: muhasebe sistemi, stok kontrol sistemi, vb.) Tüm hizmetleri ortaya çıkarmasıdır, böylece bunlar esnek bir şekilde 'uygulamalara' dönüştürülebilir veya daha ziyade toplu işletme kapsamlı işin bir parçası haline gelebilir. mantık.

Temelde, neredeyse hiç işe yaramayan bir sürü eski saçmalık, çünkü teknolojinin bir organizasyonda olduğu gibi olmasının nedenlerinin kültüre, evrime, firmanın tarihine bağlı olduğu ve kilitlenmenin o kadar yüksek olduğu noktasını gözden kaçırıyor. teknolojiyi yeniden yapılandırma girişimi başarısız olmaya mahkumdur.


1

SOA'yı kapsayan Floss Weekly podcast'inin bu haftaki baskısını dinleyin . Açıklamalar oldukça yüksek seviyededir ve çok fazla teknik ayrıntıya girmez (yine de SOA projelerinin daha somut ve tanınabilir örnekleri yardımcı olabilirdi.


1

Geleneksel bir uygulama mimarisi:

  • Bir kullanıcı arayüzü
  • Kullanıcı arayüzünün arkasına gizlenmiş / gizlenmiş tanımlanmamış şeyler (uygulama)

Verilere programlı olarak erişmek istiyorsanız, ekran kazıma işlemine başvurmanız gerekebilir.

SOA, kullanıcı arayüzlerini açığa çıkarmak yerine makine tarafından okunabilir verileri ve / veya API'leri açığa çıkarmaya odaklanan bir mimari gibi görünüyor.


1

SOA veya Hizmet Odaklı Mimari, uygulamaların veya sistemlerin, belirli bir özellik kümesine uyan temelde yatan (ve genellikle dağıtılan) yazılım hizmetlerinden oluşturulduğu bir yazılım mimarisi modelidir, yani:

  1. Arayüz, Politika ve Sözleşme bazlı
  2. Konum şeffaflığı
  3. özerk
  4. Öz
  5. Yeniden kullanılabilir
  6. Birleştirilebilir
  7. Vatansız
  8. keşfedilebilir
  9. Genişletilebilir
  10. Gevşek bağlanmış

SOA'nın birincil amacı, yazılım geliştirme çevikliğidir, yani değişime kolay ve ucuz bir şekilde yanıt verebilme ve böylece işletmelerin değişen pazarlara hızla yanıt vermesine olanak sağlama becerisidir.

Hizmetler tipik olarak (ancak hiçbir şekilde münhasıran değil) web hizmetleri olarak uygulanır, yani her yerde bulunan web HTTP protokolü üzerinden çalışırlar ve XML tabanlı SOAP veya hafif (ve daha popüler) REST paradigması kullanılarak uygulanır.


1

Kim olduğuna bağlı!

Bir işletme sahibiyseniz, SOA, gelirinizi ve iş çevikliğinizi artırmak için bir çözümdür. Girişimci bir mimarsanız, SOA boş bir tuval üzerine güzel ve temiz bir yazılım parçası çizmenin bir yoludur. Bir mimarsanız, SOA, hizmetleri yalnızca prizlere takmak için bir entegrasyon platformu üzerinden gevşek bağlı hizmetler tasarlamak için bir çözümdür. Bir geliştiriciyseniz SOA, bir hizmetin tasarımın ve kodun merkezinde yer aldığı bir programlama paradigmasıdır.

100 SOA Sorusunu [pdf] okumalısınız

Şerefe


1

Servis Odaklı Mimari (SOA), uygulamaları her biri diğer uygulamalar tarafından yeniden kullanılabilen takılabilir parçalardan oluşan bir koleksiyon olarak oluşturan bir yazılım mimarisi stilidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.