Στα χρηματοοικονομικά πληροφοριακά συστήματα, ένα από τα πιο επικίνδυνα πράγματα που μπορεί να συμβούν δεν είναι να αποτύχει μια συναλλαγή. Είναι να εκτελεστεί επιτυχώς, αλλά το σύστημα που την ξεκίνησε να μην το γνωρίζει! Και ακόμη χειρότερα, να επιχειρήσει να την εκτελέσει ξανά, θεωρώντας ότι η πρώτη προσπάθεια απέτυχε. Πρόκειται για ένα πρόβλημα που μπορεί να φαίνεται απλό, αλλά βρίσκεται στον πυρήνα της αξιοπιστίας των σύγχρονων Financial Systems.
Ας φανταστούμε μια εταιρεία που πραγματοποιεί πληρωμές μερισμάτων στους μετόχους της. Το πληροφοριακό σύστημα αποστέλλει μια εντολή πληρωμής σε έναν εξωτερικό πάροχο. Η εντολή παραλαμβάνεται και εκτελείται κανονικά, αλλά λόγω προσωρινού προβλήματος επικοινωνίας η επιβεβαίωση δεν φτάνει ποτέ στο αρχικό σύστημα. Μετά από λίγα δευτερόλεπτα εμφανίζεται ένα timeout. Για τον χειριστή, η συναλλαγή φαίνεται αποτυχημένη. Για τον πάροχο, όμως, έχει ολοκληρωθεί. Τι πρέπει να κάνει το σύστημα; Να επαναλάβει την εντολή, διακινδυνεύοντας δεύτερη πληρωμή, ή να σταματήσει, διακινδυνεύοντας μια πληρωμή που ενδεχομένως δεν πραγματοποιήθηκε ποτέ;
Εδώ ακριβώς εμφανίζεται η έννοια του Idempotency, μια τεχνική αρχή με εξαιρετικά σημαντικές επιχειρησιακές συνέπειες. Με απλά λόγια, μια λειτουργία είναι idempotent όταν η επανειλημμένη εκτέλεσή της με την ίδια επιχειρησιακή ταυτότητα έχει το ίδιο επιδιωκόμενο αποτέλεσμα με την εκτέλεσή της μία μόνο φορά. Δεν σημαίνει ότι το σύστημα αγνοεί αυθαίρετα επαναλαμβανόμενα αιτήματα. Σημαίνει ότι μπορεί να αναγνωρίσει πως ένα αίτημα έχει ήδη υποβληθεί και να αποτρέψει τη δημιουργία δεύτερου επιχειρησιακού αποτελέσματος.
Η διαφορά είναι θεμελιώδης. Στον κόσμο των κατανεμημένων συστημάτων, η επικοινωνία δεν είναι ποτέ απολύτως εγγυημένη. Τα δίκτυα παρουσιάζουν καθυστερήσεις, οι υπηρεσίες διακόπτονται, οι συνδέσεις χάνονται και οι απαντήσεις ενδέχεται να μην παραληφθούν. Γι' αυτό και οι μηχανισμοί αυτόματης επανάληψης, τα γνωστά retries, θεωρούνται απαραίτητοι για την ανθεκτικότητα μιας εφαρμογής. Χωρίς Idempotency, όμως, ο ίδιος μηχανισμός που σχεδιάστηκε για να αυξήσει την αξιοπιστία μπορεί να δημιουργήσει σοβαρό επιχειρησιακό κίνδυνο.
Η υλοποίηση συνήθως βασίζεται σε έναν μοναδικό αναγνωριστικό αριθμό ή κλειδί, το λεγόμενο Idempotency Key, το οποίο ταυτοποιεί μια συγκεκριμένη επιχειρησιακή ενέργεια. Όταν το σύστημα παραλάβει ξανά το ίδιο αίτημα, ελέγχει αν η ενέργεια έχει ήδη εκτελεστεί και, εφόσον έχει ολοκληρωθεί, μπορεί να επιστρέψει το καταγεγραμμένο αποτέλεσμα χωρίς να την επαναλάβει. Αυτό προϋποθέτει αξιόπιστη και διαρκή αποθήκευση της κατάστασης, σωστό χειρισμό ταυτόχρονων αιτημάτων και μηχανισμούς που διασφαλίζουν ότι η αναγνώριση και η εκτέλεση δεν αφήνουν επικίνδυνα κενά μεταξύ τους.
Ωστόσο, η πραγματική δυσκολία δεν είναι απλώς τεχνική. Είναι πρωτίστως επιχειρησιακή. Πώς ορίζουμε ότι δύο αιτήματα αφορούν την ίδια ενέργεια; Δύο πληρωμές ίδιου ποσού προς τον ίδιο δικαιούχο δεν είναι απαραίτητα διπλότυπες. Μπορεί να αφορούν δύο διαφορετικές και απολύτως νόμιμες υποχρεώσεις. Αντίστροφα, δύο αιτήματα που φτάνουν με διαφορετικό τεχνικό αναγνωριστικό μπορεί να αναφέρονται στην ίδια επιχειρησιακή εντολή. Συνεπώς, το Idempotency δεν μπορεί να σχεδιαστεί σωστά χωρίς βαθιά κατανόηση των Business Rules.
Στα Capital Markets, η σημασία του επεκτείνεται πολύ πέρα από τις πληρωμές. Μια Εταιρική Πράξη μπορεί να δημιουργεί δικαιώματα, να ενημερώνει θέσεις, να υπολογίζει κατανομές ή να ενεργοποιεί διαδοχικές ενέργειες σε διαφορετικά συστήματα. Η επανεκτέλεση ενός βήματος χωρίς κατάλληλες δικλίδες μπορεί να οδηγήσει σε διπλή καταχώριση, λανθασμένη ενημέρωση υπολοίπων ή ασυμφωνία ανάμεσα σε συστήματα που θεωρούν ότι διαθέτουν την ίδια πληροφορία. Και όσο περισσότερα ανεξάρτητα συστήματα συμμετέχουν σε μια διαδικασία, τόσο δυσκολότερο γίνεται να διαπιστωθεί τι ακριβώς συνέβη.
Υπάρχει μάλιστα μια ιδιαίτερα ενδιαφέρουσα παρεξήγηση γύρω από την έννοια του Exactly-Once Processing. Συχνά αντιμετωπίζεται ως μια ιδιότητα που μπορούμε απλώς να ενεργοποιήσουμε σε μια τεχνολογική πλατφόρμα. Στην πραγματικότητα, η εγγύηση ότι μια επιχειρησιακή ενέργεια θα παράγει αποτέλεσμα ακριβώς μία φορά, ειδικά όταν εμπλέκονται ανεξάρτητες υπηρεσίες και εξωτερικοί πάροχοι, απαιτεί συνδυασμό τεχνικών και επιχειρησιακών μηχανισμών. Το Idempotency αποτελεί κρίσιμο μέρος αυτής της προσπάθειας, αλλά δεν αντικαθιστά τη συμφωνία δεδομένων, την επιβεβαίωση εκτέλεσης ή τον κατάλληλο χειρισμό αβέβαιων καταστάσεων.
Αυτό αναδεικνύει και μια ευρύτερη αρχή στον σχεδιασμό των Mission-Critical Systems. Η αξιοπιστία δεν εξαρτάται μόνο από το αν μια λειτουργία εκτελείται σωστά όταν όλα εξελίσσονται σύμφωνα με το σχέδιο. Εξαρτάται κυρίως από το πώς συμπεριφέρεται το σύστημα όταν κάτι διακόπτεται στη μέση, όταν μια απάντηση χάνεται ή όταν η ίδια εντολή φτάνει περισσότερες από μία φορές. Ο σχεδιασμός αυτών των περιπτώσεων δεν μπορεί να αποτελεί δευτερεύουσα τεχνική λεπτομέρεια. Πρέπει να αποτελεί μέρος της ίδιας της επιχειρησιακής αρχιτεκτονικής.
Γιατί, τελικά, στα χρηματοοικονομικά συστήματα δεν αρκεί να γνωρίζουμε ότι μια εντολή μπορεί να εκτελεστεί σωστά. Πρέπει να μπορούμε να διασφαλίσουμε ότι μια επανάληψη δεν θα μετατρέψει μια σωστή εντολή σε λανθασμένο αποτέλεσμα.
Η πραγματική αξιοπιστία δεν είναι μόνο να μπορεί ένα σύστημα να ολοκληρώνει μια συναλλαγή. Είναι να γνωρίζει πότε δεν πρέπει να την εκτελέσει ξανά.

Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου