12 факторов: вступление

26.07.2018admin

Программное обеспечение, как и многое, что окружает нас в жизни — подвластно веяниям моды. Человечество мигрирует между технологиями (иногда по кругу), отделяет и детерминирует правильное от неправильного; и от «на сегодняшний день уже нельзя». Программы живут всё меньше времени и все последние годы стремятся к декомпозиции. На сцену вышли микросервисы и все последние годы только и разговоров что о них. Вкратце, речь, конечно идёт о SaaS (software as service; программное обеспечение как сервис) и\или микросервисах SOA (service oriented architecture; сервисно-ориентированная архитектура) — особый вид программ, вычлененных логически и инфраструктурно из общего целого, занимающиеся своей личной не широкой и консистентной ответственностью. Модульный, распределённый подход к построению логических цепочек, пользовательского пути (flow) и т.д.

Как и во всём, конечно, существуют примеры грамотной и некачественной реализации. Человечество набивает шишки, получает драгоценный опыт, конденсирует его в best practice, забывает и совершает какой-либо другой новый виток. Микросервисы — мода последних лет, конечно, не стала исключением. Десятки тысяч разработчиков по крупице, по микрону агрегировали в кучу свои знания, синтезировали, выкристаллизовывали, обтачивали и гравировали опыт. Результатом этой работы стали 12 заповедей правил, которыми следует придерживаться для наиболее оптимизированного и грамотного подхода не только к разработке программы, но и в разворачивании и поддержке. Отмечу также, что, наверное, впервые заговорили о инфраструктуре, о профессии devops.

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

Двенадцать факторов:

  1. Кодовая база — единое место хранения исходный кодов вашего сервиса, хранящиеся в системе контроля версий. Принцип одно к многому: один код может быть развернут как угодно, кем угодно и где угодно;
  2. Зависимости — явно указанные пакеты зависимостей, изолированные, использующие, как правило, семантическое версионирование SemVer;
  3. Конфигурирование — вся гибкость и динамичность вашего программного обеспечения, должна хранится и редактироваться в среде исполнения при помощи переменных окружения;
  4. Сторонние службы — то, с чем мы взаимодействуем непосредственно — любые доступные внутри сети внешние приложения, к примеру, базы данных, системы кэша, очереди сообщений и т.д.;
  5. Сборка, деплой в релиз, runtime — жизненный цикл стадии развёртывания ваших микросервисов или SaaS-систем;
  6. Процессы — подразумевается использования state-независимых системы (stateless);
  7. Биндинг портов — экспорт портов наружу сервиса через привязку (binding);
  8. Параллелизм — возможность масштабировать приложения «в ширину», безболезненный подъём нескольких экземпляров программ без потерь в работоспособности;
  9. Готовность к уничтожению (Dispose/Disposable/Disposability) — гарант работоспособности, валидности и консистентности данных даже в условиях грубой остановки приложения, включая и уничтожение самого потока\процесса выполнения;
  10. Паритет развёртывания — в 12 факторных приложениях желательно держать свой рабочий environment (среду), development, staging и production версии максимально идентичными и равными между собой;
  11. Логирование — использование лога, как машину времени — поток событий, который, в последствии, может стать и дебагером, и timeline state машиной. Любое логирование даёт облегчённый способ понять о текущем и прошедшем состоянии приложения;
  12. Задания администрирования — в развёртывании, разработки часто приходится работать с периодическими, как правило, детерминированными/отдельными задачами. К примеру, запуск миграции данных (в обе стороны), запуск каких-либо воркеров/работ и т.д..

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

Leave a comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Предыдущая запись Следующая запись