[Distrib] Απορίες ToyChord

Jason Milionis jasonmili.ece at gmail.com
Fri Jan 1 18:16:33 EET 2021


Καλησπέρα σας, και καλή χρονιά! Ήθελα να ρωτήσω τα εξής συνολικά για την
εργασία:

1) Την πληροφορία του προηγούμενου κόμβου την χρειαζόμαστε και θα την
αξιοποιήσουμε μόνο για το depart για να δώσουμε τα κατάλληλα κλειδιά, ή και
αλλού σε άλλες λειτουργίες;

2) Σαν παράδειγμα για το παραπάνω, για ένα query όταν θα έχουμε
replication, ένας κόμβος που δεν είναι ούτε primary ούτε replica manager
για ένα δεδομένο πρέπει να πάει να ψάξει για τον primary και να κάνει route
το request του από τη συντομότερη διαδρομή (μέσω του προηγούμενου/επόμενου
node) ή πάντοτε από τον επόμενο και όποιον βρει πρώτο; (ρωτάω διότι σε αυτή
την περίπτωση πάντα θα "χτυπάμε" τον primary ή τον τελευταίο replica
manager στο chain, και κανέναν από τους άλλους RMs)

3) Επειδή δε θα κρατάμε τη σύνδεση ανοικτή, πχ όταν γίνει query και πάει
στο δακτύλιο, ο κόμβος που έκανε το request θα κλείσει το socket και θα
περιμένει μια απάντηση, αν έχουν γίνει δύο ταυτόσημα (ως προς key) requests
(πχ insert κάτι και μετά ξανά insert κάτι με άλλο value πχ), τότε προκύπτει
θέμα ο κόμβος που έκανε το request πώς θα αναγνωρίσει σε ποιο request
αναφέρεται η απάντηση του (το ίδιο θέμα προκύπτει και αν σταλεί ακριβώς το
ίδιο request δεύτερη φορά πχ). Για να το αντιμετωπίσουμε αυτό πχ στα
queries, ο τρόπος που εμείς σκεφτόμαστε να τα υλοποιήσουμε έχει να κάνει με
την ανάθεση ενός μοναδικού αριθμού ανά κόμβο (requestNumber) για κάθε
request που στέλνει ώστε να μπορεί να το ταυτοποιήσει μετά στην απάντηση.
Αυτό είναι αποδεκτό, ή υπάρχει κάποιος άλλος καλύτερος τρόπος/εναλλακτική;

4) Θεωρούμε ότι τα ονόματα αρχείων/keys είναι μοναδικά, έτσι;

5) Στην περίπτωση του replication, αν πάει και γίνει insert σε "ενδιάμεσο"
RM της αλυσίδας (ούτε στην αρχή ούτε στο τέλος του chain), τότε το μήνυμα
πρέπει να φύγει και προς τις δύο διευθύνσεις (προς τον προηγούμενο και τον
επόμενο) για να φτάσει σε όλους τους RMs; Ή πάντα θα φεύγει προς τον
επόμενο και θα πρέπει να κάνει όλο τον γύρο του ring για να φτάσει στον
προηγούμενο;

6) Αν έχουμε δύο διαφορετικούς node Α και Β με ίση απόσταση από έναν άλλο
node C (που είναι υπεύθυνος έστω για το κλειδί Χ) και ο Α τρέξει insert για
το X ενώ ο Β ταυτόχρονα τρέξει query για το X, τότε το αποτέλεσμα εξαρτάται
προφανώς από το ποιο request θα φτάσει πρώτο στον C. Η περίπτωση αυτή είναι
έγκυρη (και μπορεί να συμβεί) για τα CLIs/nodes της εφαρμογής μας ή να
υποθέσουμε ότι δε θα γίνει κάτι τέτοιο ή κάτι γενικότερο (περιπλέκεται με
την ύπαρξη replicas);

7) Είναι εντάξει για την εργασία εάν για κάθε node που θέλουμε να
ξεκινήσουμε πρέπει να τρέξουμε ένα κατάλληλο script στο συγκεκριμένο
μηχάνημα που θέλουμε να ξεκινήσουμε και να δίνει ο χρήστης το port που
θέλει να μπει αυτός ο node; (δηλαδή χρειάζεται να τρέξουμε στο συγκεκριμένο
μηχάνημα κώδικα, όχι απομακρυσμένα)

8) Σχετικά με το overlay, θα το υλοποιήσουμε και αυτό ως μήνυμα που θα
περνάει σε όλο το δακτύλιο, σωστά; Οπότε αν μπορεί να το στείλει
οποιαδήποτε κόμβος (και όχι μόνο ο bootstrap), τότε η σειρά που θα
εμφανιστούν οι κόμβοι δε θα είναι μοναδική στο output. Αυτό είναι σωστό για
την εργασία;

Σας ευχαριστώ για το χρόνο σας,
Ιάσων
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cslab.ece.ntua.gr/pipermail/distrib/attachments/20210101/5a38d18c/attachment.htm>


More information about the Distrib mailing list