Πρόγραμμα διακομιστή πελάτη. Διάφορες αρχιτεκτονικές λύσεις που χρησιμοποιούνται κατά την υλοποίηση βάσεων δεδομένων πολλών χρηστών. σύντομη επισκόπηση του υποδ

Τελευταία ενημέρωση: 31/10/2015

Ας δούμε πώς να δημιουργήσετε μια εφαρμογή πελάτη-διακομιστή πολλαπλών νημάτων. Στην πραγματικότητα, θα διαφέρει από ένα μονού νήματος μόνο στο ότι η επεξεργασία του αιτήματος του πελάτη θα πραγματοποιείται σε ξεχωριστό νήμα.

Αρχικά, ας δημιουργήσουμε ένα έργο για τον πελάτη. Ας καλέσουμε το έργο ConsoleClient και ας ορίσουμε τον ακόλουθο κώδικα στην κλάση Program:

Χρήση του συστήματος. χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Text; namespace ConsoleClient ( class Program ( const int port = 8888; const string address = "127.0.0.1"; static void Main(string args) ( Console.Write("Enter your name:"); string userName = Console.ReadLine() ; TcpClient = null; Μήνυμα συμβολοσειράς = Console.ReadLine(); ; 0, data.Length). (Exception ex) ( Console.WriteLine(ex.Message); ) τελικά ( client.Close(); ) ) ) )

Στο πρόγραμμα πελάτη, ο χρήστης θα εισαγάγει πρώτα το όνομά του και μετά το μήνυμα που θα στείλει. Επιπλέον, το μήνυμα θα σταλεί με τη μορφή Όνομα: μήνυμα.

Μετά την αποστολή του μηνύματος, ο πελάτης λαμβάνει το μήνυμα από τον διακομιστή.

Τώρα ας δημιουργήσουμε ένα έργο διακομιστή, το οποίο θα ονομάσουμε ConsoleServer. Αρχικά, ας προσθέσουμε μια νέα κλάση ClientObject στο έργο διακομιστή, η οποία θα αντιπροσωπεύει μια ξεχωριστή σύνδεση:

Χρήση του συστήματος. χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Text; namespace ConsoleServer ( δημόσια κλάση ClientObject ( δημόσιος πελάτης TcpClient; δημόσιο ClientObject(TcpClient tcpClient) ( πελάτης = tcpClient; ) δημόσιος κενός Διεργασία () ( Ροή NetworkStream = null; δοκιμή ( ροή = client.GetStream (); δεδομένα byte = νέο κατά tete; // buffer για τα ληφθέντα δεδομένα ενώ (true) ( ​​// λάβετε το μήνυμα StringBuilder builder = new StringBuilder(); int bytes = 0; do ( bytes = stream.Read(data, 0, data.Length); builder. Append(Encoding .Unicode.GetString(data, 0, bytes) while (stream.DataAvailable message = builder.ToString( // αποστολή μηνύματος με κεφαλαία γράμματα = message.Substring (message.IndexOf). (":") + 1).Περικοπή(). .WriteLine(π.χ.Μήνυμα) τέλος (if (stream != null) stream.Close(); if (client != null) client.Close(); ) ) )

Σε αυτήν την κλάση, αντίθετα, λαμβάνουμε πρώτα το μήνυμα στον βρόχο do..while και μετά το αλλάζουμε λίγο (κόβουμε την άνω και κάτω τελεία και το μετατρέπουμε σε κεφαλαία) και το στέλνουμε πίσω στον πελάτη. Δηλαδή, η κλάση ClientObject περιέχει όλες τις ενέργειες για εργασία με ξεχωριστή σύνδεση.

Στην κύρια κλάση του έργου διακομιστή, θα ορίσουμε τον ακόλουθο κώδικα:

Χρήση του συστήματος. χρησιμοποιώντας System.Net; χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Threading; namespace ConsoleServer ( class Program (const int port = 8888; static TcpListener listener; static void Main(string args) ( try ( listener = new TcpListener(IPAddress.Parse("127.0.0.1"), port); listener.Start() ; Console.WriteLine ("Αναμονή για συνδέσεις..."); νέο νήμαγια την εξυπηρέτηση ενός νέου πελάτη Thread clientThread = new Thread(new ThreadStart(clientObject.Process)); clientThread.Start(); ) ) catch(Exception ex) ( Console.WriteLine(ex.Message); ) τελικά (if(listener!=null) listener.Stop(); ) ) ) )

Αμέσως μετά τη σύνδεση ενός νέου πελάτη:

TcpClient client = listener.AcceptTcpClient()

Δημιουργείται ένα αντικείμενο ClientObject και δημιουργείται ένα νέο νήμα που εκτελεί τη μέθοδο Process του αντικειμένου ClientObject, όπου πραγματικά λαμβάνονται και αποστέλλονται μηνύματα. Έτσι, ο διακομιστής θα μπορεί να επεξεργάζεται ταυτόχρονα πολλά αιτήματα.

Αποτελέσματα του προγράμματος. Ένας από τους πελάτες:

Πληκτρολογήστε το όνομά σας: Evgeniy Evgeniy: hello world Διακομιστής: HELLO WORLD Evgeniy: αντίο ειρήνη Διακομιστής: BYE WORLD Evgeniy: _

Αναμονή για συνδέσεις... Evgeniy: hello world Evgeniy: bye world Tom: hello chat

Ένα σύγχρονο DBMS πρέπει να ικανοποιεί μια σειρά από απαιτήσεις, η σημαντικότερη από τις οποίες είναι ένας ευφυής διακομιστής βάσεων δεδομένων υψηλής απόδοσης. Στη συνέχεια, θα εξετάσουμε τις κύριες τάσεις στην ανάπτυξή του και θα συζητήσουμε τους συγκεκριμένους μηχανισμούς στους οποίους ενσωματώνονται.

Η διαδικασία τεχνικής βελτίωσης του διακομιστή βάσης δεδομένων παραμένει ακόμα αόρατη στους περισσότερους χρήστες σύγχρονο DBMS. Ως εκ τούτου, κατά την επιλογή ενός συγκεκριμένου συστήματος, κατά κανόνα, δεν λαμβάνουν υπόψη ούτε τεχνικό επίπεδοαποφάσεις που ενσωματώνονται στον μηχανισμό της λειτουργίας του, ούτε ο αντίκτυπος αυτών των αποφάσεων συνολική απόδοση DBMS. Εν τω μεταξύ, η ποιότητά του δεν καθορίζεται από τον πλούτο των διεπαφών χρήστη ή την ποικιλία των εργαλείων υποστήριξης ανάπτυξης, αλλά κατά κύριο λόγο εξαρτάται από τα χαρακτηριστικά της αρχιτεκτονικής διακομιστή βάσης δεδομένων. Στη συνέχεια, θα εξεταστούν μοντέλα της τεχνολογίας πελάτη-διακομιστή, θα καθοριστεί η θέση του διακομιστή βάσης δεδομένων σε αυτά τα μοντέλα και θα περιγραφούν συνοπτικά οι πιο σημαντικοί μηχανισμοί του διακομιστή βάσης δεδομένων - διαδικασίες, κανόνες (έναρξη), συμβάντα. Το τελευταίο θα επεξηγηθεί με παραδείγματα που χρησιμοποιούν τη διάλεκτο SQL που υιοθετείται στο Ingres DBMS.

Τεχνολογία και μοντέλα πελάτη-διακομιστή.

Ο "πελάτης-διακομιστής" είναι ένα μοντέλο αλληλεπίδρασης μεταξύ υπολογιστών σε ένα δίκτυο. Κατά κανόνα, οι υπολογιστές δεν είναι ίσοι. Καθένα από αυτά έχει το δικό του σκοπό, διαφορετικό από τα άλλα, και παίζει το δικό του ρόλο. Ορισμένοι υπολογιστές στο δίκτυο διαθέτουν και διαχειρίζονται πληροφορίες και υπολογιστικούς πόρους, όπως επεξεργαστές, σύστημα αρχείων, υπηρεσία αλληλογραφίας, υπηρεσία εκτύπωσης και βάση δεδομένων. Άλλοι υπολογιστές έχουν τη δυνατότητα πρόσβασης σε αυτές τις υπηρεσίες χρησιμοποιώντας τις υπηρεσίες του πρώτου. Ο υπολογιστής που διαχειρίζεται αυτόν ή αυτόν τον πόρο συνήθως ονομάζεται διακομιστής αυτού του πόρου και ο υπολογιστής που θέλει να τον χρησιμοποιήσει ονομάζεται πελάτης. Ένας συγκεκριμένος διακομιστής καθορίζεται από τον τύπο του πόρου που κατέχει. Έτσι, εάν ο πόρος είναι μια βάση δεδομένων, τότε μιλάμε γιαΟ διακομιστή βάσης δεδομένων, σκοπός του οποίου είναι η εξυπηρέτηση αιτημάτων πελατών που σχετίζονται με την επεξεργασία δεδομένων· εάν ο πόρος είναι ένα σύστημα αρχείων, τότε μιλάμε για διακομιστή αρχείων, ή διακομιστή αρχείων κ.λπ.

Σε ένα δίκτυο, ο ίδιος υπολογιστής μπορεί να λειτουργήσει και ως πελάτης και ως διακομιστής. Για παράδειγμα, σε ένα πληροφοριακό σύστημα που περιλαμβάνει προσωπικούς υπολογιστές, έναν κεντρικό υπολογιστή και έναν μικρό υπολογιστή που εκτελεί UNIX, ο τελευταίος μπορεί να λειτουργεί και ως διακομιστής βάσης δεδομένων, εξυπηρετώντας αιτήματα από πελάτες - προσωπικούς υπολογιστές και ως πελάτης, στέλνοντας αιτήματα στον κεντρικό υπολογιστή υπολογιστή.

Η ίδια αρχή ισχύει και για την αλληλεπίδραση των προγραμμάτων. Εάν ένας από αυτούς εκτελεί ορισμένες λειτουργίες, παρέχοντας σε άλλους ένα αντίστοιχο σύνολο υπηρεσιών, τότε ένα τέτοιο πρόγραμμα λειτουργεί ως διακομιστής. Τα προγράμματα που χρησιμοποιούν αυτές τις υπηρεσίες ονομάζονται πελάτες. Έτσι, ο πυρήνας ενός σχεσιακού DBMS προσανατολισμένου σε SQL ονομάζεται συχνά διακομιστής βάσης δεδομένων ή διακομιστής SQL και το πρόγραμμα που έχει πρόσβαση σε αυτόν για υπηρεσίες επεξεργασίας δεδομένων ονομάζεται πελάτης SQL.

Αρχικά, τα DBMS είχαν μια κεντρική αρχιτεκτονική (Εικόνα 10). Σε αυτό, λειτουργούσαν το ίδιο το DBMS και προγράμματα εφαρμογών που δούλευαν με βάσεις δεδομένων κεντρικό υπολογιστή(κεντρικός υπολογιστής ή μίνι υπολογιστής). Εκεί βρίσκονταν και οι βάσεις δεδομένων. Τα τερματικά συνδέονταν με τον κεντρικό υπολογιστή και λειτουργούσαν ως σταθμοί εργασίας χρήστη. Όλες οι διεργασίες που σχετίζονται με την επεξεργασία δεδομένων, όπως: υποστήριξη εισαγωγής από τον χρήστη, δημιουργία, βελτιστοποίηση και εκτέλεση ερωτημάτων, ανταλλαγή με εξωτερικές συσκευές μνήμης κ.λπ., πραγματοποιήθηκαν στον κεντρικό υπολογιστή, ο οποίος έθετε αυστηρές απαιτήσεις για την απόδοσή του. Τα χαρακτηριστικά του DBMS πρώτης γενιάς σχετίζονται άμεσα με την αρχιτεκτονική των συστημάτων mainframe και μικροϋπολογιστών και αντικατοπτρίζουν επαρκώς όλα τα πλεονεκτήματα και τα μειονεκτήματά τους. Ωστόσο, μας ενδιαφέρει περισσότερο η τρέχουσα κατάσταση του DBMS πολλών χρηστών, για το οποίο η αρχιτεκτονική πελάτη-διακομιστή έχει γίνει το de facto πρότυπο.

Εικόνα 10 – Συστήματα με κεντρική αρχιτεκτονική

Για να έχετε μια σαφέστερη ιδέα των χαρακτηριστικών του, είναι απαραίτητο να εξετάσετε διάφορα μοντέλα τεχνολογίας πελάτη-διακομιστή, τα οποία θα γίνουν.

Εάν υποτεθεί ότι το σχεδιασμένο πληροφοριακό σύστημα (IS) θα έχει τεχνολογία πελάτη-διακομιστή, τότε αυτό σημαίνει ότι τα προγράμματα εφαρμογών που υλοποιούνται στο πλαίσιο του θα είναι κατανεμημένα στη φύση. Με άλλα λόγια, ορισμένες από τις λειτουργίες του προγράμματος εφαρμογής (ή, πιο απλά, της εφαρμογής) θα υλοποιηθούν στο πρόγραμμα-πελάτη, άλλες - στο πρόγραμμα διακομιστή και θα οριστεί ένα συγκεκριμένο πρωτόκολλο για την αλληλεπίδρασή τους.

Η βασική αρχή της τεχνολογίας πελάτη-διακομιστή είναι ο διαχωρισμός των λειτουργιών ενός προτύπου διαδραστική εφαρμογήσε τέσσερις ομάδες διαφορετικής φύσης. Η πρώτη ομάδα είναι οι λειτουργίες εισαγωγής και εμφάνισης δεδομένων. Η δεύτερη ομάδα συνδυάζει καθαρά εφαρμοσμένες λειτουργίες χαρακτηριστικές μιας δεδομένης θεματικής περιοχής (για παράδειγμα, για το τραπεζικό σύστημα - άνοιγμα λογαριασμού, μεταφορά χρημάτων από έναν λογαριασμό σε άλλο κ.λπ.). Η τρίτη ομάδα περιλαμβάνει τις θεμελιώδεις λειτουργίες αποθήκευσης και διαχείρισης πόρων πληροφοριών (βάσεις δεδομένων, συστήματα αρχείων κ.λπ.). Τέλος, οι λειτουργίες της τέταρτης ομάδας είναι συναρτήσεις υπηρεσιών (παίζοντας το ρόλο των συνδέσμων μεταξύ των λειτουργιών των τριών πρώτων ομάδων.

Σύμφωνα με αυτό, τα ακόλουθα λογικά στοιχεία διακρίνονται σε οποιαδήποτε εφαρμογή:

Ένα στοιχείο παρουσίασης που υλοποιεί τις λειτουργίες της πρώτης ομάδας.

Ένα στοιχείο εφαρμογής που υποστηρίζει τις λειτουργίες της δεύτερης ομάδας.

Εισάγεται και διευκρινίζεται ένα στοιχείο πρόσβασης σε πόρους πληροφοριών που υποστηρίζει τις λειτουργίες της τρίτης ομάδας και συμφωνίες για τις μεθόδους αλληλεπίδρασής τους (πρωτόκολλο αλληλεπίδρασης).

Οι διαφορές στις υλοποιήσεις της τεχνολογίας πελάτη-διακομιστή καθορίζονται από τέσσερις παράγοντες. Πρώτον, σε ποιους τύπους λογισμικού είναι ενσωματωμένο καθένα από αυτά τα στοιχεία. Δεύτερον, ποιοι μηχανισμοί λογισμικού χρησιμοποιούνται για την υλοποίηση των λειτουργιών και των τριών ομάδων. Τρίτον, πώς τα λογικά στοιχεία κατανέμονται μεταξύ των υπολογιστών στο δίκτυο. Τέταρτον, ποιοι μηχανισμοί χρησιμοποιούνται για τη σύνδεση των εξαρτημάτων μεταξύ τους.

Υπάρχουν τέσσερις προσεγγίσεις που εφαρμόζονται στα μοντέλα:

· Μοντέλο διακομιστή αρχείων (File Server - FS);

· μοντέλο απομακρυσμένης πρόσβασης δεδομένων (Remote Data Access - RDA).

· Μοντέλο διακομιστή βάσης δεδομένων (Διακομιστής Βάσης Δεδομένων - DBS).

· μοντέλο διακομιστή εφαρμογής (Application Server - AS).

Το μοντέλο FS είναι η βάση για τοπικά δίκτυαπροσωπικούς υπολογιστές. Όχι πολύ καιρό πριν ήταν εξαιρετικά δημοφιλές μεταξύ εγχώριους προγραμματιστέςπου χρησιμοποίησαν συστήματα όπως FoxPRO, Clipper, Clarion, Paradox κ.λπ. Η ουσία του μοντέλου είναι απλή και γνωστή σε όλους. Ένας από τους υπολογιστές του δικτύου θεωρείται διακομιστής αρχείων και παρέχει υπηρεσίες επεξεργασίας αρχείων σε άλλους υπολογιστές. Ο διακομιστής αρχείων εκτελεί ένα λειτουργικό σύστημα δικτύου (για παράδειγμα, Novell NetWare) και παίζει το ρόλο ενός στοιχείου για την πρόσβαση σε πόρους πληροφοριών (δηλαδή, αρχεία). Σε άλλους υπολογιστές στο δίκτυο, εκτελείται μια εφαρμογή, ο κώδικας της οποίας συνδυάζει ένα στοιχείο παρουσίασης και ένα στοιχείο εφαρμογής (Εικόνα 11). Το πρωτόκολλο ανταλλαγής είναι ένα σύνολο κλήσεων χαμηλού επιπέδου που παρέχουν σε μια εφαρμογή πρόσβαση στο σύστημα αρχείων του διακομιστή αρχείων.

Εικόνα 11 – Μοντέλο διακομιστή αρχείων

Το μοντέλο FS χρησίμευσε ως το θεμέλιο για την επέκταση των δυνατοτήτων των προσωπικών DBMS προς την κατεύθυνση της υποστήριξης της λειτουργίας πολλών χρηστών. Σε τέτοια συστήματα, τόσο το πρόγραμμα εφαρμογής όσο και ένα αντίγραφο του DBMS εκτελούνται σε πολλούς προσωπικούς υπολογιστές και οι βάσεις δεδομένων περιέχονται σε κοινόχρηστα αρχεία που βρίσκονται σε έναν διακομιστή αρχείων. Όταν ένα πρόγραμμα εφαρμογής αποκτά πρόσβαση σε μια βάση δεδομένων, το DBMS προωθεί την αίτηση στον διακομιστή αρχείων. Αυτό το αίτημα καθορίζει τα αρχεία στα οποία βρίσκονται τα ζητούμενα δεδομένα. Σε απάντηση στο αίτημα, ο διακομιστής αρχείων στέλνει το απαιτούμενο μπλοκ δεδομένων μέσω του δικτύου. Το ΣΔΒΔ, αφού το λάβει, εκτελεί τις ενέργειες στα δεδομένα που δηλώθηκαν στο πρόγραμμα εφαρμογής.

Τα τεχνολογικά μειονεκτήματα του μοντέλου περιλαμβάνουν υψηλή κυκλοφορίας δικτύου(μεταφορά πολλαπλών αρχείων, απαιτείται από την αίτηση), ένα στενό εύρος λειτουργιών χειρισμού δεδομένων ("τα δεδομένα είναι αρχεία"), έλλειψη επαρκών μέσων ασφαλείας για την πρόσβαση στα δεδομένα (προστασία μόνο σε επίπεδο σύστημα αρχείων) και τα λοιπά. Στην πραγματικότητα, τα παραπάνω δεν είναι μειονεκτήματα, αλλά είναι συνέπεια των εγγενών περιορισμών του μοντέλου FS, που καθορίζονται από τη φύση του. Παρεξηγήσεις προκύπτουν όταν το μοντέλο FS χρησιμοποιείται για άλλους σκοπούς, για παράδειγμα, όταν προσπαθούν να το ερμηνεύσουν ως μοντέλο διακομιστή βάσης δεδομένων. Η θέση του μοντέλου FS στην ιεραρχία των μοντέλων πελάτη-διακομιστή είναι η θέση του μοντέλου διακομιστή αρχείων και τίποτα περισσότερο. Αυτός είναι ο λόγος για τον οποίο οι προσπάθειες δημιουργίας έργων μεγάλης κλίμακας με βάση το μοντέλο FS είναι καταδικασμένες σε αποτυχία. εταιρικά συστήματα- προσπάθειες που έγιναν στο πρόσφατο παρελθόν και γίνονται συχνά τώρα.

Το πιο προηγμένο τεχνολογικά μοντέλο RDA διαφέρει σημαντικά από το μοντέλο FS ως προς τη φύση του στοιχείου πρόσβασης σε πόρους πληροφοριών. Αυτός είναι συνήθως ένας διακομιστής SQL. Στο μοντέλο RDA, οι κωδικοί του στοιχείου παρουσίασης και του στοιχείου εφαρμογής συνδυάζονται και εκτελούνται στον υπολογιστή-πελάτη. Το τελευταίο υποστηρίζει τόσο λειτουργίες εισαγωγής και εμφάνισης δεδομένων, όσο και λειτουργίες καθαρά εφαρμογής. Η πρόσβαση σε πόρους πληροφοριών παρέχεται είτε από χειριστές ειδικής γλώσσας (γλώσσα SQL, για παράδειγμα, αν μιλάμε για βάσεις δεδομένων), είτε με κλήσεις σε λειτουργίες ειδικής βιβλιοθήκης (εάν υπάρχει κατάλληλη διεπαφή προγραμματισμού εφαρμογής - API).

Ο πελάτης στέλνει αιτήματα σε πόρους πληροφοριών (για παράδειγμα, βάσεις δεδομένων) μέσω του δικτύου απομακρυσμένος υπολογιστής. Εκτελεί τον πυρήνα του DBMS, ο οποίος επεξεργάζεται τα ερωτήματα, εκτελώντας τις ενέργειες που προβλέπονται σε αυτά και επιστρέφει το αποτέλεσμα στον πελάτη, μορφοποιημένο ως μπλοκ δεδομένων (Εικόνα 12). Σε αυτήν την περίπτωση, ο εκκινητής των χειρισμών δεδομένων είναι προγράμματα που εκτελούνται σε υπολογιστές-πελάτες, ενώ στον πυρήνα του DBMS εκχωρείται ένας παθητικός ρόλος - η εξυπηρέτηση των ερωτημάτων και η επεξεργασία δεδομένων.

Εικόνα 12 – Μοντέλο απομακρυσμένης πρόσβασης δεδομένων

Το μοντέλο RDA εξαλείφει τα μειονεκτήματα που είναι εγγενή και στα δύο συστήματα με κεντρική αρχιτεκτονική και στα συστήματα με διακομιστή αρχείων.

Πρώτα απ 'όλα, η μετακίνηση του στοιχείου παρουσίασης και του στοιχείου της εφαρμογής στους υπολογιστές-πελάτες ανακουφίζει σημαντικά το φορτίο στον διακομιστή βάσης δεδομένων, ελαχιστοποιώντας τον συνολικό αριθμό των διεργασιών του λειτουργικού συστήματος. Ο διακομιστής βάσης δεδομένων είναι απαλλαγμένος από ασυνήθιστες λειτουργίες για αυτόν. Ο επεξεργαστής διακομιστής ή οι επεξεργαστές είναι πλήρως φορτωμένοι με επεξεργασία δεδομένων, ερωτήματα και συναλλαγές. Αυτό γίνεται εφικτό με την εξάλειψη των τερματικών και τον εξοπλισμό των σταθμών εργασίας με υπολογιστές που έχουν τους δικούς τους τοπικούς υπολογιστικούς πόρους, που χρησιμοποιούνται πλήρως από προγράμματα front-end. Από την άλλη πλευρά, ο φόρτος δικτύου μειώνεται απότομα, καθώς δεν μεταδίδονται αιτήματα εισόδου/εξόδου από τον πελάτη στον διακομιστή (όπως σε συστήματα με διακομιστή αρχείων), αλλά αιτήματα στη γλώσσα SQL, ο όγκος τους είναι σημαντικά μικρότερη.

Το κύριο πλεονέκτημα του μοντέλου RDA είναι η ενοποίηση της διεπαφής πελάτη-διακομιστή με τη μορφή της γλώσσας SQL. Πράγματι, η αλληλεπίδραση ενός στοιχείου εφαρμογής με τον πυρήνα του DBMS είναι αδύνατη χωρίς ένα τυποποιημένο μέσο επικοινωνίας. Τα αιτήματα που γίνονται από ένα πρόγραμμα στον πυρήνα πρέπει να είναι κατανοητά και από τα δύο. Για να γίνει αυτό, θα πρέπει να διατυπωθούν σε ειδική γλώσσα. Αλλά υπάρχει ήδη στο DBMS Γλώσσα SQL, το οποίο έχει ήδη συζητηθεί. Επομένως, συνιστάται η χρήση του όχι μόνο ως μέσο πρόσβασης σε δεδομένα, αλλά και ως πρότυπο επικοινωνίας μεταξύ πελάτη και διακομιστή.

Μια τέτοια επικοινωνία μπορεί να συγκριθεί με μια συνομιλία μεταξύ πολλών ανθρώπων, όταν ο ένας απαντά στις ερωτήσεις των άλλων (οι ερωτήσεις γίνονται ταυτόχρονα). Επιπλέον, το κάνει τόσο γρήγορα που ο χρόνος αναμονής για απάντηση πλησιάζει το μηδέν. Η υψηλή ταχύτητα επικοινωνίας επιτυγχάνεται κυρίως λόγω της σαφούς διατύπωσης της ερώτησης, όταν ο ερωτών και ο απαντών δεν χρειάζονται πρόσθετες διαβουλεύσεις για την ουσία του ζητήματος. Οι ομιλητές ανταλλάσσουν πολλές σύντομες, σαφείς φράσεις, δεν χρειάζεται να διευκρινίσουν τίποτα.

Δυστυχώς, το μοντέλο RDA δεν είναι χωρίς μια σειρά από μειονεκτήματα. Πρώτον, η αλληλεπίδραση μεταξύ πελάτη και διακομιστή μέσω ερωτημάτων SQL φορτώνει σημαντικά το δίκτυο. Δεύτερον, η ικανοποιητική διαχείριση των εφαρμογών στο μοντέλο RDA είναι σχεδόν αδύνατη λόγω του συνδυασμού λειτουργιών διαφορετικής φύσης (συναρτήσεις παρουσίασης και εφαρμογής) σε ένα πρόγραμμα.

Μαζί με το μοντέλο RDA, το πολλά υποσχόμενο μοντέλο DBS γίνεται όλο και πιο δημοφιλές (Εικόνα 13). Το τελευταίο υλοποιείται σε ορισμένα σχεσιακά DBMS (Informix, Ingres, Sybase, Oracle). Η βάση του είναι ο μηχανισμός αποθηκευμένες διαδικασίες- Εργαλείο προγραμματισμού διακομιστή SQL. Οι διαδικασίες αποθηκεύονται σε ένα λεξικό βάσης δεδομένων, μοιράζονται σε πολλούς πελάτες και εκτελούνται στον ίδιο υπολογιστή όπου εκτελείται ο διακομιστής SQL. Η γλώσσα στην οποία αναπτύσσονται οι αποθηκευμένες διαδικασίες είναι μια διαδικαστική επέκταση της γλώσσας ερωτημάτων SQL και είναι μοναδική για κάθε συγκεκριμένο DBMS.

Εικόνα 13 – Μοντέλο διακομιστή βάσης δεδομένων

Στο μοντέλο DBS, το στοιχείο παρουσίασης εκτελείται στον υπολογιστή-πελάτη, ενώ το στοιχείο της εφαρμογής έχει σχεδιαστεί ως ένα σύνολο αποθηκευμένων διαδικασιών και εκτελείται στον υπολογιστή διακομιστή βάσης δεδομένων. Το στοιχείο πρόσβασης δεδομένων, δηλαδή ο πυρήνας του DBMS, εκτελείται επίσης εκεί. Τα πλεονεκτήματα του μοντέλου DBS είναι προφανή: αυτή είναι η δυνατότητα κεντρικής διαχείρισης των λειτουργιών εφαρμογής και μείωση της επισκεψιμότητας (αντί για ερωτήματα SQL, οι κλήσεις σε αποθηκευμένες διαδικασίες αποστέλλονται μέσω του δικτύου) και η δυνατότητα διαίρεσης μιας διαδικασίας μεταξύ πολλών εφαρμογές και εξοικονόμηση πόρων υπολογιστή χρησιμοποιώντας ένα σχέδιο εκτέλεσης διαδικασίας που δημιουργήθηκε μόλις . Τα μειονεκτήματα του μοντέλου περιλαμβάνουν τα περιορισμένα εργαλεία που χρησιμοποιούνται για τη σύνταξη αποθηκευμένων διαδικασιών, τα οποία είναι διάφορες διαδικαστικές επεκτάσεις της SQL που δεν μπορούν να συγκριθούν ως προς τα οπτικά εργαλεία και τη λειτουργικότητα με γλώσσες τρίτης γενιάς όπως η C ή η Pascal. Το εύρος της χρήσης τους περιορίζεται σε ένα συγκεκριμένο DBMS, τα περισσότερα DBMS δεν έχουν τη δυνατότητα εντοπισμού σφαλμάτων και δοκιμής ανεπτυγμένων αποθηκευμένων διαδικασιών.

Στην πράξη, χρησιμοποιούνται συχνά μικτά μοντέλα, όταν η υποστήριξη της ακεραιότητας της βάσης δεδομένων και ορισμένες απλές λειτουργίες εφαρμογής υποστηρίζονται από αποθηκευμένες διαδικασίες (μοντέλο DBS) και άλλα σύνθετες λειτουργίεςυλοποιούνται απευθείας σε ένα πρόγραμμα εφαρμογής που εκτελείται σε υπολογιστή πελάτη (μοντέλο RDA). Με τον ένα ή τον άλλο τρόπο, τα σύγχρονα DBMS πολλών χρηστών βασίζονται στα μοντέλα RDA και DBS και όταν δημιουργούν ένα IS που περιλαμβάνει μόνο χρήση ενός DBMS, επιλέγουν ένα από αυτά τα δύο μοντέλα ή έναν λογικό συνδυασμό αυτών.

Εικόνα 14.

Μοντέλο διακομιστή εφαρμογών.

Στο μοντέλο AS (Εικόνα 14), η διαδικασία που εκτελείται στον υπολογιστή-πελάτη είναι, ως συνήθως, υπεύθυνη για τη διασύνδεση με τον χρήστη (δηλαδή, εκτελεί τις λειτουργίες της πρώτης ομάδας). Όταν ζητάτε υπηρεσίες από ένα στοιχείο εφαρμογής, αυτή η διαδικασία παίζει το ρόλο του πελάτη εφαρμογής(Εφαρμογή Πελάτης - AC). Ένα στοιχείο εφαρμογής υλοποιείται ως ομάδα διεργασιών που εκτελούν λειτουργίες εφαρμογής και ονομάζεται διακομιστής εφαρμογών ( Διακομιστής Εφαρμογών - AS). Όλες οι λειτουργίες σε πόρους πληροφοριών εκτελούνται από το αντίστοιχο στοιχείο, σε σχέση με το οποίο το AS παίζει το ρόλο του πελάτη. Πόροι διαφόρων τύπων είναι διαθέσιμοι από στοιχεία εφαρμογής - βάσεις δεδομένων, ουρές, υπηρεσίες αλληλογραφίας κ.λπ.

Τα μοντέλα RDA και DBS βασίζονται σε διαχωρισμό συναρτήσεων δύο επιπέδων. Στο μοντέλο RDA, οι λειτουργίες εφαρμογής εκχωρούνται στο πρόγραμμα-πελάτη στο μοντέλο DBS, ο πυρήνας του DBMS αναλαμβάνει την ευθύνη για την εκτέλεσή τους. Στην πρώτη περίπτωση, το στοιχείο της εφαρμογής συγχωνεύεται με το στοιχείο παρουσίασης και στη δεύτερη, ενσωματώνεται στο στοιχείο πρόσβασης σε πόρους πληροφοριών. Το μοντέλο AS υλοποιεί ένα σχήμα διαχωρισμού συναρτήσεων τριών επιπέδων, όπου το στοιχείο της εφαρμογής ξεχωρίζει ως το πιο σημαντικό απομονωμένο στοιχείο της εφαρμογής, χρησιμοποιούνται καθολικοί μηχανισμοί ενός λειτουργικού συστήματος πολλαπλών εργασιών για τον ορισμό του και οι διεπαφές με δύο άλλα στοιχεία τυποποιούνται . Το μοντέλο AS είναι η βάση για τις οθόνες επεξεργασίας συναλλαγών ( Οθόνες επεξεργασίας συναλλαγών - TPM), ή, πιο απλά, οθόνες συναλλαγών, που ξεχωρίζουν ως ειδικό είδος λογισμικού.

Συμπερασματικά, σημειώνουμε ότι όταν μιλάμε συχνά για διακομιστή βάσης δεδομένων, εννοούμε τόσο έναν υπολογιστή όσο και λογισμικό- Πυρήνας DBMS. Όταν περιγράφουμε την αρχιτεκτονική Client-Server, με τον όρο διακομιστή βάσης δεδομένων εννοούμε έναν υπολογιστή. Επιπλέον, ο διακομιστής βάσης δεδομένων θα γίνει κατανοητός ως λογισμικό - ο πυρήνας του DBMS.


Σχετική πληροφορία.


Σε αυτό το παράδειγμα, θα αναπτύξουμε έναν απλό διακομιστή και ένα απλό πρόγραμμα πελάτη που διεξάγουν έναν «ελεύθερο» διάλογο μεταξύ τους. Θα δημιουργήσουμε τον πελάτη σύμφωνα με την τεχνολογία Φόρμες των Windowsκαι ο διακομιστής - Υπηρεσία Windows. Ο διακομιστής θα έχει ένα σύνολο από έτοιμες επισημασμένες απαντήσεις, θα περιμένει επισημασμένα αιτήματα από τους πελάτες και θα απαντά σε αυτά με τα κατάλληλα μηνύματα. Αυτό θα μας κάνει να δημιουργήσουμε ακόμα περισσότερα πολύπλοκο σύστημα- προβολή απομακρυσμένων σχεδίων από τη βάση δεδομένων, με τα οποία θα ασχοληθούμε αργότερα.

Δημιουργία πελάτη

Ας ξεκινήσουμε με ένα πρόγραμμα-πελάτη που μπορεί να εκτελεστεί σε πολλές περιπτώσεις ("http://msdn.microsoft.com/ru-ru/library/system.net.sockets.tcplistener.accepttcpclient.aspx")


Πίνακας 19.7.
Στοιχείο Ιδιοκτησία Εννοια
Μορφή Κείμενο Πελάτης
Μέγεθος 300; 300
ListBox (Ονομα) listBox
Προκυμαία Μπλουζα
Γραμματοσειρά Arial; 12π
Είδη
  1. Γειά σου!
  2. Lelik
  3. Ποια είναι τα νέα σου
  4. Θα κάνουμε παρέα σήμερα;
  5. Αντίο τότε!
SelectionMode Ενας
Μέγεθος 292; 119
Κουμπί (Ονομα) btnΥποβολή
Αυτόματο Μέγεθος Αληθής
Γραμματοσειρά Arial; 10π
Τοποθεσία 96; 127
Μέγεθος 101; 29
Κείμενο Στείλετε
Πλαίσιο κειμένου (Ονομα) πλαίσιο κειμένου
Προκυμαία Κάτω μέρος
Τοποθεσία 0; 162
Πολυγραμμές Αληθής
Γραμμές κύλισης Κατακόρυφος
Μέγεθος 292; 105

Υπόλοιπο απαιτούμενες ρυθμίσειςΘα προσθέσουμε στοιχεία φόρμας μέσω προγραμματισμού.

χρησιμοποιώντας το σύστημα. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.ComponentModel; χρησιμοποιώντας System.Data; χρησιμοποιώντας System.Drawing; χρησιμοποιώντας System.Text; χρησιμοποιώντας System.Windows.Forms; // Πρόσθετοι χώροι ονομάτων χρησιμοποιώντας System.IO; χρησιμοποιώντας System.Net; χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Threading; χώρος ονομάτων SimpleClient ( δημόσια μερική κλάση Form1: Form ( int port = 12000; String hostName = "127.0.0.1"; // τοπικός πελάτης TcpClient = null; // Αναφορά πελάτη δημόσια Form1() ( InitializeComponent(); // Επιλέξτε το πρώτο στοιχείο λίστας listBox.SelectedIndex = 0 listBox .MouseDown += new MouseEventHandler(item_MouseDown // Αποστολή αιτήματος και λήψη απάντησης private void btnSubmit_Click(object sender, EventArgs e) ( if (listBox.SelectedIndices.Count == 0) ( MessageBox.Show ("Select"); Επιστροφή ) δοκιμάστε ( // Δημιουργήστε έναν πελάτη συνδεδεμένο με τον πελάτη διακομιστή = νέο TcpClient(HostName, port); // Ορίστε μόνοι σας τα μεγέθη των προχείρων (Προαιρετικό!) πελάτη. catch ( MessageBox.Show("Ο διακομιστής δεν είναι έτοιμος!"); ΕΠΙΣΤΡΟΦΗ; ) // Γράψτε το αίτημα στο πρωτόκολλο AddString("Client: " + listBox.SelectedItem.ToString()); // Δημιουργία ροών NetworkStream που συνδέονται με τον διακομιστή NetworkStream streamIn = client.GetStream(); NetworkStream streamOut = client.GetStream(); StreamReader readerStream = νέος StreamReader(streamIn); StreamWriter writerStream = νέος StreamWriter(streamOut); // Αποστολή αιτήματος στον διακομιστή writerStream.WriteLine(listBox.SelectedItem.ToString()); writerStream.Flush(); // Διαβάστε την απάντηση String receiverData = readerStream.ReadLine(); // Γράψτε την απάντηση στο πρωτόκολλο AddString("Server: " + receiverData); // Κλείστε τη σύνδεση και τις ροές, η σειρά δεν είναι σημαντική για τον πελάτη. Κλείσιμο(); writerStream.Close(); readerStream.Close(); ) // Προσθήκη γραμμής όταν το TextBox είναι ενεργοποιημένο σε λειτουργία πολλαπλών γραμμών ιδιωτικό κενό AddString(String line) ( StringBuilder sb = new StringBuilder(textBox.Text); StringWriter sw = new StringWriter(sb); sw.WriteLine(line); textBox .Text = sw.ToString( ) // Εκκαθάριση της λίστας μέσω κατάλογος συμφραζόμενων void item_MouseDown(object sender, MouseEventArgs e) ( textBox.Clear(); listBox.Focus(); ) ) )

Έχοντας λάβει μια σύνδεση με τον διακομιστή, δημιουργούμε δύο νήματα NetworkStreamκαι συσκευάστε τα σε κελύφη που είναι βολικά για έλεγχο ανάγνωσης/εγγραφής. Η ανταλλαγή με τον διακομιστή εμφανίζεται στο πρωτόκολλο Πλαίσιο κειμένου. Για την εκκαθάριση του πρωτοκόλλου, δημιουργήθηκε δυναμικά ένα μενού περιβάλλοντος.

Τάξη TcpClient, που χρησιμοποιήσαμε στον κώδικα, είναι ένα περιτύλιγμα υψηλού επιπέδου (και απλοποιημένο) γύρω από την υποδοχή (κατηγορία Πρίζα). Εάν απαιτείται έλεγχος υποδοχής χαμηλότερου επιπέδου (περισσότερο λεπτομερής), τότε ένας σύνδεσμος προς αυτήν αποθηκεύεται στην ιδιότητα TcpClient.Client. Επειδή όμως αυτή η ιδιοκτησία προστατεύεται ( προστατεύονται), τότε είναι δυνατή η πρόσβαση μόνο από παράγωγο του TcpClientτάξη.

Εάν εκτελέσετε την εφαρμογή τώρα SimpleClient, τότε θα λειτουργήσει, αλλά όταν προσπαθείτε να στείλετε κάτι στον διακομιστή, θα εμφανιστεί ένα μήνυμα ότι ο διακομιστής δεν είναι έτοιμος. Δεν υπάρχει ακόμη διακομιστής, ας δημιουργήσουμε έναν.

Δημιουργία διακομιστή

Ας κάνουμε το πρόγραμμα διακομιστή μόνιμο σύμφωνα με το πρότυπο Υπηρεσία Windows, όπως κάναμε στο προηγούμενο παράδειγμα, αν και μπορεί να γίνει με τη διεπαφή, το κύριο πράγμα είναι ότι εκκινείται σε ένα μόνο αντίγραφο στον τοπικό υπολογιστή. Εάν το πρόγραμμα διακομιστή περιλαμβάνεται στο παγκόσμιο δίκτυο, τότε με το χρησιμοποιημένο IPκαι θα πρέπει να είναι η μόνη θύρα σε αυτό το δίκτυο. Ως εκ τούτου, η χρήση του δικτύου IPΓια το παγκόσμιο δίκτυο πρέπει να λάβετε άδεια.



χρησιμοποιώντας το σύστημα. χρησιμοποιώντας System.ComponentModel; χρησιμοποιώντας System.Configuration.Install; χρησιμοποιώντας System.ServiceProcess. χώρος ονομάτων SimpleServer ( // Κατά την εγκατάσταση της συγκρότησης, το πρόγραμμα εγκατάστασης θα πρέπει να ονομάζεται δημόσια μερική κλάση Installer1: Installer ( private ServiceInstaller serviceInstaller; private ServiceProcessInstaller serviceProcessInstaller; public Installer1() ( // Create settings for the Service serviceInstaller = new ServiceInstaller(); serviceProcessInstaller = new ServiceProcessInstaller( ); να ξεκινήσει this.serviceProcessInstaller.Account = ServiceAccount.LocalService. this.serviceProcessInstaller.Password = null.Username = null. serviceProcessInstaller ) ));

χρησιμοποιώντας το σύστημα. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Text; // Πρόσθετοι χώροι ονομάτων χρησιμοποιώντας System.IO; χρησιμοποιώντας System.Net; χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Threading; χρησιμοποιώντας System.ServiceProcess. χρησιμοποιώντας System.Collections; Χώρος ονομάτων SimpleServer ( κλάση Service1: ServiceBase ( διακομιστής TcpListener = null; // Σύνδεση με τη θύρα int διακομιστή = 12000; String hostName = "127.0.0.1"; // τοπική διεύθυνση IP localAddr; Απαντήσεις συμβολοσειράς = ( "1. Ποιος είσαι;" , "2. Γεια σου, Lelik!", "3. Το καλύτερο από όλα!", "4. Φυσικά, στο έπακρο", "5. Τα λέμε το βράδυ" () localAddr = IPAddress.Parse(hostName);// Μετατροπή σε άλλη μορφή Νήμα = νέο νήμα(ExecuteLoop = true thread.Start(; / Δημιουργία διακομιστή διακομιστή ακρόασης.Start();// Εκκίνηση των δεδομένων συμβολοσειράς διακομιστή //; Ατελείωτος κύκλοςακρόαση πελατών ενώ (true) (αν (!server.Pending()) // Η ουρά αιτήματος είναι κενή συνεχίστε; TcpClient client = server.AcceptTcpClient(); // Τρέχων πελάτης // Ορίζουμε τα μεγέθη των προχείρων Εμείς (Προαιρετικό!) // Από προεπιλογή, και τα δύο buffer έχουν ρυθμιστεί σε 8192 byte σε μέγεθος πελάτη.SendBufferSize = client.ReceiveBufferSize = 1024. NetworkStreamOut = πελάτης. data.Substring(0, data.IndexOf(" .")), out index) data = other data.ToUpper() writerStream(data); σύνδεση και ροές, η σειρά δεν είναι σημαντική πελάτης. Κλείσιμο readerStream. )))))

Για τη μετάδοση δεδομένων και τη λήψη μιας απάντησης, η εφαρμογή πελάτη δημιουργεί μια υποδοχή αμφίδρομης κατεύθυνσης (ή δύο μονής κατεύθυνσης), στην οποία καθορίζει τη διεύθυνση σύνδεσης στην υποδοχή μιας άλλης εφαρμογής διακομιστή. Εάν δημιουργηθεί η σύνδεση (ο διακομιστής εκτελείται), τότε η εφαρμογή πελάτη συνδέει μια ροή δικτύου στην υποδοχή NetworkStreamκαι μέσω αυτού μεταδίδει και λαμβάνει δεδομένα.

Υπάρχει ένας διακομιστής στην άλλη πλευρά της σύνδεσης TcpListenerακούει σε ατελείωτο βρόχο ουρά σύνδεσηςμε πελάτες. Εάν κάποιος πελάτης συνδεθεί σε αυτό ( διακομιστής.Εκκρεμεί()!=false), τότε ο διακομιστής ανακτά αυτόν τον πελάτη χρησιμοποιώντας AcceptTcpClient()- δημιουργεί μια υποδοχή για λήψη/μετάδοση με διεύθυνση έτοιμη επιστροφής, δημιουργεί μια αμφίδρομη ροή (ή δύο μονοκατευθυντικές), στη συνέχεια διαβάζει το αίτημα και μεταδίδει την απάντηση.



Λάβετε υπόψη ότι εάν ο κώδικας του προγράμματος διακομιστή μας δεν είναι συσκευασμένος σε ξεχωριστό νήμα Νήμα(νήμα εκτέλεσης), τότε το λειτουργικό σύστημα δεν θα εκκινήσει αυτό το πρόγραμμα στο παράθυρο υπηρεσιών (δοκιμάστε το!). Ο λόγος είναι ότι στον κώδικα μεθόδου ExecuteLoop()Ο διακομιστής χρησιμοποιεί έναν ατελείωτο βρόχο ακρόασης μιας ουράς αιτημάτων πελατών. Εάν αυτός ο βρόχος παραμείνει στο κύριο νήμα της εκτέλεσης ( Νήμα) εφαρμογή, απλά θα μπει σε βρόχο και δεν θα μπορεί να τερματιστεί κανονικά. Επομένως, τοποθετούμε τον κώδικα με τον βρόχο σε ξεχωριστό νήμα (νήμα) και τον κάνουμε φόντο έτσι ώστε να κλείνει μαζί με το κύριο νήμα εφαρμογής (νήμα διακομιστή).

Σημαντική σημείωση

Ροή NetworkStreamέχει σταθερό μήκος διπλής όψης. Μέθοδος GetStream()δημιουργεί μόνο μια σύνδεση διεύθυνσης μεταξύ των υποδοχών πελάτη και διακομιστή. Αλλά το πραγματικό του μήκος καθορίζεται από το μήνυμα από το μέρος που το στέλνει. Μπορείτε να χρησιμοποιήσετε ένα νήμα για λήψη/μετάδοση, αλλά τότε το μήκος του μηνύματος που αποστέλλεται από τον διακομιστή δεν πρέπει να υπερβαίνει το μήκος του μηνύματος που έλαβε από τον πελάτη (παραλίγο να χάσω το μάτι μου!). Γι' αυτό χρησιμοποιούμε δύο ροές σε κάθε πλευρά για ξεχωριστή μονοκατευθυντική μετάδοση μεταξύ δύο κόμβων σύνδεσης δικτύου.

Παράδειγμα 3. Εφαρμογή πελάτη-διακομιστή για προβολή εικόνων από βάση δεδομένων

Στο προηγούμενο απλό παράδειγμαΓνωριστήκαμε (λίγο) με τις αρχές δημιουργίας δικτυακών εφαρμογών. Τώρα ας δημιουργήσουμε ένα πιο περίπλοκο παράδειγμα, όπου ο πελάτης ζητά εικόνες και ο διακομιστής τις ανακτά από την αποθήκευση και τις στέλνει στον πελάτη. ΣΕ Άσκηση 7Έχουμε αναπτύξει τρία διαφορετικά αποθετήρια εικόνων και τρία προγράμματα προβολής. Σε αυτό το παράδειγμα θα χρησιμοποιήσουμε τη βάση δεδομένων Pictures.my2.mdbμε έτοιμα σχέδια και με βάση αυτό θα δημιουργήσουμε εφαρμογή δικτύου(για όσους δεν έχουν Άσκηση 7, το DB επισυνάπτεται στον κατάλογο Πηγή/Δεδομένα).

Δημιουργία πελάτη

Για τον πελάτη, θα δημιουργήσουμε μια εφαρμογή παραθύρου όπως WPFμε μια διεπαφή χρήστη που έχει μερικώς δανειστεί από Παράδειγμα 6 Ασκήσεις 7.


Ο διακομιστής δεν είναι έτοιμος, περιμένετε! Προσπαθούμε να επικοινωνήσουμε Συγγνώμη για την ταλαιπωρία...

Για να εμφανίσουμε μια οθόνη εκκίνησης με το κείμενο ότι ο διακομιστής δεν είναι έτοιμος, χρησιμοποιήσαμε το στοιχείο Πλαίσιο προβολής, στο οποίο τοποθετήθηκε ένα άλλο στοιχείο Σύνορομε περιεχόμενο κειμένου. Αυτός ο «κήπος» θα σας επιτρέψει να αυξήσετε την προφύλαξη οθόνης ανάλογα με το μέγεθος του παραθύρου. Ωστόσο, η εισαγωγή του στοιχείου Πλαίσιο προβολήςαρχίζει να επιβραδύνει αισθητά την επανασχεδίαση της διεπαφής κατά τη μετακίνηση του παραθύρου, επειδή προσπαθεί συνεχώς να υπολογίζει εκ νέου τις κλίμακες των θυγατρικών στοιχείων του. Εκχωρήσαμε ονόματα μόνο σε εκείνα τα στοιχεία διεπαφής που πρόκειται να διαχειριστούμε σε διαδικαστικό κώδικα.

χρησιμοποιώντας το σύστημα. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.Text; χρησιμοποιώντας System.Windows; χρησιμοποιώντας System.Windows.Controls; χρησιμοποιώντας System.Windows.Data; χρησιμοποιώντας System.Windows.Documents; χρησιμοποιώντας System.Windows.Input; χρησιμοποιώντας System.Windows.Media; χρησιμοποιώντας System.Windows.Media.Animation; χρησιμοποιώντας System.Windows.Media.Imaging; χρησιμοποιώντας System.Windows.Shapes; // Πρόσθετοι χώροι ονομάτων για τη ροή χρησιμοποιώντας το System.IO; χρησιμοποιώντας IO = System.IO; // Ψευδώνυμο για τη διαδρομή διεύθυνσης χρησιμοποιώντας System.Windows.Threading; // Για το DispatcherTimer // Πρόσθετοι χώροι ονομάτων για το Socket //χρησιμοποιώντας το System.Net; χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Collections; // Λίστα χώρος ονομάτων PicturesClientDB ( δημόσια μερική κλάση Window1: Παράθυρο ( θύρα int = 12000; String hostName = "127.0.0.1"; // τοπικός πελάτης TcpClient = null; // Σύνδεσμος πελάτη String sendMessage = "!!!GetNames!!!"; / / Αίτημα για μια λίστα (δύσκολο) Διαχωριστής χαρακτήρων = ( "#" ) Για να μετατρέψετε την απόκριση σε μια σειρά ονομάτων Χρονόμετρο DispatcherTimer // Constructor public Window1() ( InitializeComponent(); start a timer = new DispatcherTimer(); αποστολέας, EventArgs e) ( Execute(listBox); ) private void listBox_SelectionChanged(object sender, SelectionChangedEventArgs e) ( Execute((ListBox)sender); ) void Execute(ListBox lst) ( // Συμπληρώστε τη λίστα με ονόματα εικόνων δοκιμάστε ( / / Εάν ο διακομιστής είναι διαθέσιμος, δημιουργήστε έναν πελάτη-πελάτη = νέο TcpClient(hostName, port) catch ( // Ο διακομιστής δεν είναι έτοιμος, ξεκινήστε το χρονόμετρο και πραγματοποιήστε έξοδο εάν (Prompt.Visibility != Visibility.Visible) ( Prompt.Visibility = Visibility.Visible; timer.Start(); ) ΕΠΙΣΤΡΟΦΗ; ) switch (sendMessage) ( case "!!!GetNames!!!": // Λήψη και δέσμευση των ονομάτων των εικόνων στη λίστα lst.ItemsSource = GetNames(); // Επιλέξτε το πρώτο στοιχείο της λίστας που θα καλέσετε SelectionChanged lst .SelectedIndex = 0; .Stop(); σε ροή μνήμης bi.StreamSource = new MemoryStream (GetPicture(name) bi.EndInit(Pictures.picture.ImageSource = bi). ονόματα, // Δημιουργία ροών δικτυακές συνδέσεις StreamReader readerStream = νέος StreamReader(client.GetStream()); StreamWriter writerStream = νέος StreamWriter(client.GetStream()); // Αποστολή αιτήματος στον διακομιστή writerStream.WriteLine(sendMessage); writerStream.Flush(); // Διαβάστε την απάντηση String receiverData = readerStream.ReadLine(); names = receiverData.Split(separator) // Μετατροπή σε πίνακα συμβολοσειρών // Κλείσιμο της σύνδεσης και των ροών, η σειρά δεν είναι σημαντική client.Close(); writerStream.Close(); readerStream.Close(); επιστρέφουν ονόματα? ) Byte GetPicture(Όνομα συμβολοσειράς) ( // Δημιουργία ροών συνδέσεων δικτύου NetworkStream readerStream = client.GetStream(); StreamWriter writerStream = new StreamWriter(client.GetStream()); // Αποστολή αιτήματος στον διακομιστή writerStream.WriteLine(name writerStream (// Ανάγνωση της απάντησης // ReceiveBufferSize - μέγεθος buffer για εισερχόμενα δεδομένα // SendBufferSize - μέγεθος buffer για εξερχόμενα δεδομένα. λίστα = νέα Λίστα (client.ReceiveBufferSize);// Αυξητική χωρητικότητα Byte byte = νέο Byte; // Μέγεθος buffer υποδοχής int count = 0; // Τμήματα εισερχόμενων δεδομένων ενώ ((count = readerStream.Read(bytes, 0, bytes.Length)) != 0) for (int i = 0; i< count; i++) list.Add(bytes[i]); // Преобразуем в массив результата bytes = new Byte; list.CopyTo(bytes); // Закрываем соединение и потоки, порядок неважен client.Close(); writerStream.Close(); readerStream.Close(); return bytes; } } // Для привязки к ресурсу class Pictures { // Поле public static ImageBrush picture = new ImageBrush(); static Pictures() { // Дежурный рисунок заставки picture.ImageSource = new BitmapImage(new Uri(@"flower2.jpg", UriKind.Relative)); picture.Stretch = Stretch.Fill; picture.Opacity = 1.0D; } // Привязываемое в интерфейсе свойство public static ImageBrush Picture { get { return picture; } } } }

Λάβετε υπόψη ότι κατά την προβολή εικόνων έχουμε εγκαταλείψει το παραδοσιακό στοιχείο Εικόνα, όπως έγινε στην προηγούμενη άσκηση. Και για αλλαγή το έκαναν εντελώς αντισυμβατικά (στα τούρκικα). Τώρα θα εμφανίσουμε τα σχέδια με ένα πινέλο ImageBrushστο φόντο ενός ορθογωνίου Σύνορομέσω ενός αντικειμένου που είναι προσαρτημένο σε αυτό Εικόνες. Φυσικά, στη ζωή είναι απίθανο να χρειαστεί να διαστρεβλώσετε με αυτόν τον τρόπο, αλλά αυτή η επιλογή μπορεί να σας φανεί χρήσιμη κάπου.


Η οθόνη εκκίνησης θα εμφανιστεί αμέσως μόλις εντοπιστεί το γεγονός ότι ο διακομιστής λείπει ή έχει σταματήσει. Και αφού εντοπιστεί ο διακομιστής, η προφύλαξη οθόνης θα εξαφανιστεί. Αυτός ο μηχανισμός θα λειτουργήσει αμέσως χάρη στο χρονόμετρο συστήματος. Ωστόσο, δεν υπάρχει ακόμη διακομιστής και πρέπει να γίνει.

Δημιουργία διακομιστή βάσης δεδομένων ως υπηρεσία
  • Ομάδα Αρχείο/Προσθήκη/Νέο έργοπροσθέστε στο διάλυμα NetworkStream νέο έργοΜε όνομα PicturesServerDBτύπος Υπηρεσία Windows


χρησιμοποιώντας το σύστημα. χρησιμοποιώντας System.Collections.Generic; χρησιμοποιώντας System.ComponentModel; χρησιμοποιώντας System.Data; χρησιμοποιώντας System.Diagnostics; χρησιμοποιώντας System.ServiceProcess. χρησιμοποιώντας System.Text; // Πρόσθετοι χώροι ονομάτων για το ADO.NET χρησιμοποιώντας System.Data.OleDb; χρησιμοποιώντας System.Data.Common; // Πρόσθετοι χώροι ονομάτων χρησιμοποιώντας System.IO; χρησιμοποιώντας System.Net; χρησιμοποιώντας System.Net.Sockets; χρησιμοποιώντας System.Threading; χρησιμοποιώντας System.Collections; Χώρος ονομάτων PicturesServerDB ( δημόσια μερική κλάση Service1: ServiceBase ( θύρα int = 12000; String hostName = "127.0.0.1"; // τοπική διεύθυνση IPA localAddr; διακομιστής TcpListener = null; // Σύνδεσμος προς διακομιστή Διαχωριστής συμβολοσειρών = "#"; // Διαχωριστής ονόματα στη γραμμή απόκρισης String ConnectionString; ; / / Μετατροπή της IP σε άλλη μορφή localAddr = IPAddress. ( δοκιμάστε ( διακομιστής = νέος TcpListener(localAddr, port);// Δημιουργία διακομιστή-ακρόασης διακομιστή.Start();// Εκκίνηση του διακομιστή // Ατελείωτος βρόχος ακρόασης πελατών ενώ (αληθές) ( // Ελέγξτε το ουρά σύνδεσης εάν (!διακομιστής .Εκκρεμεί()) // Η ουρά αιτήματος είναι κενή συνέχεια; TcpClient client = server.AcceptTcpClient();// Τρέχων πελάτης // Δημιουργία ροών σύνδεσης δικτύου StreamReader readerStream = new StreamReader(client.GetStream()); NetworkStream streamOut = client.GetStream(); StreamWriter writerStream = νέος StreamWriter(streamOut); // Διαβάστε την εντολή πελάτη String receiverData = readerStream.ReadLine(); // Αναγνώριση και εκτέλεση διακόπτη (receiverData) (περίπτωση "!!!GetNames!!!":// Αποστολή ονομάτων διαχωρισμένων με διαχωριστικό Ονόματα συμβολοσειρών = GetNames(); writerStream.WriteLine(names); // Χρήση writerStream.Flush through το κέλυφος (); δεν έχει σημασία client.Close(); readerStream.Close(); writerStream.Close(); ) ) τελικά ( // Stop the server.Stop();) ) // Ανάκτηση ονομάτων εικόνων από τη βάση δεδομένων και συσκευασία τους σε μία γραμμή για αποστολή στη συμβολοσειρά πελάτη GetNames() ( // Δημιουργία και διαμόρφωση της υποδομής ADO. NET OleDbConnection conn = νέα OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand("SELECT FileName FROM MyTable"); cmd.Connection = σύνδεση; conn.Open(); // Ανάκτηση ονομάτων εικόνων OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // Σχηματίστε μια συμβολοσειρά εξερχόμενων δεδομένων StringBuilder sb = new StringBuilder(); foreach (εγγραφή DbDataRecord στον αναγνώστη)// Ισοδύναμο με το reading reader.Read() sb.Append(((string)record["FileName"]).Trim() + separator); // Η σύνδεση εδώ θα κλείσει το ίδιο το αντικείμενο DataReader αφού διαβάσει όλα τα δεδομένα // σύμφωνα με τη σύμβαση κατά τη δημιουργία του CommandBehavior.CloseConnection // Αφαιρέστε τον επιπλέον τελευταίο χαρακτήρα του διαχωριστικού sb.Replace(separator, String.Empty, sb.ToString(). return sb.ToString(); ) // Ανάκτηση της ίδιας της εικόνας από τη βάση δεδομένων για αποστολή στο byte πελάτη GetPicture(Όνομα συμβολοσειράς) ( // Δημιουργία και διαμόρφωση της υποδομής ADO.NET OleDbConnection conn = new OleDbConnection(); conn.ConnectionString = connectionString; // Δημιουργία και Ρύθμιση παραμέτρων ενός αντικειμένου εντολής με βάση το όνομα της εικόνας OleDbCommand cmd = new OleDbCommand(cmd.Connection = conn.CommandType = CommandType.Text); .Προσθήκη (new OleDbParameter()); bytes = (byte)table.Rows["Picture"] // Σύνδεση με την εικόνα επιστροφής bytes;

Πλεονεκτήματα

  • Καθιστά δυνατή, στις περισσότερες περιπτώσεις, την κατανομή των λειτουργιών ενός υπολογιστικού συστήματος μεταξύ πολλών ανεξάρτητων υπολογιστών σε ένα δίκτυο. Αυτό διευκολύνει τη συντήρηση του συστήματος υπολογιστή. Ειδικότερα, η αντικατάσταση, επισκευή, αναβάθμιση ή μετακίνηση διακομιστή δεν επηρεάζει τους πελάτες.
  • Όλα τα δεδομένα αποθηκεύονται στον διακομιστή, ο οποίος, κατά κανόνα, προστατεύεται πολύ καλύτερα από τους περισσότερους πελάτες. Είναι ευκολότερο να επιβληθούν έλεγχοι αδειών στον διακομιστή ώστε να επιτρέπεται μόνο σε πελάτες με τα κατάλληλα δικαιώματα πρόσβασης να έχουν πρόσβαση στα δεδομένα.
  • Σας επιτρέπει να συνδυάσετε διαφορετικούς πελάτες. Οι πελάτες με διαφορετικές πλατφόρμες υλικού, λειτουργικά συστήματα κ.λπ. μπορούν συχνά να χρησιμοποιήσουν τους πόρους ενός διακομιστή.

Ελαττώματα

  • Η αποτυχία διακομιστή μπορεί να καταστήσει μη λειτουργικό ολόκληρο το δίκτυο υπολογιστή.
  • Η υποστήριξη της λειτουργίας αυτού του συστήματος απαιτεί έναν ξεχωριστό ειδικό - έναν διαχειριστή συστήματος.
  • Υψηλό κόστος εξοπλισμού.

Πολυεπίπεδη αρχιτεκτονική πελάτη-διακομιστή- ένας τύπος αρχιτεκτονικής πελάτη-διακομιστή στον οποίο η λειτουργία επεξεργασίας δεδομένων εκτελείται σε έναν ή περισσότερους ξεχωριστούς διακομιστές. Αυτό σας επιτρέπει να διαχωρίσετε τις λειτουργίες αποθήκευσης, επεξεργασίας και παρουσίασης δεδομένων για πιο αποτελεσματική χρήση των δυνατοτήτων των διακομιστών και των πελατών.

Ειδικές περιπτώσεις πολυεπίπεδης αρχιτεκτονικής:

Δίκτυο αποκλειστικού διακομιστή

Δίκτυο αποκλειστικού διακομιστή(Αγγλικά) Δίκτυο πελάτη/διακομιστή) είναι ένα τοπικό δίκτυο (LAN) στο οποίο συσκευές δικτύουσυγκεντρώνεται και διαχειρίζεται από έναν ή περισσότερους διακομιστές. Οι μεμονωμένοι σταθμοί εργασίας ή πελάτες (όπως οι υπολογιστές) πρέπει να έχουν πρόσβαση σε πόρους δικτύου μέσω διακομιστών.

Βιβλιογραφία

Valery KorzhovΣυστήματα πελάτη-διακομιστή πολλαπλών επιπέδων. Εκδοτικός Οίκος Open Systems (17 Ιουνίου 1997). Αρχειοθετήθηκε από το πρωτότυπο στις 26 Αυγούστου 2011. Ανακτήθηκε στις 31 Ιανουαρίου 2010.


Ίδρυμα Wikimedia. 2010.

Συστήματα πελάτη-διακομιστή. Μέρος 2ο

Αρχιτεκτονική πελάτη-διακομιστή: ορισμός, προϋποθέσεις εφαρμογής, πλεονεκτήματα και μειονεκτήματα

Τι είναι η αρχιτεκτονική πελάτη-διακομιστή; Επιλογές δημιουργίας εφαρμογών

Λοιπόν, ας μιλήσουμε επιτέλους

Τι ακριβώς είναι ένας πελάτης-διακομιστής; . Αυστηρά μιλώντας, θα πρέπει να γίνει διάκριση μεταξύ της τεχνολογίας πελάτη-διακομιστή με ευρεία έννοια, η οποία μπορεί να χρησιμοποιηθεί σε οποιαδήποτε συστήματα υπολογιστώναπό την ίδια την αρχιτεκτονική πελάτη-διακομιστή σε σχέση με εφαρμογές πληροφοριώνγενικά και ιδιαίτερα τα αυτοματοποιημένα συστήματα διαχείρισης επιχειρήσεων.

Σύμφωνα με το διαδικτυακό λεξικό όρων υπολογιστών, πελάτης-διακομιστής είναι ένα είδος κατανεμημένο σύστημα, στον οποίο υπάρχει ένας διακομιστής που εκπληρώνει αιτήματα πελάτη και ο διακομιστής και ο πελάτης επικοινωνούν μεταξύ τους χρησιμοποιώντας το ένα ή το άλλο πρωτόκολλο.

Ένας πελάτης είναι ένα πρόγραμμα που χρησιμοποιεί πόρους και ένας διακομιστής (στα αγγλικά, ένας εξυπηρετητής) είναι ένα πρόγραμμα που εξυπηρετεί αιτήματα πελατών για έναν συγκεκριμένο τύπο πόρων. Ένας τέτοιος ευρύς ορισμός περιλαμβάνει σχεδόν κάθε τεχνολογία λογισμικού που περιλαμβάνει περισσότερα από ένα προγράμματα, οι λειτουργίες μεταξύ των οποίων κατανέμονται ασύμμετρα. Κατά συνέπεια, μιλούν για την τεχνολογία CS σε σχέση με λειτουργικά συστήματα, τοπικά και παγκόσμια δίκτυα κ.λπ.

Ένας τόσο ευρύς ορισμός δημιουργεί κάποια σύγχυση. Έτσι, ένα σύστημα αρχείων-διακομιστή χρησιμοποιεί επίσης τεχνολογία πελάτη-διακομιστή, αλλά από την άποψη της αρχιτεκτονικής προγραμμάτων εφαρμογών, αυτό που είναι σημαντικό είναι τι είδους πόρους παρέχει ο διακομιστής στους πελάτες.

Η έννοια της αρχιτεκτονικής πελάτη-διακομιστή στα συστήματα διαχείρισης επιχειρήσεων συνδέεται με τη διαίρεση οποιουδήποτε προγράμματος εφαρμογής σε τρία κύρια στοιχεία ή επίπεδα. Αυτά τα τρία συστατικά είναι

:
  • συστατικό παρουσίασης δεδομένων (οπτικοποίηση).
  • εφαρμοσμένη λογική συνιστώσα?
  • στοιχείο διαχείρισης βάσης δεδομένων.
  • Πράγματι, κάθε πρόγραμμα που μηχανογραφεί την εκτέλεση μιας συγκεκριμένης εργασίας εφαρμογής πρέπει να ανταλλάσσει πληροφορίες με τον χρήστη, να πραγματοποιεί την πραγματική επεξεργασία αυτών των πληροφοριών ως μέρος της αυτοματοποίησης μιας συγκεκριμένης επιχειρηματικής διαδικασίας και, τέλος, να αποθηκεύει τα δεδομένα που χρησιμοποιούνται στο πρόγραμμα σε ένα ή άλλο μόνιμο μέσο .

    Για τοπικές εφαρμογές, που εκτελείται εξ ολοκλήρου σε υπολογιστή (για παράδειγμα, Word ή Excel), όλα αυτά τα στοιχεία συλλέγονται μαζί και δεν μπορούν να διανεμηθούν μεταξύ διάφορους υπολογιστές. Ένα τέτοιο πρόγραμμα είναι μονολιθικό και χρησιμοποιεί για εκτέλεση μόνο τους πόρους του υπολογιστή στον οποίο εκτελείται.

    Σε εφαρμογές διακομιστή αρχείων, ορισμένα από τα στοιχεία αποθήκευσης μεταφέρονται στον διακομιστή αρχείων, ωστόσο, όλοι οι χειρισμοί με δομές δεδομένων εκτελούνται σε μηχανή πελάτηκαι κωδικός πρόγραμμα χρήστηλειτουργεί επίσης μόνο σε αυτό.

    Το κριτήριο που επιτρέπει την ταξινόμηση προγράμματα εφαρμογήςΠρος την αρχιτεκτονική πελάτη-διακομιστήείναι ότι τουλάχιστον ένα από τα τρία στοιχεία του εκτελείται πλήρως σε άλλον υπολογιστή και η αλληλεπίδραση μεταξύ στοιχείων σε διαφορετικούς υπολογιστές πραγματοποιείται μέσω ενός ή άλλου περιβάλλοντος δικτύου με τη μετάδοση αιτημάτων για την απόκτηση ενός ή του άλλου πόρου.

    Δεδομένου ότι η αρχιτεκτονική πελάτη-διακομιστή είναι μια ειδική περίπτωση τεχνολογίας πελάτη-διακομιστή, έχει απαραίτητα έναν πελάτη και έναν διακομιστή. Αντίστοιχα, διακρίνονται οι πλευρές πελάτη και διακομιστή της εφαρμογής. πλευρά πελάτηΗ εφαρμογή λειτουργεί στο χώρο εργασίας του χρήστη, ο οποίος στη συντριπτική πλειοψηφία των περιπτώσεων είναι ένας προσωπικός υπολογιστής. Πλευρά του διακομιστήλειτουργεί σε ένα εξειδικευμένο συγκρότημα που περιλαμβάνει ισχυρό υλικό, το απαιτούμενο σύνολο τυπικού λογισμικού, ένα σύστημα διαχείρισης βάσεων δεδομένων και τις ίδιες τις δομές δεδομένων.

    Η αλληλεπίδραση μεταξύ των τμημάτων πελάτη και διακομιστή της εφαρμογής πραγματοποιείται μέσω δικτύου - τοπικού ή παγκόσμιου. Ταυτόχρονα, από την πλευρά του πελάτη και του διακομιστή, η αλληλεπίδραση πραγματοποιείται με διαφάνεια, αντίστοιχα στοιχείο δικτύου εδώ περιλαμβάνει ένα σετ απαραίτητου εξοπλισμού δικτύου, ένα σετ τεχνολογίες λογισμικού, παρέχοντας μεταφορά δεδομένων μεταξύ κόμβων δικτύου, καθώς και το πραγματικό πρωτόκολλο ή τα πρωτόκολλα για την ανταλλαγή αιτημάτων και τα αποτελέσματα της εκτέλεσής τους.

    Το στοιχείο οπτικοποίησης εργασιών εφαρμογής παρέχει πληροφορίες εισαγωγής από τον χρήστη χρησιμοποιώντας συγκεκριμένα μέσα, καθώς και εμφάνιση πληροφοριών στην οθόνη και εκτύπωση. Το στοιχείο οπτικοποίησης για την αρχιτεκτονική πελάτη-διακομιστή εκτελείται πάντα στο σταθμό εργασίας του χρήστη (αφού πρέπει να παρατηρήσει τυχόν αποτελέσματα του προγράμματος).

    Το στοιχείο εφαρμοζόμενης λογικής λύνει πραγματικά ένα ή άλλο πρόβλημα που σχετίζεται με την επεξεργασία δεδομένων σε μια συγκεκριμένη θεματική περιοχή. Αυτό το στοιχείο μπορεί να διανεμηθεί μεταξύ του πελάτη και του διακομιστή με διαφορετικούς τρόπους, ανάλογα με το μοντέλο που χρησιμοποιείται.

    Το στοιχείο αποθήκευσης της βάσης δεδομένων εκτελεί φυσικές λειτουργίες που σχετίζονται με την αποθήκευση δεδομένων, την ανάγνωση πληροφοριών από τη βάση δεδομένων και την εγγραφή σε αυτήν. Σε μια αρχιτεκτονική πελάτη-διακομιστή, αυτό το στοιχείο εκτελείται πάντα στον διακομιστή.

    Όσον αφορά τον αριθμό των στοιχείων, τα συστήματα πελάτη-διακομιστή χωρίζονται σε δύο επιπέδων και τριών επιπέδων

    . Δύο επιπέδωντα συστήματα αποτελούνται μόνο από έναν πελάτη και έναν διακομιστή. ΣΕ τριών επιπέδωνΜεταξύ του πελάτη χρήστη και του διακομιστή που αποθηκεύει και επεξεργάζεται τη βάση δεδομένων, εμφανίζεται ένα τρίτο, ενδιάμεσο επίπεδο, το οποίο είναι ένας διακομιστής για τον χρήστη και ένας πελάτης για το σύστημα διαχείρισης βάσης δεδομένων. Αυτή η αρχιτεκτονική επιτρέπει την πιο ευέλικτη κατανομή των λειτουργιών του συστήματος και του φορτίου μεταξύ των στοιχείων του συγκροτήματος υλικού και λογισμικού και μπορεί επίσης να μειώσει τις απαιτήσεις πόρων για τους σταθμούς εργασίας των χρηστών. Το απαραίτητο τίμημα για αυτό είναι ότι τέτοια συστήματα είναι πολύ πιο δύσκολο να αναπτυχθούν, να εφαρμοστούν και να λειτουργήσουν και απαιτούν σημαντικό κόστος και υψηλά καταρτισμένο προσωπικό.

    Το τρίτο μέρος εξετάζει ένα παράδειγμα δομής τριών επιπέδων Διακομιστής Baikonur.

    Στην αρχιτεκτονική πελάτη-διακομιστή, υπάρχουν πολλά διαφορετικά μοντέλα εφαρμογών, ανάλογα με την κατανομή των στοιχείων της εφαρμογής μεταξύ των τμημάτων πελάτη και διακομιστή. Ιστορικά, το πρώτο αναπτύχθηκε μοντέλο διακομιστή απομακρυσμένη πρόσβασησε δεδομένα. Σε αυτό το μοντέλο, το τμήμα διακομιστή αποθηκεύει μόνο δεδομένα και όλη η λογική της εφαρμογής υλοποιείται από το τμήμα πελάτη. Σε αυτήν την περίπτωση, ο πελάτης θα στείλει αιτήματα στον διακομιστή για τη λήψη δεδομένων και ο διακομιστής θα επιστρέψει ορισμένα δείγματα στον πελάτη. Το πιο κοινό μέσο επικοινωνίας μεταξύ του πελάτη και του διακομιστή σε αυτήν την περίπτωση είναι η SQL (δομημένη γλώσσα ερωτημάτων) - μια τυπική μη διαδικαστική γλώσσα που επικεντρώνεται στην επεξεργασία δεδομένων.

    Στο μοντέλο διακομιστή απομακρυσμένης πρόσβασης δεδομένων, κανένα τμήμα εφαρμογής του συστήματος δεν εκτελείται από την πλευρά του διακομιστή, γεγονός που μπορεί να οδηγήσει σε υποφόρτωση του διακομιστή και υπερφόρτωση του πελάτη. Ως εκ τούτου, στη συνέχεια προτάθηκε και στη συνέχεια εφαρμόστηκε αρχιτεκτονική διακομιστή βάσης δεδομένων. Σε αυτό, μέρος της λογικής της εφαρμογής υλοποιείται στον διακομιστή χρησιμοποιώντας μια ειδική γλώσσα προγραμματισμού και μέρος - στον πελάτη. Αυτό κατέστη δυνατό χάρη στην αυξημένη παραγωγικότητα των σύγχρονων διακομιστών DBMS. Σε σύγκριση με την επιλογή διακομιστή απομακρυσμένης πρόσβασης δεδομένων, σε αυτήν την περίπτωση το φορτίο είναι ελαφρώς μειωμένο

    από την πλευρά του πελάτη, η ένταση της ανταλλαγής δεδομένων δικτύου και σε ορισμένες περιπτώσεις η δομή της εφαρμογής απλοποιείται. Επί του παρόντος, αυτή η επιλογή για συστήματα κτιρίων είναι η πιο κοινή.

    Μια άλλη επιλογή για την αρχιτεκτονική πελάτη-διακομιστή είναι διακομιστή εφαρμογών. Σε αυτήν την περίπτωση, ο πελάτης εκτελεί μόνο λειτουργίες οπτικοποίησης και εισαγωγής δεδομένων και ο διακομιστής εφαρμόζει όλη τη λογική της εφαρμογής. Η ανταλλαγή μεταξύ του πελάτη και του διακομιστή σε τέτοια συστήματα πραγματοποιείται σε επίπεδο εντολών για την εμφάνιση δεδομένων στην οθόνη και των αποτελεσμάτων της εισαγωγής του χρήστη. Το πιο εντυπωσιακό παράδειγμα αυτής της αρχιτεκτονικής είναι το γνωστό φυλλομετρητής. Τις περισσότερες φορές, στο μοντέλο διακομιστή εφαρμογών, η λογική της εφαρμογής και τα στοιχεία διαχείρισης δεδομένων υλοποιούνται χωριστά.

    Η αρχιτεκτονική του διακομιστή εφαρμογών αναφέρεται συχνά ως "λεπτός πελάτης, Σε αντίθεση με ένας παραδοσιακός «χοντρός» πελάτης που υλοποιείται σε μια αρχιτεκτονική διακομιστή βάσης δεδομένων.Ο thin client είναι μια επιλογή που μπορεί να χρησιμοποιηθεί όταν οι διαθέσιμοι πόροι στους σταθμούς εργασίας των χρηστών είναι ανεπαρκείς για την εκτέλεση της λογικής της εφαρμογής. Επιπλέον, αυτή η τεχνολογία σάς επιτρέπει να μειώσετε το κόστος λειτουργίας των στοιχείων πελάτη του συστήματος λόγω της ισχυρής απλοποίησής τους.

    Προϋποθέσεις για την εμφάνιση της αρχιτεκτονικής πελάτη-διακομιστή στην επιχείρηση

    Η μηχανογράφηση μιας βιομηχανικής επιχείρησης μπορεί να πραγματοποιηθεί για μεγάλο χρονικό διάστημα στο πλαίσιο των τοπικών χώρων εργασίας ή αρχιτεκτονικής που περιγράφηκαν προηγουμένως διακομιστή αρχείων. Ωστόσο, αργά ή γρήγορα μπορεί να έρθει μια στιγμή που η μόνη επιλογή για την περαιτέρω ανάπτυξη αυτοματοποιημένων συστημάτων διαχείρισης επιχειρήσεων θα είναι η αρχιτεκτονική διακομιστή-πελάτη. Ας προσπαθήσουμε να απαριθμήσουμε κύριοι λόγοιγιατί αυτό καθίσταται απαραίτητο.

    Πρώτον, η αρχιτεκτονική πελάτη-διακομιστή γίνεται ζωτικής σημασίας όταν ο αριθμός των χρηστών που χρησιμοποιούν ενεργά ταυτόχρονα τα ίδια δεδομένα υπερβαίνει τα 10-15 άτομα. Λόγω των θεμελιωδών περιορισμών που είναι εγγενείς στις εφαρμογές διακομιστή αρχείων, τέτοια συστήματα είναι δύσκολο να ανεχτούν με 15 ταυτόχρονους χρήστες και συχνά καταρρέουν με 20 χρήστες. Έτσι, εάν μια επιχείρηση βρίσκεται αντιμέτωπη με το καθήκον να χτίσει ένα σύστημα στο οποίο ο αριθμός των θέσεων που εργάζονται ταυτόχρονα ενεργά με δεδομένα υπερβαίνει τις 20, πρακτικά η μόνη επιλογή για αυτήν είναι ένας πελάτης-διακομιστής.

    Για να είμαστε δίκαιοι, θα πρέπει να σημειωθεί ότι οι μεγάλοι υπολογιστές είναι επίσης ικανοί να χειριστούν δεκάδες ή και εκατοντάδες χρήστες. Ωστόσο, λόγω του υψηλού κόστους του υλικού, του υψηλού κόστους ανάπτυξης και, κυρίως, του σημαντικού κόστους λειτουργίας τέτοιου εξοπλισμού και προγραμμάτων για αυτόν, η επιλογή χρήσης μιας κεντρικής αρχιτεκτονικής κατά την εισαγωγή νέων συστημάτων στη χώρα μας δεν εξετάζεται σχεδόν ποτέ. .

    Ένα άλλο κρίσιμο σημείο για τη μετάβαση στην αρχιτεκτονική πελάτη-διακομιστή είναι η μετάβαση στην επίλυση προβλημάτων εταιρικής κλίμακας και στη διαχείριση της επιχείρησης στο σύνολό της. Η αυτοματοποίηση μεμονωμένων εργασιών μπορεί να ολοκληρωθεί με επιτυχία ακόμη και χωρίς τη χρήση τεχνολογιών δικτύου ένας διακομιστής αρχείων μπορεί να χειριστεί εργασίες κλίμακας τμήματος, αλλά η δημιουργία ενός ολοκληρωμένου αυτοματοποιημένου συστήματος που καλύπτει ολόκληρη την επιχείρηση ή τουλάχιστον οποιοδήποτε από τα υποσυστήματα διαχείρισης είναι δυνατή μόνο με τη χρήση. τεχνολογίες πελάτη-διακομιστή.

    Μια άλλη κατάσταση όπου ο πελάτης-διακομιστής είναι ο μόνος τρόπος δημιουργίας ενός συστήματος είναι όταν το αυτοματοποιημένο σύστημα έχει απομακρυσμένους χρήστες, με τους οποίους είναι απαραίτητη η ανταλλαγή πληροφοριών σε πραγματικό χρόνο. Με τον όρο κλίμακα πραγματικού χρόνου εννοούμε εδώ δευτερόλεπτα-λεπτά. Η ανταλλαγή δεδομένων σε δισκέτες σε αυτήν την περίπτωση δεν είναι κατάλληλη καταρχήν και η αρχιτεκτονική του διακομιστή αρχείων θα απαιτήσει πολύ υψηλές ταχύτητεςανταλλαγή, και αυτό μπορεί να είναι είτε θεμελιωδώς αδύνατο είτε πολύ ακριβό. Μεμονωμένα παραδείγματα πλούσιων οργανισμών που κατασκεύασαν συστήματα διακομιστών αρχείων σε όλη την πόλη (για παράδειγμα, το Russian Inkombank) αποτελούν εξαιρέσεις που αποδεικνύουν τον κανόνα.

    Και τέλος, η αρχιτεκτονική πελάτη-διακομιστή είναι απαραίτητη όταν Το καθήκον της διασφάλισης της ακεραιότητας των πληροφοριών γίνεται κρίσιμο. Με τον όρο κρίσιμο εννοούμε μια κατάσταση στην οποία το κόστος ενός σφάλματος δεδομένων μπορεί να είναι συγκρίσιμο με το κόστος δημιουργίας ενός συστήματος πελάτη-διακομιστή. Πρώτα απ 'όλα, αυτό είναι σχετικό για τις χρηματοοικονομικές υπηρεσίες των επιχειρήσεων.

    Μια προσπάθεια επίλυσης οποιουδήποτε από τα προβλήματα που αναφέρονται παραπάνω ως μέρος της μηχανογράφησης μιας βιομηχανικής επιχείρησης θα συνεπάγεται αναγκαστικά την εμφάνιση ενός συστήματος πελάτη-διακομιστή. Επιπλέον, αυτή η αρχιτεκτονική μπορεί να προκύψει ως μια φυσική εξέλιξη των αυτοματοποιημένων συστημάτων ελέγχου παραγωγής, ακόμη και αν οι περιορισμοί των προηγούμενων αρχιτεκτονικών σε μια δεδομένη επιχείρηση δεν έχουν γίνει ακόμη κρίσιμοι. Αυτή η επιλογή είναι η πλέον προτιμώμενη γιατί, αφενός, η υλοποίηση λαμβάνει υποστήριξη από μέσα και, αφετέρου, υπάρχει χρόνος να προετοιμαστεί μια ομαλή αλλαγή στην αρχιτεκτονική των εφαρμογών πληροφοριών.

    Αρχιτεκτονική πελάτη-διακομιστή: Ναι, αλλά...

    Έχουμε ήδη μιλήσει για τα πλεονεκτήματα της αρχιτεκτονικής πελάτη-διακομιστή. Μπορεί να προκύψει ένα φυσικό ερώτημα: αν είναι τόσο καλό, τότε γιατί δεν το έχουν αλλάξει ακόμα; Ολασημαντικούς χρήστες πληροφοριακών συστημάτων. Στην πραγματικότητα δεν είναι τόσο απλό.

    Πρώτα απ 'όλα, για τις εγχώριες βιομηχανικές επιχειρήσεις είναι κρίσιμο παράγοντας κόστους. Σε αντίθεση με τις δυτικές επιχειρήσεις, όπου, κατά κανόνα, μιλάμε για αντικατάσταση αρκετά ακριβών κεντρικών συστημάτων με συστήματα πελάτη-διακομιστή, το άμεσο κόστος των οποίων είναι χαμηλότερο, οι εγχώριες επιχειρήσεις σχεδόν ποτέ δεν είχαν αρκετά κεφάλαια για να εφαρμόσουν μεγάλα κεντρικά συστήματα. Πολύ συχνά διαθέσιμο στην επιχείρηση Πληροφοριακά συστήματαχτισμένο σε ξεπερασμένο υλικό που απαιτεί πλήρη αντικατάσταση κατά τη μετάβαση σε αρχιτεκτονική πελάτη-διακομιστή.

    Το επόμενο μεγάλο "αλλά" είναι ο μεγάλος όγκος των ίδιων των τεχνολογικών αλλαγώνπροβλήματα που προκύπτουν κατά την προσπάθεια υλοποίησης μιας αρχιτεκτονικής πελάτη-διακομιστή. Ένα σύστημα πελάτη-διακομιστή απαιτεί διαφορετικό επίπεδο τεχνικού γραμματισμού τόσο από τους υπαλλήλους των υπηρεσιών πληροφοριών όσο και από την πλευρά τελικούς χρήστες. Το κόστος της επανεκπαίδευσης των χρηστών και του λειτουργικού προσωπικού, η αναδιάρθρωση της δομής του εταιρικού αυτοματισμού αποτελούν μεγαλύτερο μέρος του παγόβουνου από το σαφώς ορατό άμεσο κόστος της αναβάθμισης του εξοπλισμού, της αγοράς και/ή της ανάπτυξης του απαιτούμενου λογισμικού.

    Και τέλος, η μεγαλύτερη παγίδα στο δρόμο για τη δημιουργία ενός συστήματος CS σε μια επιχείρηση είναι η ανάγκη αλλαγή της δομής διαχείρισης και των συναφών οργανωτικών δαπανών

    .

    Μια προσπάθεια εισαγωγής νέων τεχνολογικών λύσεων χωρίς να αλλάξει τίποτα στην ουσία των αυτοματοποιημένων επιχειρηματικών διαδικασιών μπορεί να καταλήξει μάταια. Στην περίπτωση αυτή, η επιχείρηση θα υποστεί άμεσες υλικές απώλειες λόγω του μεγάλου όγκου ακριβού υλικού και λογισμικού που βρίσκεται νεκρό βάρος, καθώς και λόγω της απόσπασης της προσοχής των εργαζομένων από την εκτέλεση των κύριων εργασιακών τους καθηκόντων. ΣΕ το καλύτερο σενάριοθα εφαρμοστεί χωριστές περιοχέςσύστημα πελάτη-διακομιστή, ενώ μάλιστα το νέο λογισμικό θα χρησιμοποιηθεί στο παλιό ιδεολογικό επίπεδο.

    Εάν, αφού σταθμίσει όλα τα πλεονεκτήματα και τα μειονεκτήματα, η επιχείρηση αποφασίσει ωστόσο να δημιουργήσει ένα σύστημα πελάτη-διακομιστή, τότε αντιμετωπίζει την αποστολή επιλογή εξαρτημάτωνγια την κατασκευή αυτού του συστήματος. Σε κάθε περίπτωση, το απαραίτητο συστατικό είναι το ένα ή το άλλο διακομιστή βάσης δεδομένων εταιρικό επίπεδο. Τα υπόλοιπα εξαρτήματα εξαρτώνται από τη διαδρομή που έχει επιλέξει η επιχείρηση για την περαιτέρω ανάπτυξη του αυτοματοποιημένου συστήματος ελέγχου.

    Εάν η επιχείρηση έχει αποφασίσει αναπτύξτε το σύστημα μόνοι σας, τότε έρχεται αντιμέτωπος, πρώτα απ' όλα, με το έργο της επιλογής εργαλείων ανάπτυξης. Εάν η εταιρεία τοποθετεί εντολή για τη δημιουργία ενός συστήματοςμια συγκεκριμένη εταιρεία ανάπτυξης, τότε αντιμετωπίζει ένα παρόμοιο έργο.

    Σε περίπτωση που ληφθεί απόφαση να μην αναπτύξουμε μόνοι μας το σύστημα, αλλά να χρησιμοποιήσουμε μία από τις λύσεις που διατίθενται στην αγορά, τότε το κύριο στοιχείο της επιλογής είναι έτοιμο (σε έναν βαθμό) σύστημα αυτοματισμού επιχειρήσεων. Στην πραγματικότητα, η λέξη "off-the-shelf" θα πρέπει να χρησιμοποιείται πολύ προσεκτικά, καθώς είναι δύσκολο να γίνει σαφής διαχωρισμός μεταξύ της προσαρμογής για τις ανάγκες μιας συγκεκριμένης χρήσης και της προσαρμογής του συστήματος, η οποία συχνά περιλαμβάνει τροποποίηση μονάδων συστήματος ή ομοιόμορφη ανάπτυξη πρόσθετη ασφάλειασύμφωνα με τις ανάγκες του πελάτη.