Google AppEngine vs Amazon EC2

Μέσα στις διακοπές του Πάσχα δούλεψα πολύ προσπαθώντας να μεταφέρω[1] το urlBorg στο Google AppEngine και νομίζω ότι πλέον έχω μία αρκετά καλή αντίληψη για το συγκεκριμένο περιβάλλον. Διαβάζοντας τα σχετικά άρθρα που έγραψα στο vrypan|net|log κάποιοι με ρώτησαν “γιατί μπαίνεις σε όλο αυτό τον κόπο και δεν χρησιμοποιείς το Amazon EC2“; Ορίστε λοιπόν μία σύγκριση των δύο.

Καταρχήν πρέπει να ξεκαθαρίσουμε ότι μιλάμε για δύο εντελώς διαφορετικά προϊόντα.

Το Amazon EC2 είναι ουσιαστικά virtual hardware. Αυτό σημαίνει ότι μπορεί κανείς να το χρησιμοποιήσει όπως ακριβώς θα έκανε με ένα (ή περισσότερους) dedicated servers. Μπορείς να ξεκινήσεις χρησιμοποιώντας ένα virtual server με χαμηλές προδιαγραφές ταχύτητας και πολύ εύκολα αν η εφαρμογή σου έχει επιτυχία να αναβαθμίσεις σε ένα μεγαλύτερο -και επειδή ακριβώς το hardware είναι virtual, η μετάβαση αυτή γίνεται απλά πληρώνοντας για περισσότερα resources. Μπορείς ακόμη πολύ εύκολα να “σηκώσεις” νέους servers, π.χ. να βάλεις την database να τρέχει σε ένα ξεχωριστό “μηχάνημα” κ.λ. Και αν μιλάμε για web sites, μπορείς καθώς μεγαλώνει η κίνηση στο site σου να προσθέτεις επιπλέον web servers, να έχεις 2 ή και περισσότερα μηχανήματα με db replication κ.λ. Όπως ακριβώς θα έκανε κανείς με dedicated servers, αλλά πολύ πιο εύκολα, σχετικά πιο φθηνά (έως πολύ πιο φθηνά) και με την σιγουριά που προσφέρει η υποδομή της Amazon.

Από την άλλη, το Google AppEngine είναι ένα εντελώς διαφορετικό περιβάλλον. Έχει πάρα πολλούς και σημαντικούς περιορισμούς. Η γλώσσα προγραμματισμού αυτή την στιγμή είναι αποκλειστικά Python (αν και λέγεται ότι θα ακολουθήσουν και άλλες στο μέλλον). Οι βιβλιοθήκες που είναι διαθέσιμες είναι περιορισμένες και δεν επιτρέπουν πράγματα όπως image manipulation και γενικά οποιαδήποτε library της python είναι compiled (π.χ. γραμμένη σε C). Επίσης, δεν μπορεί κανείς να έχει background processes. Το μεγαλύτερο όμως πρόβλημα είναι ότι για την αποθήκευση δεδομένων δεν χρησιμοποιείται μία RDBMS άλλα το “Google Datastore” που για όποιον έχει συνηθίσει να δουλεύει με RDBMS μοιάζει να είναι ανίκανο να κάνει ακόμη και τα πιο βασικά (π.χ. ένα SELECT SUM() ή ένα unique auto increment ID).

Η προσέγγιση του Google AppEngine είναι “ορίστε το περιβάλλον στο οποίο αναπτύσσουμε σαν Google τις εφαρμογές μας, αν θέλετε και μπορείτε, χρησιμοποιήστε το”. Οι περιορισμοί που βάζει προφανώς έχουν κάποιο λόγο: να μπορεί μία εφαρμογή να κάνει “άπειρο”[2] scale [3]. Η προσέγγιση αυτή έχει τα καλά της και τα κακά της. Το κακό είναι ότι μεταφέρει τα διάφορα προβλήματα κλίμακας στον developer (προβλήματα για τα οποία σε άλλες περιπτώσεις φροντίζει η “υποδομή”, όπως το OS, ο web server, η RDBMS). Από την άλλη, μία καλογραμμένη εφαρμογή δεν έχει τα προβλήματα κλίμακας που ακριβώς αυτή η “υποδομή” βάζει από κάποιο σημείο και μετά (π.χ. με ένα καλύτερο server και με λίγη προσοχή μπορεί όντως ένα τυπικό website να αντέξει την κίνηση όταν οι επισκέπτες από 1000/ημέρα γίνουν 100.000 την ημέρα, αλλά δεν θα βρείτε server που να μπορέσει να αντιμετωπίσει με τίποτα 1.000.000 επισκέπτες το δευτερόλεπτο, για αυτό και όσοι αντιμετωπίζουν τέτοια προβλήματα έχουν server farms, clusters κ.λ.)

Κατά την γνώμη μου η επιλογή μεταξύ των δύο ξεκινάει με το ερώτημα “πόσο μεγάλη θα μπορούσε να γίνει η εφαρμογή μου στην ιδανική περίπτωση”. Π.χ. ένα site που απευθύνεται αποκλειστικά σε Έλληνες είναι δεδομένο ότι δεν μπορεί να ξεπεράσει κάποιο μέγεθος. Αντίθετα, αν φτιάχνετε το επόμενο twitter ή Google Analytics, η κίνηση σε περίπτωση επιτυχίας θα είναι πολλές τάξεις μεγέθους μεγαλύτερη από όσο θα μπορούσαν να σηκώσουν 1 ή 2 servers.

Μετά είναι το ερώτημα αν θέλει κανείς να “δεθεί” με την υποδομή της Google ή θα προτιμούσε να αντιμετωπίσει τα πιθανά προβλήματα κλίμακας μόνος του. Τα προβλήματα αυτά προφανώς και λύνονται (δεν περίμενε την Google το CNN ή το BBC για να μπορέσουν να εξυπηρετούν πολλά εκατομμύρια pageviews την μέρα), αλλά θα πρέπει να αντιμετωπίσει κανείς μόνος του (ή προσλαμβάνοντας ειδικούς) τις τεχνικές δυσκολίες. Ναι, μπορείτε να “σηκώσετε” όσους DB servers χρειάζεστε και να κάνετε replication και να έχετε άλλους τόσους η περισσότερους clustered web servers στο EC2, αλλά κάποιος θα πρέπει να ασχολείται με το πώς γίνεται αυτό το πράγμα, να κάνει maintenence, monitoring, optimization κ.λ. στην υποδομή -ένας ή περισσότεροι system admins, db admins κ.λ. Μία καλογραμμένη εφαρμογή που τρέχει στο AppEngine απλά ίσως να χρειαστεί optimization από τον developer.

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

Ελπίζω να έδωσα μία πιο πλήρη εικόνα από αυτή που κυκλοφορεί με απλοποιήσεις όπως “η Google παρουσιάζει τον αντίπαλο του Amazon EC2″.

Για εμένα η επιλογή να ασχοληθώ με το AppEngine πέρα από τα παραπάνω (και καλά το urlBorg θα έχει δισεκατομμύρια hits/sec… και μετά ξύπνησες!) είναι ότι αποτελεί μία (από άποψη development) σπαζοκεφαλιά που μετατρέπει σε προκλήσεις πράγματα που θεωρούσα βαρετά -ΟΚ, προγραμματιστική διαστροφή, το δέχομαι :-)


[1] όχι, δεν το έχω μεταφέρει ακόμη και θα χρειαστεί αρκετή δουλειά.
[2] όπου “άπειρο” ας θεωρήσουμε κάτι συγκρινόμενο ίσως με την κλίμακα που έχουν οι υπηρεσίες που προσφέρει η ίδια η Google.
[3] το περιβάλλον που προσφέρεται αυτή την στιγμή είναι περιορισμένο σε resources λέγοντας ότι είναι μόνο για development, αλλά ας δεχθούμε ότι (όπως λέει η Google) στο μέλλον θα μπορεί κάποιος να πληρώνει ανάλογα με το πόσα resources (bandwidth, cpu cycles, DB access κ.λ.) χρειάζεται.

misc — Tags: , , , , — Panayotis @ 18:14

εορταστική “αποχή” από την συζήτηση

Εδώ και 2-3 μέρες έχω βγεί από την “συζήτηση” (με την έννοια του web 2.0 conversation, της συζήτησης που συμβαίνει μέσα από τα διάφορα blogs και τα άλλα social media). Διαβάζω που και που τί γράφεται γύρω-γύρω, αλλά σχολιάζω ελάχιστα -έως καθόλου. Και τα περισσότερα δεν τα διαβάζω, για να πω την αλήθεια. Το twitter stream τρέχει σαν τηλεόραση που έχει μείνει ανοικτή στο διπλανό δωμάτιο. Δεν είναι άσχημη αλλαγή για μερικές μέρες!

Αντίθετα, έχω “παίξει” αρκετά με το Google AppEngine -από μία προγραμματιστκή άποψη, η δραστηριότητα αυτή είναι πιο “εσωτερική”, οπότε μπορεί να πει κανείς ότι είμαι στο πνεύμα των ημερών :-) Μου αρέσει που ξανανακαλύπτω την Python και οι διάφοροι περιορισμοί που έχει το AppEngine είναι μία ευχάριστη σπαζοκεφαλιά. Το μεγαλύτερο πρόβλημα είναι ότι το Google Datastore δεν είναι RDBMS, οπότε σχεδόν οτιδήποτε σχετίζεται με τα δεδομένα μίας εφαρμογής πρέπει να το αντιμετωπίσεις διαφορετικά -ξεχάστε unique indexes, auto increment, select max(), mim(), count(), sum() κ.λ.

Κατά τα άλλα, περνάμε ήσυχα τις μέρες αυτές στην Αθήνα, που είναι πολύ πιο όμορφη όταν φεύγουν οι υπόλοιποι :-)

Πάω να ετοιμαστώ για την Ανάσταση. Άντε, Καλή Ανάσταση!

Diary — Tags: , , — Panayotis @ 22:38

Ξεσκονίζω την λίγη python που ήξερα, μαθαίνω το Django και παράλληλα τις ιδιαιτερότητες του Google AppEngine. Έχω αρχίσει να βρίσκω μία άκρη. Χρήσιμα:
- Django on Google App Engine in 13 simple steps
- Django on Google App Engine: Templates and static files

Ο στόχος είναι να δω αν θα μπορέσω να μεταφέρω τελικά το urlBorg στο AppEngine, κάτι που θα μου επιτρέψει να κάνω κάποια πράγματα που δεν τολμούσα, γιατί ίσως να απαιτούσαν πολλά resources αν είχε σοβαρό traffic. Βέβαια, το AppEngine βάζει αρκετούς περιορισμούς, αλλά θα πρέπει να δοκιμάσω για να δω αν θα είναι πρόβλημα για την συγκεκριμένη εφαρμογή. Όπως και να έχει, ευκαιρία για python :-)

Diary, asides — Tags: , — Panayotis @ 03:59

Πολύ καλό άρθρο για τα τεχνικά χαρακτηριστικά και τους περιορισμούς του Google App Engine.

asides — Tags: , , — Panayotis @ 04:42

Google App Engine

Η Google ξεκίνησε σήμερα το πρωί (για ώρα Ελλάδας) την δοκιμαστική λειτουργία του Google App Engine. Το Google App Engine είναι ένα web hosting environment που αξιοποιεί την τεχνογνωσία της Google στο θέμα των “scalable applications” -ποιος μπορεί να αμφισβητήσει ότι ξέρουν τί χρειάζεται να γίνει για να μπορέσει μία web εφαρμογή να εξυπηρετεί εκατομμύρια χρήστες ταυτόχρονα;

Πιο αναλυτικά:

  • το περιβάλλον ανάπτυξης εφαρμογών είναι αυτή την στιγμή αποκλειστικά Python, είπαν ότι στο μέλλον θα εξυπηρετούν και άλλες γλώσσες.
  • Η αποθήκευση δεδομένων γίνεται όχι σε μία RDBMS, αλλά στο DataStore, που μπορεί να μην ακολουθεί το SQL standard αλλά γλυτώνει τον developer από το να ασχοληθεί πώς γίνεται το replication σε πολλαπλούς servers, το load ballancing κ.λ.
  • Υπάρχουν κάποιοι περιορισμοί και στην Python, π.χ. δεν μπορείτε να χρησιμοποιήσετε socets.
  • Ενδιαφέρον έχει και το γεγονός ότι μπορείτε να χρησιμοποιήσετε το Google Accounts authentication και να ορίσετε access levels με βάση αυτό. ΠΟΛΥ βολικό, αλλά γιατί όχι υποστήριξη OpenID;
  • Για την ώρα, θα δωθεί πρόσβαση μόνο στους πρώτους 10.000 developers που θα ζητήσουν. Οι λογαριασμοί αυτοί θα περιορίζονται στο ελάχιστο που είναι και δωρεάν: Every Google App Engine application can use up to 500MB of persistent storage and enough bandwidth and CPU for 5 million monthly page views. Σύντομα, αν η εφραμογή σας χρησιμοποιεί περισσότερα resources θα μπορείτε να αγοράζετε, data storage, bandwidth και CPU, αλλά δεν έχει ανακοινωθεί πώς θα γίνεται αυτό.

Η ανακοίνωση αυτή αποτελεί πολύ σημαντικό γεγονός. Όσοι έχουμε κατά καιρούς αναπτύξει μια web app που να έχει γίνει δημοφιλής, ακόμη και στην πολύ μικρή ελληνική κλίμακα, ξέρουμε ότι από κάποιο κάποιο σημείο αρχίζουν διάφορα προβλήματα που δεν είχε βάλει με το μυαλό του ο developer. Εϊναι η στιγμή που ο αριθμός χρηστών αλλάζει μερικές τάξεις μεγέθους, που τα δεδομένα γίνονται πολύ περισσότερα στην βάση, που τα requests μετριούνται σε hits/sec και όχι σε hits/hour.

Με το Google App Engine η Google παρέχει ένα περιβάλλον στο οποίο ο developer μπορεί να δημιουργήσει (δωρεάν) την εφαρμογή του, να την δοκιμάσει και αν πετύχει να έχει μεγάλη κίνηση αυτό να μην τον απασχολήσει αφού θεωρητικά η ίδια η πλατφόρμα παρέχει το scalability. Αυτά είναι καλά νέα και για όσους σκέφτονται να ξεκινήσουν μία web startup και δίσταζαν μπροστά στον “φόβο της επιτυχίας”: τί κάνεις αν η υπηρεσία που ανέπτυξες γίνει ξαφνικά πολύ δημοφιλής με αποτέλεσμα να καταρρεύσει και από την άλλη, πώς να επενδύσεις σε hosting, managed services κ.λ. όταν είσαι ακόμη στην αρχή και δεν ξέρεις αν αξίζει ή όχι; Πλέον, μπορούν να κάνουν host την υπηρεσία τους δωρεάν και θα χρειαστεί να πληρώσουν μόνο αν μεγαλώσει αρκετά -απόλυτα λογικό.

Κάποιοι βλέπουν το Google App Engine ως ανταγωνιστή των διάφορων Amazon Web Services. Σε μερικές περιπτώσεις είναι. Αλλά νομίζω ότι οι δύο προσεγγίσεις είναι αρκετά διαφορετικές. Θα έλεγα ότι το AWS είναι απείρως πιο ευέλικτο και δεν στοχεύει μόνο σε web εφαρμογές. Από την άλλη το Google App Engine είναι προσανατολισμένο στο να λύσει ένα και μοναδικό πρόβλημα, αυτό της ανάπτυξης και του hosting web app που χρειάζονται scalability και για να το λύσει βάζει όλους τους περιορισμούς που θεωρεί λογικούς. Θα χρειαστεί να περιμένουμε για να δούμε αν οι δύο να συγκλίνουν ή θα αποκλίνουν. Πάντως, δεν θα μου έμοιαζε περίεργο η Amazon να παρουσιάσει ένα πιο “high level” περιβάλλον, ανάλογο με αυτό της Google, στοχεύοντας να καλύψει όλο το φάσμα.

Διαβάστε επίσης:
- Dave Winer: Early notes on GoogleApps
- TechCrunch Labs: Our Experience Building And Launching App On Google App Engine
- TechCrunch: Google Jumps Head First Into Web Services With Google App Engine

misc — Tags: , , , , , — Panayotis @ 21:48
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2008 vrypan|net|weblog | powered by WordPress with Barecity