Двенадцатифакторные приложения

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

Кодовая база: Здесь мы поддерживаем единую кодовую базу для каждого микросервиса, с конфигурацией, специфичной для их окружения, такого как разработка, QA и prod. Каждый микросервис будет иметь собственный репозиторий в системе контроля версий, такой как Git, mercurial и так далее.

Зависимости: Все микросервисы будут иметь свои зависимости как часть пакета приложения. В Node.js есть package.json, в котором указаны все зависимости для разработки и общие зависимости. Мы даже можем иметь
частный репозиторий, откуда будут браться зависимости.

Конфиги: Все конфигурации должны быть внешними, основанными на серверном окружении. Конфиги должны быть отделены от кода. Можно задать переменные окружения в Node.js или использовать Docker compose для определения других переменных.

Резервные сервисы: Любой сервис, потребляемый по сети, такой как база данных, операции ввода-вывода, запросы на обмен сообщениями, SMTP, кэш, будет представлен в виде микросервисов с использованием Docker compose и будет независим от приложения.

Сборка, выпуск и запуск: В распределенных системах мы будем использовать автоматизированные инструменты, такие как Docker и Git. Используя Docker, мы можем изолировать все три фазы с помощью его команд push, pull и run.

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

Связывание портов: Микросервисы должны быть автономными и самодостаточными.

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

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

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

Паритет Dev/prod: Поддерживайте одинаковые среды разработки/производства/постановки. Использование контейнеризированных микросервисов помогает реализовать стратегию build once, run anywhere. Один и тот же образ развертывается на различных этапах DevOps.

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

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

Оцените статью
devanswers.ru
Добавить комментарий