Чому бізнес обирає мікросервіси

💡 Усі статті, обговорення, новини про DevOps — в одному місці. Приєднуйтесь до DevOps спільноти!

Мікросервіси давно стали стандартом у розробці, і часто їх подають як безальтернативний варіант. Вони нібито роблять систему зрозумілішою, дозволяють працювати незалежним командам, обіцяють надзвичайну відмовостійкість і масштабованість. Однак, багато з цих selling points мають підводні камені:

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

Але попри всі ці нюанси, бізнес все одно обирає мікросервіси. Чому?

Швидка перевірка гіпотез

Бізнес постійно експериментує, і 9 з 10 таких експериментів провалюються. У випадку моноліту будь-який експеримент вимагає значних зусиль: спочатку потрібно продумати його впровадження, потім вносити зміни в основний код, тестувати їх, і врешті-решт, якщо експеримент провалився, позбуватися залишків цього коду. Альтернативний варіант — робити щось «на колінці», але тоді це залишається назавжди в кодовій базі, створюючи технічний борг.

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

Найм розробників

Сучасний ринок праці у сфері ІТ дуже конкурентний, і знайти потрібного фахівця буває складно. Монолітні проєкти вимагають глибокого розуміння великої кодової бази, знання специфічного стеку та готовності працювати з легасі-кодом. А ось мікросервісна архітектура дозволяє залучати будь-яких розробників, незалежно від їхньої експертизи у конкретному стеку.

Висновок

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

А ви шо думаєте?

👍ПодобаєтьсяСподобалось3
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Монолітні проєкти вимагають глибокого розуміння великої кодової бази

Це ви ще не бачили мікросервісного лайнокоду, розмазаного по 500 репозиторіям, з дублюванням бд і коду.

Чому бізнес обирає мікросервіси

Бізнес не обирає архітектуру ІТ рішення. Обирають мікросервіси технічні спеціалісти (або люди, що на їх посадах). Причин цього вибору є багато, резюме дрівен девелопмент — одна з них.

Мікросервіси ж дозволяють швидко створити окремий модуль, що не впливає на основну систему, протестувати гіпотезу,

1) Це ви зараз написали, що додати новий елемент розгортання швидше, аніж його не додавати.
2) Що заважає додати той експериментальний модуль поряд з монолітом?
3) Що робити, коли тестування гіпотези потребує зміни декількох контекстів? Ви впевнені, що внести зміни в кілька сервісів буде швидше ніж в 1 моноліт.

Сучасний ринок праці у сфері ІТ дуже конкурентний, і знайти потрібного фахівця буває складно. Монолітні проєкти вимагають глибокого розуміння великої кодової бази, знання специфічного стеку та готовності працювати з легасі-кодом. А ось мікросервісна архітектура дозволяє залучати будь-яких розробників, незалежно від їхньої експертизи у конкретному стеку.

Краще вже напишіть, що ви згенерували цю статтю через ЛЛМ. Кожне речення в цій цитаті — дурня, що не витримує найпростішої критики. Досвід в ІТ у вас схоже є, але ця «стаття» демонструє вашу нездатність робити з нього хоч якісь висновки.

UPD.
У вас спеціалізація — фронтенд наче. Для чого ви вирішили написати статтю по темі, що далека від вашої області?

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

До війни в Україні кожен міг би прийти до магазину — і йому б зібрали десктоп з різних компонентів під його задачі за розумну ціну. Через декілька років можна було докупити пам’яті, розігнати або замінити що потрібно.
Але усе одно багато юзерів просто йшли і купували китайський ноутбук, повністю залитий пластиком усередині. Він взагалі не підлягав ремонту — але хто ж думає про ремонт коли купує нове?
Так само і моноліти з мікросервісами. Якби бізнес розумів що купує собі систему на 10 років уперед — він би заплатив і за архітектуру, і за якість, і за maintenability, scalability і т.і. Але поки більшість замовників хочуть дешево і швидко — будуть отримувати «одноразові» моноліти. Бо їх легше зліпити.
P.S. Хоча цілком можливо що криза примусить бізнес більш розумно підходити до ІТ. Це як людина: поки грошей багато — можна просто купувати нове авто кожні 5 років. А якщо грошей нема — то будеш і старий Запор лагодити аби їздив.

Залізо та програмне забезпечення — це не одне й те саме. Це по-перше. А по-друге: Питання полягає в тому, для кого виробляється кінцевий продукт? Мікросервісна архітектура — це і є бізнес, так само як і моноліт. Перша модель більш підходить для великого бізнесу, а друга (моноліт) для малого та середнього. Крім того, будь яку програму можна переписати... Вони складаються з методів та функцій (блоків), які можно копіювати. Зазвичай мікросервісну архітектуру використовують Банки (для своїх різноманітних послуг) та великі компанії, такі як Google, Yandex, Amazon, Facebook і т.п. Тож якщо ви вважаєте, що кожен малий чи середній бізнес платоспроможний як гігантські компанії, то ви можете продавати їм мікросервісну архітектуру (інтерфейс) з урахуванням їхнього розвитку та можливого лістингу в NASDAQ

Коментар порушує правила спільноти і видалений модераторами.

Так... читаю, жодної згадки про SupplyChain’и, DBA, DDD й BoundedContext’и.
Додану вартість синхронізації дубльованих граничних сутностей, й вартість міграції.

Лише підтверджується думка що в українському ІТ лишились лише дилетанти.

«Розбивку моноліту» на мікросервіси, з 2012 року прийнято вважати оптимізаційної задачею, яку не варто навіть й пробувати вирішувати самостійно.

Якщо можете слухати москальскі підкасти
«Почему микросервисы могут разорить, а монолит выручить»
youtube.com/watch?v=...​HfB1g?si=EFHg5Q3zX0OH0YS1

а «чому бізнес обирає білий папір»?

який продають такий й обирають.

так, останнім часом всі проєкти, куди я приходив, мали 200-300 мікросервісів. Хайп зиграв злий жарт.

какие микросервисы в итоге бизнес выбрал?

Це як з комунізмом чи нацизмом — ідеї може і гарні, але фактичні реалізації виявились далекими від очікування.

Мікросервіс це завжди «моноліт» з точки зору труби. Навіть якщо це децентралізована, дуже складна і «надійна» система обміну данними, це той самий «моноліт» до якого прив’язуються мікросервіси

Можна пійти іншим шляхом, щоб «модулі» самі між собою в’язалися якось як їм зручно (як з БД зв’язок наприклад) але на практиці це виходить переускладненний моноліт яккий якщо щось відпало то ляже все.

Із всього мікросервісного що бачив, самим «золотим стандартом» виявлявся самописний під свої задачі брокер повідомлень (або переписаний існуючий), величезної складності і розміру коду де «міросервіси» вийшли на рівень bash-скиптів так як все інще все е на рівні шини.
Вот там дійсно робиш шо хочеш, отримуеш як хочеш і все добре.

і саме забавне що як не перекладай, централізований мастер-інстанс завжди потрібен, так як інакше не побудувати нічого що витримае високе навантаження. Просто з мікросервісами цю точку ще й на рівні бек-енду «підняли» із за чого окремі «сервери» по суті е кліентами брокеру.
Всякий блокчейн чи децентралізованість тут не допоможе, так как потік данних геометрично росте с кількістью вузлів. Тому або надійність та швидкість, або ніяких гарантій і повільно — зрозіміло що вибирають кліенти, особливо коли почують скільки буде коштувати підтримка «децентралізованого» в порівнянні з таким же rpm но классичо-іерархічного

Чекаєм на статті, чому «бізнес» обирає абстрактну фабрику та 4к монітори

Хочу трохи підсумувати свої думки про моноліти та мікросервіси. Судячи з постів, багато хто бачить ситуацію у чорно-білих кольорах: або моноліт, або мікросервіси. Як на мене, це просто дві крайні точки, які визначають підхід до розширення системи. У випадку моноліту ми, якщо це можливо, розширюємо існуючий застосунок. У випадку мікросервісної архітектури — додаємо новий сервіс. Ось ця вставка «якщо це можливо» важлива, бо часто опонентам приписують карикатурну позицію: мовляв, вони за будь-яку ціну дотримуються свого підходу. Але то таке.

Як я зазначав раніше, ідея мікросервісів дуже приваблива психологічно. Це блакитна мрія розробника: система легко розбивається на незалежні модулі, які зрозумілі й зручні в роботі. Це прагнення простежується в усій історії розробки ПЗ — від Smalltalk, де кожен клас фактично мікросервіс, до філософії Unix («одна програма — одне завдання»), до принципів ООП (маленькі класи, короткі методи, гарні імена). Сюди ж можна віднести і концепцію мікроядра в ОС.

Ще плюс мікросервісів — можливість експериментувати з мовами та фреймворками. Новий сервіс можна писати так, як хочеться, без жорсткої прив’язки до стеку. Більше самостійності у виборі архітектури та навіть мови — це мотивує більшість розробників, і це не слід недооцінювати. Так, це може бути й об’єктивним плюсом, наприклад, якщо потрібно інтегрувати нейромережі, то PyTorch — один із найлогічніших виборів.

Однак сталося не так, як гадалося. З погляду розробки, працювати з монолітом зазвичай простіше: архітектурні прорахунки легше виправляти або обходити. Часто лякають тим, що моноліт не витримає навантаження, але на практиці це теж вирішується — якщо система вже монолітна, видно, які частини тісно взаємодіють, а які ні. Знову ж таки, задачі «за будь яку ціну зберегти моноліт» не стоїть.

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

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

Треба вводити нову хайпову архітектуру — Макросервіси. Це коли ваш моноліт розпилений не на 5 а на 2 моноліти.

Це також є — Марк Річардс рекомендує її під назвою Service-Based Architecture

Особисто у моєму досвіді ніколи не бачив, щоб мікросервіси обирали за можливість створення зоопарку) тут навпаки можуть бути проблеми, що одна команда не зможе підмінити іншу якщо у різних сервісів будуть різні мови програмування.
На мою думку, моноліти сильно недооцінені, а мікросервіси переоцінені. Якщо застосовувати патерни і грамотне розділення відповідальності між модулями і абстракціями, то не буде ніяких проблем з розширенням і зміною такої апки, ну і можна буде перевіряти ті самі гіпотези, бо модулі апки автономні, але в той же момент ранаються в одному процесі. Якщо розробники не можуть написати моноліт без High Coupling то розділення на мікросервіси нічим їм не допоможе, просто розмазування лайна на більше шматків і площу.
На мою думку краще рухатися по дефолту з монолітом, окрім ситуацій коли на різні модулі є асиметричне навантаження, потрібна асинхронність певних фіч, або якщо моноліт вже на стільки великий, що його білд займає занадто багато часу; от тоді вже є сенс ділити його на сервіси (не плутати з мікросервісами), якщо цих умов нема, то мікросервіси створюють більше проблем, ніж допомагають

Як би не так, з монолітами особливо гігантського розміру існують суттєві проблеми з масштабуванням. Так якщо ви пишете відносно не навантажених сервіс — реально це непотрібний оверхед, мікросервіси справді значно складніші в розгортанні, треба узгоджувати інтерфейси і т.д. Але коли навантаження суттєві, а для бізнесу особливо важливо щоби система штатно працювала в періоди пікових навантажень — бо саме в ці періоди найбільші заробітки, то масштабування виходить на перший план і Claud Native підход має значення. Мікросервіси без відповідної хмарної інфраструктури : AWS, Azure, GCP, OpenShift і т.д. — не мають жодного сенсу. Власне тому DevOps/Claud опис і були такими затребуваними, вони центральні персони в розгортанні такої системи.

Не зовсім згоден із вами.
Це як сказати, що модифікатори доступу public/private не потрібні, якщо правильно організувати зв’язність класів та їх інкапсуляцію.
Але насправді як раз модифікатори доступу полегшують інкапсулювання об’єктів і звільняють розробників від необхідності пам’ятати купу інформації.
Так і мікросервіси — вони дозволяють розбити доменну модель і функціональність між ізольованими підсистемами так, що ви не можете використовувати їх спільно, окрім як через публічний API.

Та як завжди, там де перевага там же і недолік. По перше усі мікросервіси мають мати узгоджений API, тобто усі розгорнуті версії мікросервісів мають бути сумісними між собою. Це не той випадок коли це можна перевірити модульними тестами чи навіть компілятором який скаже, що виклик публічного API одного модуля системи іншим є не вірним. Зазвичай це вимагає розширеної автоматизації системи збірки розгортання та автоматичного наскрізного тестування, або в край бюрократичного реліз менеджмент процесу. І це буде найдорожча перевірка на останніх етапах рантайму, End to End (E2E) тестування. Тобто має бути перевірено що усе працює від старту до фінішу.
Далі, така система дає суттєвий додаткове навантаження на серіалізацію і де десеріалізацію данних. Тобто умовно один окремий виклик до гетерогенної системи побудованої на мікро сервісній архітектурі, гарантовано потребує більше ресурсів ніж до модульно- монолітної системи. І також буде затримка на передачу данних між мікросервісами по сіті, як по HTTP так і тим більше через брокер.
І останнє і над суттєве — підтримка складних сценаріїв які вимагають транзакційної логіки. Для цього треба реалізовувати складний шаблон розподіленої транзакції — Saga.

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

Це не значить що завжди треба перевіряти геть усе, хоча звісно це бажано.
Бо можуть бути зміни, які не ламають API: додавання endpoints чи серіалізація може дозволяти додавати додаткові поля у запит та відповідь так, що старі версії API їх ігнорують. Тоді не повинно бути зламаних неочікуваних сценаріїв та тестуються e2e тільки безпосередньо сценарії де зміни. Це все ж таки скорочує час тестування та ризики деплойменту.

Як на мене, то можна мати більшість backward-compatible змін API які не ламають щось у неочікуваних місцях.

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

Бізнес:
Наші мікросервіси повинні бути більшими на 20% ніж у наших конкурентів!

Контроверсійно. Бо тут слово «бізнес» має дуже розмите значення. Є бізнеси дуже великі, а не невеличкі. І у них різні підходи.

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

який бізнес, яка кодова база, все на купу.

Монолітів як таких давно не існує. ще до хайпу мікросервісів.

Коли моноліт впирається у щось — з нього виокремлюють частини у окреми сервіси.
В залежності від того в що він вперся
окремими стають і код, і команди розробників, і персистентні дані.

В бізнес системах першими кандидатами на виокремлення зазвичай стають
OLTP — транзакційна частина
OLAP — аналітика
Report system — генератори рахунків, звітності, ...
і т.д.

і як така мікросервісна декомпозиція — тоді не треба

Вона корисна коли ми — зразу знаємо про навантаження, зразу обираємо клауд з її підтримкою
І навіть тоді — якщо система в цілому велика і складна — вона буде складатися з декількох жирних сервісів і рою мікросервісів.

Монолітів як таких давно не існує

а як же йадро лінукс? оО

я ж не казав що взагалі не існує. моє кредо — «в житті буває все, навіть те чого не буває»
а казав що зазвичай їх не існує — бо впираються в щось

і на один приклад ядра лінукса я бачив на власні очі десяткі прикладів про які й написав:
великі та складні системи складаються є не з 1 моноліту, а з 3-5 жирних сервісів.

«потопив»

але ж «монолітноє ядро», як же ((((

Так так, треба зліпити все в моноліт, щоб потім система завмирала на хвилину-дві як тільки отримала кілька ріквестів для ДейтаСайнс розрахунків паралельно і зайняла всі CPU... А потім ще якісь джоби з ріпортами стартануть... І абсолютно весь функціонал завмер моментально, поки система не заскейлиться, а то буде зовсім не миттєво.

В мікросервісах ніякі важкі обчислення ДейтаСайнс чи довгі джоби ріпортів не будуть мати ніякого впливу на ваше головне REST API чи вебсокети інтегрованого чату, чи шо ше там в системі є.

То очевидно, що не в кожному проекті потрібні мікросервіси, багато хто і починає з моноліту, поки не впирається в ліміти.

ДейтаСайнс чи довгі джоби ріпортів не будуть мати ніякого впливу

та ладно? навіть якщо криворукий програмьо́р мікросервісів (ви ж бо апріорі вважаєте програмьорів моноліту криворукими, бо там все завмирає, тож хай і мікросервіси такі ж роблять) зафігачить синхронну взаємодію цих самих мікросервісів?

А причем монолит к залипанию системы?

Я ж вище відписав. Якщо ви не хочете розділяти систему на сервіси, то виходить, що в вас в моноліті на одній і тій же машині буде боротьба за ресурси (CPU, RAM, ...) між:

— REST Service,
— Data Science heavy CPU calculation, нехай один DS request забирає 1 проц на 15 секунд (для наочності)
— job calculations with heavy memory usage
— ...

Попробуйте уявити, як воно буде впливати одне на оного, якщо все зліплено в моноліт, коли нова нода при скейлінгу стартує нехай хвилину

А тут є хак запускати той самий моноліт з різними параметрами, щоб прикидатися різними сервісами.

Цілком, тільки якщо воно буде прикидатися різними сервісами — то це вже service oriented architecture, а не моноліт...

Ну це зазвичай роблять з моноліту, коли вже пече, а розпилювати довго

А кт омешает это все отмасштабировать на разные машины? Ну вот просто взять один и тот же statless монолит запустить на 2-5-10-100 машинах и поставить LoadBalancer перед ним?
С чего ты решил, что ресурсов одной машины для всего этого недостаточно?
Почему ты думаешь что в большинстве проектов есть

Data Science heavy CPU calculation

И так далее. Писец, шо у людей в головах....

А кт омешает это все отмасштабировать на разные машины?

Критикам монолитов мешает — принципиальность.
Они требуют чтобы монолит был написан какими-то кретинами:
Жестко односервисный, и желательно — однопоточный!
А также обязательно богокласами на тысячи строк, и чтоб «спагетти с лазаньей» вместе сплелись.
Вот это будет настоящий монолит! — говорят они.

И давай его критиковать :)

где они такие видели... не, конечно, легаси бывает очень даже, ух...

но сколько за годы холиваров не переведил, сторонники микросервисов только о таких монолитах и рассказывают.

Так треба уважно читати повідомлення, а не шукати до чого причепитися.
Якщо в вас в проекті нема нічого крім веб сервісу, то і питань нема. Вище ж написано

То очевидно, що не в кожному проекті потрібні мікросервіси

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

На рахунок питання

С чего ты решил, что ресурсов одной машины для всего этого недостаточно?
Ну вот просто взять один и тот же statless монолит запустить на 2-5-10-100 машинах и поставить LoadBalancer перед ним?

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

Або таки можете рознести на сервіси і скейлити тільки ті сервіси, які потрібно і тоді, коли потрібно, щоб один функціонал не заважав іншому і витрати були оптимальними...

То основи мікросервісної архітектури, один з аргументів за неї.

Або таки можете рознести на сервіси і скейлити тільки ті сервіси, які потрібно

ну так і робилось, і робиться, коли треба.
Зараз це можна зустріти у вакансіях
... Kafka ...

А до неї — просто валилось все у відтюнену на швидкий запис окрему SQL базу — з якої декілька монолітив і вигрібали дані.

Бо немає сенсу скейлити все. Якщо ви не MAANG.

Зазвичай високі навантаження будуть на прийомі даних.

Ну, або якісь складні математичні обчислення.

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

Якщо у вас система обслуговує купу запитів зі всього світу — у вас пікови навантаження стають нормою.
І «автоскейлінг» тому все одно буде держати ті 10х машин, бо вони будуть працювати.

А якщо у вас пікові навантаження пару-трійку годин на добу — то навряд чи вони відрізняються на порядки. А як і так сильно відрізняються, то зазвичай пікові години — передбачувані, і можна піднімати заздалегідь — 2х.
або відтюнитись, і тримати такий запас, який дозволить пережити «перші 10 хвилин», поки піднімаються ще важкі сервіси. «10х від поточної потреби» тримати — не треба.

То основи мікросервісної архітектури, один з аргументів за неї.

Аргументи за неї є.

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

Тобто аргументи чомусь базуються на припущені що програмісти яки пишуть моноліти — якісь кончені дурні.
А як перейдуть на мікросервіси то стануть — профі :)

На рахунок

Тобто аргументи чомусь базуються на припущені що програмісти яки пишуть моноліти — якісь кончені дурні.

чогось мене тут хочуть в тому переконати, я такого не писав.

З більшістю решти — знідний. Єдине питання: що для вас моноліт і чим від відрізняється від SOA? Бо зараз вийде, що стільки кіпішу, через то, що різні люди по різному одно і то саме назвали.

Питаю ізза отого комента:

ну так і робилось, і робиться, коли треба.
Зараз це можна зустріти у вакансіях
... Kafka ...

А до неї — просто валилось все у відтюнену на швидкий запис окрему SQL базу — з якої декілька монолітив і вигрібали дані.

що для вас моноліт

Монолітів як таких давно не існує. ще до хайпу мікросервісів.
dou.ua/...​rums/topic/53120/#2951182

Критикам монолитов мешает — принципиальность.
dou.ua/...​rums/topic/53120/#2951363

Додам, у даному контексті
Монолітом можна вважати аплікацію, яка реалізує 50%+ функціоналу.
а може й 30%+ — питання дискусійне :)

Бо точно — з персистентними даними навряд чи хто працює напряму, без окремого сервіса БД.
Load balancing — теж зазвичай винесений з аплікації у інший сервіс.
Кешування — теж зазвичай буде окремим сервісом
і т.д.

SOA

Моноліти існували в часи мейнфреймів мабуть.
Принаймі такі — які критикують адепти мікросервісного підходу.
По простому — займаються типовою демагогією, пояснюючи переваги мікросервісів перед «солом’яним опудалом(strawman) — монолітом»

Монолітом можна вважати аплікацію, яка реалізує 50%+ функціоналу.
а може й 30%+ — питання дискусійне :)

ну вот. А якшо погуглити, то люди пишуть, що моноліт — то коли все реалізовано в одній апці. А якшо в вас вже щось рознесено, одні сервіси роблять одне, інші-інше, як ви вище писали, то то вже не моноліт...
en.wikipedia.org/...​ki/Monolithic_application

що моноліт — то коли все реалізовано в одній апці.

ну от я таких якщо і бачив — то тіпа Вордпреса

але нафік Вордпрес розпилювати на мікросервіси??

А якшо в вас вже щось рознесено,

А воно буде — рознесено, коли виявиться що — треба рознести.

як ви вище писали, то то вже не моноліт...

ну ок, переконуйте вордпресників що їм треба мікросервісна архитектура.

хоча, можете й мене, в мене зараз проект нескладний, роблю його на AdonisJS (це такий Laravel для Node.js)
яки переваги мені дадуть — мікросервіси?
який головняк — знаю, тому й обрав його, в перший раз з ним працюю.
Обрав тому що він надає все що треба, і мені не треба морочитись збирати бекенд.

а користь — яка буде з мікросервісів?

P.S.
Термін на який ви послались взятий з
Mishra, Mayank; Kunde, Shruti; Nambiar, Manoj (2018). «Cracking the monolith: Challenges in data transitioning to cloud native architectures»

Тобто демагоги Mishra, Mayank; Kunde, Shruti; Nambiar, Manoj описали strawman`а — і показують переваги «cloud native architectures» перед ним :)

ще з вашого лінка, друга стаття там:

* Advantages of a monolithic architecture *

Organizations can benefit from either a monolithic or microservices architecture, depending on a number of different factors. When developing using a monolithic architecture, the primary advantage is fast development speed due to the simplicity of having an application based on one code base.

The advantages of a monolithic architecture include:

Easy deployment — One executable file or directory makes deployment easier.

Development — When an application is built with one code base, it is easier to develop.

Performance — In a centralized code base and repository, one API can often perform the same function that numerous APIs perform with microservices.

Simplified testing — Since a monolithic application is a single, centralized unit, end-to-end testing can be performed faster than with a distributed application.

Easy debugging — With all code located in one place, it’s easier to follow a request and find an issue.

* Disadvantages of a monolithic architecture *

As with the case of Netflix ...
(кінець цитати)

Про це я теж роками на ДОУ кажу
Такє враження що мінімум третина доучан працює у MAANGах
ну або пише системи з навантаженням як у Netflix

“Що такє мікросервіси”
— наш основний флоу ... Але ділити оце на десятки мікросервісів... це просто буде якийсь жах
— та можна вмерти потім, автономості ж не буде
youtube.com/...​sQ9XU?si=25DMqqJhGkDkpkLk

Казалось бы, я писал про

Data Science heavy CPU calculation

а ты почему то вспомнил про

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

Мне не надо читать, я могу книги писать на эту тему.

як швидко система реагує.

Тоесть отскейлить монолит — это «минута-2», а отскейлить отдельный микросервис при нагрузке происходит волшебным образом мгновенно. Или lth;fnm gjl gbrjde. yfuepre

запас машин на 10х від потреби

для микросервиса — норма вещей?
Логика, здравый смысл беспощадно утеряны.

Тоесть отскейлить монолит — это «минута-2», а отскейлить отдельный микросервис при нагрузке происходит волшебным образом мгновенно.

Очевидно, що ні. Дуже легко підібрати правильну метрику, як скейлити конкретний сервіс, коли він займається чимсь одним. Ти можеш взяти CPU, RAM, response time, що завгодно, але щось одне, що адекватно оцінює загрузку того сервісу. Базучись на тій метриці ти цілком можеш побудувати адекватну стратегію скейлінгу.

На моєму проекті одному проекті був:
— REST Service, який тримав 1000 юзерів на машину і загрузку можна було моніторити по CPU

— DS service , де кожен окремий ріквест тривав по ±30 сек і оброблявся окремим CPU. тобто в паралель обробляв тільки кілька ріквестів, скейлінг легко налаштувався по кількісті ріквестів в черзі

— джоб сервіс, який обробляв джоби строго по розкладу, використовував багато RAM і відповідно скейлився по розкладу

Просте питання: як ти збираєшся скейлити моноліт в такому випадку, коли в тебе все в одній машині? Яку ти метрику заюзаєш, якшо різні дії юзера призведуть до поїдання різних ресурсів системи?

Як і 20 років тому — пачка серверів під кожну функцію, балансер, який по урлу роутить на свої сервера. На всіх серверах працює однаковий код, але кожен сервер обробляє щось своє (тому що запити одного типу приходять від балансера). Так ще до клаудів та кубернетесів робили. А той час можна щось виносити в окремі сервіси, бо вже зрозуміло bounded-контексти логіки.

Ти можеш взяти CPU, RAM, response time, що завгодно, але щось одне, що адекватно оцінює загрузку того сервісу.

А что мешает делать тоже самое с монолитом?

Просте питання: як ти збираєшся скейлити моноліт в такому випадку, коли в тебе все в одній машині

А уже забыл что такое «машины» — серверлесс руит, а в лямбды можно задеплоить все шо угодно — например как предлагали выше монолит с разными конфигурациями(и это не SOA). Так шо в твоем случае я бы предложил отправить сисадмтнов на курсы девопсов и полностью сменить стратегию развертывания(почти не шутка).

Те про що ви говорите є прикладом асиметричного навантаження, коли таке є, то модуль на який створюється це надмірне навантаження виносити в окремий сервіс. Коли ж асиметричного навантаження нема, то сенсу в мікросервісах мало

У микросервисов есть 2 киллинг фичи, которые проявляются только на масштабе(3+ команды, проекты в десятки-сотни+ человоколет), которые с лихвой окупают весь геморрой, который они создают.

Ніщо не заважає мати багато команд на моноліті, якщо нормально спроектовані модулі і їх зони відповідальності

В каком то отдельно взятом проекте — охотно верю. Если взять 100 средних проектов по рынку, то в ±90 из них — нет. Иначе бы микросервисы никогда бы не появились.

Микросервисы, если правильно помню, изначально появились в компаниях уровня Netflix, где масштаб инфраструктуры и объём нагрузки на систему действительно оправдывали такой подход. Вот только «90 средних проектов» по рынку и рядом не лежали с такими масштабами и показателями нагрузки, а микросервисы туда начали завозить исключительно из следования моде и увещеваниям всякого рода евангелистов, которым нужно было продавать IaaS.

Нагрузки ортогональны микросервисам. Микросервисы решают организационные проблемы и могут давать выхлоп как я уже писал выше в проектах от 3х команд в десятки человеколет.

Микросервисы решают организационные проблемы

на кого рассчитан этот аргумент?

в проектах от 3х команд — не могут организовать работу — но если выбрать микросервисы — бардак в процесах разработки рассосется сам?

сами собой только дети родятся. Но 2 типичные проблемы
— взаимодействие в обход контрактов
— короткий релизный цикл отдельно взятого микросервиса
с микросервисами во многих случаях решаются эффективней чем без них. Я не говорю, что без микросервисов эти проблемы не решаются, или же что наоборот, микросервсиы — серебрянная пуля которая сама собой решает эти проблемы. Это просто более удобный инструмент чем монолит для типичной средне-крупной разработки и усе. А сдуру можно и буй разбить, и руки порезать, цитируя старый анекдот.

Способов выкатывать быстро в прод фичи — тьма.

А что такое «типичная средне-крупная разработка» — можете уточнить?
Это был бы очень полезный набор критериев, когда — выбрав недостатки распределеных систем — мы получаем выгоды в управлении разработкой.

То есть усложнение инженерной части проекта даёт выгоды в упрощении менеджмента если:
...
?

А что такое «типичная средне-крупная разработка» — можете уточнить?

Я в это треде 2 раза писал выше.

Способов выкатывать быстро в прод фичи — тьма.

И все они такие же корявые как и микросервисы. «По науке» регрессионное тестирование должно покрывать все сценарии передеплаиваемой единицы — в случае монолита надо делать регрессию всего, вне зависимости от конфигурации фичер флагов. Даже с полной автоматизацией, что достаточно большая редкость, это может стать геморроем. В случае с микросервисами обьем регрессии — один микросервис, что значительно меньше.
Ну и не забывайте второй пункт: «обойти» контракт очень геморно, в отличии от монолита, где особо талантливые девелоперы в спешке чуть ли не с UI куски селектов передают и в контроллерах это все собирают для похода в базу напрямую. Приджойнив еще «чужие» схемы данных, «потому что так проще».

То есть усложнение инженерной части проекта даёт выгоды в упрощении менеджмента

Ну а что делать, если на проекте с полсотни девов из которых 30-50% — индусы ментально, ведь они дешевле, а значит бюджет проекта можно подрезать.

В случае с микросервисами обьем регрессии — один микросервис, что значительно меньше.

то есть вы утверждаете, что если в монолите после изменений в одном модуле надо «надо делать регрессию всего»,
а вот изменения в одном микросервисе — не требуют делать регрессию всей системы.

Ну и не забывайте второй пункт: «обойти» контракт очень геморно, в отличии от монолита

Не забываю. А просто считаю этот тезис — полной чушью.
Потому что в монолите даже на уровне языка программирования, во время стат анализа уже проверяются элементы контракта.
а у незасимых приложений, которыми являются микросервисы, такой возможности нет. Только в рантайме выяснится.

И довольно частая ситуация — когда штук 20 типов микросервисов надо поднимать у себя в докер контейнерах, чтобы — внести изменения в свой микросервис.

Ну а что делать, если на проекте с полсотни девов из которых 30-50% — индусы ментально

Мой сарказм о том что — управление проектами — довольно известная тема. И — отдельная. И когда инженеры начинают рассказывать сказки, как применив — инженерные средства — решают менеджерские задачи, то — ну только поржать.
Это примерно как верить, что бардак в управлении можно решить сменой «джиры» на «клик ап»

При этом, так как ни конечная сложность системы, ни математически неразрешимые проблемы распределенные системы — не исчезают, а с ростом числа типов микросервисов сложность системы в целом возрастает — то откуда берется — упрощение менеджмента процесса разработки и «подрезание бюджета индусами, которые дешевле»

Об этом и был мой намек — «на кого рассчитан этот аргумент»?
И кто вообще его авторы — инженеры которые страшно далеки от управления разработкой в которой «3+ команды» рассказывают сказки другим таким же инженерам.

При этом, так как хайп вокруг микросервисов уже старый, сравнение преимуществ и недостатков много кем и как рассматривалось.

И общим местом, повторю из того что цитировал
dou.ua/...​ums/topic/53120/#2951434

* Advantages of a monolithic architecture *
Easy deployment
Simplicity of deployment
Performance
Simplified testing
Easy debugging

Этот список, с небольшими вариациями гуглиться в тьме статей (проверил на всяк случай только что)

Но, вы, утверждаете что он неверен, а как раз наоборот
и deployment, тяжелее, и разработка сложнее, и тестирование сложнее, и отладка тяжелее, а вот у «микросервисов»...

ну ок, в тех же статьях
Disadvantages of microservice architecture
Extra complexity — Since a microservices architecture is a distributed system, you have to choose and set up the connections between all the modules and databases. Also, as long as such applications include self-sufficient services, all of them have to be deployed independently.
System distribution — A microservices architecture is a complex system of multiple modules and databases, so all the connections have to be handled carefully.
Cross-cutting concerns — When creating a microservices application, you will have to deal with a number of cross-cutting concerns. They include externalized configuration, logging, metrics, health checks, and others.
Difficulties with testing — A multitude of independently deployable components makes the software testing much harder if to compare a monolithic vs microservice architecture.

Можете привести источник, где как у вас — наоборот, то что
Disadvantages of microservice architecture
это Disadvantages of a monolithic architecture
а Advantages of a monolithic architecture
это Advantages of microservice architecture

ну то есть:
Advantages of Х:
Simplicity of development.
Simplicity of debugging.
Simplicity of testing.
Simplicity of deployment.
Simplicity of application evolution.
Simplicity in onboarding new team members.
Low cost in the early stages of the application.

Disadvantages of Y:
Debugging
Testing.
Deployment.
Communication.
Infrastructure overhead.
Cross-cutting concerns.

где X был бы microservice architecture
а Y monolithic architecture

(в данном коменте использовал списки из 4ех статей)

P.S.
О протухлости холивара:
The Death of Microservice Madness in 2018
dwmkerr.com/...​oservice-madness-in-2018

И резюме там называется
Final Thoughts: Don’t Confuse Microservices with Architecture

И тем более, не надо путать проблемы управления разработкой программных систем и дробление реализации системы на сервисы.

то есть вы утверждаете, что если в монолите после изменений в одном модуле надо «надо делать регрессию всего»,
а вот изменения в одном микросервисе — не требуют делать регрессию всей системы.

Это не я утверждаю, а так в книжках пишут. И да, изменение контракта микросервиса требует backward compatibility, и это проверяется в рамках микросервиса.

Не забываю. А просто считаю этот тезис — полной чушью.

мы наверное говорим про разные конракты, я привел конкретный пример. Это не про языки программирования, а про архитектуру системы, которую достаточно просто «обойти» в большинстве случаев с монолитом.

Только в рантайме выяснится.

Да, это один из больных геморроев микросервисов. Второй — backward compatibility пр иизменении контракта я уже озвучил.

Мой сарказм о том что — управление проектами — довольно известная тема. И — отдельная. И когда инженеры начинают рассказывать сказки, как применив — инженерные средства — решают менеджерские задачи, то — ну только поржать.
Это примерно как верить, что бардак в управлении можно решить сменой «джиры» на «клик ап»

Я как то в упор не понимаю сарказма. Да, инженерные решения упрощают управление проектами. Да, переход из «постановки задач по памяти» в ексельку, а из ексельки в джиру уменьшает управленческих хаос. Да, правильно настроенный сбор метрик девелоперов помогает принимать управленческие решения. Да, правильно выбранная архитектура проекта уменьшает риски фейла. В чем сарказм то?

При этом, так как ни конечная сложность системы, ни математически неразрешимые проблемы распределенные системы — не исчезают, а с ростом числа типов микросервисов сложность системы в целом возрастает — то откуда берется — упрощение менеджмента процесса разработки и «подрезание бюджета индусами, которые дешевле»

Кэп подсказывает что энтропия может только возрастать. Фишка в том, что мы можем преобразовывать сложность системы, добавляя еще сложности. Ну например: добавить рантайм метрики, логи и алерты в продукт однозначно приведет к увеличению сложности продукта. Но это увеличение сложности дает возможность понимать что происходит «внутри», как ведете себя сервис, чем он занят и надо ли срочно что-то менять.
Так и тут — добавление сложности ведет к сегрегации подукта, что в свою очередь дает более предсказуемый результат.
Ну и не надо путать «тестирование» и «отладку» — это 2 совершенно разных процесса.

Это не я утверждаю, а так в книжках пишут.

в каких?
в книжках и про SOLID пишут :)

и это проверяется в рамках микросервиса.

А почему это же не проверяется в рамках модуля?
Что книжки пишут про такую магию — микросервисы можно проверить, а вот — модуль — нет.

Это не про языки программирования, а про архитектуру системы,

И как проверяеся соответствие — архитектуре?

которую достаточно просто «обойти» в большинстве случаев с монолитом.

И что обеспечивает у микросервисов — невозможность обойти?

Да, инженерные решения упрощают управление проектами.

Закон Конвея — не работает в обратную сторону.
Так что — приведите ссылку на этот ваш тезис.

Да, переход из «постановки задач по памяти» в ексельку, а из ексельки в джиру уменьшает управленческих хаос.

Ну то есть проблемы которые вы приписываете монолитам — можно решить и без микросервисов, а просто перейти в джиру?

правильно выбранная архитектура проекта уменьшает риски фейла.

Рылли? :)

Статистика причин провалов проектов (выход за рамки бюджета, срока выполнения, и поставленного функционала) указывает что от архитектуры это слабо зависит.

Откуда вы черпаете столь интересные знания?

В чем сарказм то?

В том что ваши тезисы — наивны весьма.

Но это увеличение сложности дает возможность понимать что происходит «внутри»

Ок, давайте начнем с простого
Однопоточный код
Асинхронный код
Многопоточный код

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

как ведете себя сервис, чем он занят и надо ли срочно что-то менять.

поясните — почему в вашем тезисе нельзя заменить
«сервис» на «модуль»

в каких?

про рекомендуемую стратегию регресионного тестирования — тестировать единицу деплоя рекомендуют в материалах по сертификации ISTQB

в книжках и про SOLID пишут :)

Сумрачный украинский гений сомневается в практичности принципов SOLID?

А почему это же не проверяется в рамках модуля?

Можно. Но редеплоишь ты монолит, соотвественно сайд эффекты от изменений других команд в другие модули вероятны(и регулярно случаются), соотвественно надежней тестировать единицу деплоя — монолит.

И что обеспечивает у микросервисов — невозможность обойти?

Практическая невозможность взаимодействовать с микросервисами любым другим способом, кроме как через публичный АПИ. В случае монолитов АПИ модулей элементарно обойти.

Закон Конвея — не работает в обратную сторону.
Так что — приведите ссылку на этот ваш тезис.

Закон Конвея — это империческое правило, которое вообще к рассматриваемому предмету(улучшение менеджмента проекта путем подбора правильных технических решений и инструментов) не имет вообще никакого отношения. Абы ляпнуть.

Статистика причин провалов проектов (выход за рамки бюджета, срока выполнения, и поставленного функционала) указывает что от архитектуры это слабо зависит.

Давай ссылку на статистику.

Ну то есть проблемы которые вы приписываете монолитам — можно решить и без микросервисов, а просто перейти в джиру?

Понимаешь, можно отверткой гвозди забивать, а молотком шурупы заворачивать. Но удобней наоборот. Как переход на джиру сократит релизный цикл, я слабо представляю.

Ок, давайте начнем с простого
Однопоточный код
Асинхронный код
Многопоточный код
Итак, увеличение сложности — многопоточный код — нам дает лучшую возможность понимать что происходит внутри кода, чем однопоточный?

Ты реально решил под дурачка закосить? Произвольные усложнения НЕ ПРИВОДЯТ к улучшению мониторинга системы. Усложнения, направленные на улучшение мониторинга системы, приводят к улучшению мониторинга системы.
В твоем примере, очевидный бенефит — эффективное использование ядер процессора. Очевидный драубек — усложнение читаемости и понимания кода.

рекомендуемую стратегию регресионного тестирования — тестировать единицу деплоя рекомендуют в материалах по сертификации ISTQB

...Хотя в предоставленных материалах прямого упоминания стратегии тестирования единицы деплоя нет...
www.perplexity.ai/...​gr-sYidLX_wQUySXkHCd6MeLA

Сумрачный украинский гений сомневается в практичности принципов SOLID?

Не, об этом я ранее писал — программисты «монолитов» такие далпаепы, что ничего не слышали о SOLID

Но редеплоишь ты монолит, соотвественно сайд эффекты от изменений других команд в другие модули вероятны

Откуда берутся эти сайд эфекты при редеплое? ;)

Первая причина — наличие состояния у элемента системы. И неважно, это модуль, или сервис.
Или — функция, которая не pure.

То есть чтобы избавиться от сайд эфекта — нужно привести тестируемый элемент к pure характеристикам.
А в случае отдельного сервиса — отсутствия у него данных сохраняемых между обращениями к нему.

Эти проблемы можно увидеть в модели акторов, на которую собстенно адепты микросервисной композиции неявно, а то и явно и ссылаються.

соотвественно надежней тестировать единицу деплоя — монолит.

соответственно, у всей системы — тоже есть состояние, как суперпозиция состояний ее элементов.

кроме как через публичный АПИ. В случае монолитов АПИ модулей элементарно обойти.

Ну то есть мы имеем проблему контроля качества, и отсутствия автоматического контроля на такие обходы.

И возвращаемся к тому же вопросу:
что дешевле, быстрее — добавить методы контроля в процес разработки — или «лечить насморк гильотиной».

Закон Конвея — это эмпирические правило

которое вы постоянно используете:
Если команды огранизационно автономны, то они и создадут систему состояющую из автономных сервисов. Или модулей.

Абы ляпнуть.

Ну так не ляпайте, кто ж вас заставляет ссылаться на следствие закона Конвея:
Автономным командам, с высокими трансакционными издержками (по Коузу) — практически невозможно написать монолит, без воплощения в архитектуре системы — той же автономности, той — структуры процесса разработки.

Давай ссылку на статистику.

Начать можно с 1968 года — года появления термина Кризис програмного обеспечения

Далее с пунктов например такой выборки:
Primary reasons why IT projects fail
www.perplexity.ai/...​ct-Irc6n2xDQf2r3fB2gWo.IA
и с анализа той кучи исследований, статистики которую вы просите, на которой основаны такие выборки.

А микросервисы — это даже не об архитектуре. А о способе композиции, компоновке.
«Микросервисная архитектура» это как
«Морская свинка», «легкое масло» и «искуственный интеллект» — фразеологизм имеющий отдаленный смысл к словам, из которых он состоит.

Понимаешь, можно отверткой гвозди забивать, а молотком шурупы заворачивать

Понимаешь, на каждую народную пословицу можно найти пословицу с противоположным посылом, а на каждую аналогию — не менее убедительную контраналогию.

Произвольные усложнения НЕ ПРИВОДЯТ к улучшению мониторинга системы

Вообще-то — сложность системы не зависит от мониторинга системы.
Многопоточный код сложнее однопоточного не потому что есть или нет мониторинг в обоих случаях.

Сложность распределенных систем — фундаментальна, и не зависит от средтств мониторинга тоже.

очевидный бенефит — эффективное использование ядер процессора.

Это инженерный бенефит — или менеджреский?

Наверное ты забыл
но мы обсуждаем упрощение процесов разработки, менеджмента разработки, а не инжерерные бенефиты.

Поэтому я и предложил начать с простого:
Что проще менеджить(разрабатывать, тестировать, дебажить) — однопоточный или многопоточный код?

Чтобы потом перейти например к известной статье от Фаулера

Almost all the successful microservice stories have started with a monolith that got too big and was broken up
Almost all the cases where I’ve heard of a system that was built as a microservice system from scratch, it has ended up in serious trouble.
martinfowler.com/bliki/MonolithFirst.html

О чем это он?

и уже потом, прийти к 202* годам — какие новые аргументы, исследования появились, что Х и Y поменялись местами, в моей подборке

Advantages of Х:
Disadvantages of Y:
dou.ua/...​rums/topic/53120/#2952627

...Хотя в предоставленных материалах прямого упоминания стратегии тестирования единицы деплоя нет...

Эм, это что за сайт?

Откуда берутся эти сайд эфекты при редеплое? ;)

Мсье — теоретик и не видел монстров 20летней давности, написанных целыми поколениями индусов. Засим откланиваюсь.
Я полностью согласен с тем, что в идеальном мире с нуля и неограниченным бюджетом и сроками можно написать прекрасный монолит, полностью избавленный от всех описанных мною недостатков.

Эм, это что за сайт?

Там summarize по нескольким сайтам.
Но ок, дайте линк на «ваш сайт».

Засим откланиваюсь.

Та это так всегда, за годы холиваров я другого и не видел пока.
Адепты несут чушь про управление разработкой, не отдуплясь откуда берутся «монстры 20летней давности» и «индусы»
а когда просишь их пояснить, почему их тезисы противоречат типичным статьям:

В чем разница между монолитной архитектурой и архитектурой микросервисов?
aws.amazon.com/...​croservices-architecture

Начать работу проще с монолитным приложением, ... Архитектура микросервисов требует все тщательно продумать еще до того, как начинать разработку.
...
Развертывание монолитных приложений проще, чем развертывание микросервисов. .... Развертывание приложений на основе микросервисов намного сложнее,
...
Отладка микросервисных приложений может оказаться более сложной задачей, поскольку затронутые микросервисы могут разрабатываться разными людьми и командами.
...
Монолитные приложения используют единую кодовую базу и одну платформу, а значит разработчикам не нужно интегрировать несколько сервисов при разработке программного обеспечения. Микросервисные приложения могут потребовать значительных затрат времени и усилий на разработку, которые не оправдываются для небольших проектов.
...
устранение неполадок в микросервисах может оказаться непростой задачей для разработчиков, не имеющих опыта работы с распределенной архитектурой.
...
Для работы с микросервисами необходима подходящая инфраструктура. Чтобы правильно настроить все инструменты и рабочие процессы для микросервисов, требуется больше усилий
(конец цитаты)

то будут взяты только плюсы, которые... можно реализовать только с использованием «Мы предлагаем полнофункциональную платформу для создания высокодоступных микросервисов любого масштаба и назначения.»

Я полностью согласен с тем, что в идеальном мире с нуля и неограниченным бюджетом и сроками

И я полностью согласен, что в идеальном мире, распиливание монолита приводит к красивой и ясной микросервисной декомпозиции, а не к «распределенному монолиту».
И что компания, не справившаяся с управлением командами разработки и сложностью требуемой системы, успешно справится с таким распиливанием!

Та это так всегда, за годы холиваров я другого и не видел пока.

Мне надоели твои передергивания и приписывание мне своих фантазий. Не надо мне доказывать что микросервисы приносят геморрой — я об этом писал раз 5 только в этом топике. Не надо мне рассказывать про проблемы распределенных транзакций, гемор с реализацией саги и/или оркестратора , компенсирующие транзакции и прочий гемор — я об этом в курсе(подозреваю, ты не в курсе).
Ты можешь принимать или не принимать мои аргументы, либо аргументы, либо аргументы фантазеров про «многогранное взаимодействие с внешним миром», но факт налицо — микросервисы в тренде лет 10. Тоесть либо вокруг все дураки и не в курсе что можно без них(включая создателей крупнейших продуктов индустрии), либо ты чего то недопонимаешь.
PS
я все эти 10 лет рекомендую стартовать с монолита и только получив опыт, поигравшись с распределением обязанностей по модулям распилить монолит на микросервисы и после этого наращивать команду.

но факт налицо — микросервисы в тренде лет 10

как раз потому что они не стали трендом — потому и холивар протухший :)

в тренде — разговоры что они в тренде.

Просто — искажение информационного пространства, где кажется трендом то, о чем больше всего кричат.
Эдакий вариант «ошибки выжившего»

Тоесть либо вокруг все дураки

и потому можно рассказывать сказки о трендах, которых нет.
есть еще один такой «тренд» — все двигаются в сторону функционального программирования :)

я все эти 10 лет рекомендую стартовать с монолита

в этой теме я уже об этом тоже писал.
что этот «совет» и реализовался, и реализовывается без всяких «микросервисных трендов» и евангелистов.

как инженерно уперлись — так и выпиливаем нечто в отдельные сервисы.
никакого в этом «микросервисного тренда» нет.
Это просто — необходимость и здравый смысл — если одна железяка не может справиться с задачей, то надо — две железяки, но тогда... выпилив, придется решать проблемы распределенных систем. А проблемы эти — сложнее решать. Потому что они — фундаментально неразрешимы в общем случае.

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

Для микросервисов нужны продвинутые девопс процессы для автоматизации тестирования и деплоя, а также хорошее (очень хорошее!) понимание предметной области — иначе систему не получится разбить на микросервисы правильно (без циклических зависимостей, без необходимости обновить 10 сервисов для одной маленькой фичи и тп).

Ни того, ни другого у стартапов обычно нету, поэтому успешные стартапы обычно получаются из монолитов слепленных на скорую руку как попало. И вот когда денег уже есть на пару лет и несколько команд включая девопсов, а понимание предметной области глубокое, вот тогда начинают переходить на микросервисы.

Не забываю. А просто считаю этот тезис — полной чушью.
Потому что в монолите даже на уровне языка программирования, во время стат анализа уже проверяются элементы контракта.
а у незасимых приложений, которыми являются микросервисы, такой возможности нет. Только в рантайме выяснится.

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

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

Потому что в монолите даже на уровне языка программирования, во время стат анализа уже проверяются элементы контракта.
а у незасимых приложений, которыми являются микросервисы, такой возможности нет. Только в рантайме выяснится.

Не на всіх мовах перевіряється контракт. Лише на мовах зі статичною типізацією та повною перезбіркою під час деплою.

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

Ви не зовсім зрозуміли думку автора.

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

навіть з мікросервісною архітектурою можна перевіряти незмінність контрактів, це технічно простіше (і можна зробити автоматично)

от це да, перепитую і у вас

які таки причини — забороняють можливості перевірки коду автоматично, щоб не ліз куди не тра, але чомусь дозволяють перевірити статично взаємодію мікросервісів?

але лише у мікросервісній архітектурі (з окремими стореджами)

аха, от ми приходимо до першої проблеми
умова спрощення — можливість кожному мікросервісу мати свій окремий сторедж.

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

а чому ж у «моноліті» не можна зробити кожному модулю окремий сторедж? ;)

— взаимодействие в обход контрактов

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

Это значит, не что сервисы не нужны, а что подобная команда не сможет идентифицировать и решить более сложные технические проблемы, если не справляется с более простой. Поэтому конкретно это я бы не рассматривал.
Как в том анекдоте, что надо не кровати двигать, а возможно менять исполнителей. В нашем случае, можно поднимать их квалификацию.

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

Есть типовые решения этой проблемы. Да, геморно, задрочно, но оно работает.

Как в том анекдоте, что надо не кровати двигать, а возможно менять исполнителей.

В идеально мире — да. В реальном есть бюджет проекта, в рамках которого можно только кровати двигать.

Есть типовые решения этой проблемы.

Какой из проблем? Решить проблему доступа не через API проще: через анализатор кода, у которого прописаны границы компонентов, из каких модулей какие можно вызывать.

Какой из проблем

Я имел в виду консистентность данных — eventual consistency + saga.

Я имел в виду консистентность данных — eventual consistency + saga.

то есть вы утверждаете что в проекте где «джунов» нельзя заменить на «синьоров» потому что ограничен бюджет, переход от классических способов обеспечения консистентности к «eventual consistency + saga» — решит проблему, сделает проект проще, управляемей в разработке, надежней в работе?

Я имел в виду консистентность данных — eventual consistency + saga.
В реальном есть бюджет проекта, в рамках которого можно только кровати двигать.

ИМХО, настроить один раз code checker быстрее (на уровне CI/CD чтобы не давать мержить подобные вещи), проще и дешевле чем имплементить saga или eventual consistency (скорее всего и не один раз / для нескольких сценариев). И данный code checker куда более типовое решение (вообще не зависит от домена) чем сага или eventual consistency которые делаются под конкретные домены и воркфлоу.

И как сказал Sergey Lysak, для последнего нужны куда более квалифицированные (и значит более дорогие) гребцы, чем для реализации сценария в рамках одного сервиса и базы.

ИМХО, настроить один раз code checker быстрее (на уровне CI/CD чтобы не давать мержить подобные вещи), проще и дешевле чем имплементить saga или eventual consistency (скорее всего и не один раз / для нескольких сценариев).

Коде чекер на запрет ручных сиквел запросов?
Коде чекер на запрет переноса бизнес логики в хранимки?
Коде чекер на запрет джойнов разных схем?
И еще валом других весьма нетривиальных «коде чекеров» :)

И как сказал Sergey Lysak, для последнего нужны куда более квалифицированные (и значит более дорогие) гребцы

Да, обычно это делает несколько квалифицированных гребцов(которых могут убрать с проекта как только настроят на следующий), а толпы индусов педалят бизнес логику не имея шанса насрать по крупному. Стандартная схема.

И еще валом других весьма нетривиальных «коде чекеров» :)

Угу, и обычная история — открываем доступ к данным другого микросервиса, потому что они оказывается — нужны для работы другим микросервисам.
или — раздуваем функционал этого микросервиса.

и получаем все эти пункты точно такие же по сути.

а толпы индусов педалят бизнес логику

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

Только сервисы это еще — и плюс проблемы распределенных систем.

делает несколько квалифицированных гребцов

но их квалификации не хватило на «монолит». который — проще :)

Коде чекер на запрет ручных сиквел запросов?

Возможно хоть в монолите, хоть в отдельном сервисе и проверять такие вещи на оправданность с точки зрения поддержки, безопасности (тот же SQL injection) и производительности все равно надо.
Легко проверять code checker кстати. Основная идея, если можно настроить автоматическую проверку, то это надо сделать. Иначе придется проверять на code review.

Коде чекер на запрет джойнов разных схем?

По моему, это больше вопрос о требованиях и ограничениях.
Если это монолит и схем много, то это техническое ограничение, прийдется их джойнить.
Если так классно получилось, что сумели отделить данные и код, чтобы он имел доступ только к этой схеме, это прекрасно.
А дальше промежуточные варианты, где придется уже думать.

Да, обычно это делает несколько квалифицированных гребцов(которых могут убрать с проекта как только настроят на следующий), а толпы индусов педалят бизнес логику не имея шанса насрать по крупному. Стандартная схема.

Пока/если не дойдет дело до более сложных кейсов.

Тут проблема в другом, у вас всегда будет вопрос даже в пределах отдельного сервиса: разбивать ли код на два меньших сервиса или держать его в одном.

Потому что это часто компромисс между бОльшим сервисом, который может работать быстрее и проще за счет отсутствия удаленных вызовов и распределенных транзакций, и меньшим более быстрым в деплойменте и поддержке.
Возможно вам не нужно изолировать ошибки в одном сервисе, иметь частый деплой и хватает одной машины для его работы. Но надо чтобы он работал быстро. Тогда бОльший сервис подходит лучше.

Я нигде не говорил, что озвученные(во всем терде выше) мной вопросы нельзя порешать без микросервисов, настройкой чекеров, и так далее по списку.
Можно.
Но с микросервисами — проще на масштабе, собственно говоря поэтому они до сих пор живы.

Тут проблема в другом, у вас всегда будет вопрос даже в пределах отдельного сервиса: разбивать ли код на два меньших сервиса или держать его в одном.

Есть наработанные методики решения этой проблемы.

Но с микросервисами — проще на масштабе, собственно говоря поэтому они до сих пор живы.

Уточним, жива сервисная архитектура. Потому что она позволяет решать часть технических проблем, описанных выше. Как то недостаток одной машины для сервиса или что проблемы в одном функционале делают нерабочим другой функционал (как ошибки, так и проблемы производительности).

А вот вопрос микро (или размера сервиса) уже дискуссионный и предмет компромисса. Вроде как изолируем домен в одном сервисе, а он разрастается до нефиговых размеров со временем. Делить ли его с точки зрения количества кода? Можно попробовать разделить домен на два, но это тоже не всегда получится и могут возникнуть нетривиальные технические проблемы и опять нужны специалисты, а хотели решить проблему их отсутствия. Хотя и так понятно, что это не решится.

Делить ли его с точки зрения количества кода? Можно попробовать разделить домен на два, но это тоже не всегда получится и могут возникнуть нетривиальные технические проблемы и опять нужны специалисты, а хотели решить проблему их отсутствия.

Такие проблемы возникают далеко не каждый день и соотвесвтенно держать 2-10 спецов на сотню индусов надо в любом случае — вот они и порешают. Ну или пригласить со стороны разово.

Это ж просто из статьи
«Вредные советы по организации разработки»!

Это ж просто из статьи
«Вредные советы по организации разработки»!

Не, это ж типовые решения в рамках каких-то ограничений (компании?).
Или может движение на лыжах по накатанной колее в асфальте.
А может у них роликовые лыжи и гладкая велодорожка, и все работает. Пока не закончится ровный асфальт.

Если серьезно, из сообщений выше складывается впечатление, что это действительно какое-то шаблонное типовое решение для энтерпрайза. Просто реальные причины решений архитектуры (частично) неизвестны конечным программистам на сервисах (это уже вопрос разделения труда и правил работы в компании).

Топ и не очень менеджмент да, всегда мечтает удешевить расходы на свое it. Которое — не приносит прибыль, если это «горнодобывающая тнк».
Они бы и остальных нанятых работников уволили б, если б смогли обойтись.

Но 2-10 спецов и сотни тупней — это классический бас фактор. И — отсутствие накопления и шаринга экспертизы команд.

Работающий код — не экспертиза.

Сейчас надежды менеджеров на 2-10 спецов и сотни ИИ агентов генерирующих и тестирующих код. Может быть, это близкое будущее, да.

Но «сотни индусов» — уже нет.
и «микросервисы» тоже не сильно помогают.
Обойти объективные трудности создания сложных продуктов, это как вера в замену министерств парочкой скриптов :)

Есть подозрение, что код сотни индусов просто не взлетит на одной машине, или монолит просто будет всегда нерабочий потому что часть модулей постоянно будет валить весь монолит из-за багов или нагрузки на единственную базу. Так в этом случае это и есть реальные причины, а разграничение доступа это уже плюшка.

Вот для примера возьмем Jetbrains IDEs или Eclipse. Это модульный монолит, более того, они состоят из плагинов. Плагины имеют четко прописанные зависимости от public API самой платформы и других плагинов, все зависимости каждого плагина описаны в его дескрипторе и валидируются. И в рантайме есть доступ только к тому извне, что явно описано.
Этот подход работает потому что IDE по любому запускается на одном компе и плагины достаточно независимы в плане выведения из строя других плагинов. Это все грамотно задизайнено лет так 20-25 назад и с небольшими изменениями работает до сих пор, тех плагинов тысячи (в одном конкретном инстансе может 100-200).

Есть подозрение, что код сотни индусов просто не взлетит на одной машине, или монолит просто будет всегда нерабочий потому что часть модулей постоянно будет валить весь монолит из-за багов или нагрузки на единственную базу. Так в этом случае это и есть реальные причины, а разграничение доступа это уже плюшка.

И вот тут мы подходим ко второму бенефиту микросервисов: быстрому релизному циклу. Потому что в типичном говнокоде сотни индусов код фриз на 2-3 месяца с непрерывным тестированием — норма жизни. И этот код фриз может постоянно срываться. Тоесть один стабильный релиз в год — это очень даже неплохо.

Если микросервисы действительно микро, то реализация фичи системы потребует изменений в нескольких сервисах плюс в оркестрации /хореографии.

Причём синхронно выкатить уже мало возможностей, в распределенной системе порядок рестарта гарантировать так же «просто» как и сообщений, поэтому нужно чтобы каждый сервис поддерживал и старый функционал и новый, а потом — удалять старый.

Скорость выхода фичей в прод зависит от организации процесса разработки куда больше, чем от компоновки кода.

Единственный бенефит в случае микро — фиксинг багов после выхода в прод — обновить только один вид микро сервисов проще, чем макро.

Но, как могут баги пролезть в прод, если у нас микро... там и ломаться нечему, и единица деплоя протестирована...

и единица деплоя протестирована...

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

Можно ещё взять веббраузер как пример.
Очень сложные софтины.
Я так уверен что сложность реализации веб спек — выше чем функционал условного Нетфликса. Но у Нетфликса нет никакой возможности обойтись одной железякой.

Однако ведущие компании выкатывают стабильные версии версии веббраузеров не раз в год.

При этом, тьмы плагинов к ним от сторонних разработчиков — не ломаются. Хотя и бывает...
как и бывает падают системы из микросервисов, когда конфиг чуть не тот.

веббраузер как пример

і як тренд того — електронами з вебаппами підміняють нормальний і компактний софт. Ще такого типу розростання майже без лімітів напевно — systemd — хоч з ним це трохи більш виправдано.

«нормальний і компактний софт» не є перевагами для користувача.
мені наприклад пофік на чому написаний візуал код. І діскорд.
Як і, раніше на чому написані нетбінс, екліпс та Idea.

Користувачу важливі не «нормальність» та компактність, а — функціонал і його зручність.

А тому хто бажає задовільнити ці потреби — швидкість розробки важливіша, за ті стєнанія пурістів.

Хто хоче — і раніше міг писати це все на plain С, C++, а зараз на Rust

нормальний і компактний софт — не є перевагами для користувача

Чому нема, є. Бачив вже достатньо як запитували куди пам’ять подівалась після запуску декількох електрон апп, і чи якщо докупити Nгіг чи тоді все буде норм.
А от для браузеровиробників сенс в тому просуванні бачу — є готовий продукт — і тому засунути туди все і вся — то гуд з тієї точки зору.

Хто хоче — і, раніше міг писати це все на plain С

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

Бачив вже достатньо

А я бачу що захопило ринок.

Єдине що користувачі зазвичай роблять те що по дефолту в системах пропонують

Ага, цю байку я чую вже не одне десятиліття.

І чомусь від тих хто бачив вже достатньо, про стогін користувачів за Nгіг :)

А от для браузеровиробників сенс в тому просуванні бачу

А я не бачу. А просто писав GUI, і на C, і на BP, і на Java.
І в мене ніякого подиву не викликає, чому WebUI зараз — рулить, а не Qt.
І чому можна не звертати увагі на велику обізнаність у пурістів про «нормальний» та «компактний» софт.

А от для браузеровиробників сенс в тому просуванні бачу

А я не бачу ... і ніякого подиву не викликає

можна не звертати уваги ... про нормальний та компактний софт

Окей, хтось звертає, хтось ні, — то теж подиву не викликає. Це теж точка зору.

Окей, хтось звертає, хтось ні,

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

пурізм, це нормальне явище у любій професійній спільноті.
наприклад серед автомеханіків постійно чути про те що сучасні двигуни робляться аби «5-7» років від’їздили, а от колись...

це все наслідок двох архетипів:
про «золоті минулі часи» і «ми звернули не туди»
та інфантильна жада ідеального світу, раю.

а ринок, той де гроші — «приймає» зовсім інші рішення.
еволюції — теж байдуже на забажанкі суб’єктів

у нас в айті — в топ-3 критеріїв для технологій розробки:
швидкість розробки.

і самі пурісти зазвичай — коли пишуть не на форумах, а в IDE — роблять як вимагає ринок, а не якісь там їх ідеали.

переважна більшість навіть програмістів

а вебпрограмістам то і зовсім нема тут куди діватися з «цеховим ідеалізмом»

у нас в айті — в топ-3 критеріїв розробки: швидкість

не маю нічого проти того, теж має сенс (правда не завжди і не всім)

вебпрограмістам

а це хто такі?
я вже було пару разів допитувався, що то за хлопи, «вебпрограмісти»:
Most Popular Programming Languages — 1965/2024

правда не завжди і не всім

звісно пара відсотків буде мати якісь особливі потреби.
маргінальність — присутня завжди.

вебпрограмістам

а це хто такі?

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

А популярними рейтингами можно все поясняти при потребі. Не маю нічого проти того як і проти маргіналів)

Популярність — маргінальність — то протилежності.
Не може щось бути одночасно і популярним, і маргінальним.

А чому маргінали вважають себе, свої потреби, погляди, світогляд — популярними — я пояснив вище.
Можливі й інші пояснення, так.

Але нікуди не дінеться оте когнітивне викривлення маргінальноі частини тусовкі.

То окей, тобто пардон.. що відірвав трохи від холібізнесу вздовж і поперек мікросервісів)

проще на масштабе, собственно говоря поэтому они до сих пор живы.

они живы там где живы не потому что проще — а потому что по другому — никак.

И на масштабе — чем сложнее поведение системы — тем сложнее его реализовывать в распределенной системе.

Но если по другому — просто никак, то и обсуждать нечего.

Есть наработанные методики решения этой проблемы.

А у других подходов — нет наработанных методик решения этой проблемы?

Тут проблема в другом, у вас всегда будет вопрос даже в пределах отдельного сервиса: разбивать ли код на два меньших сервиса или держать его в одном.

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

Писав не про дублікацію, а чи розкидати модулі по кількох сервісах чи все ще тримати в одному сервісі.

Single responsibility. Ось куди треба рухатися невпинно. Так, може бути так, що в системі водночас існує дві різні версії чогось, дуже схожі, але це мусить бути дві різні версії одного й того самого модуля/сервісу, одна з яких мусить вмерти в которкостроковій перспективі.

Single responsibility. Ось куди треба рухатися невпинно.

Це про структуру кода. Single responsibility не вимагає окремих сервісів чи розподіленої архітектури та може бути реалізовано також у рамках модульного моноліта. Моноліт не означає відсутність модулів, це протилежність розподіленній архітектурі.
Неструктурований по модулях з визначеними boundaries та responsibilities код це не моноліт, це big ball of mud (велика купа лайна).

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

Також монолітність та модульність то ортогональні штуки, тому маємо у наявності усі комбінації:
— монолітна купа лайна
— розподілена купа лайна
— модульний моноліт
— розподілені сервіси які містять модулі

Це про структуру кода.

Ні, це не про структуру коду, це про підхід, який можна приміняти крізь, не тільки для коду.

Приклад Single responsibility не зі світу IT — бухгалтер. Він не займається продажами, не прибирає в офісі, займається тільки одним. Це функція, не людина навіть. Ви можете найняти купу бухгалтерів, але всі вони будуть виконувати одну функцію — ведення бухгалтерії.

Тому, якщо ви будуєте систему, де всі займаються всім, то не скаржіться потім, що воно не летить та його важко підтримувати. Не просто так згадували про славнозвісний *nix way, якому більше років ніж 99.9 відсоткам присутніх тут. Це шикарний приклад того, як прості контракти та утилітарний підхід може жити десятками років без змін.

про славнозвісний *nix way, якому більше років ніж 99.9 відсоткам присутніх тут

Бо є вимоги та умови: раниться на одній машині, обмежена кількість команд у ланцюгу.

У багатьох випадках може й жити.

Але в залежності від умов, наприклад є такі випадки коли треба вкластися у max response time, а ви рознесли 2 модуля у різні сервіси (процеси на різних машинах), при тому що між ними багато викликів та один НЕ працює без іншого у якомусь форкфлоу. І тоді два модулі залишаються у одному сервісі, щоб замінити віддалені виклики на локальні та вкластися у час відгуку (responsiveness).

Також якийсь не часто змінний код може додаватися як бібліотека до сервісу замість того щоб робити окремий сервіс та робити віддалені виклики. Логгінг чи ліба для обробки даних.

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

nix way, якому більше років ніж

є вимоги та умови

Десь вище вже згадувався бізнес акцент на швидкість розробки, додамо ще значно ширшу комерціалізацію. Тому *nix way (принаймні в linux) з його модульністю і відповідними маленькими прогами які роблять небагато (як одиниця) але добре — теж змінюється. Зі «швидкістю розробки» в дистрибутиви заходять нп різні вебаппс з їх гігантоманією, в напрямку зручнішої комерціалізації і підтримки в подальшому — нп systemd з його поглинанням інших сервісів та їх інтеграцією, в напрямку дистрибуції — нп immutable os версії та snap/flatpak замість стд пакетизації софта. Тому і тут підходи та рішення також змінюються, або точніше — змінюються акценти в розробці.

Бо є вимоги та умови: раниться на одній машині, обмежена кількість команд у ланцюгу.

Де ви таке знайшли?

Тому що Amazon чудово вміє в маркетинг. При усіх інших Microsoft та Google наздоганяють, так само як і OpenShift від RedHat/IBM, але не випереджають.
Уся теорія була продумана ще коли закладали ідею Multics в 70-ті роки минулого сторіччя , звісно при дуже великій різниці в реалізації від JEE до сучасних AWS із EKS, Lambda іноді AES, з сервісами типу : S3 , RDS, DynamoDB, Elasticcashe і т.д.
Та на відміну від систем де в основі були надпотужні на той час мейнфреми та серверні рішення типу : Sun чи IBM System Z, тепер це стойки та датацентри із блейд серверів PC подібних комп’ютерів. Тому JEE здувся, а на його місце прийшла архітектура Amazon V6 яка має нижчу вартість володіння, простіше розширюється і дуже добре горизонтально масштабується. Тоді як попередні методології усе таки йшли у вертикальне масштабування. В нульові під час буму доткомів в початковій період була ідея — одна машина, багато сайтів на ній. Сьогодні ідея дещо інша, інколи і взагалі багато машин — але один сайт на них.
В чому різниця — тоді це було щось по типу телемагазину чи продажах по каталогу, сьогодні це вважайте інтернет мегамоли з тисячами покупців. Те саме супутні сервіси та інше, скажімо саме Google зробив те — чим хотів стати AT&T в майбутньому.

бізнесу пофігу на стек технологій.

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

якщо ІТ частина бізнесу рахує, що мікросервіси можуть задовільнити — будуть вони. Якщо краще робити моноліт чи дітр-моноліт чи ще щось — буде воно.

єдиний випадок коли бізнес хайпує по технологіям — це коли їх використання певних технологій може якось вплинути на ціну чи позиціонуванні бізнесу. Як для прикладу АІ коли всі контори одразу почали щось там робити з АІ чи Chat GPT бо це був хайп.

далі, повторююсь, бізнесу глибоко по.

Моноліт є чудовим варіантом для реалізації якоїсь окремої функції — розрахунок ЗП, електронний документообіг, сайт-візитка тощо.

А бізнес — це складний, багатогранний, динамічний процес взаємодії із зовнішнім світом. І моноліт не здатен реалізувати цей процес просто в силу своєї природи.
Тут реально потрібні мікросервіси, а можливо і не зовсім «мікро». Завдання розробників зводиться до максимізації автономності кожного мікросервісу і мінімізації обміну повідомленнями між ними. Це моя власна думка, пруфів не буде.

Зоопарк технологій — це не смертельно, кожен мікросервіс використовує технології, які необхідні йому для корректного функціонування. В моноліті довелося б використовувати ті самі технології.

Зопарк мов програмування — теж не смертельно. Якщо програміст не здатен зрозуміти і виправити код на іншій мові програмування — то не програміст, а ледар, якому невідомо про існування Stack Overflow.

Вот как то бизнес жил до хайпа микросервисов с монолитом. И некоторые бизнесы жили очень даже неплохо, а некоторые до сих пор живут на монолитах 20 летней давности и прекрасно себя чувствуют. Наверное эти бизнесы неправильно взаимоджействуют с многогранным внешним миром.

большая часть фейсбука — монолит
большая часть гитхаба — монолит
шопифай — модульный монолит
реддит — монолит
инстаграм — монолит
амазон прайм перешел с микросервисов на монолит снизив затраты на инфраструктуру на 90%

Це не правда. У фейсбука, як і в більшості технологічних гігантів, мікросервіси, які лежать в одному спільному репозиторії, то так простіше менеджети код. Все в одному репозиторії != Моноліт.

часть
они начали с монолита, потом стали его разбивать, но большая часть так и осталась в монолите

The first stage of Facebook was a monolithic application, though it has now evolved into a microservices architecture with multiple languages.

As of my last knowledge update in August 2023, Facebook utilizes a combination of both architectures, leveraging microservices where it makes sense while still maintaining some monolithic components. This hybrid approach helps them manage the complexity of their vast platform while still supporting rapid development and deployment cycles.
Facebook chose to scale its PHP monolith rather than breaking it up into distributed microservices. Scaling PHP allowed Facebook to continue moving fast without going through a painful refactoring that would have slowed down the entire company.

The first effort to scale PHP involved transpiling the entire PHP application into C++. This C++ version of Facebook ran faster and with a lower memory footprint. But C++ required ahead-of-time compilation: the PHP codebase had to be converted to C++ in one synchronous step.

The Hip Hop Virtual Machine (HHVM) is a just-in-time compiler that serves as an execution engine for PHP as well as Hack, a language that Facebook created as a dialect of PHP.

да они добавляют сервисы по мере необходимости, да они выносят куски по мере необходимости.
но при этом часть логики так и сидит в монолите.и шок, у них большая часть данных хранится в двух табличках

попробуй хотя бы представить как ты бы разбивал огромный монолит, если не довелось столкнуться с галерными издевательствами. выноситься вещи будут частями и по мере необходимости, а не “завтра все на микросервисах потому что бизнес захотел”

повністю погоджуюсь. Коли можна винести в мікросервіс, то краще винести. А тупо фрагментувати моноліт повна дурня. Я не проти монолітів, я за мікросервіси, в межах розумного.

І моноліт не здатен реалізувати цей процес просто в силу своєї природи.

Якщо нам треба написати власних 100 000 рядків коду, то їх треба буде написати
і у випадку 1 аплікації — 1 моноліт
і у випадку 3 аплікацій — 3 жирнячих сервіса
і у випадку 100 аплікацій — мікро

Завдання розробників зводиться до максимізації автономності кожного мікросервісу і мінімізації обміну повідомленнями між ними

Якщо бізнес процес вимагає якихось даних для своєї роботи — то розробники нічого з цим не вдіють.
Якщо для формування документа треба дані з системи яка обраховує ЗП — то вони — потрібні.
Не вийде зробити це формування — автономним. Бо це — бізнес правило.

Це моя власна думка, пруфів не буде.

Автономні мікросервіси класно працюють там, де бізнес логіка така.

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

Бо, неможливо ніяким способом уникнути фундаментальних проблем:
з
Sequential Consistency
Serializability

«Consistency Models» jepsen.io/consistency/models

досить часто для підтримки послідовності вистачає RabbitMQ

то скоріш усього не про той рівень, нп вже на рівні tcp є гарантія delivery і order пакетів, потім наступним рівнем може бути нп mqtt з qos2 для месседж, потім далі ще можуть бути інші рівні як по логіці так і по архітектурі

та да,
у розподілених системах є тілько дві головні проблеми:
2. суворо одноразова доставка
1. гарантований порядок повідомлень
2. суворо одноразова доставка

вистачає RabbitMQ

для вирішення.

В распеределенных системах гарантировать exactly one delivery невозможно в принципе, обосновано математически.

обосновано математически.

ну надо же... и микросервисы тоже не могут?

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

Типові приклади це Jebrains IDEs (Idea, PyCharm) та Eclipse. Там все модульне, мінімум залежностей які явно декларовані, ізоляція плагінів, та наче навіть був релоад окремих плагінів.

наймати будь-яких доступних розробників

от поки «будь-яких» наймають доти й будут лайно з «мікросервісами які не мікросервіси аж ні разу » розгрібати.

Я думаю що багато людей не розуміють сутність мікросервісів. Просто використовують це термін як якусь загальну ідею/концепцію. Вони наврядчи зможуть пояснити різницю між мікросервісною архитектурою та сервісною архітектурою, чи розподілинем монолітом. Вони напрядчи знають (на рівні розуміння, а не «зазубрення») всі Pros/Cons цих і інших архітектурних підходів.
Не знають типові use cases які більш притамані чи підходять для певних архитектур, і відповідно — приймають архитектурні рішення менш обєктивно і доцільно. Не розуміють що сервіс відео контенту і ERP системи мають зовсім різні use cases/ user flows і різні рівні звязаності і ізольованості сутностей/компонентів систем.
В результаті вибирають мікросервіси як панацею чи «срібну кулю» від якихось існуючих проблем, чи просто по принципу «модно — молодіжно».
Це десь те саме що впроваджувати scrum на конвеерному виробництві.
Якщо «бізнес» вибирає мікросервіси, це щось не те в цьому бізнесі в управлінні. Це звучить так само як «ІТ департамент» вибирає франчайзінгову модель для бізнесу, тому ще забезпечує швидкий рост і експаансію.
В тексті вище — дуже багато логічних протирічь. На кшталат «-» для моноліту треба знати багато контексту і т.і., а в «+» мікросервісів записують тестування нових гіпотез. Це тей самий підхід з порівнянням легковика Porsche vs вантажний КРАЗ — так Porsche швидший і еконмніший, керованіший і т.д. Але якщо основний use-case буде перевезення копалин?

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

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

Аналогія цікавіша з раковиною і ганчіркою, в яку переноситься складність використання.

Бизнес выбирает «вовремя, в бюджет и чтобы потом не переделывать». А микросервисы там или неонка внутри — бизнесу абсолютно пофик.

[FE] Tech Lead

ну-ну, фронтендщики говорят бэкендщикам, какую архитектуру выбирать, далеко пойдете... Все равно шо б эйчарка пришла на митинг и сказала — «Все, завтра переходим полностью на микросервисы»

Мікросервіси ж дозволяють швидко створити окремий модуль, що не впливає на основну систему

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

залишається назавжди в кодовій базі, створюючи технічний борг.

=)

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

Якщо мова про ізоляцію, то може все ж таки Sidecar для логування?

Маємо мікросервіси A i B, з окремими АПІ та базами данних, бо ізоляція. А тепер треба зробити пошук в мікросервіса разом по моделям A i B.

Окремий серч мікросервіс, котрий буде кверяти окремо кожний сервіс?
Окремий серч мікросервіс, котрий буде зберігати зміни з кожного сервіса в свою бд?
Міксросервіс самостійно слухає та реплікує данні з інших мікросервісів?
Робити кросс бд запроси?

Або викорстовувати існуюче АПІ в основній системі. Наче тут більше часу пройде на сетап, ніж на перевірку гіпотези.

Нє, мікросервіс має бути самодостатнім, як от система авторизації і аутентифікації, з усіма належними таблицями.

Ну тоді що

Міксросервіс самостійно слухає та реплікує данні з інших мікросервісів?

Скільки часу піде на імплементацію? Скільки часу можна зекномити викорситовуючи modular monolith?

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

подскажите, пожалуйста, как на не галере самодостаточный сервис авторизации без издевательств выбрал бы мфа стратегию в зависимости от того, верифицировал юзер документы или нет, или от его риск профиля (который конечно же находится в отдельном самодостаточном микросервисе)?

тут вже думати треба :)

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

— Ory Kratos (Ідентифікація користувача)
Виконує логін користувача (email + пароль, OAuth тощо).
Перевіряє, чи потрібно 2FA (наприклад, якщо в налаштуваннях вказано).

— Ory Oathkeeper (Проксі, що перевіряє 2FA умови)
Отримує запит на логін.
Виконує запит у сервер профілів, щоб дізнатися, чи є номер телефону.
Якщо номер є → додає вимогу 2FA.
Якщо номера немає → пропускає без 2FA.

— Ory Keto (Авторизація, перевірка прав доступу)
Визначає, чи має користувач право на доступ (наприклад, якщо не пройдено 2FA, то доступ обмежений).

— Ory Hydra (OAuth2/OpenID Connect)
Якщо логін відбувається через OAuth (Google, Facebook), керує токенами доступу.

виглядає вже не як один мікросервіс, якщо він має знати якусь інфу з іншого домену.

и как быть теперь? вот был у нас негалерный самодостаточный микросервис без издевательств.
а тут у бизнеса появляются новые требования, по которым нужно, чтобы микросервисы оказывается взаимодействовали, а не стояли себе изолированными

остается только надеяться, что бизнес пойдет нам навстречу и разрешит не издеваться над микросервисами

так а хіба є якась заборона на взаємодію мікросервісів між собою?
Як на мене то стан верифікації документів можна взагалі в основний профіль юзера винести і зробити ці дані доступними серверу авторизації. Все ж верифікація доків це нечастий процес, тому лочніше було би іноді оновлювати профіль, ніж дрочити мікросервіс запитами «а шо там з доками у юзера 444?».

ну собственно я к чему и веду (как и автор ветки) — в галерной реальности оказывается, что сервисы — это не какие-то независимые блоки, которые мы сегодня в систему воткнули, а завтра, когда наэкспериментировались, удалили из основной системы никак ее не затрагивая. при чем затронуты могут быть даже такие достаточно легко изолируемые сервисы, как авторизация

вот так поворот

На хорошей галере тебе бы обьяснили что такое микросервисы и зачем они нужны. Микросервис логирования. А если он ляжет, то логи ой?

и чим поганi старi добрi логи в stdout, якi далi вже кидаюьться куди треба?

Бізнес обирає мікросервіси тому що ця ідея психологічно більше приваблива для більшості. Усе інше це просто обґрунтування вже прийнятого суб’єктивного рішення.

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

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

Я це і мав на увазі, узагальнено.

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

а можно пример как это работает? какие микросервисы для каких экспериментов добавляли/удаляли?

Чому бізнес обирає мікросервіси

Бізнес не обирає архітектуру ІТ рішення. Обирають мікросервіси технічні спеціалісти (або люди, що на їх посадах). Причин цього вибору є багато, резюме дрівен девелопмент — одна з них.

Мікросервіси ж дозволяють швидко створити окремий модуль, що не впливає на основну систему, протестувати гіпотезу,

1) Це ви зараз написали, що додати новий елемент розгортання швидше, аніж його не додавати.
2) Що заважає додати той експериментальний модуль поряд з монолітом?
3) Що робити, коли тестування гіпотези потребує зміни декількох контекстів? Ви впевнені, що внести зміни в кілька сервісів буде швидше ніж в 1 моноліт.

Сучасний ринок праці у сфері ІТ дуже конкурентний, і знайти потрібного фахівця буває складно. Монолітні проєкти вимагають глибокого розуміння великої кодової бази, знання специфічного стеку та готовності працювати з легасі-кодом. А ось мікросервісна архітектура дозволяє залучати будь-яких розробників, незалежно від їхньої експертизи у конкретному стеку.

Краще вже напишіть, що ви згенерували цю статтю через ЛЛМ. Кожне речення в цій цитаті — дурня, що не витримує найпростішої критики. Досвід в ІТ у вас схоже є, але ця «стаття» демонструє вашу нездатність робити з нього хоч якісь висновки.

UPD.
У вас спеціалізація — фронтенд наче. Для чого ви вирішили написати статтю по темі, що далека від вашої області?

В кінці, я написав, а що думаєте ви? Цікаво почути інші думки. Дякую що поділились своїми ;)

Нажаль, ваша відповідь тільки підтверджує, що стаття написана (згенерована ШІ) суто заради SMM. Так от, в IT таке не працює, як і для будь-якої іншої цільової аудиторії, яка складається з розумних людей з експертним досвідом.

Монолітні проєкти вимагають глибокого розуміння великої кодової бази

Це ви ще не бачили мікросервісного лайнокоду, розмазаного по 500 репозиторіям, з дублюванням бд і коду.

У випадку моноліту будь-який експеримент вимагає значних зусиль:
спочатку потрібно продумати його впровадження,

— а для мікросервісів продумувати не потрібно?

потім вносити зміни в основний код, тестувати їх, і врешті-решт, якщо експеримент провалився, позбуватися залишків цього коду.
— Мікросервіси просто готовими качаються з якогось modny-microservis.com і тому немає потреби писати код, адаптувати, тестувати?

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

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

Дурниці. Бізнесу все одно . Зазвичай бізнесу це нав’язують айтішн менедери.
Втім мода на мікросервіси вже пройшла бо на папері воно кльово в практиці один гемор

Підписатись на коментарі