Skip to main content

🧱 ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ²: соврСмСнный ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅

12-Factor App β€” это мСтодология создания ΠΎΠ±Π»Π°Ρ‡Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Она ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ, устойчивыми ΠΊ сбоям ΠΈ Π»Π΅Π³ΠΊΠΎ Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ описаниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ².

image.png


1. 🧬 Кодовая база (Codebase)

Одна кодовая Π±Π°Π·Π° Π² систСмС контроля вСрсий (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Git), ΠΈ мноТСство Ρ€Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠΉ β€” staging, production ΠΈ Ρ‚. Π΄.

image.png


2. πŸ“¦ Зависимости (Dependencies)

ВсС внСшниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ явно ΡƒΠΊΠ°Π·Π°Π½Ρ‹ (Π² package.json, requirements.txt ΠΈ Ρ‚. Π΄.) ΠΈ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΡ‚ систСмы.

image.png


3. βš™οΈ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ (Config)

ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ (ΠΏΠ°Ρ€ΠΎΠ»ΠΈ, API-ΠΊΠ»ΡŽΡ‡ΠΈ, адрСса Π‘Π”) Π΄ΠΎΠ»ΠΆΠ½Π° Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния, Π° Π½Π΅ Π² ΠΊΠΎΠ΄Π΅.

image.png


4. πŸ”Œ Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ слуТбы (Backing Services)

Π‘Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, кСши, ΠΎΡ‡Π΅Ρ€Π΅Π΄ΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ внСшниС сСрвисы β€” это смСнныС рСсурсы, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.

image.png


5. πŸ› οΈ Π‘Π±ΠΎΡ€ΠΊΠ°, Ρ€Π΅Π»ΠΈΠ·, запуск (Build, Release, Run)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ разворачиваСтся поэтапно:

  1. Π‘Π±ΠΎΡ€ΠΊΠ° β€” компиляция, установка зависимостСй.

  2. Π Π΅Π»ΠΈΠ· β€” Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ.

  3. Запуск β€” Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ прилоТСния.

image.png


6. 🧼 ΠŸΡ€ΠΎΡ†Π΅ΡΡΡ‹ (Processes)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½Π°Π±ΠΎΡ€ статeless-процСссов. НСльзя Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΌΠ΅ΠΆΠ΄Ρƒ запросами.

image.png


7. πŸ”‰ ΠŸΡ€ΠΈΠ²ΡΠ·ΠΊΠ° ΠΏΠΎΡ€Ρ‚ΠΎΠ² (Port Binding)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ€Ρ‚ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Π΅Ρ€Π΅Π· встроСнный Π²Π΅Π±-сСрвСр) ΠΈ обслуТиваСт входящиС запросы.

image.png


8. 🧡 ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΠΈΠ·ΠΌ (Concurrency)

РаздСляй Π·Π°Π΄Π°Ρ‡ΠΈ: запускай ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ процСссы для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ HTTP-запросов, Ρ„ΠΎΠ½ΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡, ΠΎΡ‡Π΅Ρ€Π΅Π΄Π΅ΠΉ ΠΈ Ρ‚. Π΄.

image.png


9. πŸš€ Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ сбоям (Disposability)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ быстро Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ, Π±Ρ‹Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΌ ΠΊ рСстартам Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚.

image.png


10. βš–οΈ Dev/Prod Parity

Бтарайся максимально ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ окруТСния Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования ΠΈ ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ΅Π½Π° β€” это сниТаСт Π±Π°Π³ΠΈ.

image.png


11. πŸ“„ Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Logs)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ управляСт Π»ΠΎΠ³Π°ΠΌΠΈ. Оно ΠΏΠΈΡˆΠ΅Ρ‚ всё Π² stdout, Π° ΡƒΠΆΠ΅ хостинг-ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° занимаСтся сбором ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΎΠΌ.

image.png


12. πŸ§ͺ Админ-процСссы (Admin Processes)

ΠžΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ (ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, ΠΎΡ‚Π»Π°Π΄ΠΊΠ°) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎ ΠΈ основноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

image.png


πŸ“Œ Π’Ρ‹Π²ΠΎΠ΄

ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ 12 Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΏΠΈΡΠ°Ρ‚ΡŒ прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅:

  • Π»Π΅Π³ΠΊΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°ΡŽΡ‚ΡΡ,

  • устойчивы ΠΊ сбоям,

  • Π½Π΅ зависят ΠΎΡ‚ инфраструктуры.

πŸ’‘ Π₯ΠΎΡ‡Π΅ΡˆΡŒ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Π΅ прилоТСния β€” Π½Π°Ρ‡Π½ΠΈ с этих ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ².