Перейти до вмісту

Як ми проєктуємо архітектуру системи, що росте разом із бізнесом

Система, яка рік тому працювала бездоганно, починає тріщати під новими клієнтами, процесами й інтеграціями. Розповідаємо про принципи, кроки та вибір технологій, завдяки яким CRM, ERP та системи автоматизації можна розвивати без переписування з нуля.

АвторВідділ ІТ
  • 7 хв читання
  • 243 перегляди
Як ми проєктуємо архітектуру системи, що росте разом із бізнесом

Чому архітектура визначає долю проєкту

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

Скільки коштують хибні архітектурні рішення

Дослідження IBM показують, що виправлення помилки, знайденої на етапі впровадження, коштує від 6 до 15 разів дорожче, ніж її усунення на етапі проєктування. Якщо ту саму помилку виявити вже в робочій системі, вартість може зрости до 100 разів. Коли йдеться про фундаментальні архітектурні рішення, суми здатні визначити, чи окупиться весь проєкт.

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

Масштабованість це не лише техніка

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

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


Принципи масштабованої архітектури

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

Модульність

Перший і найважливіший принцип: ділити систему на незалежні модулі. Кожен відповідає за одну чітко визначену бізнес-функцію та взаємодіє з іншими через добре визначені інтерфейси.

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

Результат можна виміряти. За даними McKinsey, компанії з модульною архітектурою скорочують час виведення нових функцій у середньому на 40% порівняно з тими, що працюють на монолітах.

Бізнес-логіка окремо від інтерфейсу

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

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

Інтеграції з першого дня

Третій принцип: відкритість до зовнішнього світу. Компанії рідко працюють на єдиній системі, а типова середня компанія користується від 10 до 20 бізнес-застосунків. Нова система мусить уміти з ними взаємодіяти.

Тому з самого початку ми закладаємо API для інтеграції із зовнішніми інструментами. Це частина архітектури, а не додаток наприкінці. Ми використовуємо стандартні протоколи (REST, GraphQL, webhooks), документуємо інтерфейси та продумуємо сценарії інтеграції ще до першого рядка коду.


Планування архітектури крок за кроком

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

Крок 1: Бізнес-процеси та їхній розвиток

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

Ми запитуємо, зокрема: як виглядає типовий процес від початку до кінця? Які його частини стабільні, а які можуть змінитися? Які плани компанії на найближчі два-три роки? Чи будуть нові продукти, ринки чи канали продажу? Де сьогодні вузькі місця та що дратує користувачів?

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

Крок 2: Домени та їхні межі

На основі бізнес-аналізу моделюємо домени. Виділяємо основні функціональні області та проводимо межі між ними. У термінології Domain-Driven Design це bounded contexts: замкнені контексти з власною узгодженою моделлю даних і логікою.

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

Крок 3: Вибір архітектурних патернів

Коли домени визначено, вибираємо патерни. Універсальної відповіді немає: усе залежить від проєкту, вимог до продуктивності та бюджету.

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

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

Крок 4: Модель даних, що передбачає зміни

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

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

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

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


Технології, що підтримують масштабованість

Архітектура це ще й конкретні інструменти. Ось технології, які ми регулярно використовуємо в масштабованих системах.

Бази даних: реляційні, документні чи обидва види

Вибір залежить від характеру даних і способу доступу. Для даних із чіткою структурою та зв'язками, як-от фінанси й дані клієнтів, ми й досі віддаємо перевагу реляційним базам: PostgreSQL або Microsoft SQL Server. Вони забезпечують транзакційність, цілісність даних і зрілі інструменти звітності.

Для даних зі змінною структурою або з потребою швидкого читання (логи активності, дані з IoT, кеш) використовуємо документні бази та сховища «ключ-значення», такі як MongoDB і Redis. Дедалі частіше будуємо гібридні рішення, де кожен тип даних потрапляє до рушія, що найкраще йому пасує.

Черги повідомлень та подієва архітектура

Для систем, яким потрібна висока пропускна здатність і стійкість до тимчасових перевантажень, беремо черги повідомлень (RabbitMQ, Apache Kafka). Замість синхронних викликів компоненти публікують події, а зацікавлені модулі реагують на них асинхронно.

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

Контейнери та оркестрація

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

Проте контейнери підходять не кожному проєкту. Вони додають операційної складності й потребують компетенцій DevOps. Для менших систем чи обмеженого бюджету кращим може бути простіший хостинг.


Пастки, яких ми навчилися уникати

Кожен проєкт чогось навчає. Ось застереження з нашого досвіду.

Передчасна оптимізація

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

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

Погоня за технологічною модою

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

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

Відсутність документації

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

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


Архітектура це рішення на роки

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

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

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


Якщо ви плануєте нову CRM, ERP або автоматизацію процесів, поговорімо. Допоможемо спроєктувати рішення, що зростатиме разом із вашим бізнесом і відповідатиме вашим процесам.


Теги

Поділитися статтею

SaaS-продукт під законодавчий термін: як ми визначали обсяг і що відклали

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

  • 10 хв читання
  • 179 переглядів

Як ми створили Biurko.io: кейс платформи для роботи з KSeF

Чому замість готового інструмента ми побудували власну платформу для польської системи e-фактур KSeF, як виглядала інтеграція з API Міністерства фінансів і які архітектурні рішення витримали перевірку в роботі.

  • 10 хв читання
  • 140 переглядів

Як ШІ в CRM змінює щоденну роботу відділу продажів

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

  • 10 хв читання
  • 248 переглядів
Повернутися до блогу

Файли cookies

Ми використовуємо необхідні файли cookies та один функціональний, який вмикаємо лише за вашою згодою. Статистику відвідувань рахуємо на сервері, без cookies. Політика cookies