gtugdakar appengine, gwt

Post on 26-Dec-2014

1.518 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Une introduction à certaines technologies/services de Google .

TRANSCRIPT

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

anything@app-id.appspotchat.comApp-id@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/

top related