Αρχιτεκτονική για high availability web application

Τεχνικές και μόνο Συζητήσεις για WEB hosting servers, Mail servers, DNS servers. Όχι αναζήτηση υπηρεσιών εδώ!

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από burnmind » 29 Ιαν 2015 00:14

Κατασκευάζω μια εφαρμογή ως side project, η οποία χρειάζεται να έχει high availability. Μια και δεν έχω πολλές γνώσεις επι του θέματος, ψάχνω πληροφορίες ώστε να κατανοήσω τι θα χρειαστώ, κυρίως από θέμα server.

Ως παράδειγμα, έστω πως κατασκευάζω ένα affiliate network. Σε ένα τέτοιο project, υπάρχει ένα διαχειριστικό front-end που δεν ειναι το ιδανικό, αλλα ούτε και το τέλος του κόσμου, αν που και που έχει κάποιο μικρό downtime.

Υπάρχει όμως και ένα tracking service, το οποίο αναλαμβάνει να κάνει redirect τον χρήστη στον τελικό προορισμό του, φυτεύοντας κατά τη διάρκεια τα απαραίτητα cookies.

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

Και τα δυο κομμάτια του project θα επικοινωνούν με μια κοινή βάση.

Έκανα μία μικρή έρευνα και είδα διάφορες λύσεις (από έναν "απλό" failover server, μέχρι πολύπλοκα πράγματα σε AWS· κάποιοι αναφέραν και υπηρεσίες όπως το heroku), αλλά είμαι ακόμα μπερδεμένος.

Υπάρχει κάποια λύση που να μη χρειάζεται ιδιαίτερα μεγάλο budget γι' αρχή, αλλά να μπορεί να κάνει scale σχετικά εύκολα όταν χρειαστεί;

alou
Script Master
Δημοσιεύσεις: 1374
Εγγραφή: 24 Αύγ 2007 19:52
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από alou » 29 Ιαν 2015 13:22

Καταρχάς να μην το ξεχάσω, μου άρεσε πολύ το τελευταίο τεύχος του http://inequilibrium.co/ και συγχαρητήρια για τους μπελάδες σου ;)

Στο θέμα: (ειδικός δεν είμαι αλλά ξέρω 2 πράγματα και ας διορθώσει ή συμπληρώσει όποιος έχει μεγαλύτερη εμπειρία)
Καταρχάς, για να κάνεις εύκολα (χωρίς sysadmin και προσωπικά διαχειρίσιμο infrastructure) scaling και να έχεις αξιόπιστο uptime βρέξει χιονίσει, χρειάζεσαι κάποιο service.
Οι βασικές διαφορές, έτσι όπως τις έχω εγώ στο μυαλό μου τουλάχιστον, είναι αν θα χρησιμοποιήσεις infrastructure (amazon, google κλπ) ή platform (herocu, digital ocean, linode κλπ) as a service.

Αν μιλάς για ένα σύνολο εφαρμογής με db, server side γλώσσα και οτιδήποτε άλλο χρειάζεται, η απλή λύση είναι να πας σε ένα platform service όπως είναι και το herocu. Η πιο πολύπλοκη θα ήταν να συνθέσεις διάφορες υπηρεσίες και να πάρεις πάλι ανάλογο αποτέλεσμα από πχ Amazon, εξαρτάται από τις γνώσεις και το χρόνο που θέλει να διαθέσει κάποιος (στο κόστος μάλλον θα καταλήξει πιο αποτελεσματικό το 2ο).

Αν θες να συμπληρώσεις μόνο ένα κομμάτι (πχ static ή datatase ή...), καταρχάς πρέπει να μελετήσεις το σύστημά σου και να δεις πως μπορεί να προχωρήσει το scaling και με ποια λογική / τι απαιτήσεις θα χρειαστείς αλλά σίγουρα σε κατευθύνει σε λύση τύπου infrastructure as a service, πχ https://cloud.google.com/sql/

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

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από giannis17 » 29 Ιαν 2015 13:33

Η μόνη καθαρά scalable λύση είναι το cloud. Με το trial του AWS δεν έμεινα ευχαριστημένος και τα μεγαλύτερα πακέτα ανεβαίνουν αρκετά σε κόστος, οπότε εδώ υπάρχει μια λίστα με alternatives: https://techblog.willshouse.com/2012/01 ... ernatives/

(δεν σε ενδιαφέρει τόσο το EC2, εκτός αν σκοπεύεις να στήσεις τα services μόνος σου απλά όλες αυτές οι εταιρίες δίνουν και υπηρεσίες PaaS)
"There is only one problem with common sense; it’s not very common."
– Milt Bryce

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από Rapid-eraser » 29 Ιαν 2015 18:49

Από την την στιγμή που έχεις ένα commercial service θα χρειαστείς ένα devops που να συνεργαστεί με τον προγραμματιστή σου για να φτιάξουν την στρατηγική για το scaling σου.

Το HA δεν λέει απολύτως τίποτα αν δεν έχεις προσδιορίσει που σου δημιουργούνται τα bottlenecks . Είναι διαδικασία που ένας devops ( κάτι ενδιάμεσα από system administrator και προγραμματιστή ) έχει εντρύφηση στην διαδικασία του scaling.

Ότι και να έχεις διαβάσει ότι φιλική συμβουλή και να σου έχουν κάνει το "Cloud" δεν είναι αυτό που θα σου λύσει το πρόβλημα.
Προφανώς το amazon προσφέρει μέσο του AWS μία cloud based πλατφόρμα (με πολλά vendor lock-in) που περιέχονται ευκολίες όπως saas services για messaging , storage , routing , auto scaling , vms όλα αυτά για να δουλέψουν μεταξύ τους και να έχουν ένα πρακτικό νόημα στην εφαρμογή σου θα πρέπει η εφαρμογή σου να μπορεί να αξιοποιήσει αυτούς τους πόρους .

Σου χρειάζεται επίσης να ξεχωρίσεις τα reads από τα writes στην εφαρμογή σου όπως και επίσης να προσδιορίσεις αν η εφαρμογή σου είναι data intensive ή cpu intensive .

Προφανώς η αγορά εκεί έξω έχει να δώσει πολλές λύσεις για cdn/vms πολύ πιο φτηνές από το AWS ή το κάθε AWS (πχ Akamai)

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

Sorry για τις γενικότητες αλλά πιστεύω έχεις τώρα πραγματάκια που μπορείς να κοιτάξεις.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από burnmind » 29 Ιαν 2015 20:26

@alou: Ευχαριστώ πολύ. :D

Στο θέμα μας τώρα, θα ξεκινήσω από τα πρώτο σχόλιο του Rapid-eraser. Δεν έχω ένα commercial service (ακόμα), ένα μικρό prototype φτιάχνω ως side-project (εγώ είμαι ο μοναδικός προγραμματιστής) ώστε να το δείξω/"πουλήσω" σε μερικούς ανθρώπους και να διαπιστώσω αν αξίζει να το συνεχίσω.

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

Δεν έχω λοιπόν κάποιο χειροπιαστό πρόβλημα που πρέπει να λύσω αυτή τη στιγμή, οπότε κατανοώ και αποδέχομαι το ότι πιθανώς δε μπορώ να πάρω απάντηση σε αυτό που ψάχνω. Άλλωστε, μάλλον χρησιμοποιώ εντελώς απλοϊκά και ίσως λανθασμένα τον όρο "high availability"· ίσως δεν έπρεπε καν να αναφέρω τη λέξη "scale" μαζί.

Ας κάνω λοιπόν πιο απλοϊκή και "χαζή" την ερώτησή μου: Ας πούμε για παράδειγμα πως πάω σε μια λύση PaaS, που θεωρητικά είναι ό,τι πιο απλό από τις διαθέσιμες επιλογές (είτε το διαχειρίζομαι μόνος γι' αρχή, ή συνεργάζομαι με κάποιον sysadmin*). Ας πούμε επίσης, πως το πακέτο που επιλέγω είναι υπεραρκετό και "σηκώνει" την εφαρμογή και το traffic.

Αυτός ο cloud server, δεν υπάρχει περίπτωση να πέσει χωρίς λόγο (δηλαδή χωρίς να φταίει η εφαρμογή και το traffic), όπως οι κλασσικοί servers; Τι κάνουμε σε τέτοιες περιπτώσεις όταν θέλουμε η εφαρμογή μας να συνεχίσει να λειτουργεί; Υπάρχει κάποια (σχετικά) out of the box λύση, ή σκάμε χιλιάρικα στους devops από την πρώτη μέρα; :P

Σας ευχαριστώ όλους για τις απαντήσεις. :)

*Αλήθεια, έχει κανείς να προτείνει κάποιον sysadmin που να δουλεύει ως freelancer; Δέχομαι PMs. :)

Άβαταρ μέλους
giannis17
Honorary Member
Δημοσιεύσεις: 1215
Εγγραφή: 06 Ιαν 2005 19:50
Τοποθεσία: Παγκράτι - Αθήνα
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από giannis17 » 30 Ιαν 2015 01:23

burnmind έγραψε:Αυτός ο cloud server, δεν υπάρχει περίπτωση να πέσει χωρίς λόγο (δηλαδή χωρίς να φταίει η εφαρμογή και το traffic), όπως οι κλασσικοί servers; Τι κάνουμε σε τέτοιες περιπτώσεις όταν θέλουμε η εφαρμογή μας να συνεχίσει να λειτουργεί; Υπάρχει κάποια (σχετικά) out of the box λύση, ή σκάμε χιλιάρικα στους devops από την πρώτη μέρα; :P
Σε IaaS και PaaS το high availability δεν είναι built in (συνήθως είναι μόνο όσον αφορά τα δεδομένα αλλά όχι τις υπηρεσίες), αυτό σημαίνει πως για να έχεις 100% SLA λειτουργία θα πρέπει να έχεις φτιάξει 2 πανομοιότυπα setup και να τρέχεις ξεχωριστά σε 3ο server είτε load balancer ή DNS με κάποιο script που όταν βλέπει τον 1 server down να γυρνάει στον άλλο. Αυτό που κερδίζεις είναι μόνο τα unlimited resources, δηλαδή δεν πρόκειται να σταματήσει να παίζει επειδή γέμισε η ram, ο σκληρός, πήγε 100% η cpu κλπ...απλά θα τραβάει όσα resources χρειάζεται από το cluster και θα σε χρεώνει ανάλογα. Για αυτό το λόγο χρειάζεται monitoring να δεις ποια ερωτήματα/request είναι βαριά και να τα βελτιστοποιήσεις ώστε να πέσει το κόστος.

Σε λύσεις SaaS δεν χρειάζεται να κάνεις τίποτα για το HA αλλά ισχύουν τα ίδια για το κόστος.

Το cloud είναι πλέον πολύ γενικός όρος και μπορεί να υλοποιηθεί με αρκετές μεθόδους (IaaS, PaaS, SaaS, CDN...), ακόμα και με συνδυασμό μεθόδων. Από εκεί και πέρα το τι χρειάζεται κάθε project είναι γινόμενο πολλών παραγόντων, κυρίως resources και budget.

Σκέψου ακόμα υπάρχουν υπηρεσίες που είναι στημένες εδώ και πολλά χρόνια που δεν έχουν cloud infrastracture και παίζουν με απλούς dedicated, load balancers και συνδυαστικά backup...το οτι το cloud είναι της μόδας δεν πάει να πει πως είναι η μόνη λύση.
"There is only one problem with common sense; it’s not very common."
– Milt Bryce

Άβαταρ μέλους
Cha0s
SysAdmin
Δημοσιεύσεις: 10250
Εγγραφή: 28 Ιούλ 2001 03:00

Αρχιτεκτονική για high availability web application

Δημοσίευση από Cha0s » 30 Ιαν 2015 17:21

Όταν μιλάς για High Availability τότε εκ των πραγμάτων πρέπει να εξαλείψεις κάθε Single Point of Failure.

Ακόμα και οι λύσεις «cloud» (με τις οποίες δεν συμφωνώ προσωπικά αλλά είμαι και περίεργος εγώ :P ) από μόνες τους είναι SPOF.
Αν πέσει η Amazon (και μην ακούσω ότι δεν πέφτει) ότι και να έχεις στήσει εκεί όσο γαμάτο και να το κάνεις... θα πέσει μαζί με την Amazon.

Οπότε ξεκινάς από το τι διαθεσιμότητα θες να έχει η υπηρεσία σου.
Ανάλογα του τι ποσοστό downtime μπορείς να αντέξεις θα χρειαστεί να σχεδιάσεις την αρχιτεκτονική σου αντίστοιχα.

Και αν πεις ότι θες 100% διαθεσιμότητα (που δεν υπάρχει αλλά λέμε τώρα) τότε ετοιμάσου για πολύ (πολύ) μεγάλα budget.

Όλοι οι μεγάλοι μπορούν να επιτυγχάνουν υψηλές διαθεσιμότητες γιατί έχουν hardware δεκάδων χιλιάδων ευρώ (και όχι whitebox dedicated pcs ή «cloud» budget VΜs), έχουν κόσμο που ο καθένας εξειδικεύεται στο κομμάτι του (όχι 1 παιδί για όλες τις δουλειές) έχουν δικά τους AS και μπορούν να παίξουν με το routing τους ώστε να έχουν και γεογραφικό redundancy (βλέπε πως παίζει η CloudFlare με την χρήση Anycast - κάτι που εγώ και εσύ δεν μπορούμε να κάνουμε έτσι απλά) και γενικά πέφτει σοβαρή μελέτη για την υποδομή στο σύνολο της (όχι μόνο για τους servers & τα services αυτών).

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

Τέτοιου είδους projects θέλουν μελέτη και σχεδιασμό βάσει των ζητούμενων και των περιορισμών της εκάστοτε εφαρμογής. Δεν υπάρχει ένα HA setup για όλες τις δουλειές.
Δεν έχει το ίδιο setup και ανάγκες για scale το Facebook σαν εφαρμογή με το eshop του κυρ Μήτσου :P

Συμφωνώ με τον Rapid ότι πρέπει να γίνει σε συνεργασία με κάποιον DevOps όπου είναι η γέφυρα μεταξύ του προγραμματιστή και του sysadmin.

Διαφωνώ ωστόσο με την χρήση υπηρεσιών τύπου Amazon.
Μπορεί να παρέχουν τα άπειρα tools για να σηκώσεις clusters σε μερικά λεπτά, αλλά όταν δεν έχεις πρόσβαση στο φυσικό hardware εξαρτάσαι αποκλειστικά από την κάθε Amazon. Προτιμώ λύσεις που στήνονται από το μηδέν για κάθε project ξεχωριστά με όσο το δυνατόν περισσότερο έλεγχο σε κάθε μέρος της υποδομής.

Όταν έχεις τον πλήρη έλεγχο της υποδομής, τότε μπορείς να παρέχεις πραγματικό SLA γιατί γνωρίζεις τι σε παίρνει να δώσεις και τι όχι χωρίς να εξαρτιέσαι από τρίτους.

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Αρχιτεκτονική για high availability web application

Δημοσίευση από burnmind » 30 Ιαν 2015 20:03

@giannis17: Το setup που περιγράφεις (ο failover server που ανέφερα στο πρώτο μου μήνυμα) το συνάντησα σε αρκετά πράγματα που διάβασα.

Εν τω μεταξύ, μήπως ήθελες να γράψεις κάτι άλλο και όχι SaaS (Software as a Service);

@Cha0s: Ευχαριστώ για την ανάλυση. Δεν τρέφω αυταπάτες, σίγουρα αν όλα πάνε καλά θα πρέπει να υπάρξουν άνθρωποι που εξειδικεύονται σε αυτά τα θέματα, απλά είχα μία (πολύ μικρή είναι η αλήθεια) ελπίδα πως υπήρχε κάτι "εύκολο" για να ξεκινήσω. Όπως και να 'χει, η συζήτηση με βοήθησε να καταλάβω αρκετά πράγματα.

Νομίζω πως καταλήγω στο ότι για το prototype θα πρέπει να συμβιβαστώ με κάτι απλό γι' αρχή (με το downtime που αυτό συνεπάγεται), καθώς δεν έχω το budget για παραπάνω. Σας ευχαριστώ όλους και πάλι. :)

Απάντηση

Επιστροφή στο “Apache, IIS, DNS Servers”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης