Programmation d’applications distribuées François Charoy Université Henri Poincaré 8 octobre 2007 Première partie I Développement d’applications distribuées Objectifs du cours I Comprendre ce qu’est une application distribuée. I Comprendre la problématique de leur développement. I Apprendre les bases de leur développement dans un environnement JEE I Apprendre à les concevoir Problème Construire des applications pour entreprises I Sures I Sécurisées I Distribuées I Supportant la montée en charge (scalable) I Disponibles I Favorisant la réutilisation I Maintenables et extensibles I Pour moins cher Quelles applications ? I Applications de commerce ou de trading I Applications bancaires I Call Centers I Applications d’assurances I Nombreuses sources d’informations potentielles I Interactions entre des systèmes hétérogènes I Grand nombre de transactions (high throughtput) I Evolutives Les questions à résoudre I Les invocations de méthodes : connection d’un client à un serveur et appels de méthodes distances I L’intégration avec le back-end : Il faut écrire du code pour accéder aux bases de données et aux systèmes d’information existant I Le cycle de vie des objets : La vie des objets (création, destruction) doit être gérée par le serveur I Les transactions : Que faire quand deux clients accèdent aux mêmes données. et si un client crash ? I L’audit et les traces : Si quelque chose se passe mal, comment peut on savoir ce qui s’est effectivement passé. I Le redéploiement : Comment mettre à jour une application quand le serveur est en production ? Les questions à résoudre (2) I Les arrêts du serveurs : Comment s’assurer d’un arrêt propre des serveurs quand c’est nécessaire ? I Les threads : Le serveur doit pouvoir gérer les requêtes de plusieurs clients simultanément I La gestion des messages : Certaines requêtes peuvent être envoyées sous forme de messages (faible couplage) I La transparence des défaillances/clustering : Si un serveur crash, les requêtes d’un client doivent être reroutées vers un autres serveurs. Quel temps d’indisponibilité est acceptable ? I L’équilibrage de la charge : les requêtes des clients doivent être dirigées vers le serveur le moins chargé. Les questions à résoudre (3) I La gestion des ressources : Le serveur doit permettre le partage des ressources entre les clients (connections aux bases de données, objets du serveur) I La sécurité : le serveur doit être à l’abri des accès interdits ou par des personnes n’ayant les autorisations nécessaires I La gestion des caches I Et encore plein d’autres trucs RAS Sureté (Reliability) Probabilité qu’un système fonctionne à t+1 s’il fonctionnait à l’instant t En clair, plus le système est fiable plus il est Sure Disponibilité (Availability) Pourcentage du temps pendant lequel un système est disponible S’exprime en nombre de 9 (99, 99,9 ... 99,999) Serviceability Facilité avec laquelle la maintenance corrective et préventive peut s’effectuer. Une plus grande serviceability améliore en général la disponibilité Passage à l’échelle Mon système marche quand je suis tout seul Marche-t-il encore pour 2 clients, 100 clients, 1000000 de clients Quel est le coût pour augmenter la charge acceptable par mon système Ajout de machines, Mise à jour des machines, Modification du code, Middleware ou intergiciel Definition In a distributed computing system, middleware is defined as the software layer that lies between the operating system and the applications on each site of the system. Le Middleware Composants ou systèmes permettant de rendre transparent les problèmes de distribution I Transparence de l’hétérogénéité I Transparence de la localisation des services I Transparence des appels de services I Transparence de la gestion de la persistence I Transparence de la gestion des transactions distribuées I Transparence de la sécurité I Transparence de la réplication des services Comment faire ? Utiliser un serveur d’application I Prise en charge des aspects middleware par un système spécialisé I Utiliser une architecture distribuée I Fournit une solution aux différents problèmes précédents Plusieurs tiers I Les clients (front end) I Les sources de données (back end) I Un ou plusieurs tiers entre eux pour I Implanter les nouveaux services I Intégrer les différentes sources de données I Masquer la complexité de l’entreprise aux clients Architecture Multi Tiers Architecture par Composants Un composant respecte des règles d’écriture pour pouvoir s’exécuter dans un container Par exemple : I Java Bean et la Bean Box I Servlet et un container de Servlet I EJB et un container d’EJB I Un CD dans un lecteur de compact disque Architecture orientée service (SOA) Un service ? I Un service est un ensemble de composants fournissant des fonctions métier de haut niveau I Les services sont autonomes (pas les composants) I Un service est toujours disponible I Les Web Services sont un moyen de fournir des services dans une architecture orientée service I Souvent un service est développé à partir de composants. Web Services Un moyen de mettre en oeuvre une SOA I XML technologies : SOAP, WSDL, WS-* I Protocole pour échanger des informations dans un réseau distribué - RPC, HTTP, SMTP... I WSDL Web Service Description Language. XML pour décrire l’interface des services I Neutralité par rapport aux langages et aux protocoles Réutilisabilité des services Composer des services I construire des services simples et réutilisables I composer les services avec un couplage faible I exemple : vérification de carte bancaire, authentification, transfer d’argent Les Service Bus (Brokering) Un ESB I Mediateur entre les services et les clients I Routeur pour les appels de services et pour les évênements I Décodeur, encodeur pour l’interopérabilité Objets distribués Un objet distribué est utilisable depuis un client distant I d’un autre processus, I d’un autre point du réseau Développement d’un objet distribué Prise en compte dans l’objet de son contexte d’exécution Middleware explicite Le développeur est chargé des appels aux services transversaux (transaction, sécurité) Prise en compte par l’environnement du contexte d’exécution Middleware implicite Contexte déclaratif C’est l’environnement qui se charge de tout (le container) Middleware Explicite 1 2 3 4 5 6 7 8 t r a n s f e r ( Acco unt a c c o u n t 1 , Account a c c o u n t 2 , l o n g amount ) { // 1 : C a l l m i d d l e w a r e API t o p e r f o r m a s e c u r i t y c h e c k // 2 : C a l l m i d d l e w a r e API t o s t a r t a t r a n s a c t i o n // 3 : C a l l m i d d l e w a r e API t o l o a d r o w s from t h e d a t a b a s e // 4 : S u b t r a c t t h e b a l a n c e from one a c c o u n t , add t o t h e o t h e r // 5 : C a l l m i d d l e w a r e API t o s t o r e r o w s I n t h e d a t a b a s e // 6 : C a l l m i d d l e w a r e API t o end t h e t r a n s a c t i o n } Middleware Implicite 1 2 3 t r a n s f e r ( Acco unt a c c o u n t 1 , Account a c c o u n t 2 , l o n g amount ) { // 1 : S u b t r a c t t h e b a l a n c e from one a c c o u n t , add t o t h e o t h e r } Les solutions existantes I .NET (implantation Microsoft) Windows NT + DCOM + MSMQ (message queue) + MTS (transactions) + Wolfpack (clustering) + IIS (web server)+ MMC (administration et déploiement) I Sun J2EE (spécification) I OMG Corba (specification) et les composants Corba. Deuxième partie II L’environnement J2EE J2EE Définit une architecture standard incluant I Un modèle de programmation (application multi-tiers, client légers) I Une plate-forme (ensemble de spécifications et de politiques requises) I Un ensemble de tests de compatibilité I Une implantation de référence I Des patrons de conceptions (blueprints) Architecture d’une appli J2EE La plateforme J2EE I EJB : définit la façon dont les composant doivent être écrit et le contrat qu’ils doivent respecter avec le serveur d’application I RMI : communication inter procédés I JNDI : service de nommage I JDBC : connection avec les bases de données I JTA : service de transaction I JCA : service de connection I JMS : service de messagerie I JSP : servlet et Java Server Page adapté à la construction de composant réseau I JSF : framework de construction d’interfaces et de controleur (V et C de MVC) La plateforme J2EE (suite) I Java IDL : permet l’intégration avec d’autres langages (en particulier à travers CORBA) I JavaMail I JAX-WS : java API pour les Web Services. I Web Services Metadata pour la plateforme Java. Facilite le développement et le déploiement de Web Services. I JAXP : Java API pour le parsing XML I JAXB : Java API for XML Binding (transformation de document XML en objets) JNDI Java naming and directory interface I Permet d’accéder à des systèmes de répertoires I Permet d’accéder à des services ou à des objets en connaissant uniquement un nom JDBC Java Database Connectivity I API pour accéder à des bases de données relationnelles I Driver pour la plupart des SGBD majeurs (oracle, sybase, mysql, mssql,...) I Permet de porter une application d’un SGBD à un autre JTA Java Transaction Service Interface standard de gestion de transactions JMS Java Messaging Service I Permet de faire communiquer des applications par envois de messages I Interface standard permettant l’accès à différents Message Oriented Middleware (IBM MQSeries, MSMQ) I Utile pour des interaction asynchrones Java Servlet I Utilisés pour étendre les fonctionnalités d’un serveur Web I Les servlets sont des composants exécutables dans un servlet container (Tomcat, Jetty) I Equivalent à des scripts CGI (Perl, sh) mais en Java JSP Java Server Pages I JSP scripts peuvent être inclus dans des pages Web I Scripts exécutés du coté serveurs (compilés sous forme de servlets) I Simplification de l’écriture de page Web I équivalent à PHP pour Java (hum...) JSF Java Server Faces I Framework pour le développement d’applis Web I Modèle de composants et API pour les développer I Tags spécialisés pour utiliser les composants dans une page JSP et les faire communiquer avec les objets serveur. I Modèle d’évênements adaptés à l’environnement Web Java IDL Implantation par Sun de l’interface CORBA Permet l’intéropérabilité avec des applications écrites dans d’autres langages Java Mail I Permet l’envoi de courrier électronique de façon indépendante de la plate-forme utilisée I Permet l’accès à des serveurs de mail selon différents protocoles (pop, imap) I Interface standardisée pour la gestion de boites aux lettres et de messages sous différents formats (gestion des multi part mime message avec JAF) J2EE CA Permet l’accès aux EIS depuis une plate-forme J2EE Une appli J2EE doit pouvoir interfacer les systèmes d’information existant (mainframe, ERP systems ou autres) JAAS Java Authentication and Authorization Service I Fournit des services d’authentification et de sécurité I Permet une spécification déclarative des moyens d’autorisation et de gestion des droits d’accès. JAX-WS Java API for WML Web Services I Permet l’appel de services web depuis un client Java I Mapping WSDL to Java et Java to WSDL I Binding SOAP et HTTP JAXB Java Architecture for XML Binding I Fournit les services permettant de lier des objets Java à leur représentation XML I transformation Java XML Java Les technologies Conclusion I J2EE est un framework complet I Ensemble de services pour applications distribuées I Compliqué à maitriser entièrement I Standard JEE 5 Autres Solutions I Utilisation de container générique I Composition de services middleware Solutions Spring Jboss AS Hibernate