Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Το σουβλατζίδικο ως transactional distributed system.

Îåêßíçóå áðü ôï ìÝëïò Παναγιώτης Καναβός. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 05-10-2005, 23:13. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  25-09-2005, 23:29 5732

    Το σουβλατζίδικο ως transactional distributed system.

       Πριν από μερικούς μήνες έπαισα σε μια σελίδα που ρώταγε, τί σχέση  έχει το σουβλάκι με την πληροφορική? Έχει και μάλιστα σημαντική! Αν όχι ακριβώς το σουβλάκι, σίγουρα το σουβλατζίδικο.

       Την ιδέα μου την έδωσε ένα άρθρο του Gregor Hohpe, συγγραφέα του "Enterprise Integration Patterns", "Starbucks doesn't use two-phase commit". Ο Hohpe περιγράφει πως τα Starbucks δουλεύουν σαν ένα ασύγχρονο κατανεμημένο σύστημα για να υλοποιήσουν μια παραγγελία. Νομίζω ότι το σουβλατζίδικο είναι ένα ακόμα καλύτερο παράδειγμα καθώς περιέχει και πολλαπλά κανάλια συναλλαγών και πιο περίπλοκη διασύνδεση συστημάτων Stick out tongue [:P].
     
       Βασίζω το παράδειγμα μου σε ένα μεγάλο σουβλατζίδικο που υπάρχει στο Νέο Ηράκλειο. Σήμερα το βράδι πήγα να πάρω σουβλάκια και πρόσεξα την εξής αρχιτεκτονική:

    • Στο ταμείο υπάρχει μια ταμίας που παίρνει τις παραγγελίες, τις χτυπάει και δίνει στον πελάτη μια απόδειξη.
    • Πίσω από τον πάγκο υπάρχουν τέσσερεις άνθρωποι οι οποίοι παίρνουν την απόδειξη από τον πρώτο πελάτη που δεν εξυπηρετείται και τυλίγουν τα σουβλάκια της παραγγελίας όσο γινεται γρηγορότερα. Ο καθένας έχει δίπλα του δοχεία με τα υλικά που χρειάζεται, ντομάτες, πίτες, γύρους, τζατζίκι, κρεμμύδι. Αν κάποιο από τα απαραίτητα υλικά τελειώνει ή λείπει, βάζει μια φωνή να του φέρουν κι άλλο. 
    • Στις ψησταριές υπάρχουν 2 ψήστες οι οποίοι ψήνουν συνέχεια σουβλάκια, πατάτες και πίτες, και κόβουν το γύρο και φέρνουν τα υλικά σε όποιον τα χρειάζεται.

    Προσέξτε τώρα πως αυτό το σύστημα δουλεύει ασύγχρονα. 

    • Η ταμίας, οι ψήστες και οι άνθρωποι στον πάγκο δεν εξαρτώνται άμεσα μεταξύ τους. Συνδέονται μεταξύ τους μέσω της απόδειξης που κρατάει ο πελάτης. Όσοι είναι στον πάγκο έχουν ο καθένας ένα queue από υλικά και εξυπηρετούν όλοι ένα κοινό queue από πελάτες. Ο καθένας παίρνει την απόδειξη ενός πελάτη και προσπαθεί να την ολοκληρώσει. Αν η παραγγελία ενός πελάτη δεν μπορεί να ολοκληρωθεί αμέσως,  βάζει σε μια σακούλα την απόδειξη και όσα σουβλάκια μπόρεσε να ετοιμάσει και βάζει μια φωνή στους ψήστες να φέρουν ό,τι χρειάζεται. Αντί να περιμένει όμως, περνάει στον αμέσως διαθέσιμο πελάτη. Όταν έρθουν τα απαραίτητα υλικά για να ολοκληρωθεί μια εκρεμμής παραγγελία, θα την συνεχίσει και θα την δώσει στον πελάτη.
    • Το σουβλατζίδικο είναι μεγάλο, και δέχεται και τηλεφωνικές παραγγελίες. Τις παραγγελίες τις δέχεται πάλι η ταμίας, η οποία και δίνει στον πάγκο την απόδειξη με τα αντικείμενα της παραγγελίας. Ο πρώτος διαθέσιμος ψήστης θα πάρει την παραγγελία και θα την ολοκληρώσει με τον τρόπο που περιγράφηκε παραπάνω. Η παραγγελία θα περιμένει μέχρι να έρθει ο πρώτος διαθέσιμος διανομέας ο οποίος θα πάρει όσες παραγγελίες έχουν ολοκληρωθεί και θα ξεκινήσει την παράδοση.

    Προσέξτε τώρα την αρχιτεκτονική αυτού του συστήματος.

    • Τα transactions υλοποιούνται σε βήματα. Ο πελάτης δεν παραγγέλνει τα σουβλάκια στο ταμείο και περιμένει να του τα φέρει η ταμίας, μπλοκάροντας όλους τους άλλους. Αντίθετα, κάθε βήμα της συναλλαγής πραγματοποιείται από διαφορετικό service, το οποίο μπορεί να ικανοποιεί ταυτόχρονα πολλές παραγγελίες.
    • Έχουμε 4 ανεξάρτητα services. Το ταμείο, οι ψήστες, ο πάγκος, οι διανομείς. Τα services δουλεύουν ασύγχρονα για να "καταναλώσουν" υλικά και να δημιουργήσουν παραγγελίες. Δεν επικοινωνούν όμως άμεσα μεταξύ τους. Αντίθετα, ότι παράγει ένα service μπαίνει σε ένα queue για να παραδοθεί ασύγχρονα στο επόμενο. Έτσι οι ψήστες ψήνουν συνέχεια σουβλάκια για να τα έχουν έτοιμα στον πάγκο. Στον πάγκο υπάρχουν δοχεία με τα έτοιμα υλικά. Οι πελάτες περιμένουν στην ουρά. Οι ημιτελείς παραγγελίες περιμένουν και αυτές τα υλικά τους για να ολοκληρωθούν χωρίς να μπλοκάρουν τη λειτουργία του συστήματος.
    • Έχουμε περιορισμένο αριθμό service processors σε κάθε service (object pooling). Αν στον πάγκο υπήρχαν 10 άτομα που προσπαθούσαν ταυτόχρονα να πάρουν πατάτες, γύρο, σουβλάκια από τους ψήστες, το σύστημα θα κόλλαγε καθώς ο καθένας θα προσπαθούσε να βρει τα υλικά που χρειάζεται. Επιλέγοντας όμως το σωστό αριθμό ατόμων στον πάγκο και χρησιμοποιώντας queueing μπορεί να εξυπηρετηθεί ακόμα και το μέγιστο transaction load του συστήματος. Σημειωτέον, το σουβλατζίδικο αυτό ήταν γεμάτο κατά τη διάρκεια των Ολυμπιακών Αγώνων χωρίς ποτέ να δημιουργηθεί καθυστέρηση.
    • Κάθε transaction έχει το δικό του identifier στη μορφή της απόδειξης. Έτσι τα σουβλάκια των διαφόρων παραγγελιών μπορούν να ολοκληρωθούν σε διαφορετικούς χρόνους, αλλά η κάθε παραγγελία καταλήγει με τα σωστά περιεχόμενα.
    • Κάθε transaction είναι ανεξάρτητο από το service component που το εξυπηρετεί. Αν χρειαστεί, μπορεί κάποιος να φύγει από τον πάγκο και να αναλάβει την ολοκλήρωση της παραγγελίας ένας άλλος.
    • Το σύστημα μπορεί να εξυπηρετήσει πολλά κανάλια. Εδώ έχουμε τρία, το τηλεφωνικό, το φάτσα-φάτσα, έχουμε και τους σερβιτόρους. Μάλιστα, υπάρχουν και προτεραιότητες. Οι τηλεφωνικές παραγγελίες έχουν χαμηλότερη προτεραιότητα από τις φάτσα-φάτσα ή τους σερβιτόρους.

       Και ιδού! Ένα ασύγχρονο κατανεμημένο σύστημα, το οποίο εξυπηρετεί πολλαπλά κανάλια, εξασφαλίζοντας το μέγιστο throughput, διαθεσιμότητα και σταθερότητα στις διακυμάνσεις του φορτίου!

     


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  25-09-2005, 23:46 5734 σε απάντηση της 5732

    Απ: Το σουβλατζίδικο ως transactional distributed system.

    Έβαλα το κείμενο στο wiki μας για να μπορέσετε να το τροποποιήσετε όπως θέλετε.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-09-2005, 22:49 5769 σε απάντηση της 5732

    Απ: Το σουβλατζίδικο ως transactional distributed system.

    Χωρις πλάκα κάποτε μου είχε καρφωθεί και μένα στο μυαλό μια τέτοια εφαρμογή (οχι δεν θα τσακωθουμε για το πως θα γινει χεχεχε). το προβλημα ειναι οτι το target group ειναι ιδιατερα δυσκολο...αντε να πεις στον τακη τον σουβλατζη να στησει enterprise εφαρμογη για Online παραγγελια..για σουβλακια (οπως μερικες pizzaries κανουν)
    Java Hellenic User Group
    www.jhug.gr
  •  05-10-2005, 23:13 5918 σε απάντηση της 5769

    Απ: Το σουβλατζίδικο ως transactional distributed system.

    Σκοπός του post δεν είναι να προτείνει την δημιουργία ενός συστήματος για πώληση γύρου μέσω Internet. Αντίθετα, είναι μία πραγματική κατάσταση που μπορεί να χρησιμοποιηθεί σαν παράδειγμα ενός ασύγχρονου συστήματος.

     javaneze wrote:
    Χωρις πλάκα κάποτε μου είχε καρφωθεί και μένα στο μυαλό μια τέτοια εφαρμογή (οχι δεν θα τσακωθουμε για το πως θα γινει χεχεχε). το προβλημα ειναι οτι το target group ειναι ιδιατερα δυσκολο...αντε να πεις στον τακη τον σουβλατζη να στησει enterprise εφαρμογη για Online παραγγελια..για σουβλακια (οπως μερικες pizzaries κανουν)


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems