The Twelve-Factor App

Εισαγωγή

Στη μοντέρνα εποχή, το λογισμικό συνήθως παρέχεται ως υπηρεσία: καλούμενο εφαρμογές ιστού (web apps), ή λογισμικό-ως-υπηρεσία (software-as-a-service). Η εφαρμογή δώδεκα παραγόντων είναι μια μεθοδολογία κατασκευής εφαρμογών λογισμικού-ως-υπηρεσίας όπου:

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

Πλαίσιο

Οι συγγραφείς αυτού του κειμένου έχουν άμεσα εμπλακεί στην υλοποίηση και ανάπτυξη εκατοντάδων εφαρμογών, και έχουν έμμεσα γίνει μάρτυρες της υλοποίησης, λειτουργίας, και κλιμάκωσης εκατοντάδων χιλιάδων εφαρμογών μέσω της εργασίας τους στη πλατφόρμα Heroku.

Αυτό το κείμενο συνθέτει όλη την εμπειρία μας και τις παρατηρήσεις μας σε μια ευρεία ποικιλία απο εφαρμογές λογισμικού-ως-υπηρεσίας εκεί έξω. Είναι μια τριγωνοποίηση σε ιδανικές πρακτικές για υλοποίηση εφαρμογών, δίνωντας ιδιαίτερη προσοχή στην δυναμική της οργανικής ανάπτυξης μιας εφαρμογής στο χρόνο, της δυναμικής της συνεργασίας μεταξύ προγραμματιστών που δουλέυουν πάνω στη βάση κώδικα της εφαρμογής, και της αποφυγής του κόστους διάβρωσης του λογισμικού.

Το κίνητρό μας είναι να αυξήσουμε τη συνειδητότητα για μερικά συστημικά προβλήματα που έχουμε δει στην υλοποίηση μοντέρνων εφαρμογών, να παρέχουμε ένα κοινό λεξιλόγιο για να συζητήσουμε αυτά τα προβλήματα, και να προσφέρουμε ένα σύνολο από ευρείς εννοιολογικές λύσεις μαζί με την συνάδουσα ορολογία. Η μορφή είναι εμπνευσμένη απο τα βιβλία του Martin Fowler Patterns of Enterprise Application Architecture και Refactoring.

Ποιός πρέπει να διαβάσει αυτό το κείμενο;

Κάθε προγραμματιστής που αναπτύσσει εφαρμογές που τρέχουν σαν υπηρεσίες. Μηχανικοί διαχείρισης συστημάτων οι οποίοι εγκαθιστούν ή διαχειρίζονται τέτοιες εφαρμογές.

Οι Δώδεκα Παράγοντες

I. Βάση Κώδικα

Μία βάση κώδικα με έλεγχο εκδόσεων, πολλές αναπτύξεις

II. Εξαρτήσεις

Εξαρτήσεις εκπεφρασμένα δηλωμένες και απομονωμένες

III. Παραμετροποίηση

Αποθήκευση παραμέτρων στο περιβάλλον

IV. Υπηρεσίες υποστήριξης

Υπηρεσίες υποστήριξης ως επισυναπτόμενοι πόροι

V. Κατασκευή, έκδοση, εκτέλεση

Αυστηρός διαχωρισμός μεταξύ των σταδίων μεταγλώττισης/κατασκευής και εκτέλεσης

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

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

VII. Πρόσδεση θυρών

Εξαγωγή υπηρεσιών μέσω πρόσδεσης θυρών

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

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

IX. Απορριψιμότητα

Μεγιστοποίηση ευρωστίας της εφαρμογής μέσω γρήγορης εκκίνησης και κομψού τερματισμού

X. Ισοτιμία dev/prod

Κράτησε τα περιβάλλοντα υλοποίησης, ελέγχου και παραγωγής όσο πιο όμοια γίνεται

XI. Αρχεία συμβάντων

Τα αρχεία συμβάντων ως ροές συμβάντων

XII. Διεργασίες διαχείρισης

Εκτέλεση εργασιών διαχείρισης ως διεργασίες μια και έξω