Εισαγωγή στον Κατανεμημένο Προγραμματισμό
Περιεχόμενα Βασικές γνώσεις υποδοχών δικτύων Ιστορία του κατανεμημένου προγραμματισμού Εξέλιξη των πλαισίων ανάπτυξης επιχειρηματικών εφαρμογών
Βασικές γνώσεις Υποδοχών Δικτύων
Βασικές γνώσεις Δικτύων Επίπεδο εφαρμογών Γνωστές εφαρμογές HTTP FTP Telnet Εφαρμογές χρήστη Επίπεδο μεταφοράς TCP UDP Programming Interface: Sockets Επίπεδο δικτύου IP Επίπεδο σύνδεσης Οδηγοί συσκευών Στοίβα TCP/IP Εφαρμογής (http,ftp,telnet, ) Μεταφοράς (TCP, UDP,..) Δικτύου (IP,..) Σύνδεσης (device driver,..)
Βασικές γνώσεις Δικτύων TCP (Transport Control Protocol) είναι ένα πρωτόκολλο με σύνδεση και παρέχει την αξιόπιστη μεταφορά δεδομένων ανάμεσα σε δύο υπολογιστές Παραδείγματα εφαρμογών HTTP FTP Telnet Στοίβα TCP/IP Εφαρμογής (http,ftp,telnet, ) Μεταφοράς (TCP, UDP,..) Δικτύου (IP,..) Σύνδεσης (device driver,..)
Βασικές γνώσεις Δικτύων UDP (User Datagram Protocol) είναι ένα πρωτόκολλο χωρίς σύνδεση που μεταδίδει ανεξάρτητα πακέτα δεδομένων, ονομάζονται datagrams, ανάμεσα σε δύο υπολογιστές χωρίς να εξασφαλίζει την παράδοσή τους Παράδειγμα εφαρμογών: Clock server Ping Στοίβα TCP/IP Εφαρμογής (http,ftp,telnet, ) Μεταφοράς (TCP, UDP,..) Δικτύου (IP,..) Σύνδεσης (device driver,..)
Κατανοώντας τις υποδοχές Τα πρωτόκολλα TCP και UDP χρησιμοποιούν υποδοχές δικτύου (ports) για την διασύνδεση ροών δεδομένων με συγκεκριμένες εφαρμογές server P o r t TCP Client app app app app port port port port TCP or UDP Data Packet port# data
Κατανοώντας τις υποδοχές Οι υποδοχείς αντιπροσωπεύονται με ένα θετικό 16-bit ακέραιο Μερικοί υποδοχείς είναι δεσμευμένες από υπηρεσίες του συστήματος: ftp 21/tcp telnet 23/tcp smtp 25/tcp login 513/tcp Οι υποδοχείς που χρησιμοποιούμε στις εφαρμογές μας έχουν συνήθως αριθμούς >= 1024
Sockets Παρέχουν ένα περιβάλλον για προγραμματισμό στο επίπεδο μεταφοράς. ΟπρογραμματισμόςμεSockets μοιάζει πολύ με την χρήση αρχείων Το Λ.Σ. χειρίζεται τα Socket handles σας File handle. Οι ροές δεδομένων σε αρχεία λειτουργούν με τον ίδιο μηχανισμό και στα socket ΟπρογραμματισμόςμεSocket είναι ανεξάρτητος από την γλώσσα προγραμματισμού. Αυτό σημαίνει ότι μία Java εφαρμογή που κάνει χρήση socket μπορεί να επικοινωνήσει και με εφαρμογές που κάνουν χρήση socket σε C, C#, Visual Basic, Delphi κλπ.
Επικοινωνία με Socket Ένα πρόγραμμα εξυπηρετητής (server) εκτελείτε σεένανυπολογιστήκαιέχειέναsocket που συνδέεται με συγκεκριμένη υποδοχή (port) περιμένοντας από μία εφαρμογή πελάτη να κάνει μία αίτηση σύνδεσης server port Αίτηση σύνδεσης Client
Επικοινωνία με Socket Αν όλα πάνε καλά, ο server δέχεται την σύνδεση και δημιουργεί ένα νέο socket και το συνδέει με διαφορετική υποδοχή και ενημερώνει την εφαρμογή πελάτη ότι η επικοινωνία θα συνεχιστεί στην καινούργια υποδοχή. Το νέο socket (και η νέα υποδοχή) απαιτείται για να μπορεί ο server να συνεχίσει να ακούει για νέες αιτήσεις από εφαρμογές πελάτες στην αρχική υποδοχή ενώ εξυπηρετεί την τρέχουσα σύνδεση server port port Σύνδεση port Client
Η ιστορία του Κατανεμημένου Προγραμματισμού
Εξέλιξη στις πλατφόρμες Φράσεις Κλειδιά The Network Is the Computer Objects Legacy to the Web The Computer Is the Network Network of Embedded Things Network of Things Κλίμακα Εκκίνηση/Κορύφωση 100s 1,000s 1,000,000s 10,000,000s 100,000,000s 100,000,000 s 100,000,000s 100,000,000 1984/1987 1990/1993 1996/1999 2001/2003 1998/2004 2004/2007 Πρωτόκολλα μεταφοράς X X +HTTP (+JVM) +XML Portal +RM Unknown Ευρετήρια NS, NS+ +CDS +LDAP(*) +UDDI +Jini +? Πρωτόκολλα Συνόδου RPC, XDR +CORBA +CORBA, RM +SOAP, XML +RM/Jini +? Schematic
Πρωτότυπα Επικοινωνίας (Communication Patterns) Client- Server 3-Tier Web Application Web Services Hybrid P2P Fractal
Πρωτότυπα Επικοινωνίας (Communication Patterns) Επιχειρησιακές Εφαρμογές DB Server App Server Web Server Browser Client J2EE J2SE/ J2ME Εφαρμογές Διαδυκτίου (Web Application)
Πρωτότυπα Επικοινωνίας (Communication Patterns) Bus. Sys. DB App Web Browser XML (UDDI, SOAP) J2EE J2SE/ J2ME Context and Identity (LDAP, Policy, Liberty) Υπηρεσίες Διαδυκτίου (Web Services)
Εξέλιξη των πλαισίων Ανάπτυξης Επιχειρησιακών Εφαρμογών
Εξέλιξη των πλαισίων ανάπτυξης Επιχειρησιακών Εφαρμογών Μονολιθικά (Single tier) Δισδιάστατα - Πελάτης / Εξυπηρετητής (Two tier) Τρισδιάστατα (Three tier) Βασισμένα σε RPC Βασισμένα σε απομακρυσμένα αντικείμενα DCOM CORBA Βασισμένα σε τεχνολογίες ιστότοπων (HTML browser and Web server) Εξυπηρετητές εφαρμογών βασισμένοι σε ιδιωτικές τεχνολογίες Εξυπηρετητές εφαρμογών βασισμένοι ανοικτά πρότυπα
Επιχειρησιακές εφαρμογές Τμήματα των επιχειρησιακών εφαρμογών Επίπεδο παρουσίασης ή Διεπαφής χρήστη (Presentation logic) Επίπεδο Επιχειρησιακής Λογικής ή Επιχειρησιακών Διαδικασιών (Business logic) Επίπεδο πρόσβασης δεδομένων (Data access logic and data model) Υπηρεσίες συστήματος (System services) Η εξέλιξη των πλαισίων ανάπτυξης επιχειρησιακών εφαρμογών αντανακλά Πόσο ευέλικτα μπορείς να κάνεις αλλαγές Ποιος παρέχει τις υπηρεσίες συστήματος
Μονολιθικά συστήματα(mainframe-based) Χαζά τερματικά συνδέονται απευθείας στον κεντρικό υπολογιστή Κεντρικοποιημένο μοντέλο (ΟΧΙ Κατανεμημένο) Τα επίπεδα παρουσίασης, επιχειρησιακής λογικής και πρόσβασης δεδομένων συμπλέκονται σε μια μονολιθική εφαρμογή
Μονολιθικά συστήματα: Πλεονεκτήματα και μειονεκτήματα Πλεονεκτήματα: Δεν απαιτείται διαχείριση εφαρμογών-πελατών Η συνέπεια στοιχείων είναι εύκολο να επιτευχθεί Μειονεκτήματα: Δύσκολη επαναχρησιμοποίηση, συντήρηση και βελτίωση εφαρμογώνμιακαιταδιάφοραεπίπεδατηςεφαρμογής μπλέκονται
Μοντέλο Πελάτη Εξυπηρετητή (Two-Tier) SQL request SQL response Database Σύνθετες εφαρμογές πελάτη (Fat clients) επικοινωνούν απευθείας με την Βάση δεδομένων Στέλνονται ερωτήματα SQL και λαμβάνονται μη επεξεργασμένα δεδομένα Τα επίπεδα παρουσίασης, επιχειρησιακής λογικής και πρόσβασης δεδομένων βρίσκονται στην πλευρά της εφαρμογής πελάτη
Μοντέλο Πελάτη Εξυπηρετητή (Two-Tier) Πλεονεκτήματα: Ανεξαρτησία από την Βάση Δεδομένων(σε σύγκριση με μονολιθικά μοντέλα) Μειονεκτήματα: Τα επίπεδα παρουσίασης, επιχειρησιακής λογικής και πρόσβασης δεδομένων συμπλέκονται στην πλευρά της εφαρμογής πελάτη κάνοντας δύσκολη την συντήρηση και βελτίωση της εφαρμογής Το μοντέλο δεδομένων έχει «ισχυρή συνάφεια» με τις εφαρμογές πελάτη Σε περίπτωση αλλαγής της μορφής της Βάσης Δεδομένων (DB Schema) όλες οι εφαρμογές πελάτη δεν λειτουργούν Οι ενημερώσεις στην εφαρμογή απαιτούν ταυτόχρονη ενημέρωση σε όλες τις εφαρμογές πελάτη, κάνοντας την συντήρηση εφιάλτη Μια σύνδεση με την βάση δεδομένων για κάθε εφαρμογή πελάτη, κάνοντας δύσκολη την κλιμάκωση Τα δεδομένα μεταφέρονται χωρίς επεξεργασία στις εφαρμογές πελάτη αυξάνοντας την κίνηση δεδομένων στο δίκτυο
Παράδειγμα two-tier: Sockets στην Java Ένα socket είναι ένα άκρο σε ένα αμφίδρομο κανάλι επικοινωνίας ανάμεσα σε δύο προγράμματα που επικοινωνούν μέσω ενός δικτύου Κάθε socket συνδέεται σε μια υποδοχή ώστε το επίπεδο TCP μπορεί να αναγνωρίσει την εφαρμογή για την οποία προέρχονται / προορίζονται τα δεδομένα Η Java διαθέτει ένα πακέτο (java.net) για τις κλάσεις που σχετίζονται με το δίκτυο Διαθέτει κλάσεις για sockets Socket για υλοποίηση εφαρμογών πελάτη ServerSocket για υλοποίηση εξυπηρετητών
Java Sockets Server ServerSocket(1234) Output/write stream Client Input/read stream Socket( 10.0.0.1, 1234)
Υλοποιώντας έναν Εξυπηρετητή 1. Ανοίγουμε ένα Server Socket: ServerSocket server; DataOutputStream os; DataInputStream is; server = new ServerSocket( PORT ); 2. Περιμένουμε μία αίτηση χρήστη: Socket client = server.accept(); 3. Δημιουργούμε ροές δεδομένων για την επικοινωνία με την εφαρμογή πελάτη is = new DataInputStream( client.getinputstream() ); os = new DataOutputStream( client.getoutputstream() ); 4. Πραγματοποιούμε την επικοινωνία με την εφαρμογή πελάτη Διάβασμα δεδομένων από πελάτη: String line = is.readline(); Αποστολή δεδομένων σε πελάτη: os.writebytes("hello\n"); 5. Κλείσιμο sockets: client.close();
Πολυνηματικός εξυπηρετητής: Υποστήριξη πολλαπλών πελατών Client 1 Process Server Process Internet Server Threads Client 2 Process
Υλοποιώντας έναν πολυνηματικό Εξυπηρετητή 1. Ανοίγουμε ένα Server Socket: ServerSocket server; DataOutputStream os; DataInputStream is; server = new ServerSocket( PORT ); 2α. Περιμένουμε μία αίτηση χρήστη: while(true){ Socket client = server.accept(); 2β. Δημιουργούμε ένα νήμα με παράμετρο το socket του πελάτη 3. Υλοποιούμε τα βήματα 3 & 4 του απλού εξυπηρετητή σε κάθε νήμα 4. Κλείνουμε το νήμα που δημιουργήσαμε στο τέλος
Υλοποιώντας μία εφαρμογή πελάτη 1. Δημιουργούμε ένα αντικείμενο Socket: client = new Socket( server, port_id ); 2. Δημιουργούμε ροές δεδομένων για την επικοινωνία με τον εξυπηρετητή is = new DataInputStream(client.getInputStream() ); os = new DataOutputStream( client.getoutputstream() ); 3. Πραγματοποιούμε την επικοινωνία με τον εξυπηρετητή: Διάβασμα δεδομένων από τον εξυπηρετητή: String line = is.readline(); Αποστολή δεδομένων στον εξυπηρετητή: os.writebytes("hello\n"); 4. Κλείσιμο sockets: client.close();
Ένας απλός εξυπηρετητής (απλοποιημένος κώδικας) // SimpleServer.java: a simple server program import java.net.*; import java.io.*; public class SimpleServer { public static void main(string args[]) throws IOException { // Register service on port 1234 ServerSocket s = new ServerSocket(1234); Socket s1=s.accept(); // Wait and accept a connection // Get a communication stream associated with the socket OutputStream s1out = s1.getoutputstream(); DataOutputStream dos = new DataOutputStream (s1out); // Send a string! dos.writeutf("hi there"); // Close the connection, but not the server socket dos.close(); s1out.close(); s1.close(); } }
Μια απλή εφαρμογή πελάτη (απλοποιημένος κώδικας) // SimpleClient.java: a simple client program import java.net.*; import java.io.*; public class SimpleClient { public static void main(string args[]) throws IOException { // Open your connection to a server, at port 1234 Socket s1 = new Socket("mundroo.cs.mu.oz.au",1234); // Get an input file handle from the socket and read the input InputStream s1in = s1.getinputstream(); DataInputStream dis = new DataInputStream(s1In); String st = new String (dis.readutf()); System.out.println(st); // When done, just close the connection and exit dis.close(); s1in.close(); s1.close(); } }
Socket Exceptions try { Socket client = new Socket(host, port); handleconnection(client); } catch(unknownhostexception uhe) { System.out.println("Unknown host: " + host); uhe.printstacktrace(); } catch(ioexception ioe) { System.out.println("IOException: " + ioe); ioe.printstacktrace(); }
ServerSocket & Exceptions public ServerSocket(int port) throws IOException Creates a server socket on a specified port. A port of 0 creates a socket on any free port. You can use getlocalport() to identify the (assigned) port on which this socket is listening. The maximum queue length for incoming connection indications (a request to connect) is set to 50. If a connection indication arrives when the queue is full, the connection is refused. Throws: IOException - if an I/O error occurs when opening the socket. SecurityException - if a security manager exists and its checklisten method doesn't allow the operation.
Εξυπηρετητής σε ατέρμονο βρόχο // SimpleServerLoop.java: a simple server program that runs forever in a single thead import java.net.*; import java.io.*; public class SimpleServerLoop { public static void main(string args[]) throws IOException { // Register service on port 1234 ServerSocket s = new ServerSocket(1234); while(true) { Socket s1=s.accept(); // Wait and accept a connection // Get a communication stream associated with the socket OutputStream s1out = s1.getoutputstream(); DataOutputStream dos = new DataOutputStream (s1out); // Send a string! dos.writeutf("hi there"); // Close the connection, but not the server socket dos.close(); s1out.close(); s1.close(); } } }
Μελετήστε Βασικά θέματα Socket http://www.javaworld.com/javaworld/jw-12-1996/jw-12-sockets.html Σειριοποίηση αντικειμένων http://java.sun.com/developer/technicalarticles/alt/sockets/index.html
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε RPC) RPC request RPC response SQL request SQL response Database Απλούστερες εφαρμογές πελάτη (Thin clients): Τo επίπεδο παρουσίασης είναι ξεχωριστό από το επίπεδο επιχειρησιακής λογική και το επίπεδο πρόσβασης δεδομένων Τα επίπεδα επιχειρησιακής λογικής και πρόσβασης δεδομένων υλοποιούνται στον ενδιάμεσο εξυπηρετητή Απαιτείται η ύπαρξη ενδιάμεσου εξυπηρετητή Παράλληλη επεξεργασία, πολυνημάτωση, δοσοληψίες (transaction), ασφάλεια, διατήρηση δεδομένων (persistence), πολυπλεξία (multiplexing), απόδοση, κλπ.
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε RPC) Πλεονεκτήματα: Η επιχειρησιακή λογική είναι περισσότερη ευέλικτη σε σχέση με το μοντέλο πελάτη-εξυπηρετητή Μπορεί να μεταβάλετε ανεξάρτητα με την εφαρμογή πελάτη Μειονεκτήματα: Εισάγεται πολυπλοκότητα στον ενδιάμεσο εξυπηρετητή Η εφαρμογή πελάτη και ο ενδιάμεσος εξυπηρετητής είναι ισχυρά συνδεδεμένοι (σε σχέση με τις τρισδιάστατες επιχειρησιακές εφαρμογές βασισμένες σε αντικείμενα) Ο κώδικας δεν είναι επαναχρησιμοποιήσιμος (σε σχέση με τις τρισδιάστατες επιχειρησιακές εφαρμογές βασισμένες σε αντικείμενα)
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε Απομακρυσμένα Αντικείμενα) Object request Object response SQL request SQL response Database Η επιχειρησιακή λογική και η πρόσβαση δεδομένων υλοποιούνται με αντικείμενα Χρησιμοποιείται «αφαίρεση» στον ορισμό τους (interface language) Μοντέλα αντικειμένων: CORBA, RMI, DCOM Η γλώσσα ορισμού διεπαφών της CORBA είναι η IDL Η γλώσσα ορισμού διεπαφών του RMI είναι η Java interface
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε Απομακρυσμένα Αντικείμενα) Πλεονεκτήματα: Λιγότερη συνάφεια σε σχέση με το μοντέλο RPC Ο κώδικας είναι επαναχρησιμοποιήσιμος Μειονεκτήματα: Ηπολυπλοκότητατουενδιάμεσουεπιπέδουπρέπει να αντιμετωπιστεί
Παράδειγμα: Java RMI Παράδειγμα στο JBuilder για το RMI
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε τεχνολογίες διαδικτύου) HTML request HTML response WEB Server SQL request SQL response Database Ο φυλλομετρητής (Browser) υλοποιεί το επίπεδο παρουσίασης Ο Browser επικοινωνεί με το Web server μέσω του πρωτόκολλου HTTP Τα επίπεδα επιχειρησιακής λογικής και πρόσβασης δεδομένων υλοποιούνται με τεχνολογίες δυναμικής παραγωγής περιεχομένου (CGI, Servlet/JSP, ASP)
Τρισδιάστατες Επιχειρησιακές Εφαρμογές (Βασισμένες σε τεχνολογίες διαδικτύου) Πλεονεκτήματα: Η εφαρμογή πελάτη βρίσκεται παντού Μηδενική διαχείριση εφαρμογής πελάτη Υποστηρίζονται πολλαπλά είδη συσκευών Κινητά τηλέφωνα με J2ME Μειονεκτήματα: Ηπολυπλοκότητατουενδιάμεσουεπιπέδουπρέπει να αντιμετωπιστεί
Τάσεις Μετάβαση από μονολιθικές ή δισδιάστατες εφαρμογές σε πολυδιάστατες αρχιτεκτονικές Μετάβαση από μονολιθικά μοντέλα σε αντικειμενοστραφή Μετάβαση από εξειδικευμένες εφαρμογές πελάτη σε πελάτες βασισμένες σε τεχνολογίες διαδικτύου
Σημαντικά προβλήματα και λύσεις Η πολυπλοκότητα του ενδιάμεσου επιπέδου παραμένει Στην πλειονότητα το επιχειρησιακών εφαρμογών πολλές απαιτούμενες υπηρεσίες επαναλαμβάνονται Παράλληλη επεξεργασία & δοσοληψίες (transaction) Εξομοίωση φορτίου και ασφάλεια Διαχείριση πόρων και συνδέσεων Πως λύνουμε το πρόβλημα Εξυπηρετητές επιχειρησιακών εφαρμογών που υλοποιούν τις κοινές υπηρεσίες Ιδιωτικές τεχνολογίες ενάντια σε ανοικτά πρότυπα
Εξυπηρετητές εφαρμογών βασισμένοι σε ιδιωτικές τεχνολογίες Χρήση μοντέλου «αρθρωμάτων και πλαισίων" Τα αρθρώματα υλοποιούν την επιχειρησιακή λογική Τα πλαίσια παρέχουν τις υπηρεσίες συστήματος Το πρωτόκολλο επικοινωνίας ανάμεσα στα αρθρώματα και στα πλαίσια εκτέλεσης είναι αυστηράορισμένααλλάβασίζονταισειδιωτικές τεχνολογίες Πρόβλημα με ιδιωτικές τεχνολογίες: Δεν υπάρχει δυνατότητα αλλαγής προμηθευτή Παραδείγματα: Tuxedo,.NET
Εξυπηρετητές εφαρμογών βασισμένοι σε ανοικτά πρότυπα Το πρωτόκολλο επικοινωνίας ανάμεσα στα αρθρώματα και στα πλαίσια εκτέλεσης είναι αυστηράορισμένακαιβασίζονται σε ανοικτά πρότυπα Η J2EE είναι ένα τέτοιο πρότυπο προσφέρει μεταφερσιμότητα κώδικα Βελτιώνεται από ανεξάρτητους κατασκευαστές