The Twelve-Factor App

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

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

Μία υπηρεσία υποστήριξης (backing service) είναι οποιαδήποτε υπηρεσία την οποία η εφαρμογή καταναλώνει μέσω του δικτύου ως μέρος της κανονικής λειτουργίας της. Παραδείγματα περιλαμβάνουν τις αποθήκες δεδομένων (datastores) (όπως η MySQL ή η CouchDB), τα συστήματα μηνυμάτων/ουρών (messaging/queueing systems) (όπως το RabbitMQ ή το Beanstalkd), τις υπηρεσίες SMTP για εξερχόμενη ηλεκτρονική αλληλογραφία (όπως το Postfix), και συστήματα προσωρινής μνήμης (caching systems) (όπως το Memcached).

Υπηρεσίες υποστήριξης όπως η βάση δεδομένων παραδοσιακά διαχειρίζονται από τους ίδιους διαχειριστές συστημάτων που εγκαθιστούν την εφαρμογή. Πρόσθετα σε αυτές τις τοπικά διαχειριζόμενες υπηρεσίες, η εφαρμογή μπορεί επίσης να έχει και υπηρεσίες που προσφέρονται και διαχειρίζονται από τρίτους. Παραδείγματα περιλαμβάνουν υπηρεσίες SMTP (όπως το Postmark), υπηρεσίες στατιστικών εφαρμογής (όπως το New Relic ή το Loggly), υπηρεσίες δυαδικών επισυναπτόμενων αρχείων (binary asset services) (όπως το Amazon S3), και ακόμα καταναλωτικές υπηρεσίες προσβάσιμες μέσω API (όπως το Twitter, Google Maps, ή το Last.fm).

Ο κώδικας μιας εφαρμογής δώδεκα παραγόντων δεν κάνει καμία διάκριση μεταξύ τοπικών υπηρεσιών και υπηρεσιών τρίτων. Για την εφαρμογή, και οι δύο είναι επισυναπτόμενοι πόροι, προσβάσιμοι μέσω ενός URL ή μέσω άλλων εντοπιστών/διαπιστευτηρίων που αποθηκέυονται ως παράμετροι (config). Μία ανάπτυξη της εφαρμογής δώδεκα παραγόντων θα πρέπει να είναι ικανή να αντικαταστήσει μια τοπική βάση δεδομένων MySQL με μία άλλη διαχειριζόμενη από τρίτους (όπως η Amazon RDS) χωρίς καμία αλλαγή στον κώδικα της εφαρμογής. Παρομοίως, ένας τοπικός εξυπηρετητής SMTP μπορεί να αντικατασταθεί από μία υπηρεσία SMTP από τρίτους (όπως το Postmark) χωρίς αλλαγές στον κώδικα. Και στις δύο περιπτώσεις, μόνο το αναγνωριστικό του πόρου (resource handle) στις παραμέτρους πρέπει να αλλάξει.

Κάθε διακριτή υπηρεσία υποστήριξης είναι ένας πόρος (resource). Για παράδειγμα, μία βάση δεδομένων MySQL είναι ένας πόρος, δύο βάσεις δεδομένων MySQL (που χρησιμοποιούνται για κομμάτιασμα στο επίπεδο εφαρμογής) είναι δύο διακριτοί πόροι. Η εφαρμογή δώδεκα παραγόντων φέρεται σε αυτές τις βάσεις δεδομένων σαν να είναι επισυναπτόμενοι πόροι (attached resources), το οποίο σηματοδοτεί την χαλαρή σύνδεση (loose coupling) με την ανάπτυξη της εφαρμογής (deploy) στην οποία επισυνάπτονται.

Μια ανάπτυξη παραγωγής στην οποία επισυνάπτονται τέσσερις υπηρεσίες υποστήριξης.

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