/codelicious/

by christopher maneu

TechDays 2012–Mobilité et design, ca vous branche ?

Posted in Development, For students, Francais
Leave a comment

Les TechDays 2012 – auxquels vous êtes déjà inscrit, j’en suis sûr :) – auront lieu dans moins de deux semaines (les 7, 8 et 9 février). J’ai la chance de pouvoir être présent une fois de plus, le mardi 7 et mercredi 8 pour deux sessions.

Je commencerai cette édition avec une session co-animée avec Olivier Courtois, mardi 7 à 13h. Le titre ? “Le livre de recette du design et de l’ergonomie pour le développeur”. Pour cette session, nous vous avons concocté un programme sur mesure. Au menu, concentré de techniques ergonomiques, émulsion de couleurs avec sa touche de typographie, et son rizotto de conseils prêt à l’emploi pour les développeurs. On vous réserve également un petit cadeau afin que vous puissiez, vous aussi, refaire ces recettes chez vous.

La seconde session, que je co-animerai avec Benoit Laut – MVP Team à Bewise – vous plongera dans le monde des applications métiers/d’entreprise sur Windows Phone 7. On vous donne rendez-vous le mercredi 8 à 13h pour découvrir un exemple concret d’application métier, comment les nouveautés de Mango viennent enrichir le métier et comment la déployer à large échelle.

Ce n’est pas tout !

Je serai aussi présent, mais juste au pied de la scène et pour les questions/réponses, pour deux autres sessions :

Le reste du temps, n’hésitez pas à venir me rencontrer sur le stand Bewise ;).

Leave a comment

Et si Azure m’avait permis de m’inscrire à FreeMobile ? #1

Posted in .Net, Development, Francais, Web
1 Comment

L’arrivée de Free sur le marché du mobile français a été…fracassante. Son site web d’inscription aussi. Il a été, pour ainsi dire, indisponible le premier jour. Les premières inscriptions ont pu être réalisées que le lendemain.

Bon, l’objectif n’est pas de dire si le prix de ces nouveaux forfaits est bien ou pas, si le service est bien, si on capte au fin fond du Gers (mais le front de libération du Gers m’oblige à dire que le Gers c’est bien). En tant que développeur, je me suis posé la question suivante : Si on vient me voir demain, et on me demande de concevoir un site qui permet de tenir la charge avec 1 million de demandes par minute, je réponds quoi ?”

Et voilà, vous avez compris de quoi va parler ce post :).

Ce post est simplement un extract d’une réflexion que j’ai eu lors d’un voyage en voiture de 4h le lendemain (Mercredi) de l’annonce de Free Mobile. C’est un mélange de banalités, de points qui peuvent être évidents pour nombre de développeurs. Les théories du “Free a fait exprès de limiter son service”, ou du « il n’avaient pas pensés à tout cela/ils ont bien pensés à tous ces points », ne m’intéressent pas dans le cadre de cet article. Ce que je trouve intéressant, c’est de partager cette réflexion et un certain nombre de points qui sont certainement non connus de beaucoup (trop) de développeurs web.

Lors de l’écriture de ce post, il s’est avéré rapidement que celui-ci allait être très long. J’ai donc décidé d’en faire une série de posts.
Si vous avez des remarques sur celle-ci, n’hésitez pas à remplir la zone de commentaires :).

Les faits / les besoins

On va lancer un site à très fort trafic sur une période plus ou moins importante (on peut dire que l’on va avoir 72h de folie, et 2/3 semaines de très forte affluence). Ce site va permettre :

  • d’avoir une page de présentation des offres
  • de pouvoir télécharger quelques fichiers (grille tarifaire, CGV, CGA, …)
  • de “se connecter” si on est déjà abonné
  • de souscrire à un abonnement, en 4 étapes (choix du forfait, coordonnées personnelles, données bancaires, choix du N° ou portabilité du numéro).

Maintenant, question essentielle : à quelle volumétrie doit-on s’attendre ? Et bien 1 million de demande par minute (dixit Xavier Niel au Grand Journal, le 11/01/2012). Ya plus qu’à !

On s’arrête deux secondes sur ce chiffre : 1 million de hits par minute…60 millions de hits par heure, 1,8 milliard de hits par mois. Si on prend le site le plus consulté de France – leboncoin.fr- il est à 5,8 milliards/mois (si on prend “demande” = “hit” = “page vue”). Le second site français est à 0.6 Milliards. En l’espace de quelques heures, on se retrouve donc avec un site qui a une fréquentation de 0 (on oublie la période buzz, qui n’avait qu’un fichier html basique) au second site le plus visité de France, après l’équipe, le monde, le figaro, seloger.com … Pas mal, non ? :)

Ping me if you can

Avec une telle volumétrie, le moindre composant devient primordial. Il faut reprendre tout ce qui se passe lorsque le visiteur vient sur le site, étape par étape, et optimiser chacune de ces opérations.

On commence donc par ouvrir son navigateur, taper http://mobile.free.fr, et appuyer sur entrée. En tant qu’éditeur du site, il y a toute une partie de la chaîne sur laquelle on n’a aucun contrôle : le wifi du visiteur, la qualité de sa ligne ADSL, etc… . Le premier maillon sur lequel on peut agir ce sont les serveurs DNS. Mais bon, les DNS…on s’en fout non ? On les a avec notre registrar, ou carrément sur notre serveur web et cela suffit ?

En réalité, Les DNS sont l’un des éléments les plus sous-estimés de l’hébergement de sites internet. Et pourtant, entre l’hébergement et le réglage des DNS, vous avez déjà de quoi faire.

Ils sont où mes DNS ?

Les serveurs DNS pour vos sites sont généralement chez la société chez qui vous avez enregistré votre nom de domaine. Mais ce n’est pas une obligation. Il existe de nombreuses sociétés qui se proposent de gérer vos DNS pour vous. Vous pouvez également les héberger sur vos propres serveurs (cette dernière option est, pour la plupart des situations, déconseillée).

Comment choisir entre son registrar et un service tiers ? Cela dépend déjà du service DNS de ce dernier. Certains vous limitent dans le nombre d’enregistrement, d’autres dans le type d’enregistrements (vous n’avez pas accès aux enregistrements du type SRV, TXT ou AAAA pour l’IPv6). Mais l’un des critères qui peut vous faire changer pour un service dédié, c’est le SLA. Quelle garantie vous apporte votre registrar à ce niveau ? La solution d’installer des serveurs DNS sur son infrastructure cloud n’est pas non plus la meilleure réponse. Les services DNS sont souvent l’un des points les plus fragiles de l’architecture des services internet (et donc, également cloud).

A part associer free.fr à l’ip x.x.x.x, je peux faire quoi avec le DNS?

Si on se concentre uniquement sur du traffic web, qui nécessite de traduire un nom de domaine en adresse IP, votre DNS est l’un des systèmes de load-balancing le moins cher du marché. En effet, un utilisant la technique du Round-Robin DNS, votre serveur DNS va répondre différemment à chacune des requêtes qu’il reçoit. Cela vous permet d’associer une liste d’adresses IP à un seul enregistrement DNS. Attention, cela vous oblige à avoir des serveurs qui sont TOUS capables de répondre aux requêtes, et ceci de la même manière (ie. même version de l’application, ils se connectent tous aux mêmes données, etc…nous reviendrons sur ce point plus loin). Une variante, appelée Weighted round robin vous permet d’affecter un “poids” aux différentes réponses possibles. Vous pouvez ainsi faire en sorte que ce soit les adresses IPs des serveurs les plus costauds qui soient retournées le plus fréquemment.

DNS et mise à jour des applicatifs : Dans les infrastructures cloud, il est fréquent d’avoir plusieurs fois tout ou partie de son infrastructure dupliquée (c’est du moins plus simple – hormis le coût). Le DNS vous permet aisément de promouvoir un environnement de staging ou de préproduction en environnement de production. Il suffit de changer l’adresse IP dans le DNS. Le retour en arrière est tout aussi simple. Les instances Windows Azure sont d’ailleurs un bon exemple de simplicité dans ce domaine (bien que Azure soit un niveau en dessous, car ils changent les adresse IP virtuelles, et non pas l’enregistrement DNS). Le swap de VIPs dan Azure est une solution encore plus efficace pour la haute disponibilité et la gestion de la charge que la répartition via DNS.

On a donc ici un premier point pour assurer cette charge : la répartition de charge via le DNS.

Tu me caches quelque chose ?

Moi ? Non, mais vos DNS eux en ont l’habitude. Il y a de nombreux niveaux de caches pour les enregistrements DNS : le TTL (Time-to-live) du serveur DNS, les serveurs DNS de votre fournisseur d’accès, les serveurs DNS de votre box/routeur, les serveurs DNS de l’entreprise, le cache DNS de votre OS, le cache de votre navigateur (1min pour Firefox 3, 15 minutes pour IE 7).

Ce cache est plutôt une bonne chose pour notre problème actuel, car il permet de réduire le trafic vers nos serveurs DNS. Mais si vous avez à changer les adresses IPs de vos serveurs en plein milieu du coup de feu, cela peut vous poser des problèmes.

On en arrive à parler de l’un des réglages les moins pris en considération des DNS : Le TTL. Ce chiffre indique aux différents composants qui se permettraient de cacher le résultat d’une requête DNS “Hey, tu as le droit de le stocker, mais dans (remplacer par la valeur du ttl), redemande moi, car je risque d’avoir changé de réponse”. Si vous indiquez 1 jour, une très grande partie de votre trafic (= tous ceux qui ont déjà visités votre site avant le changement et dont le temps de cache est valide) sera toujours effectué sur votre ancien serveur. Si celui-ci est tombé, cela veut dire 0 trafic pour vous…pendant 1 jour.

Si on regarde les TTL de quelques grands site, on obtient les résultats suivants :

Site TTL (en secondes)
amazon.com 60
microsoft.com 3600 (1h)
facebook.com 3600 (1h)
Google.com 300 (5min)
youtube.com 600 (10min)
mobile.free.fr 6400 (1h, 46min, 40s)

On voit donc que le temps est relativement court. Ce temps court va, certes, générer un peu plus de trafic DNS, mais il permet également de pouvoir effectuer des modifications sans avoir de délai de propagation trop important. Si vous devez changer en catastrophe d’hébergeur, un TTL d’une journée (ce qui est assez courant) rendra indisponible votre site jusqu’à une journée pour certains de vos visiteurs.

Une solution DNS efficace ?

Avoir une solution DNS efficace, abordable, sûre et qui peut accepter une charge importante n’est pas quelque chose d’aisé. Dans ce domaine, pour moi, l’une des solutions les plus intéressantes est Route 53 D’amazon Web Services. Pour un prix tout à fait abordable (0.5$/mois/nom de domaine + 0.5$ / million de requêtes), vous avez tous les services cités ci-dessus, avec un SLA de 100% (+ compensation en cas d’indisponibilité).

 

Que mettre derrière son DNS ?

Nous n’avons que très peu d’éléments sur ce qu’il y a derrière mobile.free.fr en terme de technologie : un proxy nginx, du Java Server Faces, et un usage de jquery. On n’a également aucune idée de toute l’infrastructure qu’il y a derrière. Cette partie va donc, premièrement, se baser sur un certain nombre d’hypothèses, secondement, sur un choix de technologies Microsoft (ca vous étonne ? :)).

Les défis

Le site d’inscription a, visible d’un point de vue utilisateur, les fonctionnalités suivantes :

  • Afficher des pages d’informations,
  • Permettre de télécharger certains documents (pdf des CGV, etc…),
  • Se connecter avec ces identifiants Free,
  • Remplir un formulaire d’inscription,
  • Utiliser la portabilité ou choisir un numéro de téléphone
  • Recevoir par email l’accès à son espace client

Les plus gros points de contention sont en gras : la connexion avec les identifiants Free nécessite un accès à un service d’authentification (on va considérer que la copie de l’ensemble des utilisateurs/mot de passe n’est pas la solution retenue), et le choix du numéro de téléphone ne doit pas être réalisé en simultané par deux personnes.

L’une des premières choses que l’on va pouvoir faire, c’est la création d’un CDN. De nombreux fournisseurs existent, à commencer par Windows Azure. Le CDN va nous permettre de répliquer le contenu sur de nombreux serveurs, spécifiquement configurés pour délivrer du contenu statique, à travers toute la planète. Le seul point ici –et pour l’ensemble des solutions “cloud” globales – c’est qu’elles ne disposent pas forcément d’un noeud en France, et certainement pas de plusieurs noeuds en France. Le CDN reste pertinent car il sera à même de délivrer le contenu statique du site (PDF, CSS, images) beaucoup plus rapidement que le serveur web. Si on devait ne servir qu’un pays et pour une durée plus longue que ce pic d’affluence (par exemple le site de rediffusion d’une chaîne nationale), la stratégie pourrait être légèrement différente.

L’affichage des informations n’est pas la partie la plus compliquée. On peut penser que de simples pages HTML sont la meilleure réponse que l’on puisse apporter. Mais cela ne suffit pas, il y a de nombreux éléments de performance à prendre en compte, y compris pour une simple page HTML : Taille du code HTML, nombre de liens (CSS, JS) référencés et minification, …), etc… Si on regarde de plus près le site de Free Mobile, certaines de ces règles ne sont pas respectées. Pour voir cela, j’utilise l’indispensable plugin Y!slow de Yahoo. Il permet de valider si un site répond aux « grands critères de performance » déterminés par les équipes de Yahoo.

image

 

 

Une migration vers Windows Azure

Windows Azure est là, pourquoi ne pas prévoir de déployer notre infrastructure dessus ?

En fait, on a déjà commencé à le faire, avec notre CDN. En plus, c’est dans le cloud, donc pas de problèmes de charge ? Non ? Non, avoir tout ou partie de votre infrastructure dans le cloud ne vous prive pas magiquement de réfléchir aux impactrs d’une charge importante, y compris pour un service tel que le CDN !

On va considérer que le blob storage d’Azure ne perdra pas nos fichiers dans l’espace de temps où notre site d’inscription sera en ligne. Il a cependant des limites dans la capacité de l’infrastructure Azure à répondre à vos requêtes. D’un point de vue global, il y a de quoi répondre, pas de soucis :). Cependant, si on prend un compte, ou un fichier, il faut s’intéresser aux Scalibility targets. On apprend ainsi qu’une limite existe à différents niveaux, notamment qu’un seul compte de storage ne peut assurer “que” 5,000 téléchargements par seconde. Si on remet cela avec notre target à nous (1M/s) et que nous avons 3 blobs par page (1 JS, 1 CSS et 1 image utilisée en sprite-css), un compte de stockage azure ne peut assurer que 1666 “utilisateurs” par seconde, et il nous faudra 600 comptes de stockage pour assurer cette charge (chaque compte azure a une limite de 5 comptes de stockage, qui peuvent être débloqués via un appel au support). Cette estimation est grossière (tous les clients ne demandant pas à chaque chargement les fichiers grâce au cache, ni durant la même seconde).

Alors, tous ces chiffres sont pour les comptes de stockage, et non pas pour le CDN. En effet, les CDNs sont entre l’utilisateur et le compte de stockage. Ils stockent en local les données du blob storage (pendant une durée qui peut être personnalisée). On aura donc une scalability target différente. Celle-ci peut s’évaluer avec le nombre de points du CDN (à voir s’il n’est récupéré qu’une fois par edge location ou une fois par serveur de l’edge location), le nombre de fichiers et la durée du cache.

image

Je n’ai pas trouvé de métriques sur les capacités du CDN, mais elles sont bien évidemment supérieures. Un détail est également important dans notre cas : la géographie de nos visiteurs. Le CDN est très intéressant quand vous avez des utilisateurs aux 4 coins du globe, moins quand l’ensemble de vos utilisateurs sont sur le même pays. Cependant, Si le point de Paris venait à être surchargé, une partie du trafic est automatiquement redistribué sur d’autres points (Zurich, Londres ou Amsterdam).

 

Fly me to the cloud

Nous avons fait une bonne partie du travail. Il nous faut maintenant nous occuper d’une partie centrale : le site d’inscription à proprement parler. Pour les besoins de cet article, notre choix technologique se portera sur ASP.net MVC. Nous devons désormais créer notre site pour qu’il supporte cette charge. Nous savons qu’il sera hébergé dans Windows Azure. Nous développons notre site rapidement, et nous le testons sur notre machine de développement.

Une fois le site déployé dans Azure, une simple modification d’un fichier de configuration nous permettra de grossir l’infrastructure qui l’héberge. En ce sens, deux leviers s’offrent à nous :

  • Le Scale-up : ou le fait d’augmenter la puissance de chaque serveur qui héberge notre site. On augmente le nombre de processeurs, la mémoire vive, etc… Avec Windows Azure, c’est la « taille » de notre instance que l’on augmente,
  • Le Scale-out ou le fait d’augmenter le nombre de serveurs qui hébergement notre site, ou le nombre d’instances sous Azure.

On pourrait penser que l’on a ici terminé notre travail. On a réfléchi au DNS, à minimiser notre volumétrie, à héberger nos fichiers statiques sur un CDN, et nous avons pleins de serveurs surpuissants pour répondre aux requêtes.

Cela n’est malheureusement pas suffisant. Nous verrons dans le prochain épisode que, même pour un site « simple » comme celui-ci, il n’est pas possible de se contenter d’héberger son site dans Azure pour immédiatement pouvoir absorber une telle charge.

Le prochain épisode s’intéressera à l’architecture qui permettra, avec un ensemble de services Windows Azure, de supporter un site à fort trafic de ce type. Stay tunned.

1 Comment

Ya quoi à dire sur TEDx Place du Capitole ?

Posted in Uncategorized
Leave a comment

Samedi 14 Janvier, journée un peu froide sur le midi toulousain.Journée également pleine de promesses : TED débarque à Toulouse.

TED, pour beaucoup d’entre nous, ce n’est qu’un site web. Un endroit merveilleux ou des gens du monde entier partagent non seulement leur savoir et leur expérience, mais également leur passion. Des gens inconnus du grand public, ou des figures publiques d’un domaine tel qu’Al Gore ou Bill Gates. J’ai passé de nombreuses heures (pas assez à mon goût) à regarder les vidéos de ce site. Et je découvre qu’il débarque à Toulouse ? (Bon en fait, je n’ai pas eu cet effet de surprise,  j’étais au courant avant que cela soit annoncé par certains organisateurs :) ).

En fait, je pourrai vous raconter à quel point je me suis reconnu dans certains intervenants, j’ai apprécié de découvrir un scientifique qui essayait de nous rendre LES sciences accessibles, alors qu’un autre les détournait pour en faire de l’art…et parfois les remettre en question. J’ai apprécié de découvrir que demain, je serai peut-être soigné à distance à cause d’un chalutier perdu en mer et d’un interne en médecine dormant près d’un téléphone…cela il y a une 40aine d’année. J’ai apprécié de pouvoir découvrir que, juste dans la ville où je vis, des gens nous offrent la possibilité de créer, même si notre seul atout est d’avoir une idée. J’ai été amené à réfléchir à la place des avocats dans des pays où la guerre et les génocides viennent de partir, a la manière dont l’économie n’était pas prévisible par les économistes (enfin , pas tout le temps). Tout ca pour quoi ? Pour nous faire expliquer que les évidences sont là, qu’il y a une “vie” après la mort, et que des milliers de personnes en ont déjà fait l’expérience, que c’est le bon moment pour entreprendre (car vu ce que disent les mayas, ce n’est pas un risque d’entreprendre)…et que la cuisine c’est social, identitaire, métissé et communicatif (et que si on travaille pas, on boit en plus de manger, mais c’est une autre histoire ;)).

Bref, j’aurai pu vous parler du TedX Place du capitole. Mais ce n’est pas du jeu de vous en parler. L’organisation était au top, les speaks formaient un mélange agréable de T.E.D. (Technonogy, Entertainment, Design), et moi je n’avais pas aussi bien dépensé mon argent et mon temps depuis…toujours ?

Je vous laisse, il faut que je réfléchisse à ce que j’ai toujours voulu faire, en surveillant le plat de lasagnes qui est au four, en vidant les 3/4 de ma maison et en me préparant à vivre – un jour – une expérience inoubliable.

Leave a comment

Review – Step by step parallel programming with Microsoft Visual Studio 2010

Posted in .Net, Development
Leave a comment

Premier post de l’année 2012 : on passe rapidement sur les voeux, mon renouvèlement en tant que MVP Device Application Development pour cette année :), et sur le nouveau maneu.net en préparation pour aller directement au premier article.

De nombreux développeurs lisent des ouvrages pour apprendre ou réactualiser leurs connaissances. De nombreux blogueurs publient des reviews sur ces livres. En suivant l’initiative d’un collègue qui recense tous les livres qu’il aime et/ou a utilisé, je vais tenter de prendre le temps d’écrire une revue pour chacun des livres techniques que je lis (ce qui est pas loin d’une trentaine par an). On commence cette série par…de la programmation parallèle.

 

51dCyVJqxSL

Step-by-step Parallel programming with Microsoft Visual Studio 2010

Donis Marshall – Microsoft Press
ISBN : 978-0-7356-4060-3

Hop hop hop, achetez-le !

La programmation parallèle est à minima un très bon moyen d’apporter de la valeur ajoutée à un logiciel, au mieux ce qui deviendra un indispensable pour tout développeur et un pré-requis pour une part importante des applicatifs futurs. Cependant, pour nombre d’entre nous, ce n’est qu’un vague souvenir qui remonte aux bancs de l’école.

Ce livre, d’environ 200 pages, est un concentré de ce que tout développeur devrait connaitre sur la programmation parallèle. Orienté autour de 7 chapitres très bien découpés, il commence par une dose de théorie –juste assez pour comprendre et suffisamment pour ne pas être indigeste – pour aller rapidement aux premiers exemples. Après avoir appris à paralléliser l’exécution de tâches, deux chapitres nous font découvrir comment paralléliser nos traitements de données (notamment avec PLINQ). Enfin, si vous avez encore le courage d’attaquer les 100 dernières pages de ce livre, vous apprendrez à débugger vos logiciels nouvellement parallélisés, utiliser des collections concurrentes voire même customiser la manière dont va s’exécuter votre code.

Si vous développez des applications clientes, riches ou serveur avec le .net framework 4.0 (ce livre étant orienté autour de la Task Parallel Library/PLINQ, et non pas les APIs de plus bas niveau), ajoutez-le à votre liste des prochains livres à lire.

Si ce bouquin vous tente, filez l’acheter avant d’oublier.

Leave a comment

Le futur de Biztalk Server 2010

Posted in .Net, Development
1 Comment

Microsoft vient d’annoncer publiquement le nom et les nouveautés de la prochaine version de Biztalk Server : Biztalk Server 2010 R2.

Au nom, on peut déjà deviner à quoi on à affaire : cette nouvelle version majeure est une évolution de Biztalk Server 2010. Rien de révolutionnaire dans cette version, mais des évolutions dans trois domaines différents :

    • Le support de la plateforme,
    • Les scenarios B2B,
    • Le cloud.

Le support de la plateforme
Les principales nouveautés sont le support des derniers produits infrastructure – Windows Server 8 et SQL Server 2012 – et développeurs – Visual Studio 11 – pour la création et le déploiement d’applications BizTalk. Il y aura également un meilleur/nouveau support de certaines plateformes (notamment DB2, Informix et IMS/DB).

Les scénarios B2B
De ce côté-là, Biztalk Server 2010 R2 proposera des schémas et adapters à jours (notamment les schémas SWIFT utilisés dans la finance). Des nouveautés sur les ports et les adapters sont également à venir.

Le Cloud
Plusieurs choses ont été annoncées autour du Cloud et de Biztalk. L’intégration de Biztalk Server et du Service Bus de Windows Azure est au programme. Une extension du BizTalk dans le cloud est également prévue, mais aucune information publique n’a encore été révélée sur cette partie.

Enfin, des nouveautés sur le modèle de licence vont certainement permettre de démocratiser Biztalk Server : Biztalk Server 2010 R2 sera disponible en licence SPLA, ce qui veut dire que des hébergeurs vont pouvoir vous proposer un hébergement de Biztalk, avec un paiement au mois. Enfin, si vous avez déjà une licence, vous aurez la possibilité de la « transférer » pour l’utiliser chez un hébergeur.

 

Une dernière question : C’est pour quand ? Et bien, la release est prévue 6 mois après la release de Windows Server 8…pour lequel on ne connaît pas (encore) la date. Affaire à suivre ;)

 

Edit : Biztalk server 2010 R2 est bien l’évolution de Biztalk server 2010, pas l’évolution de lui-même (Merci JP ;))

1 Comment