Systèmes client/ serveur – quelques liens pertinents

Quelques raccourcis :

Dans une optique connexe, certains concepts du monde client/ serveur sont maintenant plus associés au monde du développement Web, ce qui a mené à une réorganisation de la présente page. Ainsi, vous voudrez peut-être en savoir plus sur :

Vous trouverez ici quelques liens portant sur les systèmes client/ serveur (SCS) et les technologies associées à ce thème. Si vous découvrez d'autres liens dignes d'intérêt, faites-m'en part!

Quelques organismes de standardisation importants :

Interopérabilité

L'interopérabilité entre diverses plateformes est un problème à la fois complexe et de la plus haute importance. Si les cours offerts dans les institutions d'enseignement supérieur couvrent les stratégies et problématiques générales d'interopérabilité, de même que certains cas particuliers, il est inévitable que des problèmes pointus surviennent en cherchant à intégrer deux technologies spécifiques entre elles.

D'autres approches pour faire intéropérer divers langages de programmation sont présentées dans Comparatifs-Langages-programmation--Liens.html

Modalités générales

À propos des interactions synchrones (sens faible) et asynchrones pour des rappels (Callbacks) : http://blog.ometer.com/2011/07/24/callbacks-synchronous-and-asynchronous/

Étude relativement détaillée des difficultés inhérentes à l'interopérabilité entre les langages, par David Chisnall en 2013 : http://queue.acm.org/detail.cfm?id=2543971

Réaliser le réordonnancement des bytes dans un entier, selon Rob Pike en 2012 : http://commandcenter.blogspot.it/2012/04/byte-order-fallacy.html?m=1

Intégrer .NET avec COM ou Win32

Même entre deux technologies provenant d'une même entreprise, les problèmes d'interopérabilité potentiels sont nombreux et sont susceptibles d'être épineux.

Articles du Code Project sur l'interopérabilité entre .NET et COM (comme tout ce qui vient de ce site, la qualité varie beaucoup) :

Intégrer .NET avec CORBA

Bien que CORBA ait développé une mauvaise réputation dans certains cercles (plusieurs disent cette mécanique lente et complexe, mais – comme c'est souvent le cas – une partie de la critique tient du produit et une autre partie relève de l'usage qui en est fait), cet intergiciel demeure très présent dans certains cercles et savoir interfacer avec lui peut être précieux.

Pour un produit à code ouvert pour intégrer CORBA dans une relation de Remoting avec un homologue .NET, voir http://sourceforge.net/projects/remoting-corba/ ou encore http://www.dotnetguru.org/articles/articlets/iiopchannel/iiopremoting.htm pour un article sur cette technologie.

Intégrer Java avec du code natif

Parfois, il faut sortir du carré de sable défini par Java et interagir avec le monde extérieur d'une manière que les conceptrices et les concepteurs de cette plateforme n'ont pas prévu.

Pour un article du Code Project expliquant une manière pour un programme Java d'exploiter un composant C++ sous Win32, voir http://www.codeproject.com/KB/DLL/JNITest.aspx

À propos de JNI, le Java Native Interface :

Déboguer du code C++ à partir d'une application Java, un texte du Code Project par Gregory Shpitalnik en 2009 : http://www.codeproject.com/KB/debug/java_cpp_debugging.aspx

Intégrer Java avec .NET

Intégrer C++ avec CORBA

Exemple pas à pas du Code Project, par Carlos Jiménez de Parga en 2009 : http://www.codeproject.com/KB/IP/corba.aspx

Explication du RMI de CORBA pour C++, article du Code Project par Jarl Lindrud en 2009 : http://www.codeproject.com/KB/threads/RMI_For_Cpp.aspx

Intégrer C++ avec le monde pris en charge

Intégrer des langages de programmation et des outils Microsoft Office

Pour un lien montrant comment contrôler une feuille Excel à partir d'un programme C++, vous pouvez examiner http://www.codeproject.com/KB/wtl/WTLExcel.aspx ou http://www.codeproject.com/KB/COM/VOLE_word.aspx

Deux liens pris chez Microsoft pour faciliter l'interaction entre C++ et Excel (pas du très beau code, cela dit, alors ne vous gênez pas pour nettoyer le tout) : http://support.microsoft.com/kb/196776 et http://support.microsoft.com/kb/216686

Interopérabilité entre Office et C# :

Dans ce texte de 2013, Ric da Paz suggère d'utiliser Ruby plutôt que Visual Basic .NET pour réaliser ce type d'interopérabilité : http://www.dapaz.net/blog/blog/2013/01/21/ms-office-and-ruby/

Automatiser Microsoft Office avec Python, texte de 2013 : http://nbviewer.ipython.org/urls/raw.github.com/sanand0/ipython-notebooks/master/Office.ipynb

À propos des contrôles OLE et ActiveX

Si l'idée vous prend de développer des contrôles OLE ou ActiveX, je vous invite à prendre connaissance des règles et recommandations à ce sujet : http://msdn.microsoft.com/en-us/library/ms974303.aspx

Autres

Comparatif des approches SOAP et ICE, d'un point de vue favorable à ICE : http://www.zeroc.com/iceVsSoap.html

Comment profiter au maximum de SWIG, le Simple Wrapper and Interface Generator, texte de 2015 : https://www.softwariness.com/articles/api-design-for-swig/

Nommage

Dans le monde des services répartis, on trouve plusieurs approches au nommage unique des ressources (des objets, des entités, des services, etc.). Certaines sont universelles, d'autres sont associées de plus près au monde du Web, comme par exemples les URI (URL, URN).

Texte de Zack Bloom en 2014 à propos de la longueur minimale d'un identifiant se voulant unique au monde : https://eager.io/blog/how-long-does-an-id-need-to-be/?r

Selon les contextes, on verra des synonymes pour UUID, comme IID (Interface Identifier), RIID (Reference to IID), REFIID (Constant RIID), LIBID (Library Identifier), GUID (Globally Unique Identifier), CLSID (Class Identifier), APPID (Application Identifier), et j'en oublie peut-être. On parle dans chaque cas d'entités ayant le même rôle – identifier un objet de manière unique au monde – et ayant la même structure interne

À propos des UUID, ou Universally Unique Identifier, aussi nommés GUID à l'occasion (pour Globally Unique Identifiers) :

Modèle RPC

Le modèle RPC préconise de représenter les messages transitant entre deux homologues par des appels de fonctions. Typiquement, l'appelant de la fonction sera le consommateur du service (le client, dans la majorité des cas) et l'appelé sera le fournisseur du service (le serveur, habituellement).

Pour isoler les deux homologues dans cette relation des détails du réseau qui les lie, on appliquera souvent le schéma de conception Intermédiaire (Proxy) par lequel un objet côté client exposera l'interface du serveur en se faisant passer pour ce dernier, et un objet côté serveur se comporte comme le client. Ces deux entités tierces (les intermédiaires) implémenteront le service par un échange de messages, à l'insu des homologues « réels ».

Il existe plusieurs implémentations de ce modèle, mais il est tombé quelque peu en défaveur dans les années 2000 avec l'avènement du modèle REST.

Protocoles

Quelques considérations générales :

Quelques protocoles RPC bien connus suivent.

DCE/RPC

Protocole sous-jacent entre autres au modèle DCOM. Pour plus de détails, voir http://en.wikipedia.org/wiki/DCE/RPC

Java RMI

Pour quelques détails, voir http://en.wikipedia.org/wiki/Java_RMI

Un guide en ligne pour apprivoiser cette technologie : http://docs.oracle.com/javase/tutorial/rmi/

Site officiel de la technologie : http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136424.html

Un exemple simple, par Takashi Yamanoue : http://yama-linux.cc.kagoshima-u.ac.jp/~yamanoue/researches/java/rmi-ex2/

Pour réaliser Java RMI à travers une couche de transport IIOP :

IIOP

Voir http://en.wikipedia.org/wiki/General_Inter-ORB_Protocol pour débuter vos lectures. Aussi, voir :

NFS

Voir http://en.wikipedia.org/wiki/NFS_protocol pour des détails.

RPC/XDR

Le format XDR est décrit sur http://en.wikipedia.org/wiki/External_Data_Representation

Architectures orientées services (AOS, en anglais Service-Oriented Architectures, ou SOA)

Le Wiki sur les SOA est disponible sur http://en.wikipedia.org/wiki/Service-Oriented_Architecture (pour une brève – et moins complète – définition, voir http://www.service-architecture.com/web-services/articles/service-oriented_architecture_soa_definition.html). Un petit article associant SOA et faible couplage est disponible sur http://webservices.xml.com/pub/a/ws/2003/09/30/soa.html. Vous trouverez aussi plusieurs liens sur la SOA à travers http://wiki.java.net/bin/view/Javapedia/ServiceOrientedArchitecture

Le SOA Consortium, http://www.soa-consortium.org/, vise entre autres à identifier ce qui fait que des projets SOA ont ou non du succès, de manière à faciliter le succès de nouvelles entreprises en ce sens.

Articles divers sur le sujet :

Technologies dans le secteur intergiciel (Middleware)

Il existe plusieurs technologies dans le secteur intergiciel, en anglais Middleware. Voici quelques-unes des principales dans le lot.

CORBA

Le Common Object Request Broker Architecture est une technologie de composants répartis bien connue et multiplateforme. Elle a la réputation d'être un peu inefficace, sans doute en partie dû au fait qu'elle ratisse plus large que bien des concurrents.

Le nommage de CORBA se fait à l'aide d'IOR, pour Interoperable Object References. Là où un UUID représente un gros entier, une IOR est une longue chaîne de caractères. Des utilitaires sont disponibles pour générer des IOR, similaires à ceux qui permettent de générer des UUID.

Caractéristiques
  • Gestion des erreurs : par levée d'exceptions
  • Interfaces : CORBA IDL
  • Langages : plusieurs, surtout OO
  • Médiation : objets servant de courtiers de requêtes
  • Nommage : IOR
  • Plateformes : plusieurs
  • Protocole sous-jacent : IIOP

COM

Se décline en plusieurs standards, à partir de DDE (Dynamic Data Exchange, si vieux que mes étudiant(e)s n'en ont souvent jamais entendu parler!), puis d'OLE (Object Linking and Embedding) à COM (Component Object Model) à DCOM (Distributed COM) à COM+.

Caractéristiques
  • Gestion des erreurs : par retour de codes d'erreurs
  • Interfaces : MIDL
  • Langages : plusieurs, de langages OO au langage C
  • Médiation : base de registre, fabriques
  • Nommage : UUID
  • Plateformes : surtout Microsoft Windows, avec quelques implémentations Linux et une version par Mozilla
  • Protocole sous-jacent : DCE/RPC

Pédagogie :

Technique :

Résurgence :

EJB

Les Beans de Java sont des composants côté serveur implémentant typiquement des éléments de logique métier, de persistance, d'intégrité transactionnelle, de sécurité, etc.

Caractéristiques
  • Gestion des erreurs : par levée d'exceptions
  • Interfaces : Java, CORBA IDL, WSDL
  • Langages : Java et d'autres langages prévus pour la JVM
  • Médiation : base de registre, fabriques
  • Nommage : JNDI
  • Plateformes : plusieurs, selon la disponibilité d'une JVM
  • Protocole sous-jacent : Java RMI

ICE

Le Internet Communications Engine est un moteur « indépendant », livré sous licence GPL, pour réaliser des systèmes faits de composants répartis.

Site officiel : http://www.zeroc.com/ice.html

Comparatif entre ICE et CORBA (d'un point de vue pro-ICE) : http://www.zeroc.com/iceVsCorba.html

Article de Michi Henning décrivant cette technologie, en 2004 : http://www.zeroc.com/documents/ieee.pdf

Caractéristiques
  • Gestion des erreurs : par levée d'exceptions
  • Interfaces : Slice
  • Langages : plusieurs langages OO
  • Médiation : base de registre, fabriques
  • Nommage : URL
  • Plateformes : plusieurs, incluant des plateformes mobiles
  • Protocole sous-jacent : plusieurs

OSGi

Infos à venir.

.NET

Théorème CAP

En 2000, Eric Allen Brewer, dans une présentation nommée Towards Robust Distributed Systems, a mis de l'avant que, pour un système réparti où des données sont partagées, on ne peut avoir que deux des trois propriétés suivantes :

Cette conjecture, que l'on nomme maintenant théorème CAP dû aux lettres qui débutent chacun des mots clés qu'il met de l'avant, semble tenir la route en pratique. Il a été prouvé par Seth Gilbert et Nancy Lynch (voir ci-dessous) et a entre autres influencé le développement d'approches telles que la mouvance NoSQL, qui tendent vers ce qu'elles qualifient de « cohérence éventuelle » sans exiger que le système soit en tout temps cohérent.

Quelques pistes pour apprivoiser le théorème CAP :

Cohérence répartie :

Approche NoSQL

Quelques pistes pour apprivoiser l'approche NoSQL, plusieurs ayant un lien avec le théorème CAP :

Une particularité de plusieurs types de bases de données NoSQL est de ne pas garantir une cohérence (le « C » du théorème CAP) des données en tout temps – dans le monde NoSQL, on parle plutôt de cohérence éventuelle, au sens où même s'il y a réplication des données, il est possible que certains noeuds d'une telle base de données aient une version d'une donnée pendant que d'autres noeuds ont une autre version de la même donnée. Accepter cette réalité est un a priori du choix d'une approche NoSQL. À ce sujet :

Plus près des produits eux-mêmes (liste non-exhaustive) :

Évidemment, c'est un mouvement contesté :

Un livre pas mal sur le sujet.


Valid XHTML 1.0 Transitional

CSS Valide !