Welcome to MSDN Blogs Sign in | Join | Help

Une session de Jeff Currier, Senior Dev Lead.

Il y a eu des changements majeurs dans le service depuis ce qui a été présenté à la PDC l’année dernière.

Modèle conceptuel:

  • Un abonnement permet de faire correspondre l’usage à une facturation; un compte peut avoir plusieurs abonnements
  • Serveur “logique”: comme une instance SQL Server, unité de géo-localisation et de facturation; relation 1-1 entre abonnement et serveur logique
  • Base de données: avec un usage restreint de T-SQL, ainsi que des vues catalogue additionnelles comme firewall_rules, bandwidth_usage, etc.

L’on voit alors la topologie réseau du service. Les librairies client classiques (ADO.NET, etc.) parlent à un équilibreur de charge qui redirige les sessions TDS. On a alors une couche de passerelles qui renvoient les sessions TDS vers les serveurs SQL.

Que fait cette passerelle TDS? (Le protocole TDS est ouvert)

  • Le Listener TDS gère les aspects sécurité, inspecte les paquets pour vérifier leur validité d’un point de vue sécurité et gère la partie Login.
  • La passerelle utilise un catalogue de données pour faire la relation vers le serveur SQL physique où se trouve la base
  • C’est un niveau de défense

L’on a des points d’accès TDS, ainsi que des services SOAP pour l’administration et le provisioning. Puis, une logique qui inspecte le protocole TDS et prend les décisions.

Ajout de serveurs:

  • Initié depuis le Portail d’administration
  • La passerelle reçoit une requête
    • l’on ajoute l’info dans le catalogue de métadonnées
    • l’on crée l’enregistrement DNS
    • l’on crée la Master DB
  • A la fin, le catalogue de métadonnées est complété

Création de bases: très similaire, mais l’on peut aussi le faire depuis T-SQL. Dans ce cas l’inspection de protocole isole les messages concernant les créations de bases et intercepte la demande pour gérer la création. L’on prend une partition prête à l’emploi, (buffer pool) et l’on marque l’entrée dans le metadata catalog. L’on isole également les instances de secours.

Le processus de login SQL Azure est spécifique car la passerelle intercepte la demande au niveau protocole pour valider les credentials auprès de la bonne MasterDB et initie la connexion TDS.

Jeff montre une passerelles tournant sur sa machine de développement, ce qui nous permet de voir le processus de connexion en traçant les paquets TDS!

Surveillance du service:

  • Des compteurs sont utilisés au niveau du cluster
  • Ces valeurs sont utilisées pour notifier les équipes d’exploitation avant qu’un problème n’apparaisse
  • Des agents exécutent des actions de routine pour tester la santé des noeuds, et en cas de problèmes lancent des diagnostics approfondis (réseau, dépendances, …)
  • La surveillance se fait égalememnt entre différents centre d’hébergements, ce qui permet de mesure des éléments comme la latence réseau, etc.

En termes de sécurité:

  • SSL est obligatoire, on trace les attaques de type DOS, et l’on inspecte les paquets
  • L’on a un firewall intégré avec les IP autorisées, l’on coupe les connexions inutilisées, les noms de serveurs sont générés aléatoirement
  • Les uid les plus attaqués sont désactivés (SA, Admin, root, guest, etc.), et l’on s’appuie sur l’authentification/autorisation standard SQL Server

Une session présentée par David Robinson (après une introduction musicale: “it’s time to change”)

Cette session va se focaliser sur l’évolutivité horizontale, notamment en rapport avec la taille maximale d’une base SQL Azure (10 Go) mais également en termes de gestion de la montée en charge.

David reprend le cas de Kelly Blue Book:

  • 13 millions de visiteurs par mois,
  • 2.5 Go de données,
  • données rafraîchies toutes les semaines,
  • données répliquées sur 5 bases,
  • incrémente/décrémente le nombre de bases à la demande.

L’on aura le code source de la session sur CodePlex comme Startup Kit.

Chris Auld monte sur scène pour décrire l’architecture TicketDirect: montée en charge en partitionnant les bases de données sur une centaine d’instances SQL Azure pour gérer les pics de demande.

IMG_0041La montée en charge va dépendre de la nature de la base; l’on va soit partitionner les données en morceaux basés sur des intervalles (temps par exemple), soit via des principes de hachage (hashing). Il faut choisir la bonne méthode avec précaution par rapport au type d’usage.

David prend un exemple type e-commerce. On a deux schémas: Produits et Clients.

Produits n’a pas énormément de données mais peut devenir très “chaud”; on divise donc ce schéma sur plusieurs petites bases de 1 Go. L’on peut voir toutes les bases avec SQL Server Management Studio: Product_1, Product_2, etc.

Dave montre le code qui permet de charger les données avec l’API SqlBulkCopy.

Ensuite, on regarde l’application Web (http://fabrikamfish.cloudapp.net/) qui permet de choisir une famille, un élément, etc. Si l’on demande un produit spécifique, l’application va directement diriger la requête sur la bonne base ou “partition”. Si l’on fait une recherche, l’on va effectuer une requête qui va balayer toutes les données et doncva devoir interroger toutes les bases.

On a typiquement une boucle qui répète la requête SQL sur l’ensemble de bases, puis fusionne l’ensemble des résultats. Cela permet donc de répartir la charge sur l’ensemble des noeuds. Ce code sera sur CodePlex.

On passe à la base Clients. Là on a choisit un système de hachage basé sur l’adresse e-mail de l’utilisateur pour partitionner les données sur plusieurs bases, là aussi de 1 Go, sachant que l’on peut passer sur des instances de 10 Go plus tard si nécessaire.

Dans le code de chargement, l’on voit qu’on utiliser une méthode GetInt64HashCode() qui utilise un hash MD5 pour hacher les données clients.

Conception du schéma

  • SQL Azure ne supporte pas les transactions distribuées. Il faut donc éviter les jointures et transactions entre bases.
  • Le DDL doit être conçu pour supporter les évolutions.
  • Pour gérer les évolutions applicatives, l’on doit pouvoir savoir gérer plusieurs versions du schéma à un instant t

Routage des requêtes

  • L’application doit gérer ce partionnement

Data de référence & synchronisation

  • Eviter les jointures entre bases: pour les données de référence type “code postal”, on les réplique dans toutes les bases
    • Sync Framework pour SQL Azure annoncé mardi; l’on peut l’héberger dans un Worker Role
    • Scripts de mise à jour manuels

Requêtes “fan out”

  • Envoyer les requêtes en parallèle à la base
  • Utiliser des connexions multiples et du multithreading

Support du fan-out dans le futur

L’on aura de meilleurs outils pour les développeurs et les administrateurs.

  • Division dynamique de partitions
  • Possibilité de fusionner des partitions
  • Améliorer la gestion du schéma sur toutes les partitions

Et des fonctionnalités:

  • Gestion de connexions
  • Support des requêtes de type fan-out

Une session présentée par Brian Calder.

Ironiquement, une coupure de courant en début de session provoque un retard de 10 minutes pendant que l’on redémarre les machines! Aurait-on évité ce problème en utilisant PowerPoint dans les nuages plutôt que sur un PC posé sur l’estrade?

Les sujets:

  • Haute disponibilité
  • Montée en charge
  • Gestion du cycle de vie

Agenda:

  1. Montée en charge des données
  2. Montée en charge du compute
  3. Mises à jour et montées de versions

Storage

Au départ on a du cache volatil (AppFabric Cache, memcached, …) et du stockage persistant Blobs Tables Queues Drives, plus SQL Azure.

  • Blobs: interface simplepour stocker des fichiers nommés
  • Tables: stockage structuré: entités + propriétés
  • Queues: délivrer des messages de façon fiable aux applications

Storage Account: 100 To de capacité, jusqu’à quelques centaines de Mo/s, ou quelques milliers de requêtes par seconde. L’on peut également utiliser le Content Delivery Network pour cacher les contenus dans 18 centres dans le monde.

Les objets sont groupés dans des partitions et ces partitions sont réparties sur les serveurs. Les partitions sont surveillées afin d’être réorganisées automatiquement en fonction de la montée en charge. Des serveurs (“back end”) constituent un vaste système de fichiers distribué. Les partitions sont allouées à des serveurs, et l’on peut les déplacer sans copie de données. Quand un serveur devient surchargé, le système de surveillance peut réallouer des partitions à d’autres serveurs afin de répartir la charge. L’opération de transfert ne prend que quelques secondes. La décision de réallouer est faite après quelques minutes d’observation d’un pic.

Ce système de répartition est au coeur de la montée en charge Windows Azure.

Quelle PartitionKey est utilisée pour partitionner les données?

  • Blobs: le nom du blob, ce qui permet de répartir les blobs automatiquement
  • Messages: le nom de la Queue
  • Entités: c’est l’application qui définit la PartitionKey

Performances:

  • 500 transactions/s pour une Queue ou une partition de Table
  • pour un Blob: 30 Mo/s à 60 Mo/s en fonction de la taille du Blob.
  • Latence d’environ 100 ms pour de petites transactions.

Pour diminuer la latence, ajouter une couche de cache type AppFabric ou memcached pour redescendre à 10 ms.

Compute

On a des rôles Worker & Web et le modèle de service permet de définir les rôles, la topologie, le nombre d’instances, etc.

Le nombre d’instances permet évidemment de gérer la haute disponibilité: l’on multiplie les instances pour les rôles Web & Worker. L’on peut ajouter des instances en cours de route.

Une application typiquement va prendre une liste de tâches à accomplir, la diviser en morceaux et distribuer aux Workers. Dans ce cas, l’on va utiliser les Queues pour distribuer les messages.

Délivrance garantie: lorsqu’un Worker traite un message, le message devient invisible pendant un certain temps. Si le Worker finit de traiter le message, il le retire. Si le Worker échoue, le message ré-apparaît au bout d’un certain temps et pourra être traité par un autre Worker.

Par contre, dans ce cas un message peut potentiellement être consommé plusieurs fois. Il faut donc que les tâches soient idempotentes (répétables).

D’autre part, les messages ne sont pas forcément consommés dans l’ordre.

Pour mieux contrôler ce processus, l’on peut avoir un Job Manager qui envoie les messages, distribue la charge, surveille l’avancement du processus, etc. Par exemple, quand une tâche est constituée d’un message + un Blob, c’est le Job Manager qui peut gérer ces aspects.

Brian revient sur le cas de RiskMetrics, qui utilise un Job Manager répartissant des tâches sur 2.000 Worker Roles, et bientôt 10.000 Worker Roles.

Pour des traitements longs, l’on peut utiliser une table additionnelle pour suivre le progrès du traitement et le reprendre et cas d’interruption.

Cycle de vie

Mises à jour “en place” par roulement: pour mettre à jour un ensemble de rôles de façon contrôlée. L’on crée des Upgrade Domains dans lesquels on répartit uniformément les différents rôles. Cela permet de déployer des nouveaux binaires “par roulement” et donc maintenir la disponibilité du système, au lieu de déployer et éventuellement redémarrer tous les rôles en même temps.

Bien prendre le soin de tout versionner (protocoles, schémas, etc.) car l’on peut avoir deux versions tournant en parallèle. Par exemple, dans le cas de communication inter-rôles et d’une évolution du protocole de communication, l’on va d’abord déployer une version interédiaire comprenant l’ancienne et la nouvelle version du protocole afin que les noeuds puissent continuer à communiquer durant la mise à jour par roulement.

Dans le cas d’un changement de schéma d’une table Azure, on prévoit une propriété “version” dans chaque entité. Si l’on ajoute un propriété au schéma, l’on va déployer une version intermédiaire qui comprend le schéma V1 et V2 et utilise des valeurs par défaut pour la nouvelle propriété. Le client de la version originale utilise “IgnoreMissingProperties” pour ne pas être impacté par la nouvelle propriété. Une fois la version intermédiaire entièrement déployée, on passe sur la vraie mise à jour, qui comprend le schéma V2 et qui peut mettre à jour les entités avec les vraies valeurs.

Dans le cas de changement de PartitionKey/RowKey (plus invasif) l’on peut prévoir de passer par une nouvelle table.

DSC05613

Une application classique a souvent une architecture à deux niveaux, par exemple Web (ASP.NET) + base de données. AppFabric Caching va aider à monter en charge sur ce type d’architecture, et également se protéger en partie des plantages.

AppFabric Caching est un cache mémoire distribué permettant de cacher tout type de données.

  • Partage de données entre applications (tout le monde tape dans le cache)
  • Performance 28.000 lectures/s, 20.000 écritures/s
  • Montée en charge linéaire: ajouter des noeuds
  • Haute disponibililté: les données sont disponibles en cas de perte de noeuds

dell.com utilise AppFabric Caching par exemple.

Coût: utiliser des machines de base, sera intégré à Windows Server.

AppFabric Caching en Beta actuellement (après 3 CTP), RTM en 2010. Puis version Azure à venir.

En termes de déploiement, on active simplement le rôle sur les serveurs et l’on indique une base de données pour stocker la configuration. Côté client, l’on a une librairie et un app.config pour indiquer l’adresse du cluster de cache.

L’on a des cmdlets PowerShell pour gérer les noeuds du cluster.

L’on a une API permettant d’obtenir un objet DataCache. L’API est très simple: cache.Put(clef,valeur), cache.Get(clef), cache.Remove(clef).

En Beta1, le cache est sécurisé par défaut, contrairement à la CTP3. Il faut autoriser l’accès au cache via une cmdlet.

L’API reste la même quel que soit le nombre de serveurs dans le cluster.

L’on peut néanmoins ajouter des régions, pour grouper des objets, et des tags pour effectuer des requêtes.

L’on stocke typiquement explicitement les valeurs dans le cache (si valeur pas dans le cache, récupérer valeur et l’ajouter au cache).

Les données sont réparties sur l’ensemble des serveurs. L’on peut ajouter des serveurs dynamiquement à tout moment, et les données seront re-partitionnées automatiquement. GridDynamics a également fait des tests intensifs de montée en charge.

Comment utiliser AppFabric Caching? Etudier les pré-requis sur les données:

  • Performance
  • Consistence
  • Eviction
  • Sécurité
  • Disponibilité

Reference Data (type catalogue): performance est généralement primordiale, mais mise à jour relativement rare. Le Local Cache peut aider: le client peut cacher les données localement pour encore accélérer l’accès, mais l’on peut avoir des données moins fraîches (mais l’on choisit le temps de rétention).

Données d’activité (type panier e-commerce): l’on utilise souvent le Session State ASP.NET, l’on a alors un custom Session Store Provider; le Session State sera alors automatiquement stocké dans AppFabric Caching.

L’on peut activer la haute disponibilité sur les caches, dans ce cas l’on stocke automatiquement les données sur deux serveurs différents (primaire et secondaire). En cas de panne, les requêtes sont automatiquement redirigées vers le noeud survivant pour l’objet demandé.

Données de ressources (lecture/écriture): l’on a du locking optimistic, mais également du locking explicite: GetAndLock().

L’on peut maintenant, en Beta, verrouiller une clé non existante: pour cacher des objets coûteux à récupérer et éviter que de multiples clients fassent cette même opération en même temps.

Tous les verrous ont un temps limité.

L’on peut également ajouter des callbacks pour être notifié de modifications.

La démonstration montre la mise en oeuvre de trois caches au sein d’une application de type e-commerce: Catalogue, Session et Rapports. L’on voit que la session est bien stockée en cache et accessible par tous les frontaux.

Via une cmdlet, l’on voit que les données sont bien dupliquées sur deux noeuds. Lorsque l’on éteind un noeud, l’on voit qu’après quelques secondes, les serveurs survivants sont devenus primaires pour les données.

AppFabric Caching et Azure

Montée en charge avec le cloud:

  • Application en local avec data dans SQL Azure
    • AppFabric Caching peut cacher les données au plus près du serveur applicatif
  • Application dans Azure et données en local (via le Service Bus)
    • Idem mais dans l’autre sens: AppFabric Caching dans Azure rapproche les données
  • Tout dans Azure
    • Pas besoin d’optimiser les temps d’accès dans ce cas, mais l’on a toujours des besoins de montée en charge
    • AppFabric Caching est montré déployé dans Windows Azure sous la forme d’un Worker Role, que l’on peut utiliser depuis un Web Role pour cacher les données SQL Azure.

L’on a donc une belle histoire Software + Services ici, avec la possibilité de faire tourner le service de cache aussi bien dans le nuage qu’en local!

Tables

Les PartitionKey sont utilisées pour répartir les données de vos tables sur plusieurs serveurs.

L’on a alors les opérations habituelles, Create/Query/Delete sur les Tables, et Insert/Update/Delete/Query sur les entités.

Le SDK fournit un client complet pour accéder aux Tables, fondé sur ADO.NET (ou plutôt WCF) Data Services.

Il est critique de bien choisir les clefs (PartitionKey & RowKey). Il faut prendre en compte:

  • Scalabilité: permettre à Azure de bien distribuer les partitions “chaudes”; il faut donc bien choisir la PartitionKey
  • Efficacité des requêtes
  • Transactions sur une partition entière: là encore le choix de la PartitionKey est critique

Plusieurs cas présentés pour les PartitionKey:

  • PartitionKey statique, RowKey = titre du film
    • Toutes les données iront sur un seul serveur; ce serveur devient donc un goulot d’étranglement
  • PartitionKey = catégorie du film
    • Le système peut détecter qu’un serveur devient surchargé et peut assigner une partie des partitions sur un autre serveur, dynamiquement

Deuxième cas: écriture intensive, on logue des transactions dans une table, récupérables par plages de temps

  • Utiliser le Timestamp (heure) comme PartitionKey
    • Problème: c’est toujours la denière partition qui sera “chaude” car c’est là que l’on ajoute les enregistrements
  • Essayons d’ajouter un préfixe au timestamp, variable, comme un simple algorithme de hash
    • Si l’on hashe les timestamp sur 20 blocs, on divise de fait les données dans 20 partitions
    • Mais comment retrouver les entrées par timestamp maintenant que l’on a 20 préfixes
      • l’on peut effectuer des requêtes parallèles sur les 20 partitions

Pour les RowKey:

Lorsque l’on acdède à une entité unique par PartitionKey/RowKey, le système trouve le serveur où se trouve la partition puis trouve l’entité correspondant à la RowKey. Dans ce cas, l’on n’a pas besoin de “continuation token”.

Maintenant, si l’on requête “select * from movies where rating>4”, l’on va scanner toute la table, renvoyer e.g. 1000 entités, plus un continuation token qui permet de reprendre la requête et de continuer de scanner la table. L’on peut avoir 0 résultats mais tout de même un continuation token, si l’on franchit une limite de partition sans trouver de résultats.

L’on peut accélérer ces requêtes en les divisant par partitions, e.g. “PartitionKey >= ‘A’ and PartitionKey <=’D’”… On peut alors exécuter les requêtes en parallèle.

Les requêtes peuvent être de plusieurs types en termes de performances:

  • Rapide: PartitionKey & RowKey spécifiées
  • Moyen: une seule partition, mais un espace de RowKey limité
  • Lent:
    • scans larges sur une table complète
    • utilisation de prédicats “ou” dans la requête
  • Dans tous las cas sauf le premier, l’on peut avoir des continuation tokens
    • maximum de 1000 entités dans une réponse

Pour des requêtes liées à des interactions utilisateurs, utiliser un cache.

Entity Group Transactions: permettent de grouper un maximum de 100 commandes sur un ensemble d’entités réunies dans une même partition.

Queues

Les Queues permettent de délivrer des messages de façon fiable pour des traitements asynchrones. Les Queues contiennent des messages (<= 8 KB); l’on peut spécifier des dates d’expiration. L’on peut ajouter/supprimer des messages.

Les consommateurs de messages vont utiliser le DequeueCount pour identifier des messages qui pourraient poser problème: si un message est dépilé plusieurs fois mais revient dans la file, il provoque peut-être des plantages des workers par exemple. Il également important que le traitement du message soit idempotent (répétable) toujours pour le cas où des messages reviennent dans la file.

Le message count permet d’évaluer les besoins en puissance de traitement par rapport au nombre de messages en attente.

L’on peut typiquement utiliser les Blobs pour stocker des données, avec une référence dans le message. Penser à pouvoir effacer les Blobs qui deviendraient “orphelins”.

Futur: permettre aux Workers d’étendre le délai d’invisibilité, et des délais supérieurs pour les traitements longs.

Encore une fois, le SDK inclut une librairie client “officielle” (ce n’est plus un simple exemple).

L’une des annonces majeures pour Windows Azure à mon sens est la possibilité, en plus de .NET et PHP, de déployer désormais également des applications Java. Le retour d’expérience de Domino’s Pizza durant la keynote est éloquent: ils ont pu bénéficier des apports de la plateforme Azure avec un faible impact sur leur application Java existante.

Steve Marx va nous détailler dans cette session les nouvelles fonctionnalités de Windows Azure pour Java.

Steve a beaucoup de démos que je ne pourrai pas vous montrer tout de suite, mais sûrement très bientôt!

Windows Azure a pour ambition d’être la meilleure plateforme Cloud pour tout le monde, il n’y a donc aucune raison d’exclure une technologie en particulier. Steve nous confie qu’il préfère .NET, mais que le week-end il code en Python, en Perl et même en Eiffel :-)

L’audience est principalement expérimentée en Java, mais beaucoup moins en Windows Azure! Steve commence donc par “résumer” la plateforme.

Steve montre l’application de démo, un simple compteur. Plus intéressant, l’architecture:

L'architecture de l'application

  • Plusieurs Tomcat en load-balancing (Apache Tomcat 6)
  • Un JRE (Java Runtime Environment)
    • L’on détaillera les raisons de la séparation Tomcat/JRE
  • Le Storage

Java fonctionne dans Azure car:

  • L’on autorise le code natif (java.exe)
  • L’on a accès au filesystem (e.g. pour les logs de Tomcat)
  • L’on a des worker roles avec des endpoints: possibilité d’écouter sur des ports arbitraires, par exemple le port 80
  • L’on peut exécuter du code à l’initialisation d’une instance

Par ailleurs, l’on offre en plus:

  • Une librairie client Java pour accéder au storage (merci à Soyatec, société française qui a participé à ce projet)
  • Un “solution accelerator” pour Apache Tomcat, c.à.d. une base de code permettant d’initialiser et d’exécuter Tomcat
  • Des outils pour Eclipse (encore un travail de Soyatec!)

Pour illustrer le modèle d’exécution de Windows Azure, Steve propose cette analogie:

  • On va tourner sous Windows
  • Sous un compte non-administrateur
  • Avec une clef USB sur laquelle on a l’application

Si une application tourne de cette façon, elle pourra tourner dans Windows Azure.

Dans le cas de Tomcat, on est proche de cette configuration, mais il y a quelques points à régler que l’on verra plus tard.

Au niveau stockage, l’on va utiliser Windows Azure Storage (pas SQL Azure dans cet exemple, mais cela serait bien sûr possible).

Steve va illustrer l’utilisation du SDK Windows Azure pour Java, dans Eclipse, pour développer la petite application.

On a référencé org.soyatec.windows.azure.java_xxx.jar dans Eclipse, ainsi que les imports qui vont avec.

L’appli est une simple Servlet avec une méthode doGet() qui affiche un “hello world”. L’appli tourne dans Tomcat en local avec un environnement Java classique.

On utilise simplement l’API fournie par Soyatec pour accéder au Windows Storage, en passant les paramètres habituels comparables à ce que l’on trouve dans l’API .NET. Steve utilise un Blob “count.txt” pour stocker le compteur.

Le code Java

A ce niveau, l’on a déjà illustré la possibilité d’accéder facilement au Windows Azure Storage depuis un client Java!

Comment exécuter Tomcat dans Windows Azure? L’accélérateur a été créé par Infosys.

  • Copier Tomcat dans le système de fichiers local
  • Configurer Tomcat pour écouter sur le bon port: il faut reconfigurer Tomcat pour écouter sur le port alloué à l’instance
  • Il faut démarrer Tomcat
  • Surveillance et remontée d’incidents

Steve va montrer comment utiliser les commandes fournies par l’accélérateur:

  • buildme.cmd pour copier les bits et assembler le touit
  • runme.cmd pour ecxécuter en local
  • packme.cmd pour packager et préparer le déploiement proprement dit

buildme.cmd demande où se trouve les binaires de Tomcat et copie l’ensemble des fichiers. Il demande ensuite où se trouve le JRE. L’on peut choisir librement la version de Tomcat ou du JRE.

runme.cmd package alors l’ensemble puis le lance dans l’environnement de développement Azure. L’on peut alors exécuter l’application sous Tomcat localement, mais dans l’environnement Windows Azure.

packme.cmd crée le .cspkg qui pourra être déployé directement dans Windows Azure.

On utilise alors la console Web Windows Azure de façon classique pour envoyer les fichiers .cspkg et .cscfg et l’on déploie l’application.

Steve décrit alors les problèmes de concurrence qui peuvent se produire quand plusieurs instances essaie d’accéder au même Blob en même temps.

Une possibilité: utiliser un système asynchrone afin de traiter les écritures de façon contrôlée et éviter les problèmes de concurrence.

On va utiliser une file d’attente (Queue) pour traiter les incrémentations, qui seront effectuées par une instance dédiée exécutée par un Worker. C’est un modèle classique pour le traitement de travaux dans le cadre d’applications Web, e.g. du type sites de partage de photos qui calculent des vignettes, etc.

Un Worker Role est basiquement une machine virtuelle qui exécute une DLL .NET avec les points d’entrée OnStart(), Run(), OnStop(). Un Worker s’exécute pour toujours (on ne revient pas de l’appel à Run()).

Steve montre son Worker qui est une classe Java classique avec un point d’entrée de type main(). C’est cette application qui va tourner en tâche de fond, lire la file d’attente et exécuter les incrémentations dans le Blob. L’on utilise là aussi l’API Java créée par Soyatec. Les message sont vides, c’est juste une notification que l’on doit faire +1.

Le Worker va utiliser un bout de code .NET qui va faire un Process.Start() pour exécuter le JRE et exécuter la classe Java. On copie directement le JRE complet dans le projet avant de packager et déployer la solution.

Le package complet est très volumineux, une solution serait de copier les dépendances (JRE, Tomcat) dans des Blobs. C’est comme ça que fait également WordPress.

Steve revient sur le témoignage de Domino’s Pizza qui a migré son application Web Java dans Windows Azure.

L’on pourrait aussi bien accéder à SQL Azure depuis l’environnement Java, mais ce n’est pas illustré dans la session de Steve. Une bonne idée de démonstration que je garde en tête!

Où trouver les éléments? Ici: http://windowsazure.com/interoperability/

Une session présentée par Manuvir Das à la PDC09. Manuvir s’occupe des outils destinés aux développeurs Windows Azure comme les SDK ou les outils pour Visual Studio.

Il y eu énormément d’annonces lors de la keynote de ce matin, cette session est donc l’occasion de revenir plus en détail sur l’état de Windows Azure spécifiquement et de ses évolutions à venir.

Windows Azure est un système d’exploitation pour le Cloud: des milliers de serveurs permettant d’exécuter vos applications, ainsi que les outils de gestion associés et des solutions de stockage. Les principaux éléments sont:

  • Le “business portal” permet d’acheter les services
  • Le “developer portal” permet de créer les services, etc.
  • Le “Service Management Service” exécute les ordres tels que créer une nouvelle instance, etc. et est exposé via REST
  • Les “storage clusters” offrent le stockage et sont exposés via REST
  • Le “compute cluster” exécute des machines virtuelles exécutant votre code
  • Les outils pour les développeurs

Evolution de la plateforme

Au départ: deux rôles (Web + Worker), communicant par les Queues, partial trust ASP.NET/.NET. Le staging fonctionne par “VIP swap”. L’OS est maintenu à jour automatiquement.

On a commencé par consolider l’infrastructure et les data centers. Ensuite, on va allouer et déployer des images virtuelles de façon automatisée, y compris la configuration des équipements réseau, etc. Un contrôleur alloue les ressources en fonction de la demande. Un modèle de service permet de décrire les besoins des applications.

Puis l’on a développé le système de stockage: un référentiel de données répliquées (3 replica) puis un système de partitionnement automatique permettant de répartir la charge sur plusieurs serveurs, dynamiquement.

Tout cela existait dès le lancement de la CTP en 2008.

L’on a ensuite construit la plateforme de développement: les outils, le modèle de développement, la gestion des services, puis une série d’abstractions au-dessus du modèle de stockage: Tables, Blobs, Queues.

C’est cette deuxième partie qui a beaucoup évolué depuis la CTP.

  • La CTP était donc une “crédible introduction au cloud” qui a permis de valider les fonctionnalités avec de nombreuses applications écrites par partenaires et clients.
  • La plateforme sera lancée en janvier en production, prête à accueillir des applications métier critiques.
  • Dans le futur, l’on va étendre la plateforme vers des scénarios ISV & Entreprise plus larges.

Dans les prochaines semaines, la CTP continue avec l’ensemble des fonctionnalités. Le lancement est en Janvier et devient payant en Février.

Visite guidée

Le modèle de développement a été conçu pour être familier, tout en encourageant les meilleures pratiques pour le Cloud. Exemple: le système de diagnostics, API standard mais implémentation spécifique dans Azure.

  • Un service qui définit une frontière d’isolation
    • des rôles, avec des endpoints
      • un certain nombre d’instances de chaque rôle
  • Web Role: un rôle tourne dans une VM. Dans un Web Role, IIS est pré-installé.
  • Worker Role: un rôle vierge qui peut exécuter tout type de code, qui peut également avoir des endpoints (écouter sur des ports)

Un service est accessible via une VIP (adresse IP virtuelle) load-balancée sur des endpoints configurables. Une API de service permet de gérer les IP et les ports.

Une API autorise la communication inter-rôles par TCP. Le dernier SDK inclut ces fonctionnalités.

Manuvir démontre l’API IPEndPoint. Elle est illustrée dans l’exemple HelloFabric, présent dans le SDK.

Manuvir démontre ensuite les notifications dans l’API de runtime: RoleEnvironment.Changed permet de définir le callback à appeler en cas de changement dans l’environnement (e.g. une instance est démarrée ou arrêtée).

Ce qui a évolué

  • support de Full Trust
  • ajout d’un dépôt de certificats
  • système de logging et de diagnostics

Manuvir montre l’API de logging: Trace.WriteLine() + configuration dans web.config (générée automatiquement par Visual Studio).

Ce qui vient:

  • plus de contrôle sur les machines virtuelles pour migrer des applications plus facilement dans le Cloud
  • accès distant à la VM

Ce qui a évolué sur la partie Storage:

  • “Drives” qui ne sera réellement disponible qu’en février
    • Via un accès NTFS standard on interagit avec des données stockées dans le Cloud

Le futur sur la partie Storage:

  • géo-réplication commandée par l’utilisateur
  • index secondaires sur les Tables

Ce qui a évolué sur la partie Service Management:

  • l’API permet de gérer dynamiquement l’infrastructure, e.g. prendre des décisions type lancer plus d’instances, etc.
  • “in-place rolling upgrade”: comment mettre à jour un service sans l’arrêter; les “update domain” permettent de diviser son infrastructure en morceaux qui seront mis à jour en séquence sans interruption
    • on a toujours également le “VIP swap”

Manuvir revient sur la callback appelée suite à une notification; Windows Azure appelle les callbacks update domain par update domain. Ici, l’instance sera réinitialisée.

C’est une fonctionnalité clé de Windows Azure: les modifications d’environnements sont prises en compte de façon contrôlée via les update domains. C’est une meilleure pratique pour la gestion d’applications dans le Cloud.

Manuvir détaille alors un témoignage de Coca Cola Enterprises: une plateforme Extranet permettant à des clients professionnels de Coca Cola de passer des commandes. Le portail permet de passer des commandes et communique avec la plateforme interne.

J’ai utilisé Twitter pour prendre des notes lors de cette keynote très riche en annonces! Voici donc un résumé de mon activité Twitter, en attendant des analyses “à froid” dans les jours qui viennent…

  • Just received the pre-PDC memo from Ray Ozzie in my inbox. Get ready! #pdc09
  • The #pdc09 Virtual Pressroom is online: http://www.microsoft.com/pr...
  • RT @codordog: BizSparkCamp, World premiere in Paris with @Scottgu, @lokad @jsenior http://bit.ly/4jc5D8
  • Premier BizSparkCamp à Paris le 8/12 avec Scott Guthrie, thème developpement Web & Azure, retour d'expérience par Lokad http://bit.ly/1Y8Bht
  • http://microsoftpdc.com/ #pdc09 you might want to have a look :-)
  • RT @loic: oh there is going to be some action here in 30 mins
  • "three screens & a cloud"
  • today = backend, tomorrow = experience, next spring = Windows Live & Windows Phone at Mix10
  • tomorrow Steven Sinofsky on Windows & IE!
  • Loïc le Meur sur scène!
  • @loic Présente son prototype de Seesmic en Silverlight!
  • @loic annonce Seesmic pour Windows
  • @loic démontre la gestion de listes et la géo-localisation dans Seesmic pour Windows
  • @loic Seesmic pour Windows sera extensible par plugins
  • Ray: oui, on peut développer en PHP & MySQL dans Windows Azure
  • Windows Azure sera officiellement en production le 1er janvier
  • Java apps running on Tomcat in Windows Azure!
  • L'on va pouvoir déployer des applications Java sous Tomcat dans Windows Azure!
  • Un véritable conteneur de datacenter Azure à visiter ici
  • Wow, Ray annonce WordPress sur scène
  • Matt Mullenweg de Automattic / WordPress sur scène! #pdc09
  • Matt annonce Apache, PHP MySQL dans Windows Azure
  • WordPress tourne dans Windows Azure
  • Matt démontre la gestion dynamique d'instances avec un rôle Web Apache
  • I CAN HAZ CHEESEBURGER
  • http://oddlyspecific.com/ sous Windows Azure & SQL Azure
  • plugin WordPress pour Azure Storage!
  • Ray annonce Microsoft Pinpoint
  • Pinpoint catalogue/place de marché pour les plateformes cloud de Microsoft (Azure, MS Online)
  • Microsoft nom de code "Dallas" une place de marché pour données
  • Données Dallas importées directement dans PowerPivot pour analyse
  • 3D glasses time!
  • "lorsque l'on libère les données, une vague d'innovations apparaît"
  • NASA démocratise les données avec Microsoft http://beamartian.jpl.nasa.gov
  • Big iPhone on screen at #pdc09 ;-)
  • Bob Muglia sur scène
  • présente l'architecture de Bing fondée sur la plateforme "Auto Pilot"
  • le Cloud est la cinquième génération de modèle applicatif après Mainframe, Client-Server, Web, SOA
  • #pdc09 most popular Twitter topic right now http://twitter.com/
  • Tiens une appli CGI en C++ dans Windows Azure ... Les 90's sont de retour!
  • Wow ça me rappelle mes premières applis CGI sous Unix
  • énorme l'assembleur x86 en ligne dans l'appli CGI en C++
  • ils vont vraiment déployer ça dans le cloud? :-)
  • Don Box & Chris Anderson au top
  • connection directe à SQL Azure avec SQL Server Management Studio 2008 R2 CTP
  • allez un petit coup de T-SQL en direct dans le cloud
  • superbe chemise à fleurs de Chris Anderson
  • Kelly Blue Book: la même application ASP.NET tourne dans leur DC principal, et dans Windows Azure pour la montée en charge
  • SQL Azure Data Sync permet de synchroniser la base principale et la base SQL Azure
  • #pdc09 "Project Sydney" connecte l'infrastructure cloud avec l'infrastructure interne via IPSec
  • et l'année prochaine: nouveau rôle de type "machine virtuelle"
  • RT @PDC09: Get the bits online! http://microsoftpdc.com/Wha...
  • #pdc09 Bob Muglia déploie son appli dans Windows Azure via PowerShell
  • Windows Azure Platform availability http://bit.ly/2MCXJ8

 

Lorsqu’on utilise le Table Storage pour stocker et accéder à des données, l’on a souvent besoin de manipuler les tables, comme par exemple les détruire, les recréer, etc. Comme j’en avais assez de faire des petits bouts de code sous Visual Studio pour ces opérations triviales, voici les quelques lignes de PowerShell qui me permettent maintenant de le faire en mode interactif:

Add-Type -Path 'C:\Program Files\Windows Azure SDK\v1.0\ref\Microsoft.WindowsAzure.StorageClient.dll’
$creds = New-Object Microsoft.WindowsAzure.StorageClient.StorageCredentialsAccountAndKey("devstoreaccount1", "Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==")
$tableClient = New-Object Microsoft.WindowsAzure.StorageClient.CloudTableClient("http://127.0.0.1:10002/devstoreaccount1", $creds)

Une fois que j’ai mon tableClient, je peux directement saisir des commandes comme:

$tableClient.DeleteTable("Tweets")

Histoire de se mettre dans l’ambiance, imaginez que la totalité du centre de conférences est garni d’énormes bannières de publicité pour Windows Azure, SQL Azure et les .NET Services… Attendez-vous dès aujourd’hui à des retours du workshop Architecting and Developing for Windows Azure de Chris Auld, suivi (entre autes!) par Benjamin Roux!

Pub Windows Azure #pdc09

Pub SQL Azure #pdc09

Juste à temps pour la PDC! Voici une version mise à jour du SDK Windows Azure ainsi que des Outils Windows Azure pour Visual Studio (2008 et 2010 Beta2). Vous les trouverez en téléchargement à ces emplacements:

Nous aurons le temps de revenir sur ces nouvelles versions dans le courant de la semaine prochaine.

PDC09Bling_BeforeAfter_136 Et oui, fraîchement arrivé dans mon rôle d’architecte, j’ai le plaisir et le privilège de partir pour Los Angeles assister à la Microsoft Professional Developers Conference 2009, alias la PDC09! Je ferai donc de mon mieux pour participer à la couverture de cet évènement en partageant avec vous les annonces de cette édition.

Voyons tout d’abord l’ensemble des moyens à votre disposition pour suivre en quasi-direct cet évènement:

Ensuite, si vous souhaitez suivre mes pérégrinations, ce blog est bien entendu une bonne source, ainsi que mes autres avatars sur la toile:

J’essaierai de poster ici un résumé de mes tweets, étant donné que Twitter est tout de même le meilleur moyen pour couvrir un évènement en “temps réel”!

Enfin, si vous aviez un doute sur le contenu exact d’une PDC, examinez le nuage de tags généré à l’aide de l’excellent Wordle, à partir d’une concaténation des titres des sessions (obtenus via la version Excel, disponible dans la section “Schedule”)… Mais oui, on est bien sur un évènement Microsoft, on va parler de construire des applications Windows, en .NET, et notamment dans Azure :-)

A très bientôt!

Wordle: Microsoft PDC09 Tag Cloud

N.B.: un volontaire pour porter Wordle en Silverlight?!

Comme indiqué dans un court billet sur le blog de l’équipe SQL Azure, la CTP Novembre de SQL Server 2008 R2 inclut une version de SQL Server Management Studio supportée pour gérer SQL Azure. Vous le trouverez dans le package complet de 2008 R2 disponible en téléchargement, ou vous pouvez télécharger directement une version 32bit ou 64bit.

Cette version est complètement supportée pour SQL Azure, donc fini les désagréments du type passer par “New Query” pour se connecter…

image

Encore un sujet qui sera amplement présenté à la PDC09!

L’heure de la PDC 2009 approchant à grand pas, les annonces se multiplient autour de la plateforme Windows Azure; voici donc un petit résumé des actualités de ces dernières semaines, qui furent riche en annonces. L’ensemble de ces points sera détaillé lors de la PDC, donc restez à l’écoute!

Accès aux Blobs Windows Azure via des noms de domaines personnalisés

Jusqu’à aujourd’hui, l’accès aux Blobs se faisait via des noms de domaines du type:

http://<account>.blob.core.windows.net/<container>/<blobname>

Ce qui signifie que ces URL apparaissaient par exemple dans votre code source HTML si vous stockiez des images ou autres contenus dans des conteneurs de Blobs Windows Azure. Grâce aux noms de domaines personnalisés, vous obtiendrez des URL du type:

http://images.mondomaineamoi.com/<container>/<blobname>

Ce qui est, vous l’avouerez, nettement plus discret et esthétique! Vous pourrez configurer votre nom de domaine personnalisé directement dans le portail Windows Azure, au niveau de votre Storage Account, après être passé par l’inévitable étape de vérification (vous aurez à créer un CNAME dans le domaine déclaré, afin de vérifier que vous êtes bien propriétaire de ce domaine).

Lancement du Content Delivery Network (CDN) Windows Azure

Le but d’un CDN est d’optimiser le temps de chargement de vos contenus statiques (images par exemple) en les rapprochant au maximum de l’internaute en termes de “distance réseau”. Le CDN Windows Azure vous permet de répliquer et de mettre en cache automatiquement vos contenus, stockés sous forme de Blobs, dans les 18 emplacements activés aujourd’hui dans le monde. Pour bénéficier du CDN, il vous suffit d’activer la nouvelle option disponible au niveau de votre Storage Account. Bien entendu, il est là aussi possible de choisir un nom de domaine personnalisé pour “masquer” les URL Windows Azure.

Disponibilité de la CTP Novembre 2009 des .NET Services

Cette nouvelle CTP des .NET Services (Access Control Service et Service Bus) met à dispositions des évolutions majeures en vue du lancement à la PDC09; notamment, le recentrage d’Access Control Service sur des interfaces de style REST, ainsi que des réaménagements significatifs de l’API du Service Bus.

Développement PHP et Java pour Windows Azure, intégration avec Eclipse

Microsoft a annoncé à la dernière édition de l’Eclipse Summit Europe 2009, qui s’est tenu en Allemagne du 27 au 29 octobre, le lancement en partenariat avec la société française Soyatec de deux extensions Eclipse spécialement dédiées au développement en environnement Windows Azure:

  • Windows Azure Tools for Eclipse for PHP developers: www.windowsazure4e.org
  • Windows Azure Software Developer Kit (SDK) for Java: www.windowsazure4j.org
    • Un SDK Java permettant à des appplications client ou serveur développées en Java d’accéder aux services de la plateforme Windows Azure, et notamment la partie Storage (Tables, Blobs et Queues).

Fermeture du centre d’hébergement “USA – Northwest”

Enfin, pour les personnes qui testaient Windows Azure depuis déjà plusieurs mois, l’annonce suivanta datant d’Août dernier a pu être un peu “oubliée”: le centre d’hébergement “USA – Northwest” a été fermé, et il faut donc redéployer vos applications, si elles tournaient dans ce centre. Vous pouvez re-créer un service d’hébergement avec le même URL que vous utilisiez au départ; vous pouvez vous reporter à cette discussion dans les forums Windows Azure si vous avez des questions additionnelles sur la réutilisation de votre URL d’origine.

Pour démarrer sur le thème Interopérabilité, Microsoft a annoncé aujourd’hui l’acquisition des technologies Teamprise auprès de SourceGear, propriétaire de ces composants.

Les composants Teamprise permettent aux développeurs en environnement Java, qu’ils utilisent Windows, Linux ou Mac OS, d’utiliser un serveur TFS (Team Foundation Server) pour gérer le cycle de développement de leurs applications, comme par exemple le contrôle de code source, la gestion de versions, l’intégration continue, le suivi des tâches, etc.

Concrètement, les solutions TeamPrise prennent les formes suivantes:

  • Teamprise Plugin pour Eclipse permet d’accéder à TFS depuis Eclipse et autres environnements basés sur Eclipse (Rational Application Developer, BEA Workshop, JBoss Tools, …)
  • Teamprise Explorer, une application indépendante, permet d’accéder à TFS pour les populations non-développeurs, comme les graphistes, chefs de projets, etc.
  • Teamprise Ligne de Commande, un environnement multiplateforme, permet de construire des scripts pour l’automatisation de tâches ou simplement pour les développeurs préférant la ligne de commande!

C’est évidemment une excellente nouvelle pour toutes les organisations qui cherchaient à centraliser l’ensemble de leurs développements dans un environnement unique de type ALM (Application Lifecycle Management) quel que soit l’environnement de développement, .NET ou Java.

Les technologies Teamprise seront incluses dans la prochaine version de Visual Studio, Visual Studio 2010, en Beta 2 à l’heure où j’écris ce billet, et qui sera disponible en mars 2010.

Pour plus de détails (en anglais), voir le communiqué de presse et le billet sur le blog de Martin Woodward, ex-Teamprise et maintenant Program Manager chez Microsoft!

More Posts Next page »
 
Page view tracker