---
title: Проектирование приложений
seo:
  title: Проектирование приложений — Go Developer
  description: Тема «Проектирование приложений» для собеседования Go Developer. Знакомы ли с концепцией 12FA для проектирования SaaS приложений?
---

[Все темы Go Developer](/go-developer)

## <strong>Знакомы ли с концепцией</strong> <code>12FA</code> <strong>для проектирования</strong> <code>SaaS</code> <strong>приложений?</strong> [#q-14bee738d69b817da724db1b231027be]

Да, я знаком с концепцией 12-Factor App (<code>12FA</code>). Это методология для разработки современных веб-приложений, особенно в контексте SaaS (<code>Software as a Service</code>). Она была разработана разработчиками Heroku и описывает 12 принципов, которые помогают создавать приложения, которые легко масштабируются, поддерживаются и развертываются.

#### 12 факторов&#58;

{/* prettier-ignore */}
1. <strong>Кодовая база (</strong><code>Codebase</code><strong>)</strong>&#58;

    - Один репозиторий кода, отслеживаемый в системе контроля версий, для каждого приложения.

1. <strong>Зависимости (</strong><code>Dependencies</code><strong>)</strong>&#58;

    - Явно декларировать и изолировать зависимости с помощью менеджеров пакетов.

1. <strong>Конфигурация (</strong><code>Config</code><strong>)</strong>&#58;

    - Хранить конфигурацию в среде выполнения, отделив её от кода.

1. <strong>Сервисы поддержки (</strong><code>Backing services</code><strong>)</strong>&#58;

    - Третировать локальные и внешние службы (базы данных, очереди сообщений и т.д.) как подключаемые ресурсы.

1. <strong>Сборка, выпуск, запуск (</strong><code>Build&#44; release&#44; run</code><strong>)</strong>&#58;

    - Разделять стадии сборки, выпуска и выполнения.

1. <strong>Процессы (</strong><code>Processes</code><strong>)</strong>&#58;

    - Приложение выполняется как один или более статeless процессов.

1. <strong>Привязка портов (</strong><code>Port binding</code><strong>)</strong>&#58;

    - Экспортировать сервис через привязку к порту, делая его доступным через URL.

1. <strong>Конкурентность (</strong><code>Concurrency</code><strong>)</strong>&#58;

    - Масштабировать приложение путем запуска множества процессов.

1. <strong>Преходящие среды (</strong><code>Disposability</code><strong>)</strong>&#58;

    - Максимизировать устойчивость приложения к сбоям и быстрый старт/остановку процессов.

1. <strong>Паритет между средами (</strong><code>Dev&#47;prod parity</code><strong>)</strong>&#58;

    - Держать разработку, тестирование и рабочие среды как можно более идентичными.

1. <strong>Логи (</strong><code>Logs</code><strong>)</strong>&#58;

    - Рассматривать логи как поток событий и передавать их в системы агрегации логов.

1. <strong>Административные процессы (</strong><code>Admin processes</code><strong>)</strong>&#58;

    - Выполнять административные/управленческие задачи (миграции баз данных, консольные команды) как однократные процессы в окружении выполнения.

Эти принципы помогают обеспечить надежность, гибкость и масштабируемость современных веб-приложений, делая их более подходящими для облачной инфраструктуры.

:::note[Ссылки для изучения]

1. [Концепция Twelve-Factor App](https://habr.com/ru/companies/slurm/articles/785658/)
   :::
