Якщо я розробляю систему самостійно, чи повинен я використовувати мікросервіси?


30

Я починаю новий проект на роботі, і, ймовірно, буду майже єдиним розробником проекту, хоча одному або двом іншим розробникам потрібно буде інтегрувати існуючі програми або прості сценарії в основний проект. Проект повинен обробляти об'ємне та оброблюване об'ємні та потокові дані, а також виконання кодів на основі подій та виконання запитів. Деякі частини основи будуть сильно пов'язані з процесором, а деякі частини можуть бути сильно пов'язаними введення-виводу; більшість даних повинні працювати на одній машині, але ми можемо створити кластер і підключити VM для збільшення доступної обчислювальної потужності. Напевно, буде одне або кілька невеликих веб-додатків, які залежать від послуг, що надаються в цій основної рамки. Основна мова буде Python для майже всього.

Моє запитання - чи варто використовувати мікросервісний підхід до подібних зусиль або дотримуватися монолітного додатку, враховуючи, що більшу частину розробки я буду робити сам. Думаю, що мікросервіси (за допомогою Nameko) забезпечують природний поділ між елементами фреймворку, які мають різні моделі виконання (трубопроводи даних, запущені події, на вимогу, веб-додатки тощо) та чіткий спосіб розподілу навантаження та спілкування через декілька процесів. Я занепокоєний тим, що я, мабуть, закінчуватимуться кластером Kubernetes для управління (я знайомий з Docker, але все ще досить новим у Kubernetes), безліч служб (rabbitmq, redis тощо), необхідних просто для полегшення роботи системи, і, можливо, багато маленьких фрагментів коду, щоб реально реалізувати всі необхідні можливості, які ми '

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


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

Відповіді:


49

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

  • різні служби можуть бути розроблені та розгорнуті незалежно різними командами
  • різні послуги можна масштабувати самостійно

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

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

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

Розглянемо також концепцію Microservice Premium (2015) Мартіна Фаулера : мікросервіси вносять істотну складність, крім базової складності вашої системи. Ви повинні сплатити цю «премію» за рахунок зниження продуктивності. Це означає, що для простих проектів мікросервіси роблять вас менш продуктивними. Це змінюється для більш складних проектів: тоді як з монолітним рішенням може ставати все важче працювати, архітектура мікросервісу масштабується набагато краще і вимагає приблизно постійних зусиль. Ви повинні знати, чи варті додаткові початкові зусилля мікросервісів, враховуючи вашу програмну систему. Оскільки ви задаєте це питання, відповідь, ймовірно, "ні". Фаулер продовжує:

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


31
Версія TL; DR: додайте складності лише тоді, коли вона вирішує проблеми, які ви насправді є.
jpmc26

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

1
Перший закон Фаулера про розподілені об’єкти: Не
К. Алан Бейтс

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

2
Так, хороша відповідь. Люди, здається, забувають, що мікросервіси насправді додають складності - тому, якщо вони не усунуть більше складності, цього не варто. І майже у всіх випадках одному розробнику не вистачить користі від MSA.
Ендерленд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.