Co to jest SOA „w prostym języku angielskim”? [Zamknięte]


112

Czy ktoś może wyjaśnić prostym językiem, o co chodzi w SOA ? Słyszę SOA tutaj, SOA tam, ale nie mogę dokładnie zrozumieć, co to jest i do czego służy. Czy to była jakaś prosta koncepcja, a później przekształciła się w coś wielkiego, czy co?

Wszystkie dokumenty, w tym wiki, są nieco abstrakcyjne, a może jestem idiotą i nie rozumiem. Czy jest w tym jakiś przewodnik idioty?

Co dokładnie kryje się za tymi trzema literami?


7
Myślę, że byłoby też miło, gdyby ludzie przestali wyjaśniać SOA w sposób abstrakcyjny w sposób, który tylko ludzie, którzy już rozumieją, mogą zrozumieć i pokazać przykłady kodowania „Hello, world”. Kod demonstracyjny mówi głośniej niż szczebiotanie.
Phil

@Phil - Sprawdź moją odpowiedź. Próbowałem użyć analogii.
Niklas


3
Właściwie Amazon jest doskonałym przykładem. W pewnym momencie Bezos nalegał, że każda część kodu Amazon musi być API i odpowiadać na żądania internetowe. Artykuł tutaj: apievangelist.com/2012/01/12/… . Możesz to zobaczyć po zalogowaniu - Amazon używa OpenID do własnego systemu logowania! Większość witryn używa wbudowanego systemu logowania. Jedną z zalet jest to, że myślę, że mogą używać tego samego loginu do wszystkich swoich witryn i usług.
Jordan Reiter

Odpowiedzi:


49

Ten artykuł (Co to jest SOA? - Poradnik na temat architektury SOA i usług sieci Web) może okazać się pomocny.

Mały zwiastun:

  • SOA to styl projektowania aplikacji w taki sposób, że składają się one z odrębnych agentów oprogramowania, które mają proste, dobrze zdefiniowane interfejsy i są organizowane za pomocą luźnego połączenia w celu wykonania wymaganej funkcji.

  • W SOA są 2 role - dostawca usług i odbiorca usług. Agent oprogramowania może odgrywać obie role. SOA nie jest całkowicie nową koncepcją - jednak ten artykuł skupia się głównie na SOA zaimplementowanej w usługach internetowych.


6
Mmmmm ... CORBA, IDL, klient-serwer ... brzmi tak lat 80-tych, że boli! ;-D
CesarGon

64

SOA to nowa odznaka dla niektórych bardzo starych pomysłów:

  • Podziel swój kod na moduły wielokrotnego użytku.

  • Uwzględnij w module każdą decyzję projektową, która może ulec zmianie.

  • Zaprojektuj swoje moduły w taki sposób, aby można je było łączyć na różne użyteczne sposoby (czasami nazywane „rodziną” lub „linią produktów”).

To wszystko są fundamentalne zasady tworzenia oprogramowania, wiele z nich zostało po raz pierwszy sformułowanych przez Davida Parnasa.

Nowością w SOA jest

  • Robisz to w sieci.

  • Moduły komunikują się wysyłając do siebie komunikaty przez sieć, a nie za pomocą bardziej tradycyjnych mechanizmów języka programowania, takich jak wywołania procedur. W szczególności w architekturze zorientowanej na usługi części zazwyczaj nie mają wspólnego stanu mutowalnego (zmienne globalne w tradycyjnym programie). Lub, jeśli współdzielą stan, ten stan jest starannie zamykany w bazie danych, która sama jest agentem i która może łatwo zarządzać wieloma współbieżnymi klientami.


43

Widzę wiele odpowiedzi wyjaśniających architekturę zorientowaną na usługi (SOA) przy użyciu jeszcze bardziej zaawansowanych słów i terminów technicznych. Chciałbym spróbować wyjaśnić to laikowi, używając analogii w prostym języku angielskim.

Ale najpierw opis SOA
SOA można opisać w trzech warstwach, jak widać na poniższym obrazku. Po jednej stronie mamy Dostawcę, a po drugiej Konsumenta , oddzielonego mostem, przez który komunikują się obie strony.

Konsument korzysta z szeregu Aplikacji niezbędnych do prowadzenia działalności, a dostawca korzysta z Komponentów dostarczających tym aplikacjom informacji. Komunikują się za pośrednictwem zestawu usług przy użyciu wspólnej architektury.


wprowadź opis obrazu tutaj


Analogia
Wyobraź sobie dom na wsi, który pod wieloma względami jest częścią większej społeczności, takiej jak miasto lub miasteczko. Miasto posiada własne, złożone systemy zaopatrzenia w wodę i elektryczność, sanitariaty, transport i inne media. Dom jest konsument w tym modelu, miasto (lub społeczność) jest dostawcą i rury, kanały, linie przesyłowe, światłowody itp jest infrastruktura , w którym się one komunikować.

Ten model można luźno porównać do architektury SOA. Ludzie w domu używają wielu różnych „zastosowań”, takich jak grzejniki, komputery, toalety, lampy, ogrzewanie podłogowe, wanny itp. Te aplikacje nie dbają o to, jak miasto wytwarza wodę, wytwarza energię elektryczną lub przetwarza odpady tak długo jak to działa. Składnikami miasta są generatory, pompy wodne i obszary sanitarne. Zapewnia domowi wszystkie te potrzeby, ale to od domu zależy, czy wykorzysta go w dowolny sposób, jaki uzna za stosowny.

Mam nadzieję, że to dało przynajmniej komuś lepszy obraz SOA.


27

Załóżmy, że masz czterech kucharzy. W SOA zakładasz, że się nienawidzą, więc starasz się, aby rozmawiali ze sobą jak najmniej.

Jak to robisz? Cóż, najpierw zdefiniujesz role i interfejs - kucharz 1 zrobi sałatkę, kucharz 2 zrobi zupę, kucharz 3 zrobi stek itp. Następnie umieścisz potrawy dobrze zorganizowane na stole (więc to są interfejsy) i powiedz: „Niech każdy umieści swoje dzieło w przydzielonych naczyniach. Nie przejmuj się nikim innym.”.

W ten sposób czterech kucharzy musi rozmawiać ze sobą tak mało, jak to tylko możliwe, co jest bardzo dobre w tworzeniu oprogramowania - niekoniecznie dlatego, że się nienawidzą, ale z innych powodów, takich jak fizyczna lokalizacja, efektywność w podejmowaniu decyzji itp.

Oznacza to również, że możesz dowolnie łączyć potrawy (usługi). Na przykład, możesz po prostu użyć deseru do obsługi kawiarni lub po prostu wziąć zupę i połączyć ją z chlebem kupionym od innej firmy, aby zapewnić tańsze menu, lub pozwolić innym restauracjom wykorzystać Twoje sałatki do połączenia z ich daniami itp. .

Jedno z najbardziej udanych wdrożeń SOA miało miejsce w Amazon. Ze względu na swój projekt mogli przepakować całą swoją infrastrukturę i sprzedawać ją jako Amazon Web Service.

* To tylko jeden aspekt architektury SOA.


17

SOA to styl architektoniczny, ale także wizja tworzenia i integracji aplikacji heterogenicznych. Głównym celem SOA jest odejście od monolitycznych aplikacji i zamiast tego posiadanie zestawu usług wielokrotnego użytku, które można komponować do tworzenia aplikacji.

IMHO, SOA ma sens tylko na poziomie przedsiębiorstwa i nic nie znaczy dla pojedynczej aplikacji.

W wielu przedsiębiorstwach każdy dział miał własny zestaw aplikacji korporacyjnych, co oznaczało

  1. Podobna funkcja została wdrożona kilka razy

  2. Dane (np. Dane klientów lub pracowników) muszą być udostępniane między kilkoma aplikacjami

  3. Aplikacje były skoncentrowane na działach.

W przypadku architektury SOA chodzi o udostępnienie usług wielokrotnego użytku w całym przedsiębiorstwie, aby można było z nich zbudować i skomponować aplikację. Obietnica SOA to

  1. Brak konieczności ciągłego ponownego wdrażania podobnych funkcji (np. Zapewnienie obsługi klienta lub pracownika)

  2. Ułatwia integrację aplikacji i dostęp do wspólnych danych lub funkcji

  3. Wysiłek rozwojowy skoncentrowany na przedsiębiorstwie.

Wizja SOA wymaga zmiany technologicznej, a także zmiany organizacyjnej . Chociaż rozwiązuje pewien problem, wprowadza również inne, na przykład bezpieczeństwo jest znacznie trudniejsze w przypadku SOA niż w przypadku aplikacji monolitycznej. Dlatego SOA jest przedmiotem dyskusji, czy działa, czy nie.

To jest widok SOA na odległość 1000 stóp. Na tym jednak się nie kończy. Istnieją inne koncepcje uzupełniające SOA, takie jak orkiestracja procesów biznesowych (BPM), magistrala usług korporacyjnych (ESB), przetwarzanie złożonych zdarzeń (CEP) itp. Wszystkie dotyczą problemu dostosowania IT / biznesowego , czyli sposobu móc skutecznie wspierać biznes.


1
tak, ale ktoś inny chce, abyś kupił lub używał ich monolitu do kontrolowania wszystkiego, na przykład Oracle SOA lub używania Microsoft WCF. Czy nie zawsze będzie monolit?
johnny

WCF i Oracle SOA to zależności technologiczne, które nie mają znaczenia w przypadku rozwiązania SOA. Koncepcja opiera się na niezależnych, łatwych w utrzymaniu usługach, a nie na określonej technologii.
BentOnCoding

4
+1 za wzmiankę o „dużym” znaczeniu SOA na poziomie organizacji. Wiele innych odpowiedzi skupia się na aspekcie komponentu oprogramowania, który, mówiąc ściśle, nie jest całościowy (nawet jeśli jest to znaczenie, które ludzie używają dużo czasu).
occulus

10

SOA to akronim dla architektury zorientowanej na usługi.

SOA projektuje i pisze aplikacje w taki sposób, aby różne moduły oprogramowania można było bezproblemowo integrować z wysokim stopniem ponownego wykorzystania.

Większość ludzi ogranicza SOA do pisania usług sieciowych oprogramowania klient / serwer. Ale to jest zbyt mały kontekst SOA. SOA jest znacznie większa, aw ciągu ostatnich kilku lat usługi internetowe były głównym środkiem komunikacji, co prawdopodobnie jest powodem, dla którego ludzie myślą o SOA jako usługach internetowych, ogólnie ograniczających granice i znaczenie SOA.

Możesz pomyśleć o napisaniu modułu dostępu do bazy danych, który jest tak niezależny, że może działać samodzielnie bez żadnych zależności. Ten moduł może ujawniać klasy, które mogą być używane przez dowolne oprogramowanie hosta, które potrzebuje dostępu do bazy danych. W aplikacji hosta nie ma konfiguracji startowej. Wszystko, co jest potrzebne lub wymagane, jest przekazywane za pośrednictwem klas ujawnianych przez moduł dostępu do bazy danych. Możemy nazwać te klasy usługami i uznać moduł za obsługujący usługę.

Praktykowanie SOA zapewnia wysoki stopień ponownego użycia poprzez wymuszanie DRY [Nie powtarzaj siebie], co skutkuje wysoce łatwym w utrzymaniu oprogramowaniem. Łatwość utrzymania to pierwsza rzecz, o której myśli każda architektura oprogramowania - zapewnia to SOA.


6

O ile rozumiem, podstawową koncepcją jest to, że tworzysz małe „usługi”, które zapewniają coś użytecznego dla innych systemów i unikasz budowania dużych systemów, które zwykle robią wszystko w systemie.

Więc definiujesz protokół, którego będziesz używać do interakcji (powiedzmy, mogą to być usługi sieciowe SOAP) i pozwalasz swojemu „systemowi, który wykonuje jakąś-biznesową pracę”, na interakcję z małymi usługami, aby osiągnąć swój „wielki cel” .


2
Proszę nie zgadywać na pytania dotyczące architektury. Stackoverflow to miejsce, w którym można uzyskać odpowiedzi eksperta, a nie przypadkowe przypuszczenia z artykułu, który przeglądałeś w zeszłym roku. Szkoda, że ​​ta odpowiedź otrzymała jakiekolwiek głosy.
BentOnCoding


4

w dużych organizacjach zwykle zdarza się, że z biegiem czasu wszystko jest albo monolityczne, albo różne w różnych miejscach, albo tylko po części. Ktoś w końcu wchodzi i mówi, że mamy bałagan. Teraz chcesz przeprojektować (komuś pieniądze) wszystko, aby było zorientowane w rodzaj monotlitu, zależy od tego, komu płacisz, ale jednocześnie móc dodawać elementy i części niezależnie od wzorca / monolitu.

Kupujesz więc Oracle SOA i Oracle staje się szefem wszystkich twoich części. Wszyscy inni gracze, którzy przychodzą, muszą pracować z SOA za pośrednictwem usługi (usługi internetowej lub czegokolwiek innego). Monolit Oracle dba o wszystko (monolit nie oznacza obraźliwego). O tak, masz ASP.NET MVC z przodu lub coś innego.

najważniejszą rzeczą jest przenoszenie rzeczy do i z systemu bez wpływu i utrzymywanie dostawcy Oracle SOA, Microsoft WCF, jako mózgu tego wszystkiego. wszystko jest w porządku, płynne, rzeczy wchodzą i wychodzą bez wpływu, nawet usługi ludzkie, nie tylko komputery.

Dla mnie oznacza to po prostu kilka usług internetowych (lub jakkolwiek je nazwiemy w przyszłości) z dobrym interfejsem. A jeśli jesteś właścicielem bazy danych, po prostu wejdź do bazy danych i przestań się martwić frazesami. w porządku.



3

Widzisz… SOA to skrót od Service Oriented Architecture… Najprościej mówiąc, piszesz fragment kodu, który jest bardzo ogólny, tj. Robi coś, co może być użyte w wielu aplikacjach… może być coś w rodzaju książka adresowa lub może być kalkulatorem. i uruchamiasz ten kod w IIS. Więc świadczysz usługę za pośrednictwem swojego kodu. Więc jesteś dostawcą usług. Teraz ktoś chce użyć podobnego kodu, to nie musi ponownie pisać kodu. Po prostu używa twojego kodu, być może za pośrednictwem usługi internetowej. W ten sposób staje się konsumentem usług. Stąd tworzenie programu wykorzystującego takie usługi nazywane jest SOA. Luźne powiązanie istnieje, ponieważ usługodawca i konsument mogą wchodzić w interakcje, nawet jeśli używają języków programowania diff. Nadzieję, że rozumiecie.


3

z blogów ittoolbox.

Poniżej przedstawiono podobieństwa i różnice w stosunku do poprzednich technik projektowania:

• SOA a programowanie strukturalne o Podobieństwa: Najbardziej podobne do wywołań podprogramów, w których parametry są przekazywane, a działanie funkcji jest wyodrębnione z obiektu wywołującego - np. Połączenie CICS i wykonanie oraz słowo zastrzeżone COBOL CALL. Skoroszyty służą do definiowania struktury danych, która jest zwykle definiowana jako schemat XML dla usług. o Różnice: SOA jest luźno powiązane, co oznacza, że ​​zmiany w usłudze mają mniejszy wpływ na konsumenta (program „wywołujący”), a usługi są interoperacyjne w różnych językach i na różnych platformach.

• SOA a OOA / OOD o Podobieństwa: hermetyzacja, abstrakcja i zdefiniowane interfejsy o Różnice: SOA jest luźno powiązana bez hierarchii klas lub dziedziczenia, abstrakcje niskiego poziomu - poziom klasy a usługi biznesowe

• SOA a starsze rozwiązania oparte na komponentach (CBD) - np. CORBA, DCOM, EJB o Podobieństwa: ponowne wykorzystanie poprzez składanie komponentów, interfejsy, zdalne wywołania o Różnice: szerokie zastosowanie standardów, schematy XML a obiekty kierowane, orkiestracja usług, projektowanie do ponownego wykorzystania jest łatwiejsze, usługi koncentrują się na biznesie, a nie na IT, usługi biznesowe są uporządkowane (szeroki zakres)

• SOA (do integracji) a integracja aplikacji korporacyjnych (EAI) o Podobieństwa: najlepsze praktyki (dobrze zdefiniowane interfejsy, standardowe schematy, architektura sterowana zdarzeniami), interfejsy wielokrotnego użytku, typowe schematy o Różnice: standardy, adopcja i ulepszone narzędzia


3

Czytając powyższe odpowiedzi, wydaje mi się, że SOA jest tym, co deweloperzy (przynajmniej dobrzy) robili od pierwszego dnia.


2

Może również oznaczać „Struct of Arrays” (w przeciwieństwie do „Array of Structs”), co jest częstym tematem w programowaniu równoległym (szczególnie SIMD), ale domyślam się, że nie o to ci chodzi!


Trochę surowe przegłosowanie bez komentarza!
Tom

2
@Downvoters: Pytanie nie daje wystarczającego kontekstu, aby uzasadnić odrzucenie odpowiedzi Tomka. To, że wszyscy są sparaliżowani terminem SOA w kontekście architektur usług, nie czyni tego błędem.
Sebastian Mach

1
@phresnel Tag jest taki, więc jeśli umieścisz na nim kursor przez krótką sekundę, zobaczysz jasny opis kontekstu quesiton.
BentOnCoding

4
@Robotsushi: A jeśli możesz sprawdzić tag przez krótką sekundę, zobaczysz, że opis został dodany ponad rok po odpowiedzi Toma.
Sebastian Mach

Myślę, że jeśli nie jesteś pewien kontekstu pytania, nie jesteś w stanie udzielić fachowej odpowiedzi. Proste pytanie w komentarzu dotyczące natury pytania szybko rozwiązałoby tę zagadkę.
BentOnCoding

2

SOA to modne hasło, które zostało wymyślone przez dostawców technologii, aby pomóc w sprzedaży ich technologii związanych z Enterprise Service Bus. Chodzi o to, aby tworzyć małe aplikacje wyspowe w przedsiębiorstwie (np. System księgowy, system kontroli zapasów itp.), Wszystkie usługi, aby można je było elastycznie zharmonizować w `` aplikacje '', lub raczej stać się częścią zagregowanej działalności biznesowej o zasięgu korporacyjnym logika.

Zasadniczo mnóstwo starych bzdur, które prawie nigdy nie działają, ponieważ mija się z celem, że powody, dla których technologia jest taka, jaka jest w organizacji, zależą od kultury, ewolucji, historii firmy, a blokada jest tak duża, że ​​każdy próba restrukturyzacji technologii jest skazana na niepowodzenie.


1

Posłuchajcie tegotygodniowego wydania podcastu Floss Weekly , które dotyczy SOA. Opisy są dość wysokie i nie zagłębiają się w zbyt wiele szczegółów technicznych (chociaż bardziej konkretne i rozpoznawalne przykłady projektów SOA byłyby pomocne.


1

Tradycyjna architektura aplikacji to:

  • Interfejs użytkownika
  • Niezdefiniowane rzeczy (implementacja), które są zamknięte / ukryte za interfejsem użytkownika

Jeśli chcesz uzyskać programowy dostęp do danych, może być konieczne skorzystanie z funkcji skrobania ekranu.

SOA wydaje mi się architekturą, która koncentruje się na udostępnianiu danych do odczytu maszynowego i / lub interfejsów API, zamiast na ujawnianiu interfejsów użytkownika.


1

SOA lub architektura zorientowana na usługi to wzorzec architektury oprogramowania, w którym aplikacje lub systemy są zbudowane z podstawowych (i zwykle rozproszonych) usług oprogramowania, które są zgodne z określonym zestawem cech, a mianowicie:

  1. Oparte na interfejsie, zasadach i umowie
  2. Przejrzystość lokalizacji
  3. Autonomiczny
  4. Abstrakcyjny
  5. Wielokrotnego użytku
  6. Komponowalne
  7. Bezpaństwowcy
  8. Wykrywalne
  9. Rozciągliwy
  10. Luźno powiązane

Podstawowym celem SOA jest elastyczność w rozwoju oprogramowania, czyli możliwość łatwego i taniego reagowania na zmiany, co pozwala firmom szybko reagować na zmieniające się rynki.

Usługi są zazwyczaj (ale w żadnym wypadku nie wyłącznie) implementowane jako usługi sieciowe, tj. Działają w oparciu o wszechobecny internetowy protokół HTTP i są implementowane przy użyciu protokołu SOAP opartego na XML lub lekkiego (i bardziej popularnego) paradygmatu REST.


1

Zależy kim jesteś!

Jeśli jesteś właścicielem firmy, SOA to rozwiązanie, które zwiększy Twoje dochody i sprawność biznesową. Jeśli jesteś architektem przedsiębiorstwa, SOA to sposób na narysowanie ładnego i przejrzystego oprogramowania na pustym płótnie. Jeśli jesteś architektem, SOA jest rozwiązaniem do projektowania luźno powiązanych usług na platformie integracyjnej, aby po prostu podłączyć usługi do gniazd. Jeśli jesteś programistą, SOA to paradygmat programowania, w którym usługa znajduje się w centrum projektu i kodu.

Powinieneś przeczytać 100-pytań o SOA [pdf]

Twoje zdrowie


1

Architektura zorientowana na usługi (SOA) to styl architektury oprogramowania, który tworzy aplikacje jako zbiór podłączanych części, z których każda może być ponownie wykorzystana przez inne aplikacje.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.