insideIT.fr : le blog des architectes IT de SFEIR

Aller au contenu | Aller au menu | Aller à la recherche

lundi 30 janvier 2012

Noël dans les nuages !

Ou comment Google App Engine, permet de mettre en place un service supportant une très grosse charge dans un temps très court.



Le projet

L'Église Catholique propose depuis plus de 10 ans un site internet pour chercher les horaires de messes dans toute la France, qui souffrait historiquement d'un problème majeur : le trafic quotidien est raisonnable (environ 1 000 visites par jours, et des pointes à 5 000 visites le WE) mais le site doit faire face à d’importants pics de trafic à Noël et durant la semaine de Pâques.

Interface d'EgliseInfo

Or les années précédentes, l'ancien site (messesinfo.catholique.fr), développé en PHP/MySQL, ne tenait pas la charge lors de ces pics, s'écroulant sous les demandes des visiteurs. La technologie utilisée était tout à fait suffisante pour les besoins courants du site, cependant pour répondre à la forte charge sans changer de projet, il aurait fallu, soit disposer d’un serveur plus puissant, soit mettre en place du load balancing entre plusieurs serveurs. Dans les deux cas, ce n'aurait pas été très flexible, obligeant à s’équiper d’un serveur sur-dimensionné, pour seulement 6 jours dans l'année !



Nouveau projet

Nous avons donc fait le choix de migrer vers une technologie permettant de gérer cette surcharge ponctuelle, en ne payant que ce qui est réellement consommé. La refonte du site, permet également d’outrepasser les limitations imposées par l'ancien système (messes en semaine, autres types de célébrations) et d'ajouter de nouvelles fonctionnalités (événements, apis, widget, …).

Notre choix c'est porté sur Google App Engine, par la simplicité de développement que celui-ci apporte, le dimensionnement automatique des serveurs, les quotas gratuits et le paiement à la consommation.

Le projet a démarré en octobre 2010, avec la création d'une simple interface de recherche développé en GWT sur Google App Engine, mais laquelle se connectait ensuite à l'ancien site pour récupérer les résultats de la recherche. Cette première version à été mise en ligne pour Noël 2010, mais les deux sites n'ont pas tenu le coup car la base de donnée n'a pas accepté le nombre très élevé de requêtes simultanées ! Nous ne pouvions pas mettre les données de la base de donnée MySQL directement sur Google App Engine, car déjà l'interface d'administration n'est pas encore refaite, et la base de donnée chez App Engine, ne fonctionne pas exactement de la même manière.

Pour la période de Pâques 2011, Google venait de sortir en test la base de donnée Google Cloud SQL qui permet d'avoir des bases de données MySQL directement sur Google App Engine. Nous avons ainsi développé un service qui recopie la base de l'ancien site, sur le nouveau. Le système a fonctionné, mais du fait de la nouveauté du service et du manque d'optimisation de notre part, les bases de données SQL ont régulièrement planté.



Noël 2011

Visiteurs le jour de Noël 2011

EgliseInfo a relativement bien fonctionné pour Noël 2011, faisant face à une pointe de 1104 visiteurs simultané, et plus de 800 visiteurs en permanence durant toute l'après-midi, soit 100 000 visites en 3 jours.

Nous avons toutefois rencontré trois problèmes :

  • Vendredi soir vers 21h, nous avons dépassé le quota que nous avions fixé (25$), donc tous le site s’est retrouvé bloqué, le temps de changer et de mettre à 100$
  • Samedi matin, nous avons été limité par Google Cloud SQL a 100 requêtes simultanées. J'ai corrigé en faisait un balancing sur 2 bases SQL, et j'ai écrit un mail à Google : réponse dans la fin de l'après midi, ils ne peuvent pas modifier cette limite, et proposaient de passer à un serveur de plus grande capacité sans être vraiment sûr que cela résoudrait le problème : base de donnée plus grande, mais pas plus de connexion simultanées (cela changera plus tard), avec par ailleurs une interruption le temps de redémarrer le serveur. La double base de données a permis de réduire le nombre d'erreurs et de fournir une meilleure réactivité. Les responsables de Google SQL sont en train de tester avec notre jeu de données sur les requêtes les plus lentes.
  • Samedi 18h : EgliseInfo marchait toujours, mais les pubs ne s'affichait plus (un script PHP sur un serveur de la CEF) car le trop grand nombre de personnes sur tous les sites (le site de pub, messesinfo, les sites de paroisses et diocèses) à surchargé le firewall du datacenter où sont hébergés tout ces sites !

Analyse EgliseInfo

Record de visite : 1104MessesInfo (Ancienne version du site fait en PHP, qui est encore référencé) redirigeait presque tous le trafic vers EgliseInfo, redirection javascript depuis la page de résultat MessesInfo (pouvait venir d'une recherche Google) vers la recherche correspondante sur EgliseInfo. Donc pas de plantage du côté de MessesInfo, et une forte charge sur EgliseInfo qui a bien fonctionné avec des temps de réponse acceptables (forcément plus lent qu'habituellement).

Evolution des instances App EngineGoogle nous a mis en place automatiquement jusqu'à 400 serveurs disponibles (instances de l'application, qui sont virtualisées sur plusieurs serveurs réels).



Conclusion

En conclusion, Google App Engine a vraiment permis de gérer la très forte charge du site pour un coût tout à fait raisonnable. Pour les prochaines fois, il nous faudra mettre en place une répartition sur plusieurs bases de données, et dégrader les fonctionnalités pour accélérer les recherches.

mardi 26 avril 2011

Manipulation de la Remote Api GAE avec Guice/Objectify

Avec la version 1.4.3 de app engine, arrive une api qui jusque là était disponible seulement en python : la remote api. Celle çi permet de se connecter de façon sécurisée au datastore afin d’y insérer des données par exemple.
La documentation, bien que courte, donne de bonnes explications sur la façon de mettre en place. Mais, c’est le cas simple... Si au sein de mon application app engine, j’ai mis en place Guice et Objectify, je me retrouve confronté à 2 problèmes :
1/ Pour fonctionner ma servlet doit être déclarée dans la configuration Guice.
2/ Je manipule des objets métier géré par Objectify et non pas des Entity.

Imaginons je possède l'objet "métier" suivant :

public class Hello {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String message;
private String name;
public Hello(){
}
public Hello(String message, String name) {
super();
this.message = message;
this.name = name;
}
// Getter & Setter/hascode/equals methods ...
}

Je vais devoir modifier mon GuiceServletConfig pour la mapper avec la servlet. Aussi une servlet déclarée doit Guice doit être un singleton.

public class GuiceServletConfig extends GuiceServletContextListener {
@Override
protected Injector getInjector() {
return Guice.createInjector(new ServletModule() {
@Override
protected void configureServlets() {
bind(RemoteApiServlet.class).in(Singleton.class);
serve("/remote_api").with(RemoteApiServlet.class);
// D'autres bindings ou serve ...
}
});
}
}

Le 1er problème est ainsi résolu.
Il ne me reste plus qu'à transformer mes Hello en Entity. Une petite ballade dans le code source permet de trouver la solution.


public static Entity helloToEntity(Hello hello) {
Objectify ofy = ObjectifyService.begin();
EntityMetadata<Hello> metadata = factory.getMetadataForEntity(hello);
return metadata.toEntity(hello, ofy);
}


Il ne reste plus qu'à écrire un petit batch d'alimentation :


public static void main(String[] args) throws IOException {
RemoteApiOptions options = new RemoteApiOptions()
.server("maSuperApplication.appspot.com", 443)
.credentials("monEmailAMoi@gmail.com", "monMotDePasse");
RemoteApiInstaller installer = new RemoteApiInstaller();
installer.install(options);
List<Entity> hellos = Lists.newArrayList(helloToEntity(new Hello("Hello", "Nicolas")),
helloToEntity(new Hello("Bonjour", "Vincent")),
helloToEntity(new Hello("Salut", "Guillaume")),
helloToEntity(new Hello("Enchanté", "M. Gendal")));
try {
DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
for (Entity hello : hellos) {
Key key = ds.put(hello);
System.out.println("Hello key=" + key);
}
} finally {
installer.uninstall();
}
}


En console, nous obtiendrons :
Hello key=Hello(3001)
Hello key=Hello(4001)
Hello key=Hello(1002)
Hello key=Hello(5001)

Et dans l'interface web du datastore, nous voyons bien nos 4 Hellos :

jeudi 21 avril 2011

Des rubis plein les nuages

Comme vous le savez certainement, WMware au travers de Cloud Foundry propose son offre de cloud, mais pour le moment en bêta. Après une longue semaine d'attente, j'ai enfin reçu mes crédentials.
C'est tourjours par un HelloWorld que commence bon nombre de tutoriaux, celui que j'ai essayé n'échappe pas à cette règle.
Je vais vous faire part de ce petit essai que je trouve intéressant.

En fait, il s'agit de la version Ruby que j'ai essayé. Je n'y connais rien en Ruby, mais qu'à celà ne tienne, Hello c'est pas très compliqué.
Il faut tout d'abord s'assurer de ses version de Ruby et de gem :
bash$ ruby -v
bash$ gem -v
Ils doivent être respectivement en version 1.8.7 et 1.7.2. Il est possible que gem ne soit pas à jour, dans ce cas, la commande suivante est à passer :
bash$ sudo gem update --system
Vous pourrez ainsi installer la gem vmc :
bash$ sudo gem install vmc
Ce qui permettra dans un premier temps de se connecter à son compte :
bash$ vmc target api.cloudfoundry.com
Succesfully targeted to [http://api.cloudfoundry.com]
bash$ vmc login
Email: moiMail@mo.i
Password: ***********
Successfully logged into [http://api.cloudfoundry.com]
On a passé le coté configuration et prêt à déchainer la fureur du code.
bash$ mkdir hello
bash$ cd hello/
bash$ nano hello.rb

Chose promise, chose dûe, un hello tout simple :

require "sinatra"
get '/' do
"Coucou les gens"
end

Et voilà, on a fini la v1, il ne reste plus qu'à déployer, en répondant à quelques questions :
bash$ vmc push
Would you like to deploy from the current directory? [Yn]: Y
Application Name: nfrancois
Application Deployed URL: 'nfrancois.cloudfoundry.com'? y
Detected a Sinatra Application, is this correct? [Yn]: y
Memory Reservation [Default:128M] (64M, 128M, 256M, 512M, 1G or 2G)
Creating Application: OK
Would you like to bind any services to 'nfrancois'? [yN]:
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Staging Application: OK
Starting Application: OK

Aussitôt, dégainage du navigateur à l'url, et c'est déjà accessible :


Mince j'ai oublié des gens importants :

require "sinatra"
get '/' do
"Coucou les gens, surtout toi lecteur"
end

Prêt à déployer ce correctif :
bash$ vmc update nfrancois
Uploading Application:
Checking for available resources: OK
Packing application: OK
Uploading (0K): OK
Push Status: OK
Stopping Application: OK
Staging Application: OK
Starting Application: OK

Un F5 suffit à vérifier :


C'est ainsi que s'est déroulé mon premier essai de déploiement Cloud Foundry et j'ai apprécié sa simplicité. C'est donc un bon point qui donne envie de continuer à s'y intéresser car bien sûr pour s'en faire une bonne idée, il reste de nombreuses choses à tester.
Dans le monde du Ruby dans le cloud, il existe aussi Heroku, assez apprécié me semble t-il dans le monde ruby. Mais mes connaissances rubyste s'arrête là, je ne saurais faire un comparatif des 2 offres.

lundi 12 avril 2010

Google Secure Data Connector : l'intranet de votre entreprise disponible sur AppEngine

Ce post est publié aussi sur mon blog et c'est une wave. Pour savoir comment importer une wave dans une page html en dehors de wave, allez lire ce post d'Olivier Croisier et/ou la documentation de l'API Embed de Wave.
Par contre, les blogs Gandi ne permettant pas d'insérer du javascript dans le corps du billet, je me vois obligé de vous rediriger soit vers mon blog, soit vers la Wave.

mercredi 21 octobre 2009

Retour journée IBM Forum Paris

J'ai assisté à l'IBM Forum Paris aujourd'hui, le sujet c'était le "Cloud Computing".

Pour commencer, quelles étaient mes motivations ? et bien, mon objectif premier était de pouvoir découvrir l'offre IBM cloud et notamment celle-ci http://www.ibm.com/cloud/developer, Cependant, il n'est toujours pas possible de créer un compte du fait que France ne figure pas encore dans la liste des pays sur le formulaire d'inscription et ça ne devrait plus tarder selon une confirmation que j'ai obtenu de la part d'IBM après les avoir contacté.

L'autre objectif était de comprendre l'offre de IBM et ce que cela allait changer pour les entreprises et notamment pour celles qui sont partenaires avec IBM.

Et le dernier et pas le moindre, la vision qu'IBM a du "Cloud Computing".

Un petit Historique

IBM est une entreprise novatrice dans le domaine du service depuis plusieurs années, c'est aussi une société avec une approche "globaliste" des problèmes de l'entreprise, citons par exemple les Main Frame,.. IBM est aussi un acteur historique dans le monde de l'informatique, son omniprésence et sa notoriété ne sont plus discutables. C'est avec cette logique, que cette dernière est indirectement, puis explicitement précurseur dans le domaine du Cloud Computing : "j'ai entendu parler du Grid Computing depuis déjà plusieurs années", IBM possède aussi toute l'infrastructure matérielle et logicielle nécessaire pour parfaire l'offre.

L'offre Cloud Computing IBM

David Parker (plus d'information), durant la plénière matinale, a fait le tour de l'offre qui selon ma compréhension s'articule autour de trois axes :

Le Cloud Privé (Cloudburst (R))

Selon la présentation qui a duré environ 1H, je suis ressorti avec ce qui suit : le nom de la solution : Cloudburst, une solution qui agrège toute l'expérience de IBM tant sur le coté hardware (BladeCenter (R) ) que sur le côté logiciel "une solution complète qui permet une montée en charge 'maîtrisée' voici une présentation vidéo de l'offre cloud testing"

Ce que j'en pense, et bien pour faire un rapprochement j'ai tendance à penser que c'est une nouvelle forme de mainframe, la différence réside dans le fait que l'infrastructure est mutualisée entre plusieurs entreprises ou filiales de la même entreprise avec une gestion plus souple des ressources, mais la vérité est ailleurs. Il y a bien une phrase qui a été reprise par tous les présentateurs et qui est la suivante : "...et dans tous les cas, IBM est en mesure de prendre en charge la gestion et l'administration de l'infrastructure", ce qui m'indique que IBM veut à terme pousser les entreprises à déléguer leurs infrastructures chez elles et donc proposer des contacts de maintenance. Je ne vais pas rentrer dans la critique parce que ce n'est pas le coeur du billet et que je ne maîtrise pas le modèle économique d'IBM.

IBM apps

iNotes [plus d'informations ici]est l'offre d'IBM en terme de Web Desktop, le coût est de 3$ (Google apps coûterait selon l'orateur 4$) donc moins 1$, je n'ai pas eu le temps de tester l'application mais selon les écrans que j'ai pu apercevoir ça ressemble à la version web de Notes.

Je pense qu'à terme, les solutions Web Desktop seront de la même qualité, la différence sera donc la disponibilité ainsi que la mobilité.

Le Stockage et la Virtualisation C'est un monde qui m'est un peu inconnu, mais ce que j'ai compris c'est que c'est une partie très importante de l'offre globale "Cloud Computing".

En résumé

La majeure partie de l'offre "Cloud Computing" de IBM est essentiellement destinée aux entreprises. Parmi leurs objectifs, la prise en charge de l'infrastructure des entreprises dans l'optique de réduction des coûts, la montée en charge et la disponibilité 24/24 7/7. Ca s'appelle "Cloud Privé", il y a bien un intermédiaire qui est "Cloud Hybride".

Je ferai un retour complet sur l'utilisation de la plateforme dès que mon compte IBM cloud sera activé.

Ressources :

Web

Le site de l'événement : http://www-03.ibm.com/systems/fr/jt/cloud.html
Un petit historique IBM : http://en.wikipedia.org/wiki/IBM
iNotes : http://www-01.ibm.com/software/lotus/products/inotes/
l'offre cloud publique (pas encore disponible pour la France) : http://www.ibm.com/cloud/developer

Blogs

Le blog IBM cloud : http://www.ibm.com/developerworks/downloads/cloud.html

Livres

Cloud computing & Saas : lien ici chez amazon

vendredi 9 octobre 2009

Azure : Prepare to be a part of it

Sun Rise On ISSPourquoi donc un titre en anglais ? C'est la phrase de David Chappell concluant sa magnifique présentation de la plateforme Azure et du cloud computing en général, qui a eu lieu hier au palais des sport d'Issy les Moulineaux pour les Microsoft Days.
David Chappell est un orateur et un visionnaire hors pair, jusque-là rien de nouveau. Le cloud computing est un sujet brûlant, jusque-là rien d'étonnant. Microsoft mise beaucoup sur Azure, sa plateforme Cloud et ce n'est pas un scoop. Mais le mélange des ingrédients tient de l'alchimie parfois et peut offrir un plat rafraichissant et pimenté à la fois. Je me permets cette image, lui même ayant démarré sur une apologie de la cuisine française. Car en bon orateur il est arrivé en courant et a commencé par une plaisanterie (deux en fait). La présentation s'est déroulé ensuite comme un combat de boxe, ne laissant pas un instant de répit aux auditeurs, suivant un plan simple et efficace : description; scénarii, comparaisons. Je n'ai vu personne bailler. Franchement, si le sujet n'avait pas été captivant en soi, il fallait venir juste pour le jeu d'acteur. Une vraie leçon de communication qui n'avait rien à envier de celle de l'avant veille par un orateur hors norme lui aussi, Steve Balmer. Mais passons: assez parlé du flacon, attaquons tout de suite l'ivresse, enfin je veux dire le contenu.

A new world is unfolding!

(ça devient une habitude!) Quel est donc ce monde nouveau en train d'émerger ? Le Cloud. La 6ème révolution informatique: après le Mainframe dans les années 60, le PC dans les années 70, les PC en masse dans les années 80, les serveurs dans les années 90 et la technologie mobile dans les années 2000, voici l'ère du nuage.

Alors qu'il y a quelques mois encore tout le monde était plus ou moins dubitatif sur la rapidité d'adoption, chacun attendant que l'autre se lance et se casse les dents éventuellement, aujourd'hui il n'est plus possible de douter de l'ampleur du phénomène et la courbe d'adoption parle d'elle même (selon Gartner qui est plutôt fiable en général). En clair: la course est lancée et ceux qui sont assis seront en retard. Je parle ici des éditeurs, car pour eux les places seront chères. Et ce n'est rien de le dire, un data-center pour le cloud, c'est au bas mot un demi milliard de dollars, mais surtout c'est un pari qui ne peut reposer que sur une vrai capitalisation technologique et d'image qui ne s'improvise pas. Ne pourra pas ouvrir un "cloud" qui veut. Amazon a pu se lancer parce qu'il était le premier. Et c'est d'ailleurs une première dans l'histoire des technologies de l'information et sans doute une anomalie sympathique. Mais il y a peu de chance que le phénomène se reproduise à présent.

It's here !

Pour les entreprises, l'urgence est moindre. Mais les opportunités sont énormes et les manquer serait une erreur stratégique. Le cloud computing est une réponse à beaucoup de blocages insurmontables jusque là. Les exemples sont innombrables. De la start-up qui n'a pas les moyens de se payer un service IT, à l'équipe d'une grande entreprise qui préfère éviter d'y faire appel, à son service IT. Des pics de charge journaliers d'une entreprise moyenne ouverte le jour mais finalement pas la nuit (comme beaucoup d'entreprises on en conviendra), à l'envolée brutale à la Twitter, en passant par les montées en charges saisonnières au fil des campagnes marketing, des rencontres sportives, des élections. De ceux voulant des espaces de stockage à des prix défiant toute concurrence, à ceux qui souhaitent exporter des calculs très gourmands mais limités dans le temps. Les raisons sont toutes bonnes pour tâter du nuage. Et quant au pricing, la difficulté qu'il y a à comparer les services entre eux et avec les solutions on-premise (chez soi en somme) démontre une chose, c'est qu'il n'y a pas d'écart délirant et que le choix ne portera vraisemblablement pas sur ce critère.

De nouvelles menottes ?

Certains y voient un nouvel emprisonnement. Une fois dans le cloud, qui pourra assurer que l'on peut en revenir. C'est une question pertinente mais qui a déjà ses réponses. Tout d'abord, si SalesForce a clairement fait le choix de l'enfermement, par un système très propriétaire, Amazon, Google et Microsoft jouent plutôt la carte de l'ouverture et de l'interopérabilité. Les uns sont en Java ou en python, les autres en .NET, PHP ou autres, sur des plateformes connues. Il est facile de porter une application sur ces plateformes, il sera facile de les en retirer. Ensuite, du fait de cette compatibilité "raisonnable", les prix sont assurés de ne pas s'envoler une fois la courbe d'adoption jugée suffisante par les éditeurs.

Certains y voient la mort des fournisseurs. Mais ceux-ci restent la source de revenus principale d'éditeurs comme Microsoft, qui n'aurait aucun intérêt à tuer cette manne. Il y a donc plus probablement à prévoir une cohabitation serrée mais possible.

Et revenons aux start-ups. Comme l'a joliment fait remarquer David Chappell, qu'est-ce qui caractérise le plus souvent une start-up ? L'échec. "Je plaisante bien sûr" a dit M.Chappell (il a dit "je plaisante" au moins une douzaine de fois, à chaque fois en glissant des vérités plus sensibles les unes que les autres). Mais le fait est: la très grande majorité des Start-up échoue avant de rapporter la queue d'une cerise. Le rapport avec le Cloud ? Allez, encore une phrase dans le texte : "with the cloud, if it fails, it fails fast". Quitte à sombrer, autant que ce soit rapide et sans frais supplémentaire. Ca donne plus envie de prendre des risques non ? Alors que la crise financière a plombé indubitablement les velléités des business angels, le cloud va donner un coup de fouet aux créations d'entreprise, c'est un pari que je suis prêt à prendre.

Facile et pas cher !

Pour les aspects techniques, je vous laisse consulter le livre blanc sur Azure du même David Chappell, qui est déjà disponible en anglais et en français et qui a servi de fil conducteur pour la partie technique de la présentation. Je ne m'amuserai pas à parodier ici un plan assuré et efficace. Mais un bref résumé laconique et simpliste : à moins que votre application ai besoin de droits administrateurs pour tourner (auquel cas passez votre chemin et orientez-vous vers Amazon ou SalesForce), le portage se fera en un clin d'oeil.

Pourquoi hésiter, alors ? Oui, pourquoi. La question n'est plus tant de savoir si l'on prend le train que de savoir à quelle heure. Et admettons, ce qu'on apporte avec soi pour le premier voyage. N'allons pas tout déménager en une fois. Laissons la confiance venir avec le temps. Mais ne manquons pas un beau voyage. Il faut faire partie de l'aventure. Be a part of it !

Alors une petite dernière pour la route :

It's up to you

Quelques livres blancs (dont celui cité) : http://www.microsoft.com/azure/whitepaper.mspx

Le blog du maître : http://www.davidchappell.com/blog/

vendredi 12 juin 2009

Retour sur le 1er Cloud Camp Paris

myCloud Hier a eu lieu le premier Cloud Camp Paris. Cet événement a rassemblé une petite centaine de personnes intéressées par ce phénomène encore trop peu connu et pourtant incontournable. C’était un Bar Camp au détail près du sponsoring affiché de 6 sociétés venues vendre leur produit et leur expertise :

  1. Sun a vendu son entrée dans le Cloud. C’était le sponsor officiel. On va pas se plaindre de la présence de sponsor, le buffet était super, là où l’on a à peine droit à une part de pizza d’habitude…
  2. DAAS a vendu sa vision, le Datacenter as a service, offre de très bas niveau s’adressant principalement aux fournisseurs de services. Ils proposent aussi une offre originale de datacenter privés.
  3. “Run My Process” qui se veut le “man in the middle” qui fait du Workflow as a service, de l’integration as a service, soit du BPM fournit en SaaS (j’adore ces acronymes donnés en grappe, je suis sûr que je viens de perdre la moitié de mon auditoire là…)
  4. Right Scale qui propose une plateforme de management du cloud.
  5. Orange Business Services
  6. Zeus qui font du “Application Delivery Software” sur le Cloud

CloudCampPourquoi j’ai fait une telle liste moi ? Je vais même pas toucher un centime… Ah oui, disons que maintenant on voit bien qu’il y a des acteurs sérieux sur le sujet et que l’on risque d’en parler de plus en plus. Enfin, qui a encore besoin de s’en convaincre ?

J'ai appris au moins une chose au cloud camp paris : on peut faire du profit sur le Cloud dès aujourd'hui. Voici une liste non exhaustive des façons de faire des sous grâce au Cloud. Elle est en anglais, désolé mais c’est comme ça que ça nous a été servi et je trouve ça plus parlant tel quel :

  1. Get on the cloud (Might Side, enfin c’est ce que j’ai lu…)
  2. Connect applications (Run My Process)
  3. Monitor the cloud (Hyperic, Spring-Source)
  4. Create a cloud (3 Tera, Eucaliptus, A-Server)
  5. Advertising (Google)
  6. Cloud Readiness Audit (Cap Gemini)
  7. System administration (Cloud Watchers)
  8. Automate the Cloud (Right Scale)
  9. Move Data the Cloud (Jungle Disk)
  10. Meter the Cloud (Dev Pay)
  11. Image creation/support (Cohesive FT, RPATH)
  12. Video Streaming (WONZA)
  13. Human resources for "Mechanical Tasks"

PessimisticOn est très loin de l'idée que le Cloud est pour les start up. Certe, il est pour elles un eldorado ! Mais on voit dans la liste des business models qui ne sont pas à la portée du premier venu. Il faudra plus que quelques millions d’Euros pour créer un Cloud, soyons clairs. Mais certaines idées géniales sont nées avec le cloud qui n'auraient pas pu voir le jour sans lui.

Et pour le développeur un mot d'ordre : "New delivrey model". C’est là où il va falloir être vigilants. Le métier de développeur va être un peu secoué. Par exemple, le modèle relationnel pour le stockage des données n’est pas idéal sur le nuage. Il pose vite des problème de scalabilité. Il faut repenser la persistance. Et surtout ne pas croire le marketing qui s’adresse aux développeurs et qui tente de leur faire croire qu’ils vont développer la même chose mais sur le nuage. Une application doit être pensée en amont pour être portable sur le Cloud. Ce n’est pas pour rien que Cap Gemini vend de l’audit de “Cloud Readiness” et cher en plus. Je sais que je me répète mais, un développeur qui a l’intention de le rester devrait déjà plonger dans le Cloud pour ne pas être perdu dans 5 ans. 

Un seul regret, l’absence de Microsoft dans les invités, même si on a parlé d’eux forcément, mais bon on se refait pas, j’aurai bien voulu voir Azure. Enfin c’était Sun qui invitait alors…

Stay tuned, ce ne sera pas la dernière fois qu’on parle du Cloud ici et j’espère que tout le monde aura compris l’ampleur du sujet.

Et merci à Institut-telecom pour leur accueil et leur belles salles.

http://blogs.sun.com/EricBezille/entry/cloud_camp_paris_le_11

http://www.cloudcamp.com

mercredi 8 avril 2009

Développez en Java vos applications Google App Engine :

Il y a à peu près un an, Google ouvrait l'App Engine aux développeurs, il n'était alors possible de déployer que des applications développées en Python.
Pour rappel, Google App Engine est une offre de Cloud Computing permettant aux développeurs d’héberger leurs applications Web sur les serveurs de Google. Les applications ainsi hébergées bénéficient de ce fait de la même capacité de montée en charge que les services Google tels que Gmail ou Google Finance.
Google n’est pas la seule entreprise positionnée sur ce secteur, bien que pas tout à fait similaires, Amazon et Microsoft ont eux aussi leurs offres avec respectivement AWS et Windows Azure.
Un des atouts de Google App Engine c’est que gratuitement un développeur peut déployer une application qui soit accédées à raison de 5 millions de pages vues par mois. Ce qui est somme toute une offre d’hébergement intéressante. Au-delà de ces quotas, il est possible d’acheter des ressources supplémentaires.
Depuis quelques mois, nous pouvions voir dans la roadmap de ce projet que le support d’autres langages était un des objectifs de Google. Aujourd'hui, c’est chose faite, Google ouvre son service à une nouvelle communauté et contrairement à leur poisson d’avril, ce n’est pas Fortran mais bien Java qui est désormais supporté.
Cette nouvelle devrait donc être accueillie avec un vif enthousiasme lorsque l’on sait que le support de Java a été l’une des premières évolutions suggérées par les développeurs lors de la sortie de la première version de l’App Engine.
La version Java ne déroge pas au qualificatif de « Simple d’utilisation » qui caractérisait la version Python. En effet, il n’y a pas de différence majeure dans l’approche qu’ont ses deux dernières. Un atout supplémentaire de la version Java et qui a son importance, c’est le fait qu’elle s’accompagne d’un plugin Eclipse. Il est ainsi possible de créer une application et de la déployer en quelques clics.
De plus, l’intégration avec GWT (Google Web Toolkit) est enfantine et proposée par défaut par le plugin.
L’environnement de développement App Engine Java supporte les versions Java 5 et Java 6, sachant que sur les serveurs distants c’est la 6 qui est supportée. Les pré-requis au développement et au déploiement d’applications sur la plate-forme sont relativement faibles : avoir installé Java et le SDK de l’App Engine. L’installation du plugin Eclipse est bien entendu un plus non négligeable.
L’administration des applications se fait via la même interface que pour les applications Python. Il est ainsi possible de voir la répartition de la charge dans le temps, les requêtes HTTP les plus récurrentes, le taux d’utilisation ramené aux quotas. Il est également possible de consulter les logs. Enfin, une page permet d’accéder aux données stockées dans le Datastore.
Etudions de plus près l’architecture d’un projet et l’utilisation des APIs

Passons à la pratique : 

Les applications Google App Engine doivent être structurées en respectant l’arborescence WAR, ainsi, si vous créez un projet via le plugin Eclipse, vous obtiendrez une structuration semblable à celle-ci :

Cette arborescence de projet ne présente pas de spécificité particulière, on notera la présence d’un fichier web.xml permettant d’assurer le mapping entre les URLs et les classes des Servlets.
Lorsque vous déployez une application sur Google App Engine, une association s’opère entre les fichiers que vous transférez sur les serveurs de Google et les applications que vous êtes en mesure d’administrer. Cette association est possible grâce à un identifiant que vous vous devez de retranscrire dans le fichier appengine-web.xml. Ce fichier est l’équivalent du fichier app.yaml de la version Python de l’App Engine.
Les Servlets sont tout à fait communes et ne différent pas de celles que l’on peut développer dans une application traditionnelle. La Servlet d’un HelloWorld pourrait donc se présenter ainsi :

package com.sfeir.demo;

import java.io.IOException;
import javax.servlet.http.*;

public class DemoServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("text/plain");
        resp.getWriter().println("Hello, world");
    }
}


Maintenant que nous savons qu’il n’est pas difficile de créer un projet, intéressons nous aux APIs spécifiques de Google App Engine.

Utiliser les APIs :

Authentification

Ajouter un système d’authentification des utilisateurs se fait tout aussi facilement qu’avec la version Python :

package com.sfeir.demo;

import java.io.IOException;
import javax.servlet.http.*;
import com.google.appengine.api.users.User;
import com.google.appengine.api.users.UserService;
import com.google.appengine.api.users.UserServiceFactory;

public class DemoServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
              throws IOException {
        UserService userService = UserServiceFactory.getUserService();
        User user = userService.getCurrentUser();

        if (user != null) {
            resp.setContentType("text/plain");
            resp.getWriter().println("Hello, " + user.getNickname());
        } else {
            resp.sendRedirect(userService.createLoginURL(req.getRequestURI()));
        }
    }
}


Ici, on utilise le UserService pour récupérer l’utilisateur actuellement connecté à l’application. S’il y a bel et bien un utilisateur authentifié, nous lui affichons un message de bienvenue et si ce n’est pas le cas, l’API nous permet de le rediriger vers une page de login. Lorsque vous travaillez en « local », le système d’authentification est émulé, il n’y a pas de vérification à proprement parler de l’existence des utilisateurs. Lorsque vous déployez votre application, le UserService se base sur les Google Accounts pour vérifier l’existence des utilisateurs.

Il est également possible de savoir si l’utilisateur actuellement authentifié est un administrateur de l’application et ainsi de lui donner accès ou non à certaines fonctionnalités.

Persistance


Attention, comme pour la version Python de Google App Engine, le stockage des données ne s’effectue pas dans une base de données relationnelle. Google dispose de son propre formalisme de stockage des données qui s’apparente à une Map multidimensionnelle partagée.
Le développeur dispose de trois solutions distinctes pour persister ses données, en effet, Google App Engine Java implémente JDO (Java Data Object), JPA (Java Persitance API) et met également à disposition une API de plus bas niveau (Datastore API).
Dans cette version de Google App Engine, Google pousse un Framework de persistance : DataNucleus. Sa configuration se fait très simplement (voir doc pour plus de détails)
Voici un exemple utilisant JDO, la définition des données à persister se fait par annotation.
Ci-dessous, l’objet Comment est défini comme pouvant être persisté, en le sauvant, les éléments annotés comme @Persistent feront parti de la sauvegarde.

package com.sfeir.demo;

import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import com.google.appengine.api.users.User;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Comment {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private User author;

    @Persistent
    private String content;

    @Persistent
    private Date date;

    public Comment(User author, String content, Date date) {
        this.author = author;
        this.content = content;
        this.date = date;
    }

}

Il est ensuite très simple de manipuler cet objet au travers de l’API. Ainsi, pour persister une instance de cet objet, on peut utiliser le PersistenceManager de la manière suivante :

Comment comment = new Comment(user.getNickName(), content, new Date()) ;
PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");
      PersistenceManager pm = pmfInstance.get().getPersistenceManager();
        try {
            pm.makePersistent(comment);
        } finally {
            pm.close();
        }



Avec ce PersistenceManager, il est tout aussi simple de récupérer un objet pm.getObjectById(…) ou encore de le supprimer pm.deletePersistent(…).
Au même titre qu’il était possible d’interroger la base au travers du GQL dans la version Python, il est ici possible d’utiliser un langage de requête proche de SQL pour récupérer des données, il s’agit de JDOQL.
On pourrait récupérer la liste de nos commentaires ainsi :

PersistenceManagerFactory pmfInstance =
        JDOHelper.getPersistenceManagerFactory("transactions-optional");

PersistenceManager pm = pmfInstance.get().getPersistenceManager();

String query = "select from " + Comment.class.getName();
List<Comment> comments = (List<Comment>) pm.newQuery(query).execute() ;


Gestion d'un cache mémoire


Afin de ne pas surcharger le Datastore avec des requêtes récurrentes, il peut être intéressant de stocker un certain nombre d’informations dans un cache mémoire. Cela peut se faire très simplement au travers de l’utilisation de la Memcache API.

cache = CacheManager.getInstance().getCacheFactory().createCache(Collections.emptyMap());
cache.put(‘‘cachedInteger’’, 25) ;
Integer cachedValue = (Integer) cache.get(‘‘cachedInteger’’);



Dans l’exemple ci-dessus, après avoir récupéré l’instance du cache mémoire, on y insère un entier à la clef « cachedInteger » au travers d’un put. Un simple get avec la clef nous permet de récupérer la donnée que nous avions mise en cache.
Le cache est utilisé pour cet exemple de manière très simpliste mais on pourrait imaginer l’utiliser pour retourner des informations ayant plus de valeur, comme le contenu RSS de l’application ou encore une page fréquemment requêtée.
Cette API de cache propose d’autres fonctionnalités intéressantes comme la possibilité de définir une période de validité pendant laquelle les données peuvent être considérées comme « fraiches ». Différentes politiques de gestion sont également applicables, ainsi il est possible de n’ajouter la donnée que si celle-ci est déjà présente ou réciproquement.

Envoi de mail


L'envoi de mail fait partie des fonctionnalités intégrées à Google App Engine et relativement simples à mettre en place au sein d'un projet.
Dans cette version Java, l'API implémente l'interface JavaMail, pour des raisons de sécurité, seules les adresses d’un administrateur de l’application ou celle de l’utilisateur couramment authentifié peuvent être spécifiées comme adresses de l’émetteur.
       

Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        String msgBody = "Contenu du mail";

        ...
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("admin@mondomaine.com"));
        msg.addRecipient(Message.RecipientType.TO,new InternetAddress("destinataire@sondomaine.com", "Destinataire"));
        msg.setSubject("Email envoyé par Google App Engine");
        msg.setText(msgBody);
        Transport.send(msg);


L’exemple ci-dessus montre l’envoi d’un mail basic, sachez qu’il est également possible d’ajouter des pièces jointes (voir types MIME autorisés) avec la contrainte toutefois que l’e-mail ne dépasse pas les 1mb.

Comme pour la version Python, il est également mis à la disposition des développeurs une API permettant d’interroger des hôtes distants (via l’API URL FETCH) et une autre permettant de manipuler des images.

Cette version de Google App Engine étant toute récente, il va être intéressant de suivre l’adhésion des développeurs de la communauté Java à ce service. D’une part, elle offre une grande facilité de développement et de ce fait un gain de temps dans l’élaboration d’applications, ce qui devrait en attirer plus d’un. D’autre part, tout comme pour la version Python un certain nombre de quotas et de restrictions sont à prendre en compte lors de l’utilisation de ce service, ce qui exclu certain types d’applications de cette offre d’hébergement.

Cette nouvelle version est également un beau coup de pousse donné à GWT, en effet le plugin Eclipse permet de créer en quelques clics une application GWT pour Google App Engine et devrait donc  amener davantage de développeurs à adopter ce Framework Web.

Google Guice sera peut être un autre des bénéficiaires de cette version Java, bien qu’il ne soit pas poussé outre mesure par Google pour être associé à Google App Engine, sa légèreté et sa simplicité d’utilisation devrait lui permettre de s’intégrer facilement aux applications déployées sur la plate-forme.

Quoi qu’il en soit c’est une nouveauté que nous nous devons de suivre.

Références :

Pour s'inscrire
L'annonce officielle
Le Coud Computing
Tout sur Google App Engine
DataNucleus
Découvrir GWT
En savoir plus sur GUICE
Amazon Web Services
Windows Azure

vendredi 26 décembre 2008

Icarus and the Cloud

The_fall_of_icarus____by_ramastom

Je suis tombé par hasard sur un surnom donné à certains développeurs, un adage qui prend son envol sur le net (en anglais dans le texte) : "Icarus : a developer fascinated by the cloud". Avouons que la définition est excellente ! Je veux dire drôle, plus qu'exacte. En tout cas elle dissimule mal la peur que le nuage fait à certains.

Car si dans la mythologie, Icare était le fils d'un architecte et d'une esclave, ce qui est en soi une définition assez synthétique et réaliste du développeur aujourd'hui, il s'est surtout brûlé les ailes au contact du soleil. Quelqu'un craindrait-il que les développeurs se brûlent les ailes dans le cloud computing ? Ou l'appelle-t-il de ses vœux ? Il est clair qu'entre la virtualisation et le cloud computing, une certaine forme de révolution est en marche et que pas mal de professionnels de l'information doivent penser à leur avenir. Pourtant, ce qui arrive à Icare n'est que la conséquence de ses actes (sa fascination pour le vol donc pour l'émancipation, l'oubli de l'interdit et sa volonté de surpasser le "père"). Tout ceci sonne comme un avertissement. Mais qui se trompe de cible. Les développeurs ont tout intérêt à entrer dans le nuage. On s'émancipe bien des contraintes liées aux serveurs, leur coût, leur maintenance etc. Mais quel interdit brise-t-on ? Et quant au père...

Il y a tout de même quelque chose de troublant dans la comparaison, car le père d'Icare se nomme Dédale. Quel nom pour un architecte! Parfait pour un architecte logiciel à bien y regarder.

En tout cas le nuage se voit de plus en plus et fait parler de lui. Je m'étonne qu'il n'y ait encore personne qui, dans le même ordre d'idée, n'ait encore pronostiqué un bon anticyclone venu le balayer.

mardi 18 novembre 2008

Quelques nouvelles à propos de cloud computing

Windows7 on VMWare Fusion Souhaitant tester la plateforme Microsoft Azure (si j'ai le temps), je viens d'installer Windows7 CTP (quitte à essayer des nouveautés) sur mon MacBook dans une machine virtuelle avec VMWare Fusion. Je n'avais entendu que du bien de ce produit de virtualisation, c'est vrai que ça dépote ! La preuve, image à l'appui :

Je voulais également en profiter pour regarder Visual Studio 2010 CTP, mais après avoir regardé la configuration requise, je me suis rabattu sur la version 2008 !

Sinon, quelques nouvelles à propos de cloud computing lues sur InfoQ :
Pour commencer, un article comparant les offres Amazon EC2, Google App Engine et Windows Azure.
Et en plus récent, la sortie de CloudFront Beta par Amazon.

Windows Azure SDK System Requirements
Visual Studio 2010 System Requirements
Comparing Amazon's EC2, Google's App Engine and Microsoft's Azure
Amazon Has Started Delivering Its Clouds with CloudFront

vendredi 7 novembre 2008

Microsoft 2.0 : Maturité ?

outsidethebox Au delà de l'effervescence liée à ce genre d'événement, le PDC 2008 a montré le géant de Redmond sous un jour nouveau. Il s'agit de bien plus qu'une simple série d'annonces plus ou moins marketing pour répondre aux évolutions du marché. Bien entendu les concurrents sont là, dans la course, et chacun y va de ses innovations. Mais on sent bien cette fois comme un frémissement, une excitation qui dépasse le passage à la version N du produit X. C'est un remodelage, une redéfinition profonde du business model qui affleure ici.

Le Cloud Computing est une bombe dans tous les sens du terme. D'aucun préféreront le terme de révolution. L'effet est le même. Faire place nette, repartir de zéro ou presque. Réinventer une nouvelle vision du monde. Et laisser derrière soi pas mal de cadavres.

Une seule certitude, plus que jamais, il faut être à la pointe, se tenir au courant, tendre l'oreille. L'informatique est un métier de passionnés certes, il ne faudra pourtant pas oublier de lever la tête du guidon de temps à autres pour sentir le sens du vent et bien regarder où mène la route, pour éviter les impasses, ne pas louper le virage. L'expertise technique est toujours un plus, elle peut aussi bien être un piège, un carcan, si elle porte sur une mauvaise vision.

Les craintes sont nombreuses et certaines vraisemblables. Si le système d'information se redéfini si profondément, les métiers devront le faire aussi. Suffira-t-il d'une simple formation pour garder son poste ? Quand on parle de Next Gen, certains se voient déjà relégués dans la catégorie Old School, débordés par la déferlante.

Au sein des équipes IT, les impacts risquent d'être réels et parfois difficiles à digérer. Pour les entreprises dont le coeur de métier tourne autour du SI, l'avenir risque d'être trouble, l'avis de tempête est sérieux.

Mais que d'opportunités. Combien de métiers encore insoupçonnés. Alors qui regrettera l'ancien Microsoft ?

"L'enfance n'est pas un âge mais un pays dont on a vite la nostalgie" (Franck Lloyd Wright)

lundi 27 octobre 2008

Azure, la plate-forme de 'cloud computing' de Microsoft

La conférence pour les développeurs de Microsoft (PDC 2008) à Los Angeles s'est ouverte par l'annonce de la plateforme de cloud computing maison: elle s'appellera "Azure Services Platform". Selon Ray Ozzie, le chef architecte de Microsoft, cette plateforme sera "bâtie dès le commencement avec en ligne de mire notre engagement en faveur de l'ouverture et de l'interopérabilité"... même si on est en droit d'émettre de réserves, pourquoi pas.

Windows Azure sera le nom de l'infrastructure de traitement, complété par .Net services pour les services d'accès et de workflow, SQL services pour le stockage, Live services pour la communication et l'aspect "pervasif". Dans l'avenir proche, cela devrait être complété par SharePoint services pour la gestion de documents, et Dynamics CRM services.

Azure Services Platform

Microsoft entend ainsi se faire une place sur le marché du cloud computing, mais on peut se demander si d'une part l'offre séduira les développeurs au delà de l'écosystème Microsoft, et d'autre part si Microsoft réussira sans dommages à faire le grand écart entre son modèle historique de licences par poste, et le modèle plus difficile à rentabiliser du cloud computing.

Une version Community Technology Preview est d'ores et déjà disponible sous condition d'enregistrement.

EDIT: une interview de Ray Ozzie sur CNet.