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] – [Konténeres megoldás] 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 979: Line 977:
   * ugyanaz az infrastruktúra   * ugyanaz az infrastruktúra
  
-==== Példa architektúrára ====+---- 
 + 
 +===== 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> <mermaid>
 flowchart LR flowchart LR
-    A[Development] --> B[Staging+    A[Alkalmazás] --> B[Stdout log stream
-    B --> C[Production]+    B --> C[Log gyűjtő rendszer]
 </mermaid> </mermaid>
  
-Mindhárom környezet ugyanazt az alkalmazást futtatja, csak más konfigurációval.+A log gyűjtő rendszer lehet például:
  
-==== Konténeres megoldás ====+  * log aggregator 
 +  * monitoring rendszer 
 +  * cloud log szolgáltatás
  
-Docker használatával könnyen biztosítható környezetek egyezése.+==== Példa konténeres környezetben ==== 
 + 
 +Docker esetén logok automatikusan a standard outputra kerülnek. 
 + 
 +A Docker rendszer gyűjti és tárolja őket.
  
 <mermaid> <mermaid>
-flowchart TD +flowchart LR 
-    A[Docker Image] --> B[Dev környezet+    A[Application container] --> B[stdout
-    --> C[Test környezet] +    --> C[Docker log system]
-    A --> D[Production környezet]+
 </mermaid> </mermaid>
  
-Ugyanaz az image kerül minden környezetbe.+==== 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.1773486446.txt.gz · Last modified: 2026/03/14 11:07 by knehez