Απομακρυσμένα αντικείμενα (Remote Objects) Κατανεμημένα Συστήματα 1 llis@inf.uth.gr
Απομακρυσμένα αντικείμενα Οι μέθοδοι τους μπορεί να κληθούν απομακρυσμένα στο πνεύμα των RPCs Οι τοπικές αναφορές σε απομακρυσμένα αντικείμενα δείχνουν σε ένα αντικείμενο «πληρεξούσιο» (proxy) στο πνεύμα του RPC client stub Στο μηχάνημα του απομακρυσμένου αντικειμένου υπάρχει ένα αντικείμενο «σκελετός» (skeleton) στο πνεύμα του RPC server stub Ο κώδικας των proxy και skeleton μπορεί να παράγεται αυτόματα χρησιμοποιώντας ειδικά εργαλεία όπως τα RPC client/server stubs Διάφορες τεχνολογίες: Jv-RMI, DCOM, Corb, Κατανεμημένα Συστήματα llis@inf.uth.gr
virtul (remote) reference server object proxy skeleton runtime runtime Κατανεμημένα Συστήματα 3 llis@inf.uth.gr
.foo(pr) res server object proxy res.foo(pr) skeleton runtime pr res runtime Κατανεμημένα Συστήματα 4 llis@inf.uth.gr
Ενδεικτική μεθοδολογία ανάπτυξης υπάρχουσες τάξεις/διασυνδέσεις Remote Interfce Remote Object Clss extends extends client ppliction uses MyRemote Interfce implements MyRemote Object Clss τάξεις που δημιουργούνται αυτόματα implements MyRemote ProxyObject Clss uses MyRemote SkeletonObject Clss Κατανεμημένα Συστήματα 5 llis@inf.uth.gr
interfce RemoteCounter extends Remote { } void resetcounter() throws RemoteException; int getcounter() throws RemoteException; void inccounter() throws RemoteException; clss RemoteCounterObject extends RemoteObject implements RemoteCounter { } privte int c; MyRemoteCounter() { c=0; } void resetcounter() throws RemoteException { c=0; } int getcounter() throws RemoteException { return(c); } void inccounter() throws Remote Exception { c++; } Κατανεμημένα Συστήματα 6 llis@inf.uth.gr
Μεταφορά απομακρυσμένων αναφορών Η αναφορά σε ένα απομακρυσμένο αντικείμενο (μέσω ενός τοπικού proxy) είναι μεταφέρσιμη Μπορεί να σταλεί σε άλλα μηχανήματα, π.χ., ως παράμετρος ή/και αποτέλεσμα απομακρυσμένων κλήσεων μεθόδων Ο αποστολέας σειριοποιεί το proxy και ο παραλήπτης το αποσειριοποιεί σε ένα τοπικό αντίγραφο Η σειριοποιημένη μορφή ενός proxy περιέχει την πληροφορία που χρειάζεται για την δημιουργία και την σύνδεση ενός καινούργιου proxy με το απομακρυσμένο αντικείμενο (skeleton) Κατανεμημένα Συστήματα 7 llis@inf.uth.gr
runtime b pb Β sβ runtime runtime Κατανεμημένα Συστήματα 8 llis@inf.uth.gr
b.op() runtime Β pb B.op() b sβ runtime runtime info() Κατανεμημένα Συστήματα 9 llis@inf.uth.gr
b.op() res runtime Β pb res B.op() b sβ res runtime runtime info() Κατανεμημένα Συστήματα 10 llis@inf.uth.gr
runtime Β b pb sβ runtime runtime Κατανεμημένα Συστήματα 11 llis@inf.uth.gr
Δημιουργία απομακρυσμένων αντικειμένων Επιστρέφεται αναφορά σε ένα αντικείμενο proxy Ένα απομακρυσμένο αντικείμενο μπορεί να δημιουργηθεί και σε απομακρυσμένο μηχάνημα Απαιτείται υπηρεσία «παραγωγής» αντικειμένων (object fctory) που επιστρέφει (πάνω από το δίκτυο) μια αναφορά στο αντικείμενο που δημιουργήθηκε κάτι ανάλογο με το NEW, σε απομακρυσμένη έκδοση η υπηρεσία μπορεί να είναι η ίδια υλοποιημένη ως ένα απομακρυσμένο (εργοστασιακό) αντικείμενο (fctory object) Τοπικά, η αναφορά στο απομακρυσμένο αντικείμενο δείχνει σε ένα (καινούργιο) αντικείμενο proxy Κατανεμημένα Συστήματα 1 llis@inf.uth.gr
fctory object F f pf sf runtime runtime Κατανεμημένα Συστήματα 13 llis@inf.uth.gr
f.new(clss) F f pf sf F.new(Clss) runtime runtime Κατανεμημένα Συστήματα 14 llis@inf.uth.gr
f.new(clss) F f pf sf F.new(Clss) runtime info() runtime Κατανεμημένα Συστήματα 15 llis@inf.uth.gr
F f pf sf runtime runtime Κατανεμημένα Συστήματα 16 llis@inf.uth.gr
F f pf sf runtime runtime Κατανεμημένα Συστήματα 17 llis@inf.uth.gr
F f pf sf runtime runtime Κατανεμημένα Συστήματα 18 llis@inf.uth.gr
Δυναμική εγκατάσταση proxy / skeleton Στον οντοκεντρικό προγραμματισμό δεν είναι πάντα γνωστό εκ των προτέρων (την ώρα της ανάπτυξης) το ποιοι (ακριβώς) τύποι αντικειμένων θα δημιουργηθούν Ο κώδικας της τάξης ενός απομακρυσμένου αντικειμένου ή proxy ίσως δεν υπάρχει τοπικά Απαιτείται ένας μηχανισμός μεταφοράς και δυναμικής φόρτωσης κώδικα πάνω από το δίκτυο Καθώς αυτό γίνεται αυτόματα, π.χ., κατά την μεταφορά των απομακρυσμένων αναφορών, προκύπτουν προβλήματα ασφάλειας Συνήθως, πρέπει να προδιαγραφούν με ρητό τρόπο (configurtion), τα «έμπιστα» μηχανήματα από τα οποία επιτρέπεται να φορτωθεί κώδικας Κατανεμημένα Συστήματα 19 llis@inf.uth.gr
Απενεργοποίηση / ενεργοποίηση αντικειμένων Αν ένα αντικείμενο παραμένει ανενεργό για μεγάλο χρονικό διάστημα, μπορεί να μεταφερθεί στον δίσκο για να απελευθερωθούν πόροι του συστήματος Όταν καταφθάσει αίτηση για ένα απενεργοποιημένο αντικείμενο, αυτό ενεργοποιείται ξανά ώστε να πραγματοποιηθεί η αντίστοιχη κλήση μεθόδου Το μέσο αποθήκευσης μπορεί να είναι οτιδήποτε δίσκος, σύστημα αρχείων, βάση δεδομένων Αυτοματοποίηση διαδικασίας (απ)ενεργοποίησης ομοιότητες με την (απο)σειριοποίηση δομών/αντικειμένων Κατανεμημένα Συστήματα 0 llis@inf.uth.gr
runtime runtime Κατανεμημένα Συστήματα 1 llis@inf.uth.gr
runtime runtime dectivte stte of Κατανεμημένα Συστήματα llis@inf.uth.gr
runtime runtime stte of Κατανεμημένα Συστήματα 3 llis@inf.uth.gr
cll runtime runtime crete empty instnce of stte of Κατανεμημένα Συστήματα 4 llis@inf.uth.gr
cll runtime runtime ctivte stte of Κατανεμημένα Συστήματα 5 llis@inf.uth.gr
cll cll runtime runtime Κατανεμημένα Συστήματα 6 llis@inf.uth.gr
Συλλογή απομακρυσμένων αντικειμένων Ένα απομακρυσμένο αντικείμενο πρέπει να συλλέγεται όταν δεν χρησιμοποιείται από κανέναν όταν δεν υπάρχουν (απομακρυσμένες) αναφορές σε αυτό Απαιτείται καταγραφή των απομακρυσμένων αναφορών (proxies) που υφίστανται ανά πάσα στιγμή όταν μηδενιστεί ο αριθμός των απομακρυσμένων αναφορών τότε το αντικείμενο μπορεί να συλλεχθεί συμβατικά Χρειάζεται προσοχή έτσι ώστε η συλλογή αντικειμένων να λειτουργεί σωστά σε συνδυασμό με την αντιγραφή απομακρυσμένων αναφορών, ώστε να μην υπάρχει περίπτωση εσφαλμένης συλλογής αντικειμένων, λόγω ασύγχρονης επικοινωνίας Κατανεμημένα Συστήματα 7 llis@inf.uth.gr
Μετρητής αναφορών Για κάθε απομακρυσμένο αντικείμενο διατηρείται ένας μετρητής αναφορών Αρχικοποιείται σε 1 όταν δημιουργείται το πρώτο proxy Αυξάνεται κατά 1 όταν δημιουργείται ένα νέο proxy Μειώνεται κατά 1 όταν συλλέγεται ένα proxy Κάθε φορά που δημιουργείται / καταστρέφεται ένα proxy, υπάρχει επικοινωνία με τον εξυπηρετητή Η αντιγραφή μιας αναφοράς πρέπει να γίνεται σύγχρονα, έτσι ώστε το proxy του αποστολέα να μην μπορεί να συλλεχθεί προτού δημιουργηθεί επιτυχώς το proxy στον παραλήπτη Κατανεμημένα Συστήματα 8 llis@inf.uth.gr
1 Κατανεμημένα Συστήματα 9 llis@inf.uth.gr
copy +1 1 Κατανεμημένα Συστήματα 30 llis@inf.uth.gr
Κατανεμημένα Συστήματα 31 llis@inf.uth.gr
copy +1 Κατανεμημένα Συστήματα 3 llis@inf.uth.gr
3 Κατανεμημένα Συστήματα 33 llis@inf.uth.gr
copy 3 +1 Κατανεμημένα Συστήματα 34 llis@inf.uth.gr
4 Κατανεμημένα Συστήματα 35 llis@inf.uth.gr
4 Κατανεμημένα Συστήματα 36 llis@inf.uth.gr
-1 4 Κατανεμημένα Συστήματα 37 llis@inf.uth.gr
3 Κατανεμημένα Συστήματα 38 llis@inf.uth.gr
3 Κατανεμημένα Συστήματα 39 llis@inf.uth.gr
-1 3 Κατανεμημένα Συστήματα 40 llis@inf.uth.gr
Κατανεμημένα Συστήματα 41 llis@inf.uth.gr
Μετρητής βάρους/πίστωσης Ένα απομακρυσμένο αντικείμενο διαθέτει ένα «βάρος» ή μια «τρέχουσα πίστωση» που αντιπροσωπεύει το σύνολο των πιστώσεων που έχουν δοθεί σε proxies Αρχικά, ολόκληρη η πίστωση δίνεται στο πρώτο proxy Όταν αντιγράφεται μια αναφορά, ένα μέρος της πίστωσης του αντίστοιχου proxy μεταβιβάζεται στην νέα αναφορά χωρίς επικοινωνία με το αντικείμενο Όταν συλλέγεται μια αναφορά, η πίστωση που έχει δοθεί στο proxy επιστρέφεται πίσω στο αντικείμενο, και αφαιρείται από την τρέχουσα πίστωση Το αντικείμενο συλλέγεται όταν ο μετρητής γίνει 0 Πρόβλημα: τι γίνεται αν μια αναφορά έχει πίστωση 1; Κατανεμημένα Συστήματα 4 llis@inf.uth.gr
8 8 Κατανεμημένα Συστήματα 43 llis@inf.uth.gr
4 copy,4 4 8 Κατανεμημένα Συστήματα 44 llis@inf.uth.gr
4 4 8 Κατανεμημένα Συστήματα 45 llis@inf.uth.gr
copy, 4 8 Κατανεμημένα Συστήματα 46 llis@inf.uth.gr
4 8 Κατανεμημένα Συστήματα 47 llis@inf.uth.gr
copy, 8 Κατανεμημένα Συστήματα 48 llis@inf.uth.gr
8 Κατανεμημένα Συστήματα 49 llis@inf.uth.gr
8 Κατανεμημένα Συστήματα 50 llis@inf.uth.gr
- 8 Κατανεμημένα Συστήματα 51 llis@inf.uth.gr
6 Κατανεμημένα Συστήματα 5 llis@inf.uth.gr
6 Κατανεμημένα Συστήματα 53 llis@inf.uth.gr
- 4 Κατανεμημένα Συστήματα 54 llis@inf.uth.gr
4 Κατανεμημένα Συστήματα 55 llis@inf.uth.gr
1 copy,1 1 4 Κατανεμημένα Συστήματα 56 llis@inf.uth.gr
1 1 4 Κατανεμημένα Συστήματα 57 llis@inf.uth.gr
1 1 4 Κατανεμημένα Συστήματα 58 llis@inf.uth.gr
1 1-1 4 Κατανεμημένα Συστήματα 59 llis@inf.uth.gr
1 3 Κατανεμημένα Συστήματα 60 llis@inf.uth.gr
Μετρητές με γενιές αντιγράφων Ένα αντικείμενο διατηρεί ξεχωριστούς μετρητές αναφορών για κάθε γενιά αντιγράφων proxies Κάθε proxy έχει ένα αριθμό γενιάς G και αριθμό αντιγράφων N που έχουν γίνει μέσω αυτού Για το πρώτο proxy: G=0, N=0 Όταν αντιγράφεται ένα proxy (G,N) τότε N=N+1, ενώ το νέο proxy που δημιουργείται είναι (G+1,0) Όταν συλλέγεται ένα proxy (G,N), η πληροφορία αυτή στέλνεται στο απομακρυσμένο αντικείμενο, ώστε να ενημερωθούν οι γενιές και οι αντίστοιχοι μετρητές Το αντικείμενο συλλέγεται όταν μηδενιστούν οι μετρητές αναφορών για όλες τις γνωστές γενιές Κατανεμημένα Συστήματα 61 llis@inf.uth.gr
G0 0 G0 1 Κατανεμημένα Συστήματα 6 llis@inf.uth.gr
G0 1 copy,g1 G1 0 G0 1 Κατανεμημένα Συστήματα 63 llis@inf.uth.gr
G0 1 G1 0 G0 1 Κατανεμημένα Συστήματα 64 llis@inf.uth.gr
G1 0 copy,g1 G0 G1 0 G0 1 Κατανεμημένα Συστήματα 65 llis@inf.uth.gr
G1 0 G0 G1 0 G0 1 Κατανεμημένα Συστήματα 66 llis@inf.uth.gr
G1 0 G0 G1 1 copy,g G0 1 G 0 Κατανεμημένα Συστήματα 67 llis@inf.uth.gr
G1 0 G0 G1 1 G0 1 G 0 Κατανεμημένα Συστήματα 68 llis@inf.uth.gr
G1 0 G0 G1 1 G0 1 G 0 Κατανεμημένα Συστήματα 69 llis@inf.uth.gr
G1 0 G0 G1 1 G1,1 G0 1 G 0 Κατανεμημένα Συστήματα 70 llis@inf.uth.gr
G1 0 G0 G0 1 G1-1 G 1 G 0 Κατανεμημένα Συστήματα 71 llis@inf.uth.gr
G1 0 G0 G0 1 G1-1 G 1 G 0 Κατανεμημένα Συστήματα 7 llis@inf.uth.gr
G1 0 G0 G0, G0 1 G1-1 G 1 G 0 Κατανεμημένα Συστήματα 73 llis@inf.uth.gr
G1 0 G 0 G0 0 G1 1 G 1 Κατανεμημένα Συστήματα 74 llis@inf.uth.gr
G1 1 copy,g G 0 G0 0 G1 1 G 1 G 0 Κατανεμημένα Συστήματα 75 llis@inf.uth.gr
G1 1 G 0 G0 0 G1 1 G 1 G 0 Κατανεμημένα Συστήματα 76 llis@inf.uth.gr
G1 1 G 0 G0 0 G1 1 G 1 G 0 Κατανεμημένα Συστήματα 77 llis@inf.uth.gr
G1 1 G 0 G1,1 G0 0 G1 1 G 1 G 0 Κατανεμημένα Συστήματα 78 llis@inf.uth.gr
G 0 G0 0 G1 0 G G 0 Κατανεμημένα Συστήματα 79 llis@inf.uth.gr
Χειρισμός κυκλικών αναφορών Μπορεί να υπάρχει «απομονωμένος» κύκλος αναφορών π.χ., Α έχει μια αναφορά στο Β, και το αντίστροφο, χωρίς να υπάρχει καμία εξωτερική αναφορά σε κάποιο από τα Α και Β Ο εντοπισμός τέτοιων κυκλικών αναφορών είναι ιδιαίτερα δύσκολος σε ένα κατανεμημένο σύστημα ασύγχρονη εκτέλεση και επικοινωνία μπορεί να δημιουργούνται / συλλέγονται αναφορές ταυτόχρονα με τη διαδικασία του εντοπισμού κύκλων Ανασταλτικοί αλγόριθμοι: σταμάτημα/πάγωμα της εκτέλεσης, άμεση συλλογή των «σκουπιδιών» Προοδευτικοί αλγόριθμοι: εγγυώνται ότι κάποια στιγμή θα γίνει συλλογή των «σκουπιδιών» Κατανεμημένα Συστήματα 80 llis@inf.uth.gr
Χειρισμός βλαβών Παρόμοιες τεχνικές με request-reply/rpc Για βλάβες χωρίς επανεκκίνηση του «πελάτη» (που κρατά αναφορές στο αντικείμενο) απαιτείται αναθεώρηση των μεθόδων συλλογής αντικειμένων δεν γίνεται σωστή ενημέρωση των μετρητών αναφοράς Για τον έλεγχο της λειτουργίας των πελατών πρέπει να υπάρχει ρητή πληροφορία για την ταυτότητα τους, άρα και επικοινωνία με το απομακρυσμένο αντικείμενο κάθε φορά που δημιουργείται ένα καινούργιο proxy Εναλλακτικά, το αντικείμενο έχει διάρκεια ζωής που ανανεώνεται περιοδικά από τους πελάτες αν ένας πελάτης παρουσιάσει βλάβη, απλά δεν θα συνεισφέρει στην παράταση ζωής του αντικειμένου Κατανεμημένα Συστήματα 81 llis@inf.uth.gr
Μόνιμα αντικείμενα (υπηρεσιακά) Αντικείμενα που δεν συλλέγονται αυτόματα αντικείμενα που προσφέρουν υπηρεσίες συστήματος Δημιουργούνται και καταστρέφονται «με το χέρι» Οι πελάτες τα ανακαλύπτουν με ρητό τρόπο γνωστές μέθοδοι ανακάλυψης Κατανεμημένα Συστήματα 8 llis@inf.uth.gr