Перейти к основному содержимому

200 вопросов по архитектуре ПО

200 вопросов по архитектуре ПО

Основы архитектуры ПО

Вопрос

Что такое архитектура программного обеспечения?

Ответ

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


Вопрос

Какие цели преследует проектирование архитектуры ПО?

Ответ

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


Вопрос

Чем отличается архитектура от проектирования (design)?

Ответ

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


Вопрос

Что такое нефункциональные требования?

Ответ

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


Вопрос

Какие виды архитектурных решений считаются ключевыми?

Ответ

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


Вопрос

Что такое архитектурный стиль?

Ответ

Архитектурный стиль — это обобщённый шаблон организации компонентов системы и правил их взаимодействия, например: монолит, микросервисы, клиент-сервер, событийно-ориентированная архитектура.


Вопрос

Что такое архитектурный паттерн?

Ответ

Архитектурный паттерн — это проверенное решение общей проблемы в контексте проектирования системы, например: MVC, CQRS, Layered Architecture, Hexagonal Architecture.


Вопрос

Какова роль архитектора ПО?

Ответ

Архитектор ПО принимает стратегические технические решения, обеспечивает соответствие архитектуры бизнес-целям, координирует команды разработки и контролирует соблюдение архитектурных принципов на всех этапах жизненного цикла.


Вопрос

Что такое технический долг?

Ответ

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


Вопрос

Как архитектура влияет на скорость разработки?

Ответ

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


Принципы проектирования

Вопрос

Что такое принцип единственной ответственности (SRP)?

Ответ

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


Вопрос

Что такое принцип открытости/закрытости (OCP)?

Ответ

Принцип открытости/закрытости утверждает, что программные сущности должны быть открыты для расширения, но закрыты для модификации.


Вопрос

Что такое принцип подстановки Барбары Лисков (LSP)?

Ответ

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


Вопрос

Что такое принцип разделения интерфейса (ISP)?

Ответ

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


Вопрос

Что такое принцип инверсии зависимостей (DIP)?

Ответ

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


Вопрос

Что такое KISS?

Ответ

KISS (Keep It Simple, Stupid) — принцип, согласно которому системы работают лучше всего, когда они остаются простыми, а не усложняются излишней функциональностью или абстракциями.


Вопрос

Что такое YAGNI?

Ответ

YAGNI (You Aren’t Gonna Need It) — принцип, запрещающий добавлять функциональность до тех пор, пока она реально не потребуется.


Вопрос

Что такое DRY?

Ответ

DRY (Don’t Repeat Yourself) — принцип, требующий исключения дублирования логики путём вынесения повторяющихся частей в общие компоненты или абстракции.


Вопрос

Что такое закон Конвея?

Ответ

Закон Конвея утверждает, что структура программной системы отражает структуру коммуникаций в организации, её разрабатывающей.


Вопрос

Что такое принцип наименьшего удивления?

Ответ

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


Связность и связанность

Вопрос

Что такое связанность (coupling)?

Ответ

Связанность — это степень зависимости одного компонента от другого. Низкая связанность предпочтительна, так как упрощает тестирование, замену и сопровождение компонентов.


Вопрос

Что такое связность (cohesion)?

Ответ

Связность — это мера того, насколько тесно элементы внутри модуля связаны общей задачей. Высокая связность означает, что модуль сфокусирован на одной ответственности.


Вопрос

Почему низкая связанность важна?

Ответ

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


Вопрос

Почему высокая связность желательна?

Ответ

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


Вопрос

Какие виды связанности существуют?

Ответ

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


Архитектурные стили

Вопрос

Что такое монолитная архитектура?

Ответ

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


Вопрос

Какие преимущества у монолита?

Ответ

Монолит проще разрабатывать, тестировать, отлаживать и развертывать на ранних этапах проекта. Он обеспечивает высокую производительность внутренних вызовов и упрощённое управление транзакциями.


Вопрос

Какие недостатки у монолита?

Ответ

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


Вопрос

Что такое микросервисная архитектура?

Ответ

Микросервисная архитектура — это стиль, при котором приложение состоит из небольших, независимо развертываемых сервисов, каждый из которых отвечает за одну бизнес-возможность и взаимодействует через чётко определённые API.


Вопрос

Какие преимущества у микросервисов?

Ответ

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


Вопрос

Какие недостатки у микросервисов?

Ответ

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


Вопрос

Что такое клиент-серверная архитектура?

Ответ

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


Вопрос

Что такое многоуровневая (layered) архитектура?

Ответ

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


Вопрос

Какие типичные слои в layered architecture?

Ответ

Типичные слои: presentation layer (UI), application layer (координация), business logic layer (доменные правила), data access layer (взаимодействие с БД).


Вопрос

Что такое событийно-ориентированная архитектура (Event-Driven Architecture)?

Ответ

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


Вопрос

Какие компоненты есть в EDA?

Ответ

Основные компоненты: источники событий (event producers), потребители событий (event consumers), каналы передачи (event channels) и брокеры сообщений (message brokers).


Вопрос

Что такое publish-subscribe паттерн?

Ответ

Publish-subscribe — это шаблон взаимодействия, при котором отправители (publishers) публикуют сообщения в темы, а получатели (subscribers) подписываются на интересующие их темы без прямой связи между собой.


Вопрос

Что такое потоковая архитектура (streaming architecture)?

Ответ

Потоковая архитектура обрабатывает данные в реальном времени как непрерывные потоки событий, используя платформы вроде Apache Kafka или AWS Kinesis.


Вопрос

Что такое serverless архитектура?

Ответ

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


Вопрос

Что такое hexagonal architecture (портов и адаптеров)?

Ответ

Hexagonal architecture разделяет ядро приложения (domain) от внешних систем (БД, UI, API) через порты (интерфейсы) и адаптеры (реализации), обеспечивая независимость от инфраструктуры.


Архитектурные паттерны

Вопрос

Что такое паттерн MVC?

Ответ

MVC (Model-View-Controller) разделяет приложение на три компонента: Model (данные и логика), View (представление) и Controller (обработка входных данных и обновление модели).


Вопрос

Что такое паттерн MVVM?

Ответ

MVVM (Model-View-ViewModel) связывает View и ViewModel через двустороннее связывание данных, позволяя отделить логику представления от UI и упростить тестирование.


Вопрос

Что такое CQRS?

Ответ

CQRS (Command Query Responsibility Segregation) разделяет операции изменения состояния (команды) и операции чтения (запросы) на разные модели, что позволяет оптимизировать каждую независимо.


Вопрос

Что такое Event Sourcing?

Ответ

Event Sourcing — это паттерн, при котором состояние сущности восстанавливается путём последовательного применения сохранённых событий, а не хранения текущего состояния.


Вопрос

Как CQRS сочетается с Event Sourcing?

Ответ

CQRS часто используется вместе с Event Sourcing: команды генерируют события, которые сохраняются, а запросы читают проекции этих событий, построенные в оптимизированном виде.


Вопрос

Что такое Saga?

Ответ

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


Вопрос

Что такое API Gateway?

Ответ

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


Вопрос

Что такое BFF (Backend for Frontend)?

Ответ

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


Вопрос

Что такое strangler fig pattern?

Ответ

Strangler fig pattern — это подход постепенной замены монолита микросервисами, при котором новые функции реализуются в виде отдельных сервисов, а старые постепенно изымаются.


Вопрос

Что такое circuit breaker?

Ответ

Circuit breaker — это паттерн защиты от каскадных сбоев, который отслеживает количество неудачных вызовов и временно блокирует дальнейшие попытки, позволяя системе восстановиться.

// Пример на C#
public class CircuitBreaker
{
private int failureCount = 0;
private const int threshold = 5;
private DateTime lastFailureTime = DateTime.MinValue;
private readonly TimeSpan timeout = TimeSpan.FromSeconds(30);

public async Task<T> ExecuteAsync<T>(Func<Task<T>> operation)
{
if (IsOpen())
{
throw new InvalidOperationException("Circuit is open");
}

try
{
var result = await operation();
Reset();
return result;
}
catch
{
RecordFailure();
throw;
}
}

private bool IsOpen() =>
failureCount >= threshold &&
DateTime.UtcNow - lastFailureTime < timeout;

private void RecordFailure()
{
failureCount++;
lastFailureTime = DateTime.UtcNow;
}

private void Reset()
{
failureCount = 0;
lastFailureTime = DateTime.MinValue;
}
}

Масштабируемость и отказоустойчивость

Вопрос

Что такое масштабируемость?

Ответ

Масштабируемость — это способность системы сохранять или улучшать производительность при увеличении объёма данных, числа пользователей или частоты запросов, за счёт добавления ресурсов.


Вопрос

В чём разница между вертикальным и горизонтальным масштабированием?

Ответ

Вертикальное масштабирование (scale-up) — это увеличение мощности одного узла (процессор, память, диски). Горизонтальное масштабирование (scale-out) — это добавление новых узлов в систему для распределения нагрузки.


Вопрос

Что такое отказоустойчивость?

Ответ

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


Вопрос

Какие стратегии повышают отказоустойчивость?

Ответ

Стратегии включают репликацию данных, избыточность компонентов, автоматическое восстановление, использование балансировщиков нагрузки и паттернов вроде circuit breaker и retry.


Вопрос

Что такое graceful degradation?

Ответ

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


Вопрос

Что такое fault tolerance?

Ответ

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


Вопрос

Что такое SLA?

Ответ

SLA (Service Level Agreement) — это соглашение между поставщиком услуги и клиентом, определяющее ожидаемый уровень доступности, производительности и времени реакции на инциденты.


Вопрос

Что такое uptime и downtime?

Ответ

Uptime — это время, в течение которого система доступна и работает корректно. Downtime — это периоды недоступности или сбоев.


Вопрос

Как рассчитывается доступность системы?

Ответ

Доступность рассчитывается как отношение времени безотказной работы к общему времени наблюдения, обычно выражается в процентах: например, «99.9% uptime».


Вопрос

Что такое N+1 redundancy?

Ответ

N+1 redundancy — это архитектурный принцип, при котором система содержит N рабочих компонентов и как минимум один резервный, способный заменить любой из них при сбое.


Безопасность в архитектуре

Вопрос

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

Ответ

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


Вопрос

Что такое Zero Trust Architecture?

Ответ

Zero Trust Architecture — это модель безопасности, в которой ни одна сущность внутри или вне периметра сети не считается доверенной по умолчанию; требуется проверка подлинности и авторизация для каждого запроса.


Вопрос

Что такое аутентификация и авторизация?

Ответ

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


Вопрос

Какие протоколы используются для безопасной аутентификации?

Ответ

Распространённые протоколы: OAuth 2.0, OpenID Connect, SAML, Kerberos. Они обеспечивают делегированную аутентификацию и безопасную передачу токенов.


Вопрос

Что такое JWT?

Ответ

JWT (JSON Web Token) — это открытый стандарт (RFC 7519) для безопасной передачи информации между сторонами в виде JSON-объекта, который может быть подписан и зашифрован.

{
"alg": "HS256",
"typ": "JWT"
}
{
"sub": "1234567890",
"name": "Timur Tagirov",
"iat": 1516239022
}

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


Вопрос

Что такое secure by design?

Ответ

Secure by design — это подход, при котором безопасность закладывается на этапе проектирования архитектуры, а не добавляется как надстройка после реализации.


Вопрос

Как предотвратить инъекции (например, SQL injection)?

Ответ

Использовать параметризованные запросы, ORM с защитой от инъекций, валидацию входных данных, экранирование специальных символов и принцип наименьших привилегий для учётных записей БД.


Вопрос

Что такое CORS и зачем он нужен?

Ответ

CORS (Cross-Origin Resource Sharing) — это механизм, позволяющий веб-приложениям безопасно запрашивать ресурсы с другого домена, контролируя, какие источники могут обращаться к API.


Вопрос

Как обеспечить безопасность микросервисов?

Ответ

Обеспечить межсервисную аутентификацию (mTLS), использовать API Gateway с политиками безопасности, шифровать трафик, ограничивать сетевой доступ через service mesh или network policies.


Вопрос

Что такое secrets management?

Ответ

Secrets management — это практика безопасного хранения, передачи и использования чувствительных данных, таких как пароли, API-ключи и сертификаты, с использованием специализированных систем (HashiCorp Vault, AWS Secrets Manager).


Распределённые системы

Вопрос

Что такое распределённая система?

Ответ

Распределённая система — это совокупность независимых узлов, которые взаимодействуют по сети и представляют собой единое целое для пользователя.


Вопрос

Какие проблемы характерны для распределённых систем?

Ответ

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


Вопрос

Что такое CAP-теорема?

Ответ

CAP-теорема утверждает, что в распределённой системе при сетевом разделении (Partition tolerance) невозможно одновременно гарантировать согласованность (Consistency) и доступность (Availability); можно выбрать только два из трёх.


Вопрос

Что такое eventual consistency?

Ответ

Eventual consistency — это модель согласованности, при которой система гарантирует, что если новые обновления прекратятся, все реплики со временем станут идентичными.


Вопрос

Что такое strong consistency?

Ответ

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


Вопрос

Что такое idempotency?

Ответ

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


Вопрос

Как обеспечить идемпотентность в API?

Ответ

Использовать идемпотентные HTTP-методы (GET, PUT, DELETE), передавать уникальные идемпотентные ключи в заголовках (например, Idempotency-Key) и проверять их на стороне сервера.


Вопрос

Что такое distributed tracing?

Ответ

Distributed tracing — это метод наблюдаемости, позволяющий отслеживать путь запроса через множество сервисов, измеряя задержки и выявляя узкие места.


Вопрос

Что такое service mesh?

Ответ

Service mesh — это выделенный слой инфраструктуры для управления межсервисным взаимодействием, обеспечивающий маршрутизацию, безопасность, мониторинг и отказоустойчивость без изменения кода приложений.


Вопрос

Какие компоненты есть в service mesh?

Ответ

Основные компоненты: data plane (sidecar-прокси, например Envoy) и control plane (управление конфигурацией, например Istio, Linkerd).


Транзакции и согласованность данных

Вопрос

Что такое ACID?

Ответ

ACID — это набор свойств транзакций: Atomicity (атомарность), Consistency (согласованность), Isolation (изоляция), Durability (долговечность).


Вопрос

Что такое BASE?

Ответ

BASE — это альтернатива ACID для распределённых систем: Basically Available, Soft state, Eventually consistent. Подчёркивает доступность и гибкость вместо строгой согласованности.


Вопрос

Что такое двухфазная фиксация (2PC)?

Ответ

Двухфазная фиксация — это протокол координации распределённых транзакций, включающий фазу голосования (prepare) и фазу принятия решения (commit/abort).


Вопрос

Почему 2PC плохо масштабируется?

Ответ

2PC требует блокировки ресурсов на время координации, создаёт единую точку отказа (координатор) и плохо переносит длительные сетевые задержки, что снижает производительность в больших системах.


Вопрос

Что такое Saga?

Ответ

Saga — это паттерн управления долгоживущими бизнес-транзакциями в распределённых системах, где каждая операция сопровождается компенсирующим действием для отката.


Вопрос

Какие виды Saga существуют?

Ответ

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


Вопрос

Что такое optimistic locking?

Ответ

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


Вопрос

Что такое pessimistic locking?

Ответ

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


Вопрос

Как выбрать между optimistic и pessimistic locking?

Ответ

Optimistic locking предпочтителен при низкой конкуренции и частых чтениях. Pessimistic locking — при высокой конкуренции и коротких транзакциях, где блокировки не создают узких мест.


Вопрос

Что такое distributed lock?

Ответ

Distributed lock — это механизм синхронизации, позволяющий нескольким узлам в распределённой системе координировать доступ к общему ресурсу, используя внешние сервисы вроде Redis или ZooKeeper.


Кэширование и производительность

Вопрос

Что такое кэширование?

Ответ

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


Вопрос

Какие уровни кэширования существуют?

Ответ

Уровни кэширования включают: клиентский (браузер), CDN (Content Delivery Network), шлюзовый (API Gateway), прикладной (внутри сервиса) и базу данных (query cache).


Вопрос

Что такое TTL в контексте кэша?

Ответ

TTL (Time To Live) — это время жизни записи в кэше, после истечения которого данные считаются устаревшими и подлежат обновлению или удалению.


Вопрос

Какие стратегии инвалидации кэша применяются?

Ответ

Стратегии включают: истечение срока действия (TTL), явную инвалидацию по событию (например, при обновлении данных), и write-through/write-behind подходы.


Вопрос

Что такое write-through и write-behind кэширование?

Ответ

Write-through — это запись данных одновременно в кэш и в источник. Write-behind — это сначала запись в кэш, а затем асинхронная запись в источник.


Вопрос

Какие проблемы возникают при использовании кэша?

Ответ

Проблемы включают устаревание данных (stale reads), увеличение сложности системы, несогласованность между репликами и трудности отладки.


Вопрос

Что такое cache stampede?

Ответ

Cache stampede — это ситуация, когда сразу после истечения TTL множество запросов одновременно обращаются к источнику данных, вызывая пиковую нагрузку.


Вопрос

Как предотвратить cache stampede?

Ответ

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


Балансировка нагрузки

Вопрос

Что такое балансировка нагрузки?

Ответ

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


Вопрос

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

Ответ

Алгоритмы включают: round-robin, least connections, IP hash, weighted round-robin, и адаптивные методы на основе метрик производительности.


Вопрос

В чём разница между L4 и L7 балансировщиками?

Ответ

L4-балансировщик работает на транспортном уровне (TCP/UDP) и маршрутизирует по IP и порту. L7-балансировщик работает на уровне приложения (HTTP/HTTPS) и может анализировать содержимое запроса (заголовки, URI, cookies).


Вопрос

Что такое sticky sessions?

Ответ

Sticky sessions — это механизм, при котором все запросы одного клиента направляются на один и тот же сервер, что необходимо для stateful-приложений.


Вопрос

Почему sticky sessions могут быть проблемой?

Ответ

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


Наблюдаемость

Вопрос

Что такое наблюдаемость (observability)?

Ответ

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


Вопрос

Какие три столпа наблюдаемости?

Ответ

Три столпа: логирование (logs), метрики (metrics) и трассировка (traces).


Вопрос

Что такое structured logging?

Ответ

Structured logging — это запись логов в машинно-читаемом формате (например, JSON), что упрощает парсинг, фильтрацию и анализ.

{
"timestamp": "2026-04-02T10:00:00Z",
"level": "INFO",
"service": "order-service",
"message": "Order created",
"orderId": "12345"
}

Вопрос

Что такое distributed tracing?

Ответ

Distributed tracing — это метод отслеживания жизненного цикла запроса через несколько сервисов, позволяющий выявлять узкие места и ошибки в распределённой системе.


Вопрос

Что такое span и trace?

Ответ

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


Вопрос

Какие инструменты используются для наблюдаемости?

Ответ

Популярные инструменты: Prometheus + Grafana (метрики), ELK или Loki (логи), Jaeger или Tempo (трассировка).


Проектирование API

Вопрос

Какие принципы RESTful API?

Ответ

RESTful API должен быть: stateless, использовать унифицированные интерфейсы (GET, POST, PUT, DELETE), представлять ресурсы через URI, поддерживать гипермедиа как движущую силу состояния (HATEOAS — опционально на практике).


Вопрос

Что такое идемпотентность HTTP-методов?

Ответ

Идемпотентность означает, что повторный вызов метода с теми же параметрами не изменяет результат после первого применения. Идемпотентны: GET, PUT, DELETE. Не идемпотентен: POST.


Вопрос

Зачем нужен заголовок Idempotency-Key?

Ответ

Заголовок Idempotency-Key позволяет клиенту гарантировать, что повторный запрос не приведёт к побочным эффектам, даже если первый запрос не вернул ответ из-за сетевой ошибки.


Вопрос

Что такое HATEOAS?

Ответ

HATEOAS (Hypermedia as the Engine of Application State) — это принцип REST, при котором клиент получает не только данные, но и ссылки на допустимые следующие действия.

{
"orderId": "123",
"status": "pending",
"_links": {
"cancel": { "href": "/orders/123/cancel", "method": "POST" },
"pay": { "href": "/orders/123/pay", "method": "POST" }
}
}

Вопрос

Какие подходы к версионированию API?

Ответ

Подходы: через URI (/v1/orders), заголовок (Accept: application/vnd.myapi.v1+json), параметр запроса (?version=1) — последний считается наименее предпочтительным.


Вопрос

Что такое OpenAPI/Swagger?

Ответ

OpenAPI — это спецификация для описания RESTful API в машиночитаемом формате, позволяющая автоматически генерировать документацию, клиентские SDK и тесты.


Управление состоянием

Вопрос

Что значит stateless-сервис?

Ответ

Stateless-сервис не хранит состояние между запросами; вся необходимая информация передаётся в каждом запросе (например, через токены или параметры).


Вопрос

Почему stateless-подход предпочтителен в микросервисах?

Ответ

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


Вопрос

Где хранить состояние, если сервис stateless?

Ответ

Состояние выносится во внешние хранилища: базы данных, кэш (Redis), объектные хранилища или сессионные хранилища с TTL.


Вопрос

Что такое token-based authentication?

Ответ

Token-based authentication — это метод, при котором после входа пользователь получает токен (например, JWT), который передаётся в каждом запросе вместо логина и пароля.


Стратегии развёртывания

Вопрос

Что такое blue-green deployment?

Ответ

Blue-green deployment — это стратегия, при которой новая версия приложения развёртывается параллельно с текущей (green рядом с blue), а трафик переключается мгновенно после проверки.


Вопрос

Что такое canary deployment?

Ответ

Canary deployment — это постепенный выпуск новой версии части пользователей (например, 5%), с последующим расширением, если метрики стабильны.


Вопрос

Что такое feature toggle?

Ответ

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


Вопрос

Какие преимущества у feature toggles?

Ответ

Они позволяют выпускать незавершённый код в продакшен безопасно, проводить A/B-тестирование и быстро откатывать функции без деплоя.


Конфигурация и окружения

Вопрос

Как правильно управлять конфигурацией в разных окружениях?

Ответ

Использовать внешние конфигурационные файлы или переменные окружения, избегать хардкода, применять принцип «configuration as code» и хранить секреты в защищённых хранилищах.


Вопрос

Что такое 12-factor app?

Ответ

12-factor app — это методология разработки облачных приложений, включающая принципы: один код для всех окружений, внешняя конфигурация, stateless-процессы, декларативное развёртывание и другие.


Вопрос

Почему конфигурацию не следует хранить в репозитории?

Ответ

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


Работа с данными и хранилищами

Вопрос

Что такое полиглотное персистентность?

Ответ

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


Вопрос

Когда использовать реляционную БД?

Ответ

Реляционную БД следует использовать, когда важны строгая согласованность, сложные транзакции, связи между сущностями и поддержка ACID-гарантий.


Вопрос

Когда использовать NoSQL?

Ответ

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


Вопрос

Что такое data warehouse?

Ответ

Data warehouse — это централизованное хранилище исторических данных, оптимизированное для аналитических запросов и отчётности, часто построено на основе ETL-процессов.


Вопрос

Что такое data lake?

Ответ

Data lake — это хранилище «сырых» данных в их исходном формате (структурированных, полуструктурированных и неструктурированных), предназначенное для последующей обработки и анализа.


Вопрос

В чём разница между OLTP и OLAP?

Ответ

OLTP (Online Transaction Processing) оптимизирован для частых коротких транзакций и поддержания актуального состояния. OLAP (Online Analytical Processing) оптимизирован для сложных агрегирующих запросов по большим объёмам данных.


Вопрос

Что такое шардирование?

Ответ

Шардирование — это горизонтальное разделение данных по нескольким узлам (шардам) на основе ключа, чтобы распределить нагрузку и увеличить ёмкость системы.


Вопрос

Какие стратегии шардирования существуют?

Ответ

Стратегии включают: шардирование по диапазону, по хешу ключа, по географическому признаку или по бизнес-сущности (например, один шард на клиента).


Вопрос

Что такое репликация?

Ответ

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


Вопрос

Какие виды репликации бывают?

Ответ

Виды: синхронная (гарантирует согласованность, но снижает производительность) и асинхронная (повышает производительность, но допускает временную несогласованность).


Очереди и асинхронная коммуникация

Вопрос

Зачем нужны очереди сообщений?

Ответ

Очереди сообщений обеспечивают асинхронное взаимодействие между компонентами, буферизацию при пиковых нагрузках, декуплирование сервисов и гарантию доставки.


Вопрос

Что такое durable queue?

Ответ

Durable queue — это очередь, данные в которой сохраняются на диск и не теряются при перезапуске брокера сообщений.


Вопрос

Что такое dead-letter queue (DLQ)?

Ответ

Dead-letter queue — это специальная очередь для сообщений, которые не удалось обработать после нескольких попыток, что позволяет анализировать и повторно обрабатывать ошибки.


Вопрос

Какие гарантии доставки поддерживают очереди?

Ответ

Гарантии: at-most-once (сообщение может быть потеряно), at-least-once (сообщение может быть продублировано), exactly-once (идеальная, но труднодостижимая семантика).


Вопрос

Почему exactly-once сложно реализовать?

Ответ

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


Вопрос

Что такое competing consumers?

Ответ

Competing consumers — это паттерн, при котором несколько экземпляров одного сервиса одновременно читают из одной очереди, обеспечивая параллельную обработку.


Вопрос

Что такое message broker?

Ответ

Message broker — это промежуточный компонент, управляющий маршрутизацией, очередями, подтверждением доставки и другими аспектами асинхронной коммуникации (например, RabbitMQ, Kafka, AWS SQS).


Вопрос

Чем Kafka отличается от RabbitMQ?

Ответ

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


Вопрос

Что такое consumer group в Kafka?

Ответ

Consumer group — это группа потребителей, которые совместно читают партиции топика, обеспечивая масштабируемость и балансировку нагрузки.


Вопрос

Что такое offset в Kafka?

Ответ

Offset — это уникальный идентификатор позиции сообщения в партиции, который позволяет потребителю отслеживать, какие сообщения уже обработаны.


Архитектурная документация

Вопрос

Зачем нужна архитектурная документация?

Ответ

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


Вопрос

Что такое C4 model?

Ответ

C4 model — это методология визуализации архитектуры на четырёх уровнях: Context (контекст), Containers (контейнеры), Components (компоненты), Code (код).


Вопрос

Что отображается на диаграмме Context (уровень 1) в C4?

Ответ

Диаграмма Context показывает систему как единое целое, её пользователей (акторов) и внешние зависимости (другие системы).


Вопрос

Что такое ADR (Architectural Decision Record)?

Ответ

ADR — это документ, фиксирующий важное архитектурное решение, контекст, в котором оно принималось, и обоснование выбора.


Вопрос

Какие элементы содержит ADR?

Ответ

ADR включает: название решения, статус (proposed, accepted, deprecated), дату, контекст, варианты рассмотренных решений, выбранное решение и последствия.


Вопрос

Почему важно хранить ADR в репозитории кода?

Ответ

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


Эволюция и техническое обслуживание

Вопрос

Как архитектура должна поддерживать эволюцию?

Ответ

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


Вопрос

Что такое архитектурный рефакторинг?

Ответ

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


Вопрос

Как избежать архитектурного деградирования?

Ответ

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


Вопрос

Что такое architectural runway?

Ответ

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


Вопрос

Как оценить готовность архитектуры к новым требованиям?

Ответ

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


Облачные паттерны и serverless

Вопрос

Что такое cloud-native архитектура?

Ответ

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


Вопрос

Какие ключевые принципы cloud-native?

Ответ

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


Вопрос

Что такое функция как сервис (FaaS)?

Ответ

FaaS — это модель serverless-вычислений, при которой разработчик предоставляет функции, которые запускаются в ответ на события, а облачный провайдер управляет всей инфраструктурой.


Вопрос

Какие ограничения у FaaS?

Ответ

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


Вопрос

Что такое cloud design patterns?

Ответ

Cloud design patterns — это проверенные решения типичных проблем при разработке в облаке, такие как retry, circuit breaker, bulkhead, cache-aside, valet key и другие.


Вопрос

Что такое retry pattern?

Ответ

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

public async Task<T> RetryAsync<T>(Func<Task<T>> action, int maxRetries = 3)
{
for (int i = 0; i <= maxRetries; i++)
{
try
{
return await action();
}
catch (Exception ex) when (i < maxRetries)
{
var delay = TimeSpan.FromSeconds(Math.Pow(2, i));
await Task.Delay(delay);
}
}
throw new InvalidOperationException("Max retries exceeded");
}

Вопрос

Что такое bulkhead pattern?

Ответ

Bulkhead pattern изолирует ресурсы (например, потоки или соединения) для разных частей системы, чтобы сбой в одном компоненте не исчерпал все ресурсы и не повлиял на другие.


Вопрос

Что такое cache-aside pattern?

Ответ

Cache-aside — это подход, при котором приложение сначала проверяет кэш; если данных нет, оно загружает их из источника и сохраняет в кэш для будущих запросов.


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

Вопрос

Зачем использовать контейнеры?

Ответ

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


Вопрос

Что такое Dockerfile?

Ответ

Dockerfile — это текстовый файл с инструкциями для сборки образа контейнера, включающий базовый образ, копирование файлов, установку зависимостей и команду запуска.


Вопрос

Что такое Kubernetes?

Ответ

Kubernetes — это платформа оркестрации контейнеров, автоматизирующая развёртывание, масштабирование, управление жизненным циклом и отказоустойчивость приложений.


Вопрос

Какие основные объекты в Kubernetes?

Ответ

Основные объекты: Pod (наименьшая единица), Service (сетевой доступ), Deployment (управление репликами), ConfigMap и Secret (конфигурация), Ingress (входной трафик).


Вопрос

Что такое sidecar-контейнер?

Ответ

Sidecar-контейнер — это вспомогательный контейнер в том же Pod, что и основное приложение, выполняющий сопутствующие задачи: логирование, мониторинг, прокси.


Вопрос

Что такое init-контейнер?

Ответ

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


Управление зависимостями и интерфейсами

Вопрос

Что такое контракт интерфейса?

Ответ

Контракт интерфейса — это чёткое описание входных и выходных данных, форматов, ошибок и поведения API, которое обязаны соблюдать как клиент, так и сервер.


Вопрос

Как обеспечить совместимость API при эволюции?

Ответ

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


Вопрос

Что такое consumer-driven contracts?

Ответ

Consumer-driven contracts — это подход, при котором потребители API определяют ожидаемые контракты, а поставщики гарантируют их выполнение через автоматические тесты.


Вопрос

Почему важно избегать тесной связанности через данные?

Ответ

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


Проектирование для отказоустойчивости

Вопрос

Что такое chaos engineering?

Ответ

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


Вопрос

Что такое health check?

Ответ

Health check — это эндпоинт или механизм, позволяющий внешним системам (балансировщику, оркестратору) определить, готов ли сервис принимать трафик.


Вопрос

Какие виды health checks бывают?

Ответ

Виды: liveness (сервис жив?), readiness (готов принимать запросы?), startup (завершил инициализацию?). Они используются оркестраторами для управления жизненным циклом.


Вопрос

Что такое graceful shutdown?

Ответ

Graceful shutdown — это процесс корректного завершения работы сервиса: завершение активных запросов, закрытие соединений, сохранение состояния, чтобы избежать потери данных.


Вопрос

Как реализовать graceful shutdown в .NET?

Ответ

Использовать IHostApplicationLifetime для регистрации обработчиков завершения и дождаться завершения фоновых задач:

public class GracefulShutdownService : IHostedService
{
private readonly ILogger _logger;
private readonly IHostApplicationLifetime _appLifetime;

public GracefulShutdownService(ILogger<GracefulShutdownService> logger, IHostApplicationLifetime appLifetime)
{
_logger = logger;
_appLifetime = appLifetime;
}

public Task StartAsync(CancellationToken ct)
{
_appLifetime.ApplicationStopping.Register(() =>
{
_logger.LogInformation("Graceful shutdown initiated");
// Завершить фоновые операции
});
return Task.CompletedTask;
}

public Task StopAsync(CancellationToken ct) => Task.CompletedTask;
}

Принятие архитектурных решений

Вопрос

Как выбирать архитектурный стиль?

Ответ

Выбор основывается на бизнес-требованиях, масштабе, команде, сроках, существующей инфраструктуре и нефункциональных характеристиках, таких как производительность и надёжность.


Вопрос

Когда монолит предпочтительнее микросервисов?

Ответ

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


Вопрос

Как оценить стоимость архитектурного решения?

Ответ

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


Вопрос

Что такое архитектурный trade-off?

Ответ

Архитектурный trade-off — это осознанный компромисс между конкурирующими качествами, например, между согласованностью и доступностью, или между простотой и гибкостью.


Вопрос

Как документировать trade-off?

Ответ

Trade-off фиксируется в ADR: описываются цели, рассмотренные варианты, причины выбора и последствия, включая возможные риски и пути их смягчения.


Вопрос

Может ли архитектура быть «идеальной»?

Ответ

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


Вопрос

Как избежать over-engineering?

Ответ

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


Вопрос

Какова роль прототипирования в архитектуре?

Ответ

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


Вопрос

Что делать, если архитектура «застряла»?

Ответ

Провести ретроспективу, выявить узкие места, применить паттерн strangler fig для постепенной модернизации и сосредоточиться на создании архитектурного runway для будущих изменений.


Вопрос

Как измерить успех архитектуры?

Ответ

Успех измеряется по нефункциональным метрикам: временем вывода новой функции в продакшен, частотой сбоев, скоростью восстановления, удовлетворённостью команды и соответствием бизнес-целям.