Проверяет понимание паттернов проектирования, применяемых в микросервисной архитектуре, и способность объяснить их практическое назначение.
Микросервисная архитектура разбивает приложение на небольшие независимые сервисы, каждый из которых отвечает за свою бизнес-функцию. Однако такая декомпозиция порождает новые проблемы: как клиентам обращаться к множеству сервисов, как обеспечить согласованность данных при распределённых операциях, как предотвратить каскадные сбои. Для решения этих задач применяются проверенные паттерны проектирования, которые стали стандартом в индустрии.
const circuitBreaker = require('opossum');
async function callExternalService() {
// вызов внешнего API
const response = await fetch('https://api.example.com/data');
return response.json();
}
const options = {
timeout: 3000, // таймаут запроса
errorThresholdPercentage: 50, // порог ошибок
resetTimeout: 30000 // время до повторной попытки
};
const breaker = new circuitBreaker(callExternalService, options);
breaker.fire()
.then(result => console.log(result))
.catch(err => console.error('Service unavailable', err));Паттерны микросервисов — это не догма, а инструменты для решения типовых проблем распределённых систем. Их стоит применять, когда вы строите сложную систему с множеством сервисов, требующую высокой отказоустойчивости и масштабируемости. Правильный выбор паттерна зависит от конкретных требований: для синхронных вызовов — API Gateway и Circuit Breaker, для транзакций — Saga, для асинхронной интеграции — Event-Driven.