Чи реально працює служба служби SOA?


15

Одним з головних принципів проектування послуг SOA є принцип сумісності послуг ( https://en.wikipedia.org/wiki/Service_composability_principle ).

Ідея полягає в тому, що, складаючи нові сервіси, використовуючи існуючі як будівельні блоки, можна швидко розвивати нові сервіси. Вигляд аналогічний тому, як ви називаєте існуючі методи об’єктів, коли реалізуєте нові методи. Ось звідки, як передбачається, відбудеться значне підвищення продуктивності SOA.

введіть тут опис зображення

Хтось справді робить це на практиці? Я бачив це нескінченно повтореним у письмовому тексті, але сам не відчував реальної реалізації реального світу. Більша частина тексту також не містить будь-яких згадок про операції з транзакціями , що, як мені здається, є найбільшою перешкодою у здійсненні послуг з компонування.

По-перше, вам справді потрібно вирішити проблему транзакцій, перш ніж ви зможете створити будь-які нетривіальні послуги. Звичайно, якщо в прикладі є служби "findCurrentTime ()" і "writeLogMessage ()", то легко не турбуватися про транзакції, але не мати прикладів реального світу, таких як "depositMoney ()" і "pullMoney ()".

Я знаю два варіанти:

  1. Реалізуйте реальні транзакції за допомогою WS-Atomic Transaction або іншого
  2. Реалізуйте рішення на основі компенсації, яке компенсує виклик A з "cancelA ()" або дещо, якщо виклик B не вдається

І те й інше здається дуже проблематичним / близьким до непридатного для мене:

  • WS-атомна транзакція
    • багато складності, більшість ради , який я знайшов тільки попереджає «біль в дупі, не робить це»
    • підтримка обмежена, наприклад, якщо ви приймаєте ESB з відкритим кодом, основні альтернативи ServiceMix, Mule або WSO2 не підтримують її
  • компенсації
    • реалізація управління компенсаціями здається мені дуже складною. Що ми робимо, якщо послуга A успішна, і ми ніколи не отримуємо відповіді від служби B і не знаємо, чи не вдалося це чи вдалося? Поводження з такою логікою вручну (як виконавець служб складання композицій) змушує мене розрізати зап’ястя - це така робота, яку повинен зробити для мене інструмент !.
    • Я також не бачу, як можна використовувати методи компенсації в нетривіальних послугах. Скажіть, що ваша послуга A - "depositMoney ()", і це вдається, а деякі інші дії швидко переносять гроші в інше місце, і тоді ми отримуємо "компенсаціюDepositMoney ()", що ми робимо зараз? Схоже на велику банку глистів.

Мені здається, що склад сервісу - це такий фундаментальний принцип SOA, що ви дійсно не отримуєте переваг SOA, якщо не можете (зручно) складати послуги . Яка реальність? 90% користувачів SOA використовують "покалічене SOA" без реального службового складу? Або більшість користувачів насправді використовують сервісну композицію, і я перебільшую складність цього?


+1 це велике запитання, і такої ганьби він не мав великої уваги.
Gaz_Edge

Відповіді:


0

Коротка відповідь - так!

Я бачив це в кількох великих фінансових організаціях, і це добре працювало.

Питання транзакцій є складними, але зазвичай їх вирішує (дороге) проміжне програмне забезпечення, наприклад, Oracles WebLogic EAI або IBMs Websphere ESB.


Не багато дискусій, тому я думаю, що я вибираю вашу відповідь. Я думаю, що сервісна композиція працює, якщо докладати до неї потрібні зусилля та використовувати належні інструменти.
Janne Mattila

Як наступне запитання, мені цікаво, який відсоток впровадження SOA робить це "належним чином" та використовує реальну композицію служби? Моя думка була б досить низькою, як 10% ... Я помиляюся?
Janne Mattila

4

Так, це можна змусити працювати на практиці. Однак це може бути не найкращим підходом і, можливо, використовується як варіант за замовчуванням більше, ніж слід. На мій погляд, SOA стала популярною як спосіб інтеграції застарілих систем, оскільки організації розвивали свої ІТ для автоматизації все більших завдань. Це може бути дуже безладним, але, можливо, того варто, якщо застарілі системи можна буде повторно використовувати. Якщо вам пощастило розпочати проект із зеленого поля, слід розглянути інші підходи, перш ніж припустити, що це найкращий шлях.

Щоб відповісти на деякі ваші конкретніші проблеми ...

Ви можете використовувати транзакції:

  1. WS-TX - це PITA, і я б цього не уникав.
  2. Усі ваші служби можуть працювати на одному сервері додатків, і тоді ви можете охопити їх усіма транзакціями XA. Ось чому були винайдені такі речі, як сервери додатків.

Враховуючи компенсаційний підхід:

Компенсаційні дії потрібно враховувати лише тоді, коли стався збій. Чи має в інструменті складу послуг прапор, яким він може керувати, який очищається при першому виконанні кроку робочого процесу, але встановлений на наступних викликах? Як і можливий повторний прапор в JMS. Тоді ви можете використовувати те, що називається 1,5-фазовим фіксуванням, що в основному означає продовжувати, якщо прапор чистий, але якщо прапор встановлений, спочатку зателефонуйте, щоб перевірити, чи стан уже оновлено і чи потрібно його робити вдруге . Це все ще вимагає вручну керувати помилками і може бути складним або навіть неможливим, як ви вказуєте.

У деяких ситуаціях не має значення:

Це врешті послідовний підхід. Припустимо, одна служба надсилає електронний лист. Якщо композиція служби не працює і її перезапускають, електронний лист надсилається знову. Це трохи дратує одержувача, але вони, мабуть, усвідомлюють його дублікат і все може продовжуватися без особливих проблем.

Ви також можете зберігати журнал надісланих електронних листів і використовувати його для видалення копій, коли встановлено прапор, і таким чином надсилати електронний лист лише один раз.

Ви можете використовувати асинхронний обмін повідомленнями, щоб розділити транзакції на більш дрібні частини:

Розглянемо чергу JMS, яка є транзакційною. Ваш координатор служби може оновити свій стан і розмістити повідомлення в черзі за один Tx. Служби внизу потоку можуть знімати повідомлення та оновлювати їх стан за один Tx. Тепер ви координуєте служби в декількох одиницях роботи, але кожен є атомним. Якщо щось не вдається і його потрібно перезапустити, немає проблем.

Це все ще означає, що ви робите транзакції XA над базою даних та чергою JMS, але це все ще може бути ефективним, використовуючи останній гамбіт ресурсів, щоб уникнути повного перевитрати XA.

Крім того, ви можете використовувати цю схему, але з 1,5-фазовим доступом до бази даних та JMS. АБО ви можете запускати JMS без транзакцій, але робите це більш надійним шляхом кластеризації.

Асинхронні повідомлення також можуть допомогти роз'єднати системи, оскільки виробники та споживачі можуть стати більш незалежними один від одного, зменшуючи кількість з'єднань у системі загального користування та роблячи її більш гнучкою. Цей вид розв'язки є дуже важливим, якщо мова йде про великі організації з великою кількістю різноманітних послуг.


Чудова відповідь! Мій єдиний коментар до останнього розділу, де ви говорите про JMS та асинхронний обмін повідомленнями з транзакціями, я побоююся, це може створити погані враження щодо можливостей тут. Трансакція споживача послуги надсилати повідомлення лише гарантує, що повідомлення було надіслане та розміщене у черзі. У нас немає таких гарантій того, що робитиме споживач, не кажучи вже про те, якщо вони навіть збираються прочитати повідомлення.
maple_shaft

Якщо вам потрібна певна відповідь, повідомлення слід надіслати назад, використовуючи ідентифікаційний номер кореляції, щоб відповідати його оригіналу, надісланому. Сервісна оркестрація може бути впевнена, що запит було оброблено, як тільки він отримає відповідь.
користувач2800708

+1 для "Ось чому були винайдені такі речі, як сервери додатків." Я вже кілька тижнів боюся з цією проблемою. Я починаю новий проект і хочу використовувати SOA - маючи всі сервіси в одній коробці, щоб забезпечити повну послідовність транзакцій, схоже, шлях вперед - дякую!
Gaz_Edge

-1

Ні, це міф. Це неправильний намір мати під час проектування сервісної архітектури. Є ціла купа проблем:

  1. Дуже щільна муфта. Якщо одну службу було змінено, вам потрібно протестувати всю систему.
  2. Такі послуги дуже дрібні, тому існує багато внутрішнього спілкування.
  3. Внаслідок дрібнозернистих послуг є багато послуг. Системі важко зрозуміти, запити відслідковувати все складніше.
  4. Суб'єкти-послуги погано інкапсульовані: жодне з правил бізнесу там не перевірено, ця логіка діє в сервісах експлуатації. Таким чином, будь-яка служба може викликати будь-яку організацію-сервіс та оновлювати її дані за допомогою загального запиту на оновлення, який присутній у його інтерфейсі. Подібні послуги суб'єктів господарювання часто називають орієнтованими на дані - на відміну від послуг, орієнтованих на процеси, орієнтовані на поведінку.
  5. Вроджений характер зв'язку між цими послугами синхронний. Тож шанси на те, що обраний транспорт буде http. Звідси всі його недоліки, про які я розповім трохи пізніше.

Є ще більш неправильні способи підходу до архітектури обслуговування . Тож будьте обережні.


@downvoter Не згоден? Не обговорюй це, навіщо турбуватись, просто голосно!
Західло
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.