User Tools

Site Tools


tanszek:oktatas:informacios_rendszerek_integralasa:12_factor

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
tanszek:oktatas:informacios_rendszerek_integralasa:12_factor [2026/03/14 11:07] kneheztanszek:oktatas:informacios_rendszerek_integralasa:12_factor [2026/03/16 09:35] (current) – [Hibás gyakorlat] knehez
Line 1: Line 1:
-====== 12-Factor App módszertan ======+===== 12-Factor App módszertan =====
  
 ===== 1. faktor: Codebase ===== ===== 1. faktor: Codebase =====
Line 11: Line 11:
 Ha van egy webalkalmazásunk, akkor annak teljes forráskódja egyetlen repositoryban található. Ebből készülhet például: Ha van egy webalkalmazásunk, akkor annak teljes forráskódja egyetlen repositoryban található. Ebből készülhet például:
  
-  * egy fejlesztői telepítés a programozók számára, +  * egy **fejlesztői** telepítés a programozók számára, 
-  * egy staging rendszer tesztelésre, +  * egy **staging** rendszer tesztelésre, 
-  * egy production rendszer a valódi felhasználóknak.+  * egy **production** rendszer a valódi felhasználóknak.
  
 A három környezet nem három külön projekt, hanem ugyanannak az alkalmazásnak három külön futtatási példánya. A három környezet nem három külön projekt, hanem ugyanannak az alkalmazásnak három külön futtatási példánya.
Line 24: Line 24:
 </mermaid> </mermaid>
  
-==== Hibás gyakorlat ====+==== Hibás megközelítés ====
  
 <mermaid> <mermaid>
Line 326: Line 326:
  
 <mermaid> <mermaid>
-flowchart TD+flowchart LR
     A[Git repository] --> B[Dependency file]     A[Git repository] --> B[Dependency file]
     B --> C[Automatikus telepítés]     B --> C[Automatikus telepítés]
Line 353: Line 353:
 Például: Például:
  
-| **Környezet** | **Adatbázis** |+Környezet Adatbázis ^
 | fejlesztői | localhost | | fejlesztői | localhost |
 | teszt | test-db | | teszt | test-db |
Line 682: Line 682:
 Például Redis-ben: Például Redis-ben:
  
-<code>+<mermaid>
 flowchart TD flowchart TD
     A[App instance 1] --> B[(Redis)]     A[App instance 1] --> B[(Redis)]
     C[App instance 2] --> B     C[App instance 2] --> B
-</code>+</mermaid>
  
 Így minden alkalmazás példány ugyanazt az állapotot látja. Így minden alkalmazás példány ugyanazt az állapotot látja.
Line 741: Line 741:
   * IIS   * IIS
  
-Ebben a modellben a webszerver tölti be az alkalmazást, például egy plugin vagy modul segítségével. +Ebben a modellben a webszerver tölti be az alkalmazást, például egy plugin vagy modul segítségével. A 12-Factor megközelítés ezzel szemben azt javasolja, hogy az alkalmazás **saját szervert indítson**, és egy porton keresztül legyen elérhető.
- +
-A 12-Factor megközelítés ezzel szemben azt javasolja, hogy az alkalmazás **saját szervert indítson**, és egy porton keresztül legyen elérhető.+
  
 ==== Példa modern webalkalmazásra ==== ==== Példa modern webalkalmazásra ====
Line 908: Line 906:
  
 <mermaid> <mermaid>
-flowchart TD+flowchart LR
     A[Terhelés növekedés] --> B[Új alkalmazás példány indítása]     A[Terhelés növekedés] --> B[Új alkalmazás példány indítása]
     B --> C[Új példány fogadja a kéréseket]     B --> C[Új példány fogadja a kéréseket]
Line 928: Line 926:
  
 <mermaid> <mermaid>
-flowchart TD+flowchart LR
     A[Stop jelzés] --> B[Folyamat befejezi az aktuális feladatot]     A[Stop jelzés] --> B[Folyamat befejezi az aktuális feladatot]
     B --> C[Folyamat leáll]     B --> C[Folyamat leáll]
Line 962: Line 960:
 Például: Például:
  
-| **Fejlesztés** | **Production** |+Fejlesztés Production ^
 | SQLite adatbázis | PostgreSQL | | SQLite adatbázis | PostgreSQL |
 | lokális fájlrendszer | cloud storage | | lokális fájlrendszer | cloud storage |
Line 980: Line 978:
  
 ---- ----
 +
 +===== 11. faktor: Logs =====
 +
 +A tizenegyedik faktor szerint az alkalmazás **nem kezeli közvetlenül a log fájlokat**, hanem a logokat **folyamként (stream)** írja ki a standard kimenetre.
 +
 +A logok gyűjtését, tárolását és feldolgozását **a futtatási környezet végzi**, nem maga az alkalmazás.
 +
 +==== Mit jelent ez a gyakorlatban? ====
 +
 +Az alkalmazás egyszerűen kiírja a naplóüzeneteket a standard outputra.
 +
 +Például:
 +
 +<code>
 +print("User logged in")
 +</code>
 +
 +vagy
 +
 +<code>
 +console.log("Server started")
 +</code>
 +
 +Az alkalmazás nem hoz létre saját logfájlokat és nem foglalkozik a logok archiválásával.
 +
 +==== Hagyományos megközelítés ====
 +
 +Régebbi rendszerek gyakran közvetlenül fájlba írják a logokat.
 +
 +Példa:
 +
 +<code>
 +/var/log/myapp.log
 +</code>
 +
 +Ez több problémát okozhat:
 +
 +  * a log fájl mérete folyamatosan nő
 +  * nehéz több szerveren összegyűjteni a logokat
 +  * a logok kezelése az alkalmazás feladata lesz
 +
 +==== Helyes megközelítés ====
 +
 +Az alkalmazás csak kiírja az eseményeket, a platform pedig összegyűjti a logokat.
 +
 +<mermaid>
 +flowchart LR
 +    A[Alkalmazás] --> B[Stdout log stream]
 +    B --> C[Log gyűjtő rendszer]
 +</mermaid>
 +
 +A log gyűjtő rendszer lehet például:
 +
 +  * log aggregator
 +  * monitoring rendszer
 +  * cloud log szolgáltatás
 +
 +==== Példa konténeres környezetben ====
 +
 +Docker esetén a logok automatikusan a standard outputra kerülnek.
 +
 +A Docker rendszer gyűjti és tárolja őket.
 +
 +<mermaid>
 +flowchart LR
 +    A[Application container] --> B[stdout]
 +    B --> C[Docker log system]
 +</mermaid>
 +
 +==== Cloud környezetben ====
 +
 +Cloud-rendszerekben a logok gyakran központi rendszerbe kerülnek.
 +
 +Például:
 +
 +  * ELK stack
 +  * Loki
 +  * Cloud logging szolgáltatás
 +
 +<mermaid>
 +flowchart LR
 +    A[Application] --> B[Log stream]
 +    B --> C[Central log storage]
 +</mermaid>
 +
 +----
 +
 +===== 12. faktor: Admin Processes =====
 +
 +A tizenkettedik faktor szerint az alkalmazáshoz tartozó **adminisztratív vagy karbantartási feladatokat külön folyamatként kell futtatni**, ugyanabban a környezetben, mint maga az alkalmazás. Az adminisztratív feladatok nem a normál alkalmazásfolyamat részei, hanem **egyszeri vagy időszakos műveletek**, amelyeket külön kell elindítani.
 +
 +==== Példák adminisztratív folyamatokra ====
 +
 +Tipikus adminisztratív műveletek:
 +
 +  * adatbázis migráció
 +  * adatjavító script futtatása
 +  * cache törlése
 +  * adat importálása
 +  * egyszeri karbantartási feladat
 +
 +Ezek a feladatok nem a webalkalmazás részeként futnak, hanem külön indított folyamatként.
 +
 +==== Példa: adatbázis migrációra ====
 +
 +Egy alkalmazás frissítése előtt gyakran szükséges az adatbázis szerkezetének módosítása.
 +
 +<code>
 +python manage.py migrate
 +</code>
 +
 +Ez egy adminisztratív folyamat, amelyet külön kell elindítani.
 +
 +==== Példa architektúra ====
 +
 +<mermaid>
 +flowchart TD
 +    A[Web Application]
 +    B[Admin Process]
 +
 +    A --> C[(Database)]
 +    B --> C
 +</mermaid>
 +
 +Az adminfolyamat ugyanazt az adatbázist használja, mint az alkalmazás, de külön fut.
 +
 +==== Fontos szabály ====
 +
 +Az adminfolyamatoknak **ugyanazt a környezetet kell használniuk**, mint az alkalmazásnak.
 +
 +Ez azt jelenti, hogy:
 +
 +  * ugyanaz a kódbázis
 +  * ugyanaz a konfiguráció
 +  * ugyanazok a függőségek
 +
 +Így biztosítható, hogy az admin műveletek ugyanúgy működnek, mint az alkalmazás.
 +
 +==== Példa konténeres környezetben ====
 +
 +Konténeres rendszerben egy admin-feladat külön konténerként is futtatható.
 +
 +<mermaid>
 +flowchart TD
 +    A[Application container] --> C[(Database)]
 +    B[Migration container] --> C
 +</mermaid>
 +
 +A migrációs konténer csak egyszer fut le.
 +
  
tanszek/oktatas/informacios_rendszerek_integralasa/12_factor.1773486478.txt.gz · Last modified: 2026/03/14 11:07 by knehez