The Twelve-Factor App

VIII. Παραλληλία

Κλιμάκωση προς τα έξω μέσω του μοντέλου διεργασιών

Κάθε πρόγραμμα υπολογιστή, όταν εκτελείται, αντιπροσωπεύεται από μία ή περισσότερες διεργασίες. Οι εφαρμογές ιστου (web apps) έχουν λάβει μία ποικιλία μορφών εκτέλεσης διεργασιών. Για παράδειγμα, οι διεργασίες PHP τρέχουν ως διεργασίες απόγονοι (child processes) του Apache, που εκκινούνται κατά ανάγκη του όγκου αιτημάτων. Οι διεργασίες Java χρησιμοποιούν την αντίθετη προσέγγιση, με τη JVM να παρέχει μια μαζική υπερδιεργασία που δεσμέυει ένα μεγάλο κομμάτι των πόρων συστήματος (CPU και μνήμη) κατά την εκκίνηση, με την παραλληλία να διαχειρίζεται εσωτερικά μέσω ινών εκτέλεσης (threads). Και στις δυο περιπτώσεις, οι εκτελούμενες διεργασίες είναι μόνο ελάχιστα ορατές στους προγραμματιστές της εφαρμογής.

Η κλιμάκωση εκφράζεται από εκτελούμενες διεργασίες, η διαφοροποίηση του φόρτου εργασίας εκφράζεται από τύπους διεργασιών.

Στην εφαρμογή δώδεκα παραγόντων, οι διεργασίες είναι πολίτες πρώτης τάξης. Οι διεργασίες στην εφαρμογή δώδεκα παραγόντων προσιδιάζουν σε αρκετά στοιχεία το μοντέλο διεργασιών του unix (unix process model) για την εκτέλεση δαιμόνων διαχείρισης (service daemons). Χρησιμοποιώντας αυτό το μοντέλο, ο προγραμματιστής μπορεί να δομήσει την εφαρμογή έτσι ώστε να διαχειριστεί μια ποικιλία φόρτου εργασίας με το να αναθέτει κάθε τύπο εργασίας σε ένα τύπο διεργασίας (process type). Για παράδειγμα, τις αιτήσεις HTTP μπορεί να τις χειριστεί μια διεργασία ιστού (web process), και τις μακρά εκτελούμενες εργασίες παρασκηνίου μπορεί να τις χειριστεί μια διεργασία εργάτη (worker process).

Αυτό δεν αποκλείει μεμονωμένες διεργασίες από το να διαχειριστούν την δική τους εσωτερική πολυπλεξία, μέσω ινών εκτέλεσης (threads) μέσα στην εκτελούμενη VM, είτε μέσω του μοντέλου async/evented όπως βρίσκεται σε εργαλεία όπως το EventMachine, το Twisted, ή το Node.js. Αλλά μια μεμονωμένη VM μπορεί να κλιμακωθεί μόνο τόσο (κάθετη κλιμάκωση, vertical scale), οπότε η εφαρμογή πρέπει επίσης να μπορεί να εξαπλωθεί σε περισσότερες διεργασίες εκτελούμενες σε πολλαπλά φυσικά μηχανήματα.

Το μοντέλο διεργασιών (process model) πραγματικά λάμπει όταν είναι η ώρα για κλιμάκωση προς τα έξω (scale out). Η φύση των διεργασιών δώδεκα παραγόντων όπου είναι οριζόντια διαχωρίσιμες και δεν μοιράζονται τίποτα σημαίνει ότι η αύξηση παραλληλίας είναι μια απλή και αξιόπιστη διαδικασία. Η συστοιχία των τύπων διεργασιών και του αριθμού διεργασιών κάθε τύπου είναι γνωστή ως σχηματισμός διεργασιών (process formation).

Οι διεργασίες της εφαρμογής δώδεκα παραγόντων δεν πρέπει ποτέ να συμπεριφέρονται σαν δαίμονες (daemonize) ή να γράφουν αρχεία PID (PID files). Αντίθετα, βασίζονται στον διαχειριστή διεργασιών του λειτουργικού συστήματος (operating system’s process manager) (όπως το systemd, σε ένα κατανεμημένο διαχειριστή διεργασιών σε μια πλατφόρμα υπολογιστικού νέφους, ή σε ένα εργαλείο όπως το Foreman κατά την υλοποίηση) για να διαχειριστούν ροές εξόδου (output streams), να διαχειριστούν διεργασίες που κατέρρευσαν, και να διαχειριστούν επανεκκινήσεις και τερματισμούς από το χρήστη.