GtugDakar AppEngine, Gwt
-
Upload
hkairi -
Category
Technology
-
view
1.519 -
download
0
description
Transcript of GtugDakar AppEngine, Gwt
Google App EngineUne introduction
L’infrastructure de Google pour servir vos applications.
Agenda
Les applications en ligne et la montée en charge
AppEngine : solution intégrée sur l’infrastructure Google
Les différents services
Google Web Toolkit l’intégration complète- le principe- la version 2.0- qui l’utilise
Evolutions typiques d’une appplication en ligne
1
Evolutions typiques d’une appplication en ligne
2
Evolutions typiques d’une appplication en ligne
3
Evolutions typiques d’une appplication en ligne
5 …
LiveJournal circa 2007"LiveJournal: Behind the Scenes“par Brad Fitzpatrick's USENIX '07 talk:
Beaucoup de travail et d’itérations…
Une application en ligne signifie : • Prévision des évolutions de traffic et d’usage• Planifier les ressources pour les montées en charge• Mise à jour et applications des patchs logiciels• Des personnes dédiées à l’exploitation• Licenses des services• Montées de version
Google App Engine
Ecrire une application capable de servir gratuitement 5 000 000 pages vues / mois.
L’infrastructure Google accueille votre application et gère les authentifications, la montée en charge, la distribution des ressources, etc…
Google App Engine : Les éléments clés du design
Utiliser les technologies mises au point par Google
Fournir un environnement intégré
Données distribuées
Des services spécialisés
Séparation étanche entre les applications
Promouvoir l’usage d’applications sans états Promouvoir la création de services spécialisés
Traiter beaucoup de requêtes “légères”
Encourager les réponses rapides
Google App Engine : Les bonnes pratiques
LiveJournal circa 2007
Frontends Storage
Application Servers
Memcache
Static File Servers
"LiveJournal: Behind the Scenes“par Brad Fitzpatrick's USENIX '07 talk:
Architecture générale
Profitez de l’infrastructure Google
Traitements ParrallèlesMontée en charge prévue dès le départDisponibilité globaleConfiguration automatique (donc pas de configuration)Sécurisation des applications par défaut
Pour quels types d’application ?
Des utilisateurs authentifiés, des droits d’accèsDes données propres à ces utilisateursDes interfaces WEB pour manipuler et présenter celles-ci.Un grand nombre de consultations et de mises à jour simplesQuelques traitements lourds en tâche de fondDes interconnexions internet ou intranet
Pourquoi Google App Engine ?
• Montée en charge• Performance• Standards• Coûts réduits• Intégration• Services• Distribution
Un exemplePoser des questions au président Obama via une application sur AppEngine.
Ces derniers 18 mois…Apr 2008 Support de PythonMay 2008 Memcache, Images APIJul 2008 Logs exportAug 2008 Batch write/deleteOct 2008 HTTPS supportDec 2008 Console d’administration, QuotasFeb 2009 Facturation, Fichiers + grosApr 2009 Support de Java, DB import, cron, SDCMay 2009 Key-only queriesJun 2009 Task queuesAug 2009 Kindless queriesSep 2009 XMPPOct 2009 Incoming Email
Java ou Python ?
Vous êtes libres !La même infrastructureLes mêmes services spécialisésLa même console d’administration
Ou un autre langage ?
• La communauté a implémenté le support d’autres langages via la JVM
JavaScalaJRuby (Ruby)GroovyQuercus (PHP)Rhino (JavaScript)Jython (Python)
Duke, the Java mascotCopyright © Sun Microsystems Inc., all rights reserved.
Une console d’administration unique
Un contrôle détaillé des ressources consommées
Deux types de quotas : fixes & facturables
Ces quotas sont calculés sur une période de 24h
On contrôle en plus la consommation de ressources par minute
Vous définissez un budget quotidien pour les quotas facturables
Les APIs permettent de connaître l’état de son compte à tout instant
Les ressources mesurées
http://code.google.com/appengine/docs/quotas.html
Définir ses structures de données
• Dans le Datastore on peut stocker des entités.
• Une entité se définit par :• Son genre (Kind)• Son identifiant • Un ensemble de propriétés
• On peut exécuter des requêtes sur les entités d’un genre donné avec des critères sur les valeurs des différentes propriétés et un ordre de tri.
• AppEngine maintient un index pour chaque type de requête qu’on peut exécuter dans l’application.
Le stockage de données s’appuie sur BigTable
Sort
Machine #2
Machine #3
Machine #1
Big Table n’est pas :
• Une base de données• Une base de données
distribuée
Mais plutôt :
• Un tableau trié réparti sur plusieurs machines
Récupérer les données via le bon index
SELECT * FROM Grandparent
• Kind index• Prefix = Grandparent• Scan!
Requêtes sur une propriété
• WHERE name >= 'B' and name < 'C' ORDER BY name1. RANGE = [Parent name B, Parent name C)• Scan!
Comment créer les index ?
• La configuration des index se fait via un fichier XML.
• L’environnement de développement génère le fichier de configuration adéquat en fonction des requêtes exécutées par l’application.
Concevoir le modèle de données
• Critère de comparaison sur une seule propriété à la fois
• Toutes les entités d’un même genre n’ont pas forcément les mêmes propriétés. On ne peut pas mettre un critère sur une propriété qui n’est pas définie.
• Si on a un critère d’inégalité, il faut trier la réponse selon ce critère
SELECT * FROM Person WHERE birth_year >= :min AND birth_year <= :max
SELECT * FROM Person WHERE birth_year >= :min AND height <= :maxHeight
OUI NON
URL Fetch & Memcache
Récupérer du contenu de serveur à serveurEn Java, utiliser java.net.URLConnection Fonctionne en HTTPS et en POST
Mémoire cache distribuée persistenteCache optimiste Service stable, robuste et très spécialisé
Images et messagerie
Pour les envois, on utilise JavaMail (javax.mail)L’expéditeur est le compte administrateurUne URL particulière reçoit le courrier entrant
Stockez les images.Transformez les !
(rotation, translation, « j’ai de la chance »)
Votre application se connecte aux messageries instantannées compatibles XMPP (Google Talk)
Une URL particulière traite les messages entrants
[email protected]@appspot.com
Messagerie instantannée
Traitements réguliers : CRON
cron:- description: daily summary job url: /tasks/summary schedule: every 24 hours- description: monday morning mailout url: /mail/weekly schedule: every monday 9:00 timezone: Australia/NSW
Planifiez l’appel d’URL
Pour les traitements lourds :Tâches et files d’attente
(expérimental)
Pour les traitement lourds :• Découper le traitement en tâches• Confiez les tâches à des files d’attente• Les tâches seront effectuées plus tard :
o En fonction des ressources disponibles
o De vos priorités
Ajouts récents
Import et export de masse (expérimental en python)
Secure Data Connector :Accès sécurisé à vos données en intranet
Démarrer en douceur….
L’application typiquement gratuite :• 500 Mo de stockage• 2 Go par jour de bande passante• ~5M page vues par mois• 6.5 heures de CPU par jour• 1 Go storage• 650 000 URL Fetch calls• 2,000 emails• 1 Go de bande passante par jour• N tâches
Ressources:
code.google.com/appengine
code.google.com/p/googleappengine
http://groups.google.com/group/ google-appengine google-appengine-java google-appengine-python
http://appgallery.appspot.com
Appengine+GWT : l’intégration complète
+
AJAX... C’est quoi ?• Asynchronous JavaScript And XML
• JavaScript permet de faire des appels serveurs asynchrones
• JavaScript permet ensuite de modifier le contenu de la page avec les éléments récupérés
La changement de point de vue Ajax
La dérive à éviter
• Un petit bout de script pour faire un effet sympathique• Un succès inattendu qui appelle plus de fonctionnalités• De plus en plus de développements Ajax• Prise en compte de plus en plus de navigateurs• Hum.. Çà commence à rudement se compliquer !• Result: “Un code spaghetti”
Google Web Toolkit : l’objectif
Enrichir l’expérience des internautes en permettant aux développeurs d’utiliser
les outils Java pour construire des applications AJAX supportées par tous
les navigateurs.
Google Web Toolkit pour faire court
Ecrivez l’application dans votre environnement de développement Java favori (netbeans, eclipse, intellij,…)Débuggez à l’aide d’un navigateur spécial (hosted mode)Compilez le code Java en JAVASCRIPT+HTML optimiséDéployez un ensemble de pages HTML/Javascript sans plugin, ni modification du serveur applicatifOpen Source sous Apache 2.0
Google Web Toolkit : les fonctionnalités
Librairies compatibles avec tous les navigateurs :• Interface utilisateur (DOM, widgets, ...)• Communication Client/Serveur (XHR, RPC, JSON, ...)• Infrastructure applicative Historique, Tests unitaires, Internationalisation, …• Services extérieurs Gadgets, Gears, Google Maps,…• Intégration de javascript natif (JSNI)
Comment çà marche ?
Code against Java UI libraries
Google Web Toolkit Weekly Report 09/01/2008 - 09/08/200 Google Web Toolkit Weekly Report 09/01/2008 - 09/08/200
Comment çà marche ?
Code against Java UI libraries
The compiler translates Java
source to highly-optimized JS
Comment çà marche ?
Code against Java UI libraries
The compiler translates Java
source to highly-optimized JS
Generates browser-
compliant JS + HTML files
Comment çà marche ?
A chacun son code optimisé
Optimisé pour le développeur
Optimisé pour chaque navigateur
Les Avantages GWT : des applications performantes
Le code est optimisé pour chaque navigateur
Le code évite les fuites mémoires
Deferred Binding, le résultat de la compilation est :- un package propre à chaque langue, navigateur- un script qui détecte le package à utiliser vous ne téléchargez que la partie utile
Deferred Binding en image
Les Avantages GWT : support de l’historique du navigateur
tabPanel.add(new HTML("<h1>Page 1 Content</h1>"), " Page 1 ");tabPanel.add(new HTML("<h1>Page 2 Content</h1>"), " Page 2 ");tabPanel.addTabListener(new TabListener() {@Overridepublic void onTabSelected(SourcesTabEvents sender, int tabIndex) {// Push an item onto the history stackHistory.newItem("page" + tabIndex);}
History.addHistoryListener(new HistoryListener() {public void onHistoryChanged(String historyToken) {if(tokenIsValid(historyToken)) { tabPanel.selectTab(getTabIndex(historyToken));}}};
Les Avantages GWT : des développements plus rapides
Toutes les fonctionnalités des IDE sont disponibles(refactoring, templates, debug)
Google Plugin for Eclipse • Supporte à la fois GWT et App Engine
Tests unitaires possibles en utilisant : Standard JUnit TestCase GWTTestCase HTMLUnit tests Selenium tests
Debugger en Java
Pour résumer
Google Web Toolkit est la solution idéale, car :Les applications Ajax produites sont très optimiséesLe développeur n’a plus à se soucier de :• Browser quirk headaches• Memory leaks• History support
Code réutilisableDéveloppements plus rapide (outils standards)Débug en java
Les librairies existantes
• GWT (http://code.google.com/webtoolkit/)
• Incubator (http://code.google.com/p/google-web-toolkit-incubator/)
• Smart GWT (http://code.google.com/p/smartgwt/)
• GWT-Ext (http://code.google.com/p/gwt-ext/)
• IT Mill Toolkit (http://www.itmill.com/)
• GWT mosaic (http://code.google.com/p/gwt-mosaic/)
• Ext GWT (http://extjs.com/products/gxt/)
• Advanced GWT Components(http://advanced-gwt.sourceforge.net/)
GWT 2.0 : chargement progressif
Size of Initial JavaScript Download (KB)
375
750
1125
1500
0
7x Decrease InInitial Download Sizewith runAsync()
1400 KB
200 KB
1125
Developer-guided code splitting with runAsync
public void onMySettingsLinkClicked() {
GWT.runAsync(new RunAsyncCallback() {
public void onSuccess() {new MySettingsDialog().show();}
public void onFailure(Throwable ohNo) {// indicate that something went wrong,// usually a connectivity or server problem}
Split point
Runs after a short (but improbable)
delay
Runs if required script
cannot be downloaded
GWT 2.0: ImageBundle
Pour afficher 11 images, on ne va pas charger 11 fichiers différents, mais un seul
Qui utilise GWT ?
Google Wave
Google Health
Mobile
Google Web Toolkit
Lombardi Blueprint
Google Web Toolkit
ContactOffice
Google Web Toolkit
Faites un tour dans la galerie GWT !
http://gwtgallery.appspot.com/