Αρχικά κάποιοι ορισμοί:
Client είναι ένας όρος που χρησιμοποιείται πολύ στο διαδίκτυο.
Στην ουσία είναι ένα μέσο το οποίο επιτρέπει ή καλύτερα διευκολύνει την πρόσβαση σε διαδικτυακές υπηρεσίες που διατίθενται από servers ή από πρωτόκολλα επικοινωνίας. Ένας client μπορεί να αποτελείται είτε από hardware, είτε από software, είτε από συνδυασμό αυτών.
Peer to peer.
Ο ορισµός που δίνεται από τους συγγραφείς είναι : «Τα p2p συστήµατα είναι µια κλάση συστηµάτων και εφαρµογών που χρησιµοποιούν κατανεµηµένους πόρους για την εκτέλεση µιας συνάρτησης µε µη κεντρικοποιηµένο τρόπο».
Ο ορισµός που έχει δώσει η οµάδα της Intel που ασχολείται µε P2P δίκτυα είναι: « Ένα P2P σύστηµα είναι ο διαµοιρασµός υπολογιστικών πόρων και υπηρεσιών µε άµεση ανταλλαγή µεταξύ των συστηµάτων». Οι δύο αυτοί ορισµοί µπορούν να θεωρηθούν σχεδόν ταυτόσηµοι. Η διαφορά είναι ότι στον δεύτερο τονίζεται η δυνατότητα διαµοιρασµού τον πόρων που υπάρχουν σε κάθε peer, ενώ στον πρώτο τονίζεται η δυνατότητα χρήσης των πόρων που προσφέρονται από διάφορα peer για την εκτέλεση µιας εργασίας το αποτέλεσµα της οποίας θα προκύψει µε συνεργασία όλων αυτών των κόµβων.
Διαφορές μεταξύ client server και peer to peer:
Client-server model vs p2p model .
Στο client-server µοντέλο υπάρχει ένας υπολογιστής που διαχειρίζεται όλες τις αιτήσεις, ενώ στο p2p µοντέλο, όλοι οι κόµβοι συµµετέχουν στην επιλογή του κόµβου που θα εξυπηρετήσει την αίτηση.
Στο client-server µοντέλο οι συνδέσεις µεταξύ των κόµβων είναι καθορισµένες και το δίκτυο δε µεταβάλλεται συχνά, ενώ στο p2p µοντέλο οι αλλαγές είναι αρκετά συχνές.
Στο client-server µοντέλο είναι γνωστός ο κόµβος που προσφέρει την επιθυµητή υπηρεσία και αρκεί η αναζήτηση της υπηρεσίας στον κόµβο αυτό, ενώ στο p2p µοντέλο ο κόµβος που προσφέρει την υπηρεσία δεν είναι γνωστός και χρειάζεται εξερεύνηση του δικτύου για να βρεθεί.
Στο client-server µοντέλο υπάρχει µια ιεραρχία έτσι ώστε κάθε κόµβος να απευθύνεται στον αµέσως παραπάνω στην ιεραρχία, ενώ στο p2p µοντέλο δεν είναι καθορισµένος ο κόµβος στον οποίο πρέπει να γίνει αναφορά αλλά καθορίζεται από την ερώτηση και από το µηχανισµό δροµολόγησης κάθε κόµβου.
Στο client-server µοντέλο η τοπολογία του δικτύου δεν µεταβάλλεται, ενώ στο p2p µοντέλο µπορεί να αλλάξει αν για παράδειγµα κάποιος κόµβος αποσυνδεθεί και συνδεθεί σε διαφορετική τοποθεσία Server dependencies vs independent lifetime: Στο client-server µοντέλο αν ο server για κάποιο λόγο πέσει το µοντέλο δεν µπορεί να λειτουργήσει και οι χρήστες δεν µπορούν να εξυπηρετηθούν, ενώ στο p2p µοντέλο ακόµη και αν κάποιος κόµβος τεθεί εκτός λειτουργίας το δίκτυο συνεχίζει να λειτουργεί κανονικά µε τη διαφορά ότι ο συγκεκριµένος κόµβος δεν µπορεί να προσφέρει τις υπηρεσίες του.
Στο client-server µοντέλο το όνοµα κάθε κόµβου καθορίζεται και αποθηκεύεται στον DNS server, ενώ στο p2p µοντέλο κάθε κόµβος µπαίνει στο σύστηµα µε το όνοµα που θέλει και το οποίο το µεταδίδει στους γείτονες του.
Στο client-server µοντέλο χρησιµοποιείται σύγχρονη επικοινωνία µε κλήση αποµακρυσµένων διαδικασιών, ενώ στο p2p µοντέλο η επικοινωνία είναι ασύγχρονη αφού οι αλλαγές στο δίκτυο είναι πολύ συχνές και οι χρήστες περιοδικά µπαίνουν και βγαίνουν από το σύστηµα.
Επίσης,
Ένα client-server µοντέλο είναι flat αν όλοι οι clients επικοινωνούν µόνο µε έναν µοναδικό server. Αντίθετα είναι hierarchical αν οι servers ενός επιπέδου λειτουργούν ως clients για τους κόµβους υψηλότερων επιπέδων.
Οι super peers είναι κάποιοι κόµβοι ενός P2P δικτύου οι οποίοι διατηρούν κάποιες πληροφορίες που άλλοι κόµβοι µπορεί να µην τις έχουν. Οι άλλοι κόµβοι ρωτάνε τους super peers για πληροφορίες τις οποίες δεν µπορούν να βρουν µε άλλο τρόπο.
Η διαφορά ανάµεσα στα δύο αυτά είδη εφαρµογών είναι ότι στις compute intensive εφαρµογές η παραλληλοποίηση γίνεται εκτελώντας την ίδια εργασία σε κάθε peer αλλά µε διαφορετικές παραµέτρους, ενώ στις componentized εφαρµογές η παραλληλοποίηση γίνεται εκτελώντας µια διαφορετική εργασία σε κάθε peer. Ο πρώτος τρόπος παραλληλοποίησης ταιριάζει περισσότερο σε περιπτώσεις που χρησιµοποιείται οριζόντια κατανοµή για την αποθήκευση των δεδοµένων, ενώ ο δεύτερος τρόπος ταιριάζει σε περιπτώσεις που χρησιµοποιείται κατακόρυφη κατανοµή. Για παράδειγµα, ας θεωρήσουµε την περίπτωση µιας κατανεµηµένης βάσης δεδοµένων. Αν σε κάθε κόµβοαποθηκεύεται ένας αριθµός πλειάδων του πίνακα (οριζόντια κατανοµή), τότε για την απάντηση µιας ερώτησης αρκεί να εφαρµοστεί η ίδια ερώτηση σε κάθε κόµβο (compute-intensive). Αντίθετα αν αποθηκεύεται σε κάθε κόµβο αποθηκεύεται ένα υποσύνολο των γνωρισµάτων του πίνακα (κατακόρυφη κατανοµή), τότε πρέπει να υποβληθεί µια διαφορετική ερώτηση σε κάθε κόµβο (componentized).