Про що:
Щоб побудувати дім, треба почати з плану та порядку дій. Аби розробити застосунок, варто вибрати архітектуру проєкту. Якою вона буває, чи можна змінити її в майбутньому та як це відбувається в Kyivstar.Tech — читайте в матеріалі.
Зміст
Архітектура проєкту: що це і чому це важливо
Монолітна архітектура: за і проти традиційного підходу
Мікросервіси: модулі для гнучкості
Як вибрати архітектуру продукту і що таке гібрид
Моноліт чи мікросервіси: думка експерта Kyivstar.Tech
Архітектура проєкту: що це і чому це важливо
Архітектура проєкту (Software Architecture) — це правила, за якими розробляється продукт. Від архітектури залежить, як буде організована структура продукту, як взаємодіятимуть між собою основні компоненти, чи зручно буде масштабуватися та підтримувати програмне забезпечення (ПЗ).
Хто вибирає, якою буде архітектура? Залежно від розміру проєкту та організації роботи в ньому, це може бути архітектор (Software/Solution Architect), Техлід (Tech Lead), CTO або головний розробник.
Як перевірити, чи правильно вибрано архітектуру? Amazon пропонує AWS Well-Architected Framework — набір інструментів, що дозволяють оцінити архітектуру за 6 основними напрямками:
- Операційна досконалість (Operation Excellence) — чи зручно управляти системою;
- Безпека (Security) — чи захищені дані на кожному етапі;
- Надійність (Reliability) — чи витримує система збої, чи може вона відновитися;
- Ефективність роботи (Performance Efficiency) — як використовуються ресурси, чи можна масштабуватися;
- Оптимізація витрат (Cost Optimization) — чи не переплачує компанія;
- Сталість (Sustainability) — як архітектура впливає на екологію.
AWS надає змогу зрозуміти стан системи, виявити ризики та запланувати зміни.
Існує кілька видів архітектур. Монолітна та мікросервіси — найпоширеніші з них.
Монолітна архітектура: за і проти традиційного підходу
Монолітна архітектура — модель розробки програмного забезпечення, в якій всі частини продукту, включно з інтерфейсом, бізнес-логікою та базою даних, об’єднані та розгортаються разом.
Це традиційний підхід до розробки ПЗ, адже моноліт з’явився значно раніше за мікросервіси.
Моноліт дозволяє розробляти продукт і розгортати інфраструктуру швидко. Завдяки тому, що код централізований та локалізований в одному місці, його легше моніторити та змінювати на початкових етапах. Монолітна архітектура оптимально підходить для невеликих проєктів та стартапів, де важливо швидко випустити MVP (мінімально життєздатний продукт) та протестувати його.
Основний недолік цього методу в тому, що збій у роботі одного компонента може вразити всю систему. Якщо потрібна гнучка архітектура, яку легко змінювати та масштабувати, — частіше вибирають мікросервіси.
Мікросервіси: модулі для гнучкості
Мікросервісна архітектура — це підхід, у якому продукт складається з окремих сервісів. Кожен із них містить одну бізнес-функцію та спілкується з іншими через API.
Сьогодні це найпоширеніший варіант для розробки продуктів. Мікросервіси добре поєднуються з CI/CD моделлю та принципами DevOps.
Читайте також:
SDLC: як розробляється програмне забезпеченняМікросервіси надають змогу:
- паралельно працювати над різними частинами продукту;
- продовжувати роботу, навіть якщо десь стався збій;
- об’єднувати команди, кожна з яких працює над окремим завданням;
- використовувати окрему базу даних та різні технології для кожного сервісу;
- тестувати, розгортати та масштабувати окремі елементи без впливу на інші.
Мікросервісна архітектура використовується для складніших та вимогливіших продуктів, які будуть масштабовані в майбутньому та мають високі вимоги до безпеки.
Наприклад, в інтернет-магазині один сервіс може відповідати за нові замовлення, інший — за обробку їх на складі, третій — за платежі та виплати, четвертий — за базу даних покупців і так далі.
Глобальна хмарна платформа Microsoft Azure дає змогу швидко та безпечно розгортати IT-інфраструктуру з будь-якої точки світу. Адмініструйте всі хмарні служби: вебдодатки, віртуальні мережі та сервіси, сховища та окремі проєкти. Отримайте доступ до 200+ сервісів Microsoft.

Хмари та зберігання даних
Microsoft Azure від Київстар
Глобальна хмарна платформа для безпечного розгортання IT-інфраструктури. Розробляйте нові продукти, тестуйте, налагоджуйте внутрішні бізнес-процеси без утримання фізичних серверів.
Недолік мікросервісної архітектури — інфраструктура складніша, ніж у моноліту. Сервіси не об’єднані, тож комунікаціям варто приділяти окрему увагу.
Як вибрати архітектуру продукту і що таке гібрид
Коли архітектор планує, як відбуватиметься робота над проєктом, він враховує:
- Чи буде продукт масштабований — для невеликих підійде моноліт, для більших — мікросервіси;
- Чи є обмеження в термінах і бюджетах — розробка на моноліті зазвичай швидша та дешевша;
- Чи багато в продукті функцій, чи планується інтегрувати його з іншими системами — якщо відповідь «так», то краще вибирати мікросервіси;
- Чи будуть регулярні оновлення — тоді потрібні мікросервіси.
Архітектуру можна змінити в процесі розробки. Багато компаній починали робити продукти на моноліті та з часом перейшли на мікросервіси, наприклад, Netflix та Uber.
Amazon Prime Video, навпаки, переосмислила бізнес-процеси та перейшла з мікросервісів на моноліт. Їхній інструмент моніторингу якості відео Video Quality Analysis (VQA) контролював тисячі відеопотоків одночасно. Витрати на те, щоб масштабувати продукт, були величезними. Перехід на моноліт знизив їх на 90%.
«Ця історія унікальна тим, що Amazon промотував мікросервісні та сервісно-орієнтовані архітектури. Але тепер ми бачимо, що на практиці мікросервіси можуть занадто ускладнювати систему» — стверджує Девід Ханссон, співзасновник Basecamp та автор книги «Rework».
«Ця історія унікальна тим, що Amazon промотував мікросервісні та сервісно-орієнтовані архітектури. Але тепер ми бачимо, що на практиці мікросервіси можуть занадто ускладнювати систему» — стверджує Девід Ханссон, співзасновник Basecamp та автор книги «Rework».
Окрім мікросервісної та монолітної, існують:
- Сервіс-орієнтована архітектура (Service-Oriented Architecture, SOA) — всі частини системи представлені у вигляді окремих сервісів, які можуть обмінюватися інформацією. Подібна до мікросервісів, але ширша — може охоплювати не один продукт, а всю IT-інфраструктуру компанії;
- Подійно-орієнтована архітектура (Event-Driven Architecture, EDA) — побудована навколо подій, тобто невеликих повідомлень, які надсилаються, коли в системі щось відбувається. Сервіси реагують на ці події;
- Безсервісна архітектура (Serverless Architecture) — дозволяє запускати функції без управління серверами;
- Клієнт-сервісна архітектура (Client–Server Architecture) — має чітке розділення ролей. Клієнтська частина потрібна для взаємодії з користувачем, сервісна — щоб обробляти дані.
На практиці часто використовують гібридні методи, що поєднують у собі можливості різних архітектур. Наприклад, мікросервіси + EDA = мікросервіси обробляють події в реальному часі.
Моноліт чи мікросервіси: думка експерта Kyivstar.Tech

Розповідає Руслан Попенко,
Senior Software Engineer Kyivstar.Tech
Запитання: «З чого почати: мікросервіс або моноліт?» не має єдиної відповіді. Ми в Kyivstar.Tech підходимо до кожної інженерної проблеми критично. Ми не слідуємо карго-культам «завжди мікросервіси» або «починай з моноліту, можливо, і не доведеться розширюватися».
Перше, на що зважаємо, — це тип завдань, які вирішує сервіс:
— АРІ сервіс (веб);
— batch processing (виконання великої кількості заявок за розкладом);
— stream processing (наприклад, обробка подій і формування аналітики).
Якщо це batch або stream processing, компоненти мають бути окремо від бізнес-сервісів, тому що у них власний життєвий цикл. Тобто йдеться про мікросервіси. Ми ж не хочемо, щоб користувач не міг переглянути залишок на рахунку або поповнити його, бо додаток занадто завантажений.
Якщо у нас АРІ бізнес-сервіс, то потрібні додаткові критерії — ми передусім керуємося доменним принципом та топологією команд, а потім — нефункціональними вимогами.
У нас продуктова розробка і ми не обмежені термінами роботи — це не проєкт, який закінчив і віддав на підтримку. За кожною командою закріплено один сервіс, який вона розробляє, релізить, моніторить та підтримує. Кожен сервіс модульний, отже залишається можливість у будь-який момент виділити потрібні функції в окремий сервіс.
Нефункціональні вимоги також можуть вплинути на вибір. Наприклад, ми знатимемо, що функціональність конкретного домену матиме завантаження в 1000 разів більше від інших фіч цього ж домену. Тоді ми також розглядаємо виокремлення цієї навантаженої фічі в окремий сервіс, який масштабуватиметься в іншій кількості (scalability), та буде ізольований від інших фіч (isolation), щоб його навантаження не впливало на працездатність усіх функцій домену загалом.
Отже, немає однозначної відповіді на всі випадки — стартувати з мікросервісів чи моноліту. Щоб ухвалити рішення, потрібно зважати на архітектурні характеристики системи, функціональні та нефункціональні вимоги.
Запитання: «З чого почати: мікросервіс або моноліт?» не має єдиної відповіді. Ми в Kyivstar.Tech підходимо до кожної інженерної проблеми критично. Ми не слідуємо карго-культам «завжди мікросервіси» або «починай з моноліту, можливо, і не доведеться розширюватися».
Перше, на що зважаємо, — це тип завдань, які вирішує сервіс:
— АРІ сервіс (веб);
— batch processing (виконання великої кількості заявок за розкладом);
— stream processing (наприклад, обробка подій і формування аналітики).
Якщо це batch або stream processing, компоненти мають бути окремо від бізнес-сервісів, тому що у них власний життєвий цикл. Тобто йдеться про мікросервіси. Ми ж не хочемо, щоб користувач не міг переглянути залишок на рахунку або поповнити його, бо додаток занадто завантажений.
Якщо у нас АРІ бізнес-сервіс, то потрібні додаткові критерії — ми передусім керуємося доменним принципом та топологією команд, а потім — нефункціональними вимогами.
У нас продуктова розробка і ми не обмежені термінами роботи — це не проєкт, який закінчив і віддав на підтримку. За кожною командою закріплено один сервіс, який вона розробляє, релізить, моніторить та підтримує. Кожен сервіс модульний, отже залишається можливість у будь-який момент виділити потрібні функції в окремий сервіс.
Нефункціональні вимоги також можуть вплинути на вибір. Наприклад, ми знатимемо, що функціональність конкретного домену матиме завантаження в 1000 разів більше від інших фіч цього ж домену. Тоді ми також розглядаємо виокремлення цієї навантаженої фічі в окремий сервіс, який масштабуватиметься в іншій кількості (scalability), та буде ізольований від інших фіч (isolation), щоб його навантаження не впливало на працездатність усіх функцій домену загалом.
Отже, немає однозначної відповіді на всі випадки — стартувати з мікросервісів чи моноліту. Щоб ухвалити рішення, потрібно зважати на архітектурні характеристики системи, функціональні та нефункціональні вимоги.
Додайте коментар