System Design

Навчіться проєктувати розподілені застосунки

Зареєструватись на курс

Графік

7 травня - 21 червня 2026
Понеділок та четвер (19:30)

Формат

Зустрічі в Zoom (+запис)

Постійний зв'язок у Slack

Зайнятість

14 занять по 1.5 години

40 годин ДЗ

Ціна

330$ за курс

Манібек 7 днів

Про курс

Навички System Design є одними з ключових для розробників. Як розробити багаторівневу стратегію кешування? Коли і як варто впроваджувати CQRS? Як виокремити логіку з моноліту в новий мікросервіс? Як вирішувати проблеми ordering та duplication у message-брокерах? Розуміння цих та інших архітектурних аспектів необхідне розробнику для проєктування нового функціоналу, виявлення слабких місць у наявних системах та успішного проходження інтерв’ю.

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

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

Фото автора

Про автора курсу та викладача

Олександр Марфут  LinkedIn Telegram

Application Architect @SoftServe

 

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

Після курсу ви навчитеся

  • Проєктувати розподілені застосунки — від аналізу вимог до впровадження механізмів безпеки
  • Проєктувати типовий функціонал - Audit Trail, Full-Text Search, Async Long-Running Processing, тощо
  • Застосовувати патерни CQRS, Outbox, Cache-Aside, Circuit Breaker, Rate limiting та інші на основі вимог до продукту

Цей курс для

розробників із 2+ роками досвіду, які хочуть розвивати архітектурні навички та мислення.
Tech Leads та Architects, які прагнуть структурувати й поглибити свої архітектурні знання.
DevOps / Cloud-інженерів, яким потрібно краще розуміти application-архітектуру.

 

Програма курсу

Функціональні та нефункціональні вимоги
  • Різниця між функціональними та нефункціональними вимогами
  • Ключові NFR: Performance, Scalability, Availability, Reliability
  • Приклади впливу нефункціональних вимог на архітектуру системи
  • Як архітектор ПЗ визначає та документує нефункціональні вимоги (NFR)
  • Метрики та вимірювання нефункціональних вимог

Практика
  • Опис нефункціональних вимог для поданого бізнес-кейсу
  • Розбір архітектури простого розподіленого застосунку
Заняття 1 07.05.2026 19:30
Архітектурні стилі та декомпозиція
  • Вибір між монолітом, модульним монолітом та мікросервісами
  • Критерії декомпозиції системи на мікросервіси та критерії їх об’єднання
  • Принципи проєктування мікросервісів: Loose Coupling, High Cohesion, Single Purpose
  • Database per Service vs Shared Database: які проблеми створюють кожен з підходів та як їх вирішувати
  • Патерни повторного використання коду між мікросервісами

Практика
  • Розробка Use Cases та доменної моделі
  • Декомпозиція бізнес-кейсу на мікросервіси
Заняття 2 11.05.2026 19:30
Протоколи комунікації сервісів
  • Принципи клієнт-серверної архітектури
  • Основи роботи протоколів HTTP та TCP
  • REST, gRPC та GraphQL: принципи роботи та критерії вибору
  • Real-time комунікація: WebSockets, Server-Sent Events (SSE)
  • Проблеми WebSockets при масштабуванні вебсервісів

Практика
  • Вибір типу комунікації для взаємодії сервісів на основі вимог
  • Аналіз HTTPS та WebSockets трафіку в Chrome DevTools
Заняття 3 14.05.2026 19:30
Проєктування API контрактів
  • Проєктування REST API: контракти та правила взаємодії
  • Вибір HTTP методів, статусів та обробка помилок
  • Коли необхідна версійність API. Техніки версійності
  • Проєктування gRPC APIs для внутрішньої service-to-service взаємодії

Практика
  • Проєктування REST API-контрактів
  • Документування API у форматі OpenAPI
Заняття 4 18.05.2026 19:30
Моделювання та зберігання даних
  • ACID vs BASE: компроміси та реальні кейси
  • Принципи моделювання даних в SQL vs NoSQL базах
  • Використання патернів Embedded, Partial Embedded, Referencing при моделюванні даних в документних базах NoSQL
  • Polyglot persistence: приклади поєднання різних типів сховищ в межах однієї системи
  • Blob storage: сценарії використання та обмеження

Практика
  • Проєктування SQL схеми даних
  • Вибір сховища та опис схеми даних для зберігання активності користувачів
Заняття 5 21.05.2026 19:30
Синхронна інтеграція сервісів
  • Коли синхронна інтеграція є правильним вибором
  • Ризики tight coupling та як їх мінімізувати
  • Resilience patterns: Retry, Timeout, Circuit Breaker
  • Fallback-стратегії та graceful degradation
  • Rate Limiting та Throttling: сценарії застосування
  • Як досягти backward compatibility та forward compatibility сервісів

Практика
  • Підбір resilience стратегій для service-to-service викликів
  • Визначення політик rate limiting та throttling, підбір лімітів
Заняття 6 25.05.2026 19:30
Асинхронна інтеграція сервісів
  • Сценарії застосування асинхронної інтеграції
  • Як працюють брокери повідомлень та які можливості реалізують
  • Патерни: Point-to-Point, Publish–Subscribe, Request–Reply, Message Routing
  • Проблеми reordered messages та deduplication
  • Outbox pattern: навіщо і як імплементувати
  • Command vs Event: вплив на архітектуру

Практика
  • Проєктування та версійність message-контрактів
  • Вибір integration patterns для взаємодії через message broker
Заняття 7 28.05.2026 19:30
Кешування даних на рівні вебсервісу
  • Навіщо потрібен кеш і які проблеми він вирішує
  • Cache-aside pattern: імплементація, сценарії застосування
  • Проєктування ефективних cache keys

Практика
  • Розробка багаторівневої стратегії кешування для різних типів даних (part 1)
Заняття 8 01.06.2026 19:30
Багаторівневе та розподілене кешування
  • Рівні кешу: Database, Remote (Redis), In-memory, CDN, Browser
  • Типові проблеми: cache stampede, hot keys, stale data
  • Техніки інвалідації кешу та eviction policies
  • Write-through та Write-behind патерни
  • Redis як кеш: обмеження та ризики

Практика
  • Розробка багаторівневої стратегії кешування для різних типів даних (part 2)
Заняття 9 04.06.2026 19:30
Масштабування computing сервісів
  • Horizontal vs Vertical scaling
  • Алгоритми балансування навантаження
  • Проблеми масштабування: cold start, state, race conditions, cost
  • Інструменти масштабування в хмарних середовищах
  • HAProxy + Nginx: базова конфігурація
  • Сценарії використання serverless

Практика
  • Адаптація архітектури під вимоги навантаження
  • Розгортання API-сервісів та налаштування HAProxy/Nginx як load balancer
Заняття 10 08.06.2026 19:30
Техніки масштабування баз даних
  • Вертикальне та горизонтальне масштабування БД
  • Indexing, SQL tuning, partitioning, replication
  • Денормалізація як інструмент продуктивності

Практика
  • Масштабування read та write операцій
Заняття 11 11.06.2026 19:30
Безпека, аутентифікація і авторизація
  • OAuth 2.0 та OpenID Connect: розбір типових моделей авторизації
  • Принципи роботи з Identity Providers (на прикладі Auth0)
  • Role-Based та Permission-Based access control
  • Session management в розподілених застосунках
  • JWT: структура, lifecycle, security pitfalls

Практика
  • Проєктування механізму аутентифікації
  • Налаштування Identity Provider під власний кейс
Заняття 12 15.06.2026 19:30
Проєктування хмарної архітектури
  • Основи cloud-native архітектур
  • Compute, Networking, Storage як основні building blocks
  • Розбір типових reference архітектур Azure та AWS

Практика
  • Адаптація архітектури під конкретний хмарний провайдер (Azure, AWS)
Заняття 13 18.06.2026 19:30
Проєктування функціоналу у розподілених застосунках

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

  • Як спроєктувати Full text search для великих обсягів даних
  • Як спроєктувати Audit Trail в мікросервісній архітектурі
  • Як виокремити функціональність з моноліту в окремий мікросервіс
  • Як спроєктувати довготривалий процес генерації великого файлу
  • Як оптимізувати читання звітів у фінансових системах з використанням CQRS патерну

Практика
  • Проєктування механізму нотифікацій користувачів
Заняття 14 22.06.2026 19:30