Процесс разработки – это всегда трудоемкий и затратный процесс, ради успешности которого нужно использовать максимально эффективные инструменты. Однако, различные методики также могут оказывать сильное влияние на это.
Например, Twelve-Factor App, являющийся целым набором полезных факторов для разработки веб-приложений. С их помощью можно не только расширить имеющиеся возможности, но и улучшить имеющиеся механизмы, а именно:
- Спроектировать разработку с учетом горизонтального масштабирования;
- Реализовать непрерывное развертывание проекта;
- Интегрировать разработку с облачными сервисами, включая хостинги.
И в связи с растущей популярностью данной методики, мы составили краткий обзор его основных принципов.
Единый репозиторий
Весь формируемый код должен оставаться в пределах одной системы. То есть, вы сможете пользоваться одним репозиторием как для тестирования, так и для системы контроля версий.
Если же говорить о разработке нескольких приложений, то вы можете выделить определенную часть кода и занести его в обособленный раздел, выстраивая таким образом древо зависимостей.
В некоторых случаях, у вас появится возможность вовремя заметить слабую связь между частями проекта, из-за чего может потребоваться их разделение на отдельные.
Устойчивые зависимости
Очень важно создавать четкие связи. Это обусловлено наличием большого количества разнообразных библиотек и прочих системных факторов, которые должны учитываться всегда. Twelve-Factor App помогает контролировать этот процесс путем создания отдельного манифеста для подобного рода задач.
Например, все наслышаны о Ruby, который выстраивает собственный манифест зависимостей Gemfile. Для их изоляции используется bundle exec. Таким образом, это позволяет упростить работу и ускорить процессы внедрения новых зависимостей. Еще одним ярким примером подобного опционала является Docker.
Конфигурация как свойство
С помощью конфигурации системы разработчики имеют возможность сделать процесс разработки более гибким. В ней можно хранить такие важные вещи, как логины и пароли, ссылки подключения к БД или другим местам.
Отсюда напрашивается очевидный вывод: конфигурация будет зависима от окружения, которое активно на данный момент. И это правильно. Если код, не включающий в себя критически важные элементы и персональные данные, может быть опубликован, то параметры конфигурации нет. Это и есть один из принципов Twelve-Factor App.
Набор служб
Согласно Twelve-Factor App вы можете использовать весь доступный спектр локальных и сторонних служб, которые так или иначе связаны с настройками конфигурации. Это позволяет избежать проблем с переносом проекта на другую платформу, так как вам не придется адаптировать код под различные сервисы.
Четкое разделение этапов разработки
Любая разработка делится на этапы:
- Этап сборки;
- Релиз проекта;
- Выполнение отдельных процессов.
Twelve-Factor App помогает четко следовать этим этапам и базировать разработку отталкиваясь от возможностей разработчиков. Таким образом, в планировании будут учтены все факторы, влияющие на процесс. Тем не менее, растягивание сроков выполнения может сказаться на автономности работы вашего приложения.
Приложение и процессы
Twelve-Factor App утверждает, что любое приложения должно правильно выстраивать процессы внутри себя. То есть, оно не должно использовать оперативную память или локальное хранилище в качестве постоянного, а попросту не сохранять свое состояние, что актуально в случаях работы с медиафайлами.
Однако, такие вещи как персональные данные и индивидуальные настройки должны не только записываться, но и храниться в безопасном изолированном месте. Это крайне актуально для обеспечения непрерывных сессий.
Независимость от сервера
Twelve-Factor App напоминает о необходимости проектирования независимого от сервера приложения, которое сможет функционировать самодостаточно. Реализация проста: учитывайте подключения сторонних библиотек, указывая путь к их веб-серверам. Например, для PHP нужен ReactPHP и т.д.
Возможность масштабирования
Масштабируемость проекта очень важна для дальнейших нововведений, а также для поддержания высокой производительности. Вам может понадобится отправлять HTTP-запросы за счет стандартного веб-процесса, тогда как задачи в фоне удобнее реализовывать за счет рабочего процесса. Главное, следить за реальным исполнением задачи, а не его имитацией.
Старт и завершение
Эти два процесса не позволяют сохранять текущее состояние, а потому, важно реализовать их максимально быстрое выполнение, чтобы избежать критических потерь данных, особенно в аварийных ситуациях.
Помните, что это касается всех процессов, как фоновых, так и обработчика запросов, который должен предоставлять возможность пользователю повторить транзакцию или другое совершаемое действие.
Максимально быстрое развертывание
Начало разработки и разворачивание проекта – это те этапы, между которыми нужно максимально сократить затрачиваемое время. Учитывайте следующие факторы:
- Время: рабочий релиз должен быть запущен спустя несколько часов, а не несколько дней;
- Люди: предоставьте разработчику возможность следить за процессом развертывания;
- Инструменты: создавайте максимально идентичные условия для разработки и тестирования.
Логи в stdout
Согласно Twelve-Factor App приложение должно использовать stdout для записи логов и управления файлами, так как оно не должно самостоятельно заниматься данными процессами. Очевидно, что это позволяет следить за работоспособностью проекта более эффективно.
Администрирование
Администрирование должно быть сведено ко всем остальным процессам:
- Все коды объединяются в репозитории
- Всегда заносить новые зависимости в манифест
- Закладывать конфигурации в переменные окружения для максимальной гибкости
DevOps инженер с 10-и летним опытом возьмется за профессиональное курирование разработки ПО. Обращайтесь!
About The Author
Виктор