ми повернулися до повного кола з мікросервісами, повертаючись до дуже старих підходів до школи?


9

Що стосується архітектури та дизайну програмного забезпечення, то як мікросервіси "складаються" (призначені каламбури) проти проміжного програмного забезпечення? Я приїжджаю з Java, і здається, що, як ви віддаляєтесь від прямої програми REST як API, і абстрагуєтесь від різних шарів та параметрів підключення, принаймні на Java, ви майже повернулися до повного кола до деяких дуже старих шкільних ідей . Ми повернулися до віртуалізації ... коли JVM вже віртуальний.

Агностично, ви можете, і я можу стверджувати свої переваги, абстрагуючи RESTful API на CORBA. Або, більш орієнтованим на Java, JMS або MDB.

Свого часу EJB була великою справою в Java, тоді вона була визнана трохи кластерним eff, але тепер ми повернулися до початку?

Або пропонують мікросервіси те, чого бракує CORBA, а ще краще, MDB? Коли я читаю (TLDR) Мартіна Фаулера, що пояснює мікросервіси, це вважає мене гарним рішенням поганої проблеми, якщо ви хочете. А точніше, закритий підхід, який вводить рівень складності, лише розсуваючи проблему. Якщо послуги справді є мікро- та численними, то для запуску та утримання кожного з них має долар.

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

Звичайно, між цими крайнощами існує невизначена кількість варіантів.

Акула проти горили ... йди! (Для педантичності це означає бути іронічним, і це зовсім не мій намір. Питання має бути прийнято за номінал. Якщо питання можна вдосконалити, будь ласка, зробіть це, або прокоментуйте, і я виправлю. )

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

Чому горизонтальне масштабування настільки поширене або хоча б бажане?


4
Голосування про закриття. Незрозуміло, що ви запитуєте, і чому ви це просите. Мікросервісна архітектура - це лише інша архітектура. Нічого більше, нічого менше.
davidk01

1
Також ця стаття може бути достойною
davidk01

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

"Замість того, щоб цікавитись, чи буде компілювати код ... вони задаються питанням, чи запуститься він ..." Насправді це зовсім не проблема. Просто тому, що якщо розробник змінює контракт, не повідомляючи про це всіх зацікавлених сторін - цього розробника слід дуже сильно розплющити. Буквально. Якщо ми використовуємо терміновий контракт, то уявіть, чи змінює ваш провайдер мобільних умов умови контракту, не запитуючи / не повідомляючи вас? Ось чому це договір - всі сторони, які беруть участь у цьому, повинні знати / погоджуватись щодо змін контракту, і коли ця зміна відбудеться (за умови належного потоку розвитку), все повинно бути протестовано та проваджено.
Олексій Каменський

1
@Thufir Як було сказано, що перед MS - це лише інший підхід, він матиме свої переваги та недоліки. Я фактично працював з таким підходом (ще до того, як чув, що він має спеціальну назву для нього) над кількома проектами. Як бічна примітка - це не водоспад, це те, що ви його робите. Оскільки я працював над одним із проектів, що розробляють (в команді) частину мобільної ОС, цей підхід є єдиним способом, оскільки ОС не можна зробити так giant blob, як вона повинна мати інтерфейси, тому кожна частина, починаючи з ядра, є своєрідною MS, і перше, що раніше будь-яка команда почала писати код, щоб узгодити специфікації v0.0.1.
Олексій Каменський

Відповіді:


2

TL; DR. Мені було приємно пити багато ароматизованих Kool-Aid ароматизованих мікросервером, тож я можу трохи поговорити про причини, які стоять за ними.

Плюси:

  • Служби знають, що їх залежність стабільна і встигли виправитись
  • Дозволити розгортання нових версій
  • Дозвольте повернути компоненти, не впливаючи на більш високі шари.

Мінуси:

  • Ви не можете використовувати нові та блискучі функції своїх залежностей.
  • Ніколи не можна порушувати сумісність API назад (або принаймні не для багатьох циклів розвитку).

Я думаю, що ви принципово неправильно розумієте, як має працювати мікросервісна архітектура. Як його слід запускати, це те, що кожен мікросервіс (згаданий тут як MS) має жорсткий API, з яким погоджуються всі його клієнти. MS може вносити будь-які потрібні зміни, поки API зберігається. MS можуть бути викинуті та переписані з нуля, доки API зберігається.

Щоб допомогти в розв'язанні зв'язку, кожна MS залежить від версії n-1 її залежностей. Це дозволяє поточній версії послуги бути менш стабільною та трохи більш ризикованою. Це також дозволяє версії виходити хвилями. Спочатку оновлено 1 сервер, потім половину і, нарешті, решту. Якщо в поточній версії колись виникають якісь серйозні проблеми, MS можна повернути до попередньої версії, не втрачаючи функціональності в інших шарах.

Якщо API потрібно змінити, він повинен бути змінений таким чином, щоб він був сумісний назад.


"MS може бути викинуто і переписано з нуля, доки API зберігається." - нічого нового там, але добре. Що стосується продуктивності, на протилежному кінці спектра, як порівняти всі ці МС з монолітним додатком / послугою / системою? Що стосується розповсюдження, то це виглядає так , і, будь ласка, виправте мене, якщо не так, що потенційний приріст продуктивності від розміщення n MS на одній машині ... віртуалізований на мейнфреймі ?? Це майже як більше, чим більше масштабуєш MS по горизонталі, тим простіше стає їх масштабування вертикально ...? Бонусні бали за те, що не читали мого питання :)
Thufir

1
Як і в будь-якому шарі непрямості, ви приймаєте ударний показник порівняно з великим балом грязі. Що стосується MS, це особливо дорого, оскільки ви здійснюєте мережевий туди-назад у кожному дзвінку. Використання віртуалізації або контейнерів робить цю поїздку в обидва кінці значно коротшою, оскільки виклик ніколи фактично не залишає машину. Це також означає, що ви отримуєте більшу ізоляцію (утікаючий пристрій не може завдати шкоди одноліткам) з меншими витратами на обладнання.
Костянтин Таращанський

5

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

Щодо слабкої зв'язку, я думаю, ви трохи зрозуміли мету. Якщо завдання A потребує виклику завдання B, способи зробити А і В 100% роз'єднаними, ніколи не буде. Ніколи не відбудеться. Що ви можете зробити, це переконатися, що якщо завдання B називає завдання C, то завдання C ніколи не повинно турбуватися про зміни в A. Якщо ці три завдання пов'язані між собою в одну велику крапку, передаючи структури один одному, тоді є великий шанс, що їм доведеться все змінити, якщо хтось із них зробить це. Але якщо всі три мікросервіси, то ви, в основному, гарантовані, що зміна на A змусить B лише оновитись (якщо тільки це не така велика зміна основних функціональних можливостей A, що ви, мабуть, мали б зробити це абсолютно новим сервісом). Особливо це стосується тих випадків, коли всі оновлення мікросервісів проводяться на сумісному рівні, яким вони повинні бути.

Щодо спритного коментаря, я можу вам сказати з особистого досвіду, що наш код мікросервісу-y грає набагато краще з гнучким, ніж наш код, "пов'язаний у велику крапку". В останньому, кожен раз, коли хтось виправить помилку у функції низького рівня, він буквально повинен надіслати цілий відділ НДДКР електронною поштою із повідомленням: "Будь ласка, перейдіть наново свої завдання, інакше всі вони завершаться в п’ятницю". Ми отримуємо пару таких щотижня . Якби його код знаходився в мікросервісі, ми автоматично отримали б користь від виправлення, як тільки він розгорнув нову версію.

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


1
"Якщо ці три завдання об'єднані між собою в одну велику крапку ..." Я маю на увазі лише Java, але я б сказав "ні", погана ідея, не робіть цього. Створіть бібліотеку, API №1, API №2 і т. Д., Щоб досягти точної точки "..задач C ніколи не повинен турбуватися про зміни A", оскільки C - клієнт лише B, а зовсім не A. . У цьому плані я взагалі не бачу цього нового, пробачте. Я знаю, що питання, яке я задав, було нечітким. Це нечітке запитання, бо я нечіткий, про що це. Кожна відповідь була корисною для мене, якщо тільки допомогти зі своїм словником.
Туфір

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

CORBA - це (була) розподілена технологія, яка давала можливість розподіленим архітектурам у той час (наприкінці 1990 р.), Коли ще не було поширених імен, щоб їх визначити. Ви мали змогу впроваджувати крупнозернисті або дрібнозернисті системи на основі CORBA, що закінчувались тим, що згодом буде називатися SOA або мікросервісом. CORBA не вижив, але ми робимо це знову, лише за допомогою іншої технології. Однак проблема була не в технології. Так що так, ми йдемо повним колом. Я сподіваюся, що ми щось дізналися в процесі.
xtian

4

Як якось краще, що ці служби розкидані по різних машинах?

Через хмару.

Ви ще сміялися? Але якщо серйозно - для багатьох підприємств найбільша вартість програмного забезпечення вже не є програмним забезпеченням. Це пропускна здатність, апаратне забезпечення, вартість CDN і т. Д. Тепер, коли кожен має мобільний пристрій, трафіку є набагато більше. І це тільки погіршиться, коли ваш тостер набуде власного підключення до Інтернету.

Тож бізнес прагне керувати цими витратами. Зокрема, вони намагаються вирішити бізнес-проблему: "якщо ця річ підірється, як я можу обслуговувати мільйони людей, які отримують / користуються моїм програмним забезпеченням, - не платячи достроково серверам, щоб обслуговувати мільйони людей, які отримують / використовують моє програмне забезпечення ? ".

Чому горизонтальне масштабування настільки поширене або хоча б бажане?

Тому що це відповідає на цю (величезну і зростаючу) проблему бізнесу.

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

Це також добре, тому що дозволяє перевмикати розподіли сервера, щоб ви могли:

  1. використовуйте більшість серверів, які у вас є, залишаючи мало «витрачати».
  2. вимірюйте ефективність окремих елементів вашого програмного забезпечення.
  3. скоротити час розгортання / зупинки, спричинене випусками.

Наявність дуже деталізованих розгортань робить ці дві речі легшими / кращими (крім того, що допомагають забезпечити кращий розбір проблем).


Гаразд, я бачу перевагу. Існує низький бар'єр для входу, але він може збільшуватися. Я гадаю, що мене кидає цикл, коли ви масштабуєте горизонтально n MS, це просто здається ... дуже ... ретро? Щось. Я не можу сказати слова, чому це просто здається неправильним.
Туфір

Масштабування додатків - це проблема, яка не обов'язково потребує мікропослуг: ви можете легко підвищити потужність VM на AWS (навіть на вимогу), або можете додати більше VM за балансиром навантаження в традиційній архітектурі.
xtian

@xtian - звичайно, але ви часто масштабуєте неправильні речі і, таким чином, витрачаєте більше грошей, ніж потрібно. Ідея мікросервісів - це ви просто масштабувати те, що вам потрібно (процесор, пам'ять, диск, пропускна здатність, gpu)
Telastyn
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.