Γιατί είχε “πέσει” τελικά το Facebook;

Ένας από τους developers της πλατφόρμας του Facebook, ο Robert Johnson, έδωσε εξηγήσεις σχετικά με το “γιατί χθες δεν μπορούσαμε να ποτίσουμε τα ραπανάκια μας στο Farmville”. Όπως φαίνεται… δεν είχα πέσει και πολύ έξω σε ό,τι είχα μαντέψει – αν και το πρόβλημα δεν εντοπιζόταν αποκλειστικά στο φόρτο του API “αλληλεπίδρασης” με το μεγάλο κοινωνικό site.

Για να δούμε αν θα μπορέσω να το αποδώσω “σε απλά Ελληνικά”… Λοιπόόοοον… Πάμε από την αρχή-αρχή: “Βάση δεδομένων” καλείται ένα σύνολο δεδομένων που συνήθως είναι χωρισμένο σε ενότητες. Για παράδειγμα, και το unregistered “πατάει” σε μια βάση δεδομένων – όπως και κάθε “δυναμικό” site/blog. Σε αυτήν, για παράδειγμα, υπάρχει μια ενότητα που ονομάζεται “post 1950”. Σε αυτήν υπάρχουν υποενότητες όπως “τίτλος του post 1950”, “κείμενο του post 1950”, “εικόνες του post 1950″… Και όλα μαζί μας δίνουν το post νούμερο 1950. Ε, το ίδιο συμβαίνει και στο Facebook: μπορεί, για παράδειγμα, να υπάρχει μια ενότητα με όνομα “Μπάμπης ο Σουγιάς”. Σε αυτήν υπάρχουν υποενότητες του στυλ “ηλικία του Μπάμπη του Σουγιά”, “σπουδές του Μπάμπη του Σουγιά” κ.λπ., που στο σύνολο τους δημιουργούν “το προφίλ του Μπάμπη του Σουγιά”.

Γνωρίζοντας αυτό, να ξεκαθαρίσουμε και τη διαφορά ανάμεσα σε “μόνιμο” και “προσωρινό”: σχεδόν τα πάντα στους υπολογιστές λειτουργούν με “προσωρινά” και “μόνιμα” δεδομένα. Για παράδειγμα, “προσωρινό” είναι ένα email “καθώς το γράφετε”. “Μόνιμο” γίνεται από τη στιγμή που ή θα το αποθηκεύσετε, ή θα το στείλετε στον παραλήπτη του. Στο ίδιο στυλ “προσωρινά” και “μόνιμα” δεδομένα χρησιμοποιούν όλες οι εφαρμογές αλλά και τα web sites. Π.χ. στο unregistered η πρώτη σελίδα αλλάζει συχνά – αφού ανανεώνονται τα posts της. Για να μην “τραβά τα post ένα-ένα και τα βάζει σε αντίστροφη χρονολογική σειρά κάθε φορά που κάποιος θέλει να δει την κεντρική σελίδα”
, το unregistered δημιουργεί αυτόματα μια “προσωρινή” σελίδα με όλα τα τελευταία posts, η οποία ανανεώνεται όποτε προστεθεί κάποιο νέο. Καλά ως εδώ;

Σε μια προσπάθεια να διατηρούν “καθαρή” τη βάση δεδομένων του Facebook, οι προγραμματιστές του έφτιαξαν ένα σύστημα που ελέγχει συχνά για διαφορές τα “προσωρινά” με τα “μόνιμα” δεδομένα της υπηρεσίας και προσπαθεί να συγχρονίσει τις ανάμεσα τους διαφορές. Ενώ, όμως, το σύστημα τους λειτουργεί μια χαρά όταν εντοπιστεί κάποιο πρόβλημα στα προσωρινά δεδομένα, οπότε και “τραβά” τις σωστές τιμές από τα “μόνιμα”, δεν ισχύει και το αντίστροφο – και δεν το είχαν… ψυλιαστεί μέχρι χθες: μια αλλαγή στα “μόνιμα” δεδομένα ανάγκασε το σύστημα να προσπαθεί να διορθώσει την τιμή της τραβώντας στοιχεία από τα “προσωρινά”. Και το σύμπαν κατέρρευσε..!

Το χειρότερο ήταν πως κάθε client που προσπαθούσε να συνεργαστεί με την υπηρεσία, και είχε επίσης πρόσβαση σε αυτά τα δεδομένα, κατάφερνε να… επαναφέρει το πρόβλημα, ακόμη και όταν αυτό είχε επιδιορθωθεί “χειροκίνητα” στην “κεντρική βάση” του Facebook. Η λύση ήταν το ολικό… ξήλωμα της, η απαγόρευση της πρόσβασης σε όλους τους χρήστες και τις υπηρεσίες, και η σιγά-σιγά επαναφορά της πρόσβασης σε ομάδες χρηστών, με παράλληλο έλεγχο πως “δεν θα επαναλαμβανόταν το πρόβλημα”.

Σύμφωνα με τον ίδιο τον Robert Johnson, το πρόβλημα που αντιμετώπισε το Facebook ήταν το χειρότερο στα 4 χρόνια λειτουργίας του. Το καταλάβαμε, αγαπητέ..!

Source:

The key flaw that caused this outage to be so severe was an unfortunate handling of an error condition. An automated system for verifying configuration values ended up causing much more damage than it fixed.

...γνωστός και ως Οδυσσέας Κουράφαλος, αρχικός υπεύθυνος για το unregistered. Συντάκτης, γραφίστας, "μαλτιμηντιάς", φανατικός της science fiction και των αστείων γατιών στου ιντερνέτ. "Δηλώνω graphics whore" (παίζω Ms. Pac-Man στο MAME με 2xSAL και το πρώτο Max Payne με FXAA antialiasing). Load "unreg*",8,1.