ΕΞΑΜΗΝΙΑΙΑ ΕΡΓΑΣΙΑ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ
Ακ. έτος 2020-2021, 9ο Εξάμηνο, Σχολή ΗΜ&ΜΥ
Υλοποίηση ToyChord
Ανδρωνά Χριστίνα-Μαρία Α.Μ. 03116099
Παπαδόπουλος Κωνσταντίνος Α.Μ. 03116434
Τερζόγλου Αθηνά Α.Μ.03116643
Write troughput
Σε ένα DHT με 10 κόμβους εισάγουμε όλα τα κλειδιά που βρίσκονται στο αρχείο insert.txt με k=1 (χωρίς replication), k=3 και k=5,με linearizability (chain replication) και με eventual consistency (συνολικά 6 πειράματα) και καταγράφουμε το write throughput του συστήματος. Τα inserts θα ξεκινούν κάθε φορά από τυχαίο κόμβο του συστήματος.
Όπως φαίνεται από το γράφημα για την περίπτωση του linearizability με chain replication όσο αυξάνεται το k (πλήθος replication) τόσο αυξάνεται και το write throughput, αφού το αποτέλεσμα του write επιστρέφεται αφού ενημερωθούν όλοι οι replica managers. Αντίθετα στην περίπτωση του eventual cosnistency το πλήθος του k δεν επηρεάζει το write throughput καθώς το αποτέλεσμα του write επιστρέφεται αμέσως μόλις ενημερωθεί ο πρώτος manager. Η τιμές του χρόνου διαφοροποιούνται ελάχιστα λόγω της τυχαιότητας των κόμβων από τους οποίους ξεκινούν οι εισαγωγές. Για κ=1 και οι 2 περιπτώσεις έχουν το ίδιο write throughput.
Οι τιμές αυτές είναι πολύ κοντά σε αυτό που περιμένουμε. Και στις δύο περιπτώσεις, ο χρόνος που απαιτείται για την πρώτη εισαγωγή είναι κοινός και ίσος με τον χρόνο που απαιτείται μέχρι να βρεθεί ο πρώτος κόμβος συν όσο απαιτείται για την πρώτη εισαγωγή. Όσο μεγαλώνει το k παρατηρούμε στην περίπτωση του eventual consistency δεν υπάρχει διαφορά, καθώς το επόμενο insert δεν χρειάζεται να περιμένει τους επόμενους κόμβους. Στην περίπτωση του linearizabilty με chain replication, υπάρχει μία γραμμική αύξηση του απαιτούμενου χρόνου μετά τον πρώτο κόμβο. Η γραμμικότητα προκύπτει από το ότι κάθε κόμβος προσφέρει επιπλέον τόσο χρόνο όσο απαιτούν 2 μηνύματα, ένα για την αποστολή των δεδομένων και ένα για το return. Εδώ αξίζει να σημειώσουμε πως μόνο η αύξηση (Δt) αυξάνεται γραμμικά. Το αποτέλεσμα αναμένουμε να μοιάζει με την γραφική παράσταση της y=ax+b,εκτός βέβαια αν το k φτάσει σε τόσο μεγάλες τιμές ώστε πλέον να είναι σημαντικά πιθανό το επόμενο insert να πέσει σε κομβο που ακόμα δεν έχει ολοκληρώσει το replication.
Read troughput
Στο ίδιο DHT διαβάζουμε όλα τα keys που βρίσκονται στο αρχείο query.txt και καταγράφουμε το read throughput. Τα queries ξεκινούν κάθε φορά από τυχαίο κόμβο. Ο κόμβος ελέγχει αν έχει το κλειδί ή αντίγραφό του, αλλιώς προωθεί το query στον επόμενο.
Όπως φαίνεται από το γράφημα για την περίπτωση του chain consistency όσο αυξάνεται το k αυξάνεται και το read throughput,καθώς πρέπει να διαβάσουμε κάθε φορά από τον τελευταίο replica manager. Αντίθετα στο eventual consistency όπου διαβάζουμε από όποιον πετύχουμε να έχει το κλειδί, το read throughput μειώνεται καθώς το k αυξάνεται, καθώς αυξάνεται η πιθανότητα το query να πετύχει κόμβο που να περιέχει την τιμή του κλειδιού. Και στις 2 περιπτώσεις για k=1 το read throughput είναι σχεδόν το ίδιο.
Εδώ τα αποτελέσματα είναι ακριβώς όπως τα περιμέναμε. για κ=1 δεν υπάρχει καμία διαφορά. Μετά παρατηρούμε πως οι συναρτήσεις ακολουθούν την y=ax+b οπως ήταν αναμενόμενο.
Freshness
Για DHT με 10 κόμβους και k=3, εκτελούμε τα requests του αρχείου requests.txt με διάφορα insert και query σε τυχαίους κόμβους. Παρατηρούμε πως στην περίπτωση του linearizability με chain replication, δεν διαβάζουμε ποτέ stale δεδομένα όπως είναι αναμενόμενο. Αντίθετα για eventual consistency βλέπουμε πως ανάλογα σε ποιούς κόμβους θα γίνουν τα query μπορούμε να πετύχουμε stale τιμές. Στο πείραμα που εκτελέσαμε βρέθηκαν 2 stale δεδομένα. To linearazabilty consistency μας εγγυάται πάντα τα πιο fresh δεδομένα, με tradeoff όμως στο throughput.