Επεξεργασία συναλλαγών

Περιγραφή

Η επεξεργασία συναλλαγών έχει σχεδιαστεί έτσι ώστε να διατηρεί ένα υπολογιστικό σύστημα (όπως μια βάση δεδομένων ή κάποιο σύστημα αρχείων) σε μια γνωστή και συνεπή κατάσταση, εξασφαλίζοντας ότι κάθε ανεξάρτητη λειτουργία που γίνεται στο σύστημα, είτε ολοκληρώνεται με επιτυχία, είτε ακυρώνεται με επιτυχία.
Για παράδειγμα, έστω μια τυπική τραπεζική συναλλαγή, η οποία μεταφέρει 700 € από ένα λογαριασμό καταθέσεων ενός πελάτη στο λογαριασμό όψεως του πελάτη. Η συναλλαγή αυτή μπορεί να είναι μια μοναδική λειτουργία για την τράπεζα, αλλά περιέχει τουλάχιστον δύο ξεχωριστές λειτουργίες από υπολογιστικής άποψης: ανάληψη 700 € από το λογαριασμό καταθέσεων και κατάθεση 700 € στο λογαριασμό όψεως. Αν η λειτουργία ανάληψης επιτύχει ενώ η λειτουργία κατάθεσης αποτύχει (ή ανάποδα), τα βιβλία της τράπεζας δε θα κλείσουν σωστά στο τέλος της ημέρας. Πρέπει επομένως να υπάρχει ένας τρόπος να εξασφαλίζεται ότι είτε και οι δύο λειτουργίες επιτυγχάνουν, είτε και οι δύο αποτυγχάνουν, με τέτοιο τρόπο ώστε να μην προκύπτει ποτέ κάποια ασυνέπεια συνολικά στη βάση δεδομένων της τράπεζας. Αυτός είναι ακριβώς ο λόγος για τον οποίο σχεδιάστηκε η επεξεργασία συναλλαγών.
Η επεξεργασία συναλλαγών επιτρέπει σε πολλές ανεξάρτητες λειτουργίες να συνδέονται μαζί σαν μια μοναδική, αδιαίρετη συναλλαγή. Το σύστημα επεξεργασίας συναλλαγών εξασφαλίζει ότι είτε όλες οι λειτουργίες μιας συναλλαγής ολοκληρώνονται χωρίς σφάλμα, είτε δεν ολοκληρώνεται καμία από αυτές. Αν κάποιες από τις λειτουργίες ολοκληρωθούν αλλά προκύψουν σφάλματα όταν εκτελεστούν οι υπόλοιπες, το σύστημα επεξεργασίας συναλλαγών ακυρώνει (“rolls back”) όλες τις λειτουργίες της συναλλαγής (ακόμα και αυτές που ήταν επιτυχείς), διαγράφοντας όλα τα ίχνη της συναλλαγής και επαναφέροντας το σύστημα σε μια συνεπή, γνώριμη κατάσταση, στην οποία βρισκόταν πριν αρχίσει η συναλλαγή. Αν ολοκληρωθούν με επιτυχία όλες οι λειτουργίες μιας συναλλαγής, η συναλλαγή καταχωρείται (is committed) στο σύστημα και όλες οι αλλαγές στη βάση γίνονται μόνιμες - η συναλλαγή πια δε μπορεί να ακυρωθεί.
Η επεξεργασία συναλλαγών προστατεύει από σφάλματα υλικού και λογισμικού που θα μπορούσαν να αφήσουν μια συναλλαγή ημιτελή, με το σύστημα να βρίσκεται σε μια άγνωστη και ασυνεπή κατάσταση. Αν το υπολογιστικό σύστημα καταρρεύσει κατά τη διάρκεια μιας συναλλαγής, το σύστημα επεξεργασίας συναλλαγών εγγυάται ότι ακυρώνονται όλες οι λειτουργίες στις μη καταχωρημένες (uncommitted) συναλλαγές, δηλ. σε αυτές που δεν έχουν ολοκληρωθεί.
Η επεξεργασία των συναλλαγών γίνεται με αυστηρά χρονολογική σειρά. Αν η συναλλαγή n+1 επιθυμεί να χρησιμοποιήσει το ίδιο τμήμα της βάσης δεδομένων με τη συναλλαγή n, η συναλλαγή n+1 δεν ξεκινά μέχρι η συναλλαγή n να έχει καταχωρηθεί. Πριν καταχωρηθεί κάθε συναλλαγή, όλες οι άλλες συναλλαγές που επηρεάζουν το ίδιο τμήμα του συστήματος πρέπει να έχουν καταχωρηθεί - δε μπορούν να υπάρχουν "τρύπες" στην ακολουθία των προηγούμενων συναλλαγών.

Μεθοδολογία

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

Ακύρωση (Rollback)

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

Rollforward

Ένα ξεχωριστό αρχείο καταγραφής (journal) μπορεί να κρατείται, το οποίο να περιέχει όλες τις τροποποιήσεις στη βάση δεδομένων, που αποκαλείται after images - αν και δεν είναι απαραίτητο για την ακύρωση των συναλλαγών που αποτυγχάνουν, είναι χρήσιμο για την ενημέρωση της βάσης δεδομένων στην περίπτωση αστοχίας του συστήματος, και για αυτόν το λόγο υπάρχει σε κάποια συστήματα. Σε περίπτωση που η βάση δεδομένων σταματήσει εντελώς να λειτουργεί, πρέπει να γίνει επαναφορά της από το τελευταίο αντίγραφο ασφαλείας. Όταν όμως γίνει η επαναφορά της βάσης, το αρχείο καταγραφής μπορεί να εφαρμοστεί σε αυτήν (rollforward) για να την ενημερώσει με τις τελευταίες αλλαγές. Όλες οι συναλλαγές που εκτελούνταν τη στιγμή της αστοχίας, μπορούν τότε να ακυρωθούν. Το αποτέλεσμα είναι τότε μια βάση δεδομένων σε μια συνεπή και γνωστή κατάσταση, που περιλαμβάνει όλες τις συναλλαγές που είχαν κατοχυρωθεί μέχρι τη στιγμή που σταμάτησε το σύστημα να λειτουργεί.

Αδιέξοδα (Deadlocks)

Σε κάποιες περιπτώσεις, δύο συναλλαγές μπορούν, στη διάρκεια της εκτέλεσής τους, να προσπαθήσουν να έχουν πρόσβαση στο ίδιο τμήμα της βάσης δεδομένων ταυτόχρονα, με τρόπο που να τις εμποδίζει από το να συνεχίσουν να εκτελούνται. Για παράδειγμα, η συναλλαγή A μπορεί να έχει πρόσβαση στο τμήμα X της βάσης δεδομένων και η συναλλαγή B στο τμήμα Y. Αν σε αυτό το σημείο, η συναλλαγή A προσπαθήσει να έχει πρόσβαση στο τμήμα Y της βάσης δεδομένων ενώ η συναλλαγή B προσπαθεί να έχει πρόσβαση στο τμήμα X, προκύπτει αδιέξοδο (deadlock), και καμία από τις συναλλαγές δε μπορεί να προχωρήσει. Τα συστήματα επεξεργασίας συναλλαγών είναι σχεδιασμένα ώστε να εντοπίζουν τα αδιέξοδα και συνήθως ακυρώνουν και τις δύο συναλλαγές, εκτελώντας τις στη συνέχεια πάλι με διαφορετική σειρά, αυτόματα, ώστε να μην προκύψει πάλι αδιέξοδο. Άλλες φορές, ακυρώνεται μόνο η μία από τις συναλλαγές σε αδιέξοδο και εκτελείται από την αρχή αυτόματα μετά από μια μικρή καθυστέρηση.
Τα αδιέξοδα μπορούν επίσης να προκύψουν μεταξύ τριών ή περισσότερων συναλλαγών. Όσο πιο πολλές συναλλαγές παίρνουν μέρος, τόσο πιο δύσκολο είναι να εντοπιστούν τα αδιέξοδα, με αποτέλεσμα τα συστήματα επεξεργασίας συναλλαγών να έχουν ένα πρακτικό όριο στον αριθμό των αδιεξόδων που μπορούν να εντοπίσουν.

Συναλλαγή αντιστάθμισης

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

Υλοποιήσεις

Το κλασικό λογισμικό επεξεργασίας συναλλαγών αναπτύχθηκε τη δεκαετία του 1960, με σημαντικότερο εκπρόσωπο το Information Management System της IBM, και συνήθως ήταν άμεσα συνδεδεμένο με ένα συγκεκριμένο σύστημα διαχείρισης βάσης δεδομένων. Στη δεκαετία του 1980 το μοντέλο πελάτη-διακομιστή υλοποίησε παρόμοιες αρχές, με περιορισμένη επιτυχία. Τα τελευταία χρόνια όμως, το κατανεμημένο μοντέλο πελάτη-διακομιστή έχει γίνει πια δύσκολο να διατηρηθεί: καθώς ο αριθμός των συναλλαγών αυξάνεται λόγω των διάφορων online υπηρεσιών (και ειδικά του Παγκόσμιου Ιστού), μια μόνο κατανεμημένη βάση δεδομένων δεν αποτελεί λύση στην πράξη. Επιπλέον, τα περισσότερα online συστήματα αποτελούνται από πολλά προγράμματα που συνεργάζονται, αντί για το αυστηρό μοντέλο πελάτη-διακομιστή, στο οποίο ο μοναδικός διακομιστής χειριζόταν την επεξεργασία των συναλλαγών. Σήμερα είναι διαθέσιμα πολλά συστήματα επεξεργασίας συναλλαγών που λειτουργούν στο επίπεδο μεταξύ των προγραμμάτων και η λειτουργία τους μπορεί να επεκταθεί σε μεγάλα συστήματα, όπως οι υπερυπολογιστές.
Ένα σημαντικό και ανοιχτό πρότυπο είναι το X/Open Distributed Transaction Processing (DTP) (βλ. JTA). Όμως, κλειστά περιβάλλοντα επεξεργασίας συναλλαγών όπως το CICS της IBM εξακολουθούν να είναι δημοφιλή, αν και το CICS έχει εξελιχθεί και περιλαμβάνει και ανοιχτά πρότυπα.
Μια σύγχρονη υλοποίηση επεξεργασίας συναλλαγών συνδυάζει στοιχεία αντικειμενοστρεφούς μονιμότητας (object-oriented persistence) και παραδοσιακές τεχνικές παρακολούθησης των συναλλαγών. Μια τέτοια υλοποίηση είναι το εμπορικό προϊόν DTS/S1 της Obsidian Dynamics και το προϊόν ανοικτού κώδικα db4o.