The Twelve-Factor App

VI. Διεργασίες

Εκτέλεση εφαρμογής ως μία ή περισσότερες διεργασίες χωρίς κατάσταση

Η εφαρμογή εκτελείται στο περιβάλλον εκτέλεσης ως μία ή περισσότερες διεργασίες (processes).

Στην απλούστερη των περιπτώσεων, ο κώδικας είναι ένα αυτόνομο σενάριο εντολών (script), το περιβάλλον εκτέλεσης είναι ο φορητός υπολογιστής του προγραμματιστή με εγκατεστημένο ένα εκτελέσιμο της γλώσσας προγραμματισμού, και η διεργασία κινείται μέσω της γραμμής εντολών (command line) (για παράδειγμα, python my_script.py). Στην άλλη πλευρά του φάσματος, μια ανάπτυξη εφαρμογής για παραγωγή μιας σύνθετης εφαρμογής μπορεί να χρησιμοποιήσει πολλούς τύπους διεργασιών, ενσαρκωμένων σε μερικές διεργασίες.

Οι διεργασίες δώδεκα παραγόντων είναι χωρίς κατάσταση (stateless) και δεν μοιράζονται τίποτα. Οποιαδήποτε δεδομένα πρέπει να παραμείνουν πρέπει να aποθηκευθούν σε μία υπηρεσία υποστήριξης με κατάσταση (stateful), τυπικά μια βάση δεδομένων.

Ο χώρος μνήμης ή το σύστημα αρχείων μιας διεργασίας μπορούν να χρησιμοποιηθούν ως μία σύντομη, μια και έξω προσωρινή μνήμη. Για παράδειγμα, να κατεβάσει ένα μεγάλο αρχείο, να δράσει πάνω σε αυτό, και να αποθηκέυσει τα αποτελέσματα στη βάση δεδομένων. Η εφαρμογή δώδεκα παραγόντων ποτέ δεν θεωρεί ως δεδομένο πως οτιδήποτε αποθηκέυτηκε προσωρινά στη μνήμη της ή στο δίσκο θα είναι διαθέσιμο και σε μια μελλοντική αίτηση για εξυπηρέτηση ή εργασία – με πολλές διεργασίες κάθε τύπου να τρέχουν, οι πιθανότητες είναι υψηλές πως μια μελλοντική αίτηση για εξυπηρέτηση θα εξυπηρετηθεί από μια άλλη διεργασία. Ακόμα και εάν τρέχει μόνο μία διεργασία, μια επανεκκίνηση (πυροδοτημένη απο μια ανάπτυξη κώδικα, αλλαγή παραμέτρων, ή από το περιβάλλον εκτέλεσης που αλλάζει τη φυσική τοποθεσία της διεργασίας) συνήθως θα σβήσει όλη την τοπική (π.χ, μνήμη και σύστημα αρχείων) κατάσταση (state).

Οι συσκευαστές περιουσιακών στοιχείων της εφαρμογής (asset packagers) όπως το django-assetpackager χρησιμοποιούν το σύστημα αρχείων σαν προσωρινή μνήμη για μεταγλωττισμένα στοιχεία (compiled assets). Μια εφαρμογή δώδεκα παραγόντων προτιμά να κάνει αυτή τη μεταγλώττιση κατά το στάδιο κατασκευής (build stage). Μερικοί συσκευαστές όπως το Jammit και το Rails asset pipeline μπορούν να ρυθμιστούν ώστε να συσκευάσουν τα assets κατά το στάδιο κατασκευής.

Μερικά συστήματα ιστού (web systems) βασίζονται σε “επίμονες συνεδρίες” (“sticky sessions”) – δηλαδή, αποθηκέυουν προσωρινά τη συνεδρία χρήστη στη μνήμη της διεργασίας της εφαρμογής και θεωρούν πως οι μελλοντικές αιτήσεις για εξυπηρέτηση απο τον ίδιο χρήστη θα δρομολογηθούν στην ίδια διεργασία. Οι επίμονες συνεδρίες συνιστούν παράβαση των δώδεκα παραγόντων και δεν θα πρέπει ποτέ να χρησιμοποιούνται ή η εφαρμογή να βασίζεται σε αυτές. Τα δεδομένα κατάστασης συνεδρίας είναι καλύτερα να αποθηκευτούν σε μια αποθήκη δεδομένων (datastore) που διαθέτει χρόνο λήξης, όπως το Memcached ή το Redis.