Лекция
Привет, Вы узнаете о том , что такое 12-факторов приложений, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое 12-факторов приложений, 12 factor app , настоятельно рекомендую прочитать все из категории Разработка программного обеспечения и информационных систем.
Создание приложений, работающих в веб-масштабе, - тяжелая работа. Риски есть повсюду - от остановки приложения из-за перегрузки сети до захвата вашей доли рынка конкурентом из-за того, что он получает больше кода, и до требовательных пользователей быстрее, чем вы можете. Любое преимущество, которое вы можете получить, чтобы лучше и быстрее создавать рабочий код в веб-масштабе, идет вам на пользу.
К счастью, проблемы работы в веб-масштабе хорошо известны. Есть решения. Одно из них - приложение « 12 факторов» , опубликованное в 2011 году Адамом Виггинсом. Приложение «12 факторов» - это набор принципов, описывающих способ создания программного обеспечения, при соблюдении которого компании могут создавать код, который можно надежно выпускать, быстро масштабировать и поддерживать согласованным и предсказуемым образом.
Ниже приводится краткое изложение принципов работы приложения «12 факторов».
Одна кодовая база отслеживается в системе контроля версий, множество развертывания
Принцип кодовой базы гласит, что все активы, относящиеся к приложению, начиная с исходного кода, сценария инициализации и параметров конфигурации, хранятся в репозитории исходного кода, доступном для разработчиков, тестировщиков и сотрудников системного администрирования. Репозиторий исходного кода также доступен для всех сценариев автоматизации, которые являются частью процессов непрерывной интеграции / непрерывной доставки (CI / CD), которые являются частью жизненного цикла разработки программного обеспечения предприятия. (SDLC).
Явно объявляйте и изолируйте зависимости
Принцип зависимостей утверждает, что в системе управления версиями хранится только код, который является уникальным и имеет отношение к цели приложения. На внешние артефакты, такие как пакеты Node.js, файлы Java .jar или .NET DLL, следует ссылаться в манифесте зависимостей, загружаемом в память во время разработки, тестирования и производственной среды выполнения. Вы не хотите хранить артефакты вместе с исходным кодом в репозитории исходного кода.
Хранить конфигурацию в среде
Принцип конфигурации утверждает, что информация о конфигурации вводится в среду выполнения как переменные среды или как параметры, определенные в независимом файле конфигурации. Хотя в некоторых случаях допустимо хранить параметры по умолчанию, которые можно переопределить непосредственно в коде, такие параметры, как номер порта, URL-адреса зависимостей и параметры состояния, такие как DEBUG, должны существовать отдельно и применяться при развертывании. Хорошими примерами внешних файлов конфигурации являются файл свойств Java, файл манифеста Kubernetes или файл docker-compose.yml .
Преимущество хранения параметров конфигурации отдельно от логики приложения заключается в том, что вы можете применять параметры конфигурации в соответствии с путем развертывания. Например, у вас может быть один набор параметров конфигурации для развертывания, предназначенный для среды тестирования, и другой набор для развертывания, предназначенный для производственной среды.
Рассматривайте вспомогательные сервисы как прикрепленные ресурсы
Принцип вспомогательных сервисов побуждает архитекторов рассматривать внешние компоненты, такие как базы данных, почтовые серверы, брокеры сообщений и независимые сервисы, которые могут быть предоставлены и поддержаны системным персоналом, как присоединенные ресурсы. Об этом говорит сайт https://intellect.icu . Рассмотрение ресурсов как вспомогательных услуг способствует гибкости и эффективности жизненного цикла разработки программного обеспечения (SDLC).
Строго отдельные этапы сборки и запуска
Принцип сборки, выпуска и запуска разбивает процесс развертывания на три воспроизводимых этапа, которые можно создать в любое время. На этапе сборки код извлекается из системы управления исходным кодом и встраивается / компилируется в артефакты, хранящиеся в репозитории артефактов, таком как Docker Hub или репозиторий Maven. После создания кода настройки конфигурации применяются на этапе выпуска . Затем, в Run стадии, среда времени выполнения скриптов , предусмотренная через с помощью такого инструмента, как анзибль. Приложение и его зависимости развертываются во вновь подготовленной среде выполнения.
Ключ к построению, выпуску и запуску заключается в том, что этот процесс является полностью эфемерным. Если что-то в конвейере будет уничтожено, все артефакты и среды могут быть восстановлены с нуля, используя активы, хранящиеся в репозитории исходного кода.
Запустить приложение как один или несколько процессов без сохранения состояния
Принцип процессов , которые можно более точно назвать процессами без состояния , утверждает, что приложение, разработанное в соответствии со структурой 12-факторного приложения, будет работать как набор процессов без состояния. Это означает, что ни один процесс не отслеживает состояние другого процесса и что ни один процесс не отслеживает такую информацию, как состояние сеанса или рабочего процесса. Процесс без сохранения состояния упрощает масштабирование. Когда процесс не имеет состояния, экземпляры могут быть добавлены и удалены для решения определенной нагрузки в определенный момент времени. Поскольку каждый процесс работает независимо, отсутствие состояния предотвращает непредвиденные побочные эффекты.
Экспорт сервисов через привязку к порту
Принцип привязки портов утверждает, что служба или приложение идентифицируются в сети по номеру порта, а не по имени домена. Причина в том, что доменные имена и связанные с ними IP-адреса могут быть назначены на лету с помощью ручных манипуляций и механизмов автоматического обнаружения сервисов. Таким образом, использование их в качестве ориентира ненадежно. Однако предоставление службы или приложения сети в соответствии с номером порта более надежно и проще в управлении. По крайней мере, потенциальные проблемы из-за конфликта между назначением номера порта частным для сети и публичным использованием того же номера порта другим процессом публично можно избежать с помощью переадресации портов .
Основная идея, лежащая в основе принципа привязки портов, заключается в том, что единообразное использование номера порта - лучший способ представить процесс в сети. Например, появились шаблоны, в которых порт 80 является обычным для веб-серверов, работающих под HTTP, порт 443 - это номер порта по умолчанию для HTTPS, порт 22 - для SSH, порт 3306 - порт по умолчанию для MySQL, а порт 27017 - это порт. порт по умолчанию для MongoDB.
Масштабирование в технологическом режиме
Принцип параллелизма рекомендует организовывать процессы в соответствии с их назначением, а затем разделять эти процессы, чтобы их можно было масштабировать вверх и вниз по мере необходимости. Как показано на рисунке выше, приложение доступно в сети через веб-серверы, которые работают за балансировщиком нагрузки. Группа веб-серверов, стоящая за балансировщиком нагрузки, в свою очередь, использует бизнес-логику, которая присутствует в процессах Business Service, которые работают за их собственным балансировщиком нагрузки. Если нагрузка на веб-серверы возрастет, эта группа может быть увеличена изолированно для удовлетворения текущих требований. Однако, если возникнет узкое место из-за нагрузки, возложенной на бизнес-сервис, этот уровень можно масштабировать независимо.
Поддержка параллелизма означает, что различные части приложения можно масштабировать в соответствии с имеющимися потребностями. В противном случае, когда параллелизм не поддерживается, у архитектур нет другого выбора, кроме как полностью масштабировать приложение.
Максимальная надежность благодаря быстрому запуску и плавному завершению работы
Принцип Disposability утверждает, что приложения должны запускаться и останавливаться плавно. Это означает выполнение всей необходимой «уборки» до того, как приложение станет доступным для потребителей. Например, плавный запуск гарантирует, что все подключения к базе данных и доступ к другим сетевым ресурсам будут в рабочем состоянии. Кроме того, были выполнены любые другие необходимые работы по настройке.
Что касается завершения работы, то одноразовая утилита поддерживает правильное завершение всех подключений к базе данных и других сетевых ресурсов и регистрацию всех операций завершения работы, как показано в примере кода, показанном выше.
Сделайте разработку, стейджинг и производство как можно более похожими
Принцип паритета разработчиков и продуктов означает, что все пути развертывания схожи, но независимы, и что развертывание не совершает «скачков» в другую цель развертывания.
На рисунке выше показаны две версии кода приложения. Версия V1 предназначена для выпуска в производственной среде. Новая версия V2 предназначена для среды разработки. И V1, и V2 следуют одинаковому пути развертывания: от сборки до выпуска и затем запуска . Если версия кода V2 будет сочтена готовой к производству, артефакты и настройки, относящиеся к версии 2, НЕ будут скопированы в производственную среду.
Скорее, процесс CI / CD будет скорректирован, чтобы установить цель развертывания V2 на Production. Процесс CI / CD будет следовать ожидаемому шаблону сборки, выпуска и запуска по направлению к этой новой цели.
Как видите, Dev / Prod Parity очень похож на Build, Release и Run . Важное различие заключается в том, что Dev / Prod Parity обеспечивает тот же процесс развертывания для производственной среды, что и для разработки.
Рассматривайте логирование как потоки событий
Принцип журналов поддерживает отправку данных журнала в потоке, к которому могут получить доступ различные заинтересованные потребители. Процесс маршрутизации данных журнала должен быть отделен от обработки данных журнала. Например, одного потребителя могут интересовать только данные об ошибках, а другого потребителя - данные запроса / ответа. Другой потребитель может быть заинтересован в хранении всех данных журнала для архивирования событий. Дополнительным преимуществом является то, что даже если приложение умирает, данные журнала сохраняются и после этого.
Запускать административные / управленческие задачи как разовые процессы
Принцип процессов администрирования гласит, что процессы администрирования являются первоклассными гражданами в жизненном цикле разработки программного обеспечения и должны рассматриваться как таковые. На приведенном выше рисунке показана служба с именем Orders, развернутая как контейнер Docker. Кроме того, существует имя службы администратора dataSeeder
, которое может передавать данные в службу заказов. Служба dataSeeder
является административным процессом, который предназначен для использования с заказами, как показано на схеме ниже.
Однако, несмотря на то, dataSeeder
что это административный процесс, ему предоставляется путь развертывания сборки, выпуска и запуска, аналогичный сервису заказов. Также он выпущен по принципам Codebase и Dev / Prod Parity . Процесс администрирования dataSeeder
не отделен от общего SDLC, а скорее является его частью.
Принципы 12-факторного приложения разработаны, чтобы позволить разработчикам создавать приложения, предназначенные для работы в веб-масштабе. Поначалу они могут показаться подавляющими, и во многих отношениях так и есть. Необходимость переосмыслить саму суть того, как вы создаете программное обеспечение, может оказаться непростой задачей.
К счастью, реализация принципов приложения «12 факторов» - это не вопрос «все или ничего». Вы можете принимать их небольшими удобоваримыми кусками, начиная с первого, а затем постепенно переходя к оставшимся. Уловка состоит в том, чтобы взять на себя обязательство следовать принципам, а затем сделать первый шаг.
Исследование, описанное в статье про 12-факторов приложений, подчеркивает ее значимость в современном мире. Надеюсь, что теперь ты понял что такое 12-факторов приложений, 12 factor app и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Разработка программного обеспечения и информационных систем
Комментарии
Оставить комментарий
Разработка программного обеспечения и информационных систем
Термины: Разработка программного обеспечения и информационных систем