Τεχνολογία Λογισμικού - ntua · 2020-05-05 · Σχολή...
TRANSCRIPT
Σχολή Ηλεκτρολόγων Μηχανικών & Μηχανικών Η/Υ
Εθνικό Μετσόβιο Πολυτεχνείο
Τεχνολογία Λογισμικού7ο / 9ο Εξάμηνο 2018‐19
Ν.Παπασπύρου, Αν.Καθ. ΣΗΜΜΥ, [email protected],grΒ.Βεσκούκης, Αν.Καθ. ΣΑΤΜ, [email protected],gr
Κ.Σαΐδης, ΠΔ 407, [email protected]
ΠεριεχόμεναΑρχιτεκτονική λογισμικούΠοιοτικά χαρακτηριστικά κατανεμημένων συστημάτων
Αρχιτεκτονικά στυλ και πρότυπα ﴾architectural styles &patterns﴿
2
Αρχιτεκτονική λογισμικού
3
Περί τίνος πρόκειταιΗ λήψη των θεμελιωδών δομικών και σχεδιαστικών αποφάσεωνγια το λογισμικό που είναι ακριβό ﴾βλ. πρακτικά δύσκολο έωςαδύνατο﴿ να αλλάξουν αφού υλοποιηθούν.
4
Πολλές αρχιτεκτονικές οπτικές ﴾4+1﴿
By mpan ‐ Based on File:4+1 Architectural View Model.jpg by User:Mdd,CC BY‐SA 3.0, https://commons.wikimedia.org/w/index.php?curid=50144028
5
ΕιδικότεραLogical view: έμφαση στη λειτουργικότητα του συστήματοςσε υψηλό επίπεδοPhysical view: έμφαση στην τοπολογία και διασύνδεση τωνσυστατικών του σε φυσικό επίπεδο ﴾deployment﴿Development view: έμφαση στην οπτική του προγραμματιστή
Process view: έμφαση στη δυναμική συμπεριφορά τουσυστήματος κατά την εκτέλεσή του ﴾απόδοση, κλιμάκωση,κτλ.﴿Scenarios ‐ Use case view: έμφαση στη χρηστική πλευρά τουσυστήματος και στους σχετικούς ελέγχους αποδοχής
6
Αρχιτεκτονικά πρότυπα ﴾architecturalpatterns﴿Γενικές κι επαναχρησιμοποιήσιμες λύσεις σε κοινά προβλήματααρχιτεκτονικής.
7
Αρχιτεκτονικά στυλ ﴾architectural styles﴿Όπως και στην "κανονική" αρχιτεκτονική, το στυλ είναι μιασυγκεκριμένη μέθοδος κατασκευής που χαρακτηρίζεται απόσυγκεκριμένα αξιοπρόσεκτα χαρακτηριστικά.
8
Ένα αρχιτεκτονικό στυλ είναι μια "επώνυμη" συλλογή απόσχεδιαστικές αποφάσεις:
1. η οποία εφαρμόζεται σε ένα δεδομένο περιβάλλον,
2. οριοθετόντας τα πιθανά συστήματα που μπορεί ναπροκύψουν σε αυτό,
3. παρέχοντας ποιοτικά χαρακτηστικά σε κάθε συστήμα πουπροκύπτει.
9
Λίστα αναγνωσμάτωνRichard N. Taylor, Nenad Medvidovic, Eric Dashofy, "SoftwareArchitecture: Foundations, Theory, and Practice", 2009, Wiley andSons, ISBN: 0470167742
10
Αρχιτεκτονικά στυλ και πρότυπαΣτο μάθημα δεν θα επιμείνουμε στη διάκριση.Είτε τα ονομάσουμε στυλ, είτε πρότυπα, μας εφοδιάζουν μεμια κοινή γλώσσα ή λεξιλόγιο για να περιγράψουμεοικογένεις ή/και κατηγορίες συστήματων.
Είναι σύνηθες να συνυπάρχουν και να συνδυάζονται πολλάαρχιτεκτονικά πρότυπα και στυλ σε μια εφαρμογή.
11
Στο μάθημα θα δούμε ﴾αλφαβητικά﴿Client‐ServerComponent‐based
Εvent‐DrivenLayered / N‐tierMaster‐slave/Master‐replicaMessage‐driven/Publish‐subscribe
Microservices*
12
Model‐View‐Controller ﴾MVC﴿Model‐View‐ViewModel ﴾MVVM﴿*Peer‐to‐peer ﴾P2P﴿
Pipeline / Pipe‐filterRepresentation State Transfer ﴾REST﴿*Service‐oriented*Share‐nothing
* Σε επόμενη διάλεξη
13
Ποιοτικά χαρακτηριστικάκατανεμημένων συστημάτων
14
ΟρισμόςΈνα κατανεμημένο σύστημα αποτελείται από ξεχωριστάσυστατικά που:
Λειτουργούν σε ένα δίκτυο υπολογιστών.Επικοινωνούν μεταξύ τους μέσω ανταλλαγής μηνυμάτων.Αλληλοεπιδρούν για την επίτευξη ενός κοινού στόχου.
15
Πλάνες σχετικά με τα κατανεμημένασυστήματα ﴾α﴿
1. Το δίκτυο είναι αξιόπιστο ﴾reliable﴿.2. Η καθυστέρηση ﴾latency﴿ του δικτύου είναι μηδενική.
3. Το εύρος ζώνης ﴾bandwidth﴿ είναι άπειρο.4. Το δίκτυο είναι ασφαλές ﴾secure﴿.
16
Πλάνες σχετικά με τα κατανεμημένασυστήματα ﴾β﴿
5. Η τοπολογία ﴾topology﴿ του δικτύου δεν αλλάζει.6. Υπάρχει μόνο ένας διαχειριστής ﴾administrator﴿.
7. Το κόστος μεταφοράς ﴾transport﴿ δεδομένων είναι μηδενικό.8. Το δίκτυο είναι ομογενές ﴾homogeneous﴿.
17
Βασικά χαρακτηριστικάΣυνέπεια δεδομένων ﴾Consistency﴿
Διαθεσιμότητα συστήματος ﴾Availability﴿Αστοχία δικτύου ﴾Network partition﴿Καθυστέρηση αίτησης/απόκρισης ﴾Latency﴿Αιτήσεις ανά μονάδα χρόνου ﴾Throughput﴿
Κλιμάκωση ﴾Scalability﴿
18
Consistency ﴾C﴿Η συνέπεια των δεδομένων.
Ζητούμενο: κάθε ανάγνωση ﴾read﴿ λαμβάνει την πιοπρόσφατη ενημέρωση ﴾write﴿ ή το σχετικό σφάλμα.
19
ΠροσοχήΗ συνέπεια που υπόσχεται η αρχή ACID των δοσοληψιών στιςβάσεις δεδομένων είναι πιο αυστηρή.
20
ACID TransactionsAtomicity
Η δοσοληψία πετυχαίνει ή αποτυγχάνει πλήρωςConsistency
Μετάβαση της βάσης σε πάντα έκγυρη κατάστασηIsolation
Απομόνωση της εκτέλεσης των δοσοληψιώνDurability
Μονιμότητα των αποτελεσμάτων των δοσοληψιών
21
Availability ﴾A﴿Η διαθεσιμότητα της εφαρμογής.Ζητούμενο: κάθε αίτηση ﴾request﴿ να λαμβάνει μια απάντηση﴾μη λάθους﴿.Χωρίς να προσφέρονται πάντα εγγυήσεις ότι η απάντησηπεριέχει την πιο πρόσφατη ενημέρωση ﴾write﴿.Η υψηλή διαθεσιμότητα απαιτεί αντιγραφές ﴾replication﴿.
22
Network Partition ﴾P﴿Aστοχία δικτύου.Επιμερισμός του συστήματος σε "αποσυδεδεμένες" νησίδες.Παράδειγμα: απώλεια σύνδεσης με τη βάση δεδομένων.
23
Latency ﴾L﴿H καθυστέρηση στην απόκριση του συστήματος.
Ζητούμενο: να ελαχιστοποιηθεί ο χρόνος που απαιτείται γιατην ικανοποίηση μιας αίτησης.
24
ThroughputΤο πλήθος των αιτήσεων που ικανοποιούνται από τοσύστημα ανά χρονική στιγμή.Ζητούμενο: να μεγιστοποιηθεί το πλήθος των αιτήσεων πουμπορούν να ικανοποιηθούν ανά χρονική στιγμή.
25
Τo θεώρημα CAPΣε περίπτωση αστοχίας δικτύου ﴾P﴿, θα έχουμε είτε συνέπεια τωνδεδομένων ﴾C﴿ είτε διαθεσιμότητα της εφαρμογής ﴾A﴿, όχι και ταδύο.
if (P) { A or C }
27
Το θεώρημα PACELCΕπέκταση του CAP
Αν δεν υπάρχει P, θα έχουμε είτε συνέπεια των δεδομένων ﴾C﴿ είτετην ελάχιστη δυνατή καθυστέρηση ﴾L﴿, αλλά όχι και τα δύο.
if (P) { A or C }else { L or C }
28
Λίστα αναγνωσμάτωνDaniel Abadi, "Consistency Tradeoffs in Modern DistributedDatabase System Design", IEEE Computer, Volume 45, Issue 2, Feb.2012.
29
Κατηγοριοποίηση κατανεμημένωνσυστημάτωνPA/EL
if P then A else L
PC/EC
if P then C else C //ACID databases
PC/EL
if P then C else L
30
ScalabilityΗ δυνατότητα ενός συστήματος να επαυξηθεί για να διαχειριστείαυξημένο φόρτο.
31
ΕιδικότεραΑν η αύξηση της απόδοσης του συστήματος είναι αναλογική τηςαύξησης σε υπολογιστικούς πόρους ﴾προσθήκη υλικού﴿, τότε τοσύστημα κλιμακώνεται ﴾scales﴿.
32
Οριζόντια και κάθετη κλιμάκωσηΟριζόντια ﴾scale out/in﴿: αύξηση/μείωση των κόμβων.
Κάθετη ﴾scale up/down﴿: αύξηση/μείωση των πόρων ενόςκόμβου.
33
Αρχιτεκτονικά στυλ και πρότυπα
34
Client‐Server
35
ΧαρακτηριστικάServer‐basedΝ clients, 1 serverΠου επικοινωνούν μεταξύ τους με ένα συγκεκριμένοπρωτόκολλο για να υλοποιήσουν μια συγκεκριμένη"εφαρμογή"Παραδείγματα: WWW, IMAP, POP3, FTP, SSH, κ.ά
36
Peer‐to‐peer ﴾P2P﴿
37
ΧαρακτηριστικάΔίκτυο ομότιμων κόμβωνΚάθε κόμβος είναι και client και server
Οι κόμβοι επικοινωνούν μεταξύ τους με ένα συγκεκριμένοπρωτόκολλο για να υλοποιήσουν μια συγκεκριμένη"εφαρμογή"Παραδείγματα: File‐sharing networks, Blockchain,Cryptocurrencies, κ.ά
38
Component‐based
39
ΧαρακτηριστικάΣχεδιασμός και αλληλεπίδραση των συστατικών τουλογισμικού μέσω InterfacesΈνα component παρέχει/υλοποιεί ένα interface και απαιτείτην ύπαρξη/κάνει χρήση ενός άλλου
Χαλαρή σύνδεση ﴾loose coupling﴿ και διαχωρισμόςενδιαφερόντων ﴾separation of concerns﴿Application server: το λογισμικό που φιλοξενεί τα components
40
ΚανόναςΠάντα ξεκινάμε το σχεδιασμό του λογισμικού από τα Interfaces
41
Layered/N‐tier
42
ΧαρακτηριστικάServer‐basedΛογική ή/και φυσική αρχιτεκτονική
Ευρεία χρήση στις εφαρμογές διαδικτύουFrameworks: παρέχουν έτοιμα προς χρήση καιπαραμετροποίηση interfaces, components & layers
43
Model‐View‐Controller ﴾MVC﴿
44
ΧαρακτηριστικάΔιαχωρισμός ενδιαφερόντων
ControllerUser input, request/response handling, επίβλεψη τωνModel, View
ModelData model, business logic
ViewData display
Ευρεία χρήση στις εφαρμογές διαδικτύου, πολλά frameworks
45
Παράδειγμα@Controller(url='/items')class ItemController { void get(Request req, Response res) { Template t = loadTemplate('items') //view List<Item> items = store.loadItems() //model Context ctx = new Context() ctx.put("items", items) t.render(res.getWriter(), ctx) } }
46
Master‐Slave / Master‐Replica
47
ΧαρακτηριστικάN slaves, 1 masterMaster ﴾authority﴿, slaves ﴾redundancy﴿Εφαρμογές: υψηλή διαθεσιμότητα, βελτίωση απόδοσης,επιμερισμός φόρτου, κ.ά
ReplicationMaster copy of data, multiple replicas ﴾slaves﴿
Load balancingMaster dispatch logic, multiple "worker" nodes
48
Share‐Nothing Architecture
49
ΧαρακτηριστικάΚάθε κόμβος είναι ανεξάρτητος και αυτοτελής.
No single point of contention ﴾δεν διαμοιράζονται πόροι, π.χ.μνήμη ή δίσκος﴿.Sharding: οριζόντια επιμέρηση των δεδομένων.Οριζόντια κλιμάκωση ﴾horizontal scalability﴿ ‐ απλή προσθήκηκόμβων.Η αρχιτεκτονική πολλών NoSQL συστημάτων.
50
Eventual ConsistencyBASE Systems ﴾Basically Available, Soft state, Eventualconsistency﴿Όταν πάψουν οι ενημερώσεις σε μια εγγραφή, τελικά﴾eventually﴿ όλες οι αναγνώσεις της εγγραφής αυτής θαεπιστρέψουν την πιο πρόσφατη ενημέρωση.Replica convergence ﴾σύκλιση αντιγράφων﴿PA/EL ﴾Επιλέγουν αυξημένη διαθεσιμότητα & μείωσηκαθυστέρησης αντί για συνέπεια﴿
51
Message‐driven/Publish‐subscribe
52
ΧαρακτηριστικάΧαλαρή σύνδεση ﴾loose coupling﴿ μεταξύ συστατικών/εφαρμογώνPublisher ﴾producer﴿: αποστολή μηνυμάτωνSubscriber ﴾consumer﴿: λήψη μηνυμάτων
Topics ﴾channels﴿: "κλάσεις/θέματα" μηνυμάτωνMessage Bus ﴾broker﴿: διαχερίση/δρομολόγηση μηνυμάτωνσύγχρονα ή ασύγχρονα, με εγγυήσεις αποστολής ή όχι, μεχρήση ουρών, με φιλτράρισμα ή όχι κτλ.
53
ΕφαρμογέςMiddleware ολοκλήρωσης ετερογενών συστημάτωνΕπίτευξη υψηλής απόδοσης και κλιμάκωσης σεκατανεμημένα συστήματα
Μειονέκτημα: δύσκολη η αλλαγή της δομής των μηνυμάτων
54
Event‐driven
55
ΧαρακτηριστικάEvents & Event handlers ﴾listeners, callbacks﴿Implicit invocation / Inversion of control
Event thread / Event loopΕφαρμογές: γραφική διεπαφή χρήστη, server‐sideαρχιτεκτονική
56
Παράδειγμα ﴾Javascript﴿class EventEmitter { constructor() { this.events = new Map(); //Map<Event, Set<Listener>> } on(event, listener) { let listeners = this.events.get(event); if (!listeners) { listeners = new Set(); this.events.set(event, listeners); } listeners.add(listener); return this; } emit(event, ...args) { const listeners = this.events.get(event); if (listeners) { for (let listener of listeners) { listener.apply(event, args); } } return this; }} 57
const events = new EventEmitter();events.on('foo', (e) => { console.log(e); });events.emit('foo'); // Prints "foo"
58
Παράδειγμα ﴾Java﴿public class MyPanel extends JPanel { public MyPanel() { JButton btn = new JButton("Do it"); btn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //do it } }); add(btn); }}
59
Nodejs Event Loop
60
Pipeline / Pipe‐filter
61
ΧαρακτηριστικάData streams, pipes and filters ﴾data transformations﴿Συναρτησιακός προγραμματισμόςΕπαναχρησιμοποίηση, παραλληλισμός
62
Παράδειγμα ﴾Java 8 streams﴿List<String> l = Arrays.asList("a1","a2","b1","c2","c1");l.stream() .filter(s ‐> s.startsWith("c")) .map(String::toUpperCase) .sorted() .forEach(System.out::println);
Output
C1C2
63