Microsoft Research a publié le 9 septembre la version 3.3.0 d’Orleans, son framework multiplateforme destiné à la création d'applications distribuées robustes et évolutives. Selon l’auteur, Orleans s'appuie sur la productivité des développeurs .NET afin de l'introduire dans le monde des applications distribuées, telles que les services cloud. Il reprend des concepts familiers tels que les objets, les interfaces, async/await, try/catch... et les étend aux environnements multiserveurs. Pour cette raison, Orleans a souvent été désignée sous le nom de “Distributed .NET”.
Orleans est un outil développé par Microsoft Research (MR). Il a introduit le Virtual Actor Model comme une nouvelle approche pour construire une nouvelle génération de systèmes distribués pour l'ère du cloud. Selon MR, la principale contribution d'Orléans est son modèle de programmation qui apprivoise la complexité inhérente aux systèmes distribués hautement parallèles sans restreindre les capacités ni imposer de contraintes onéreuses au développeur. Voici quelques-unes de ces caractéristiques.
Grain : la composante fondamentale d’Orleans
La composante clé d’une application Orleans est un “grain”. Les grains sont des entités comprenant une identité, un comportement et un état définis par l'utilisateur. Les identités des grains sont des clés définies par l'utilisateur qui rendent les grains toujours disponibles pour l'invocation. Les grains peuvent être invoqués par d'autres grains ou par des clients externes tels que des sites Web, via des interfaces de communication fortement typées (contrats). Chaque grain est une instance d'une classe qui met en œuvre une ou plusieurs de ces interfaces.
En outre, les grains peuvent avoir un état volatil et/ou persistant qui peut être stocké dans n'importe quel système de stockage. En tant que tels, les grains partitionnent implicitement l'état des applications, ce qui permet une évolutivité automatique et simplifie la reprise après une panne. L'état des grains est conservé en mémoire pendant que le grain est actif, ce qui permet de réduire la latence et la charge des entrepôts de données. De plus, l'instanciation des grains est automatiquement effectuée à la demande du runtime d'Orleans.
Par ailleurs, les grains qui ne sont pas utilisés pendant un certain temps sont automatiquement retirés de la mémoire pour libérer des ressources. Ceci est possible grâce à leur identité stable, qui permet d'invoquer les grains qu'ils soient déjà chargés en mémoire ou non. Cela permet aussi une récupération transparente en cas d'échec, car l'appelant n'a pas besoin de savoir à tout moment sur quel serveur un grain est instancié. Les grains ont un cycle de vie géré, le runtime d'Orleans étant chargé d'activer/désactiver et de placer/localiser les grains selon les besoins.
Cela permet au développeur d'écrire du code comme si tous les grains étaient toujours en mémoire. Pris ensemble, l'identité stable, l'état et le cycle de vie géré des grains sont des facteurs essentiels qui rendent les systèmes construits sur Orleans évolutifs, performants et fiables sans forcer les développeurs à écrire un code complexe de systèmes distribués.
Le runtime d’Orleans
Selon la documentation de l’outil, le runtime d'Orleans met en œuvre le modèle de programmation des applications, dont la composante clé est le silo, qui est chargé d'accueillir les grains. En général, un groupe de silos fonctionne en cluster pour l'extensibilité et la tolérance aux pannes. Lorsqu'ils fonctionnent en grappe, les silos se coordonnent entre eux pour répartir le travail, détecter et récupérer les pannes. Le temps d'exécution permet aux grains hébergés dans le cluster de communiquer entre eux comme s'ils faisaient partie d'un seul et même processus.
Orleans et la persistance des données
Orleans fournit un modèle de persistance simple qui garantit que l'état est disponible pour un grain avant que les demandes soient traitées et que la cohérence est maintenue. Les grains peuvent avoir plusieurs objets de données persistants nommés, par exemple, un appelé “profil” pour le profil d'un utilisateur et un appelé “inventaire” pour leur inventaire. Cet état peut être stocké dans n'importe quel système de stockage. Par exemple, les données de profil peuvent être stockées dans une base de données et l'inventaire dans une autre. Lorsqu'un grain est en cours d'exécution, cet état est conservé en mémoire afin que les demandes de lecture puissent être servies sans accéder au stockage.
Lorsque le grain met à jour son état, un appel state.WriteStateAsync() permet de s'assurer que la mémoire de sauvegarde est mise à jour pour des raisons de durabilité et de cohérence. Pour plus d'informations, voir la documentation sur la persistance du grain.
Orleans et les transactions ACID distribuées
Selon MR, en plus du modèle simple de persistance décrit ci-dessus, les grains peuvent avoir un état transactionnel. Plusieurs grains peuvent participer ensemble à des transactions ACID, quel que soit l'endroit où leur état est finalement stocké. Les transactions Orleans sont distribuées et décentralisées (il n'y a pas de gestionnaire ou de coordinateur central des transactions) et ont une isolation sérialisable.
Minuterie et rappels
Les rappels sont un mécanisme de programmation durable pour les grains. Ils peuvent être utilisés pour s'assurer qu'une action est menée à bien à un moment ultérieur, même si le grain n'est pas encore activé à ce moment-là. Les minuteries sont la contrepartie non durable des rappels et peuvent être utilisées pour des événements à haute fréquence qui ne nécessitent pas de fiabilité.
Évolutivité élastique et tolérance aux fautes
Selon Microsoft Research, Orleans est conçue pour s'adapter de manière élastique. Lorsqu'un silo rejoint une grappe, il est capable d'accepter de nouvelles activations et lorsqu'un silo quitte la grappe (soit à cause d'une réduction d'échelle ou d'une panne de machine), les grains qui étaient activés sur ce silo seront réactivés sur les autres silos si nécessaire. Une grappe d’Orleans peut être réduite à un seul silo. Les mêmes propriétés qui permettent une extensibilité élastique permettent également la tolérance aux pannes : la grappe détecte automatiquement les pannes et se rétablit rapidement.
Orleans fonctionne n'importe où
Orléans fonctionne partout où .NET Core ou .NET Framework sont pris en charge. Cela inclut le déploiement sur Linux, Windows et macOS et le déploiement sur des plateformes Kubernetes, des machines virtuelles ou physiques, dans les locaux ou dans le nuage, et des services PaaS tels que les services Azure Cloud.
Filtres d'appel pour les grains
La logique commune à de nombreux grains peut être exprimée sous la forme de filtres d'appel de grains. Orleans prend en charge les filtres pour les appels entrants et sortants. Parmi les cas d'utilisation courants des filtres, on peut citer : l'autorisation, l'enregistrement et la télémétrie, et le traitement des erreurs.
Contexte de la demande
Les métadonnées et autres informations peuvent être transmises le long d'une série de demandes en utilisant le contexte de la demande. Le contexte de la demande peut être utilisé pour conserver des informations de traçage distribuées ou toute autre valeur définie par l'utilisateur.
Source : Orleans
Et vous ?
Qu'en pensez-vous ?
Voir aussi
Microsoft Research lance Bosque, un nouveau langage de programmation sans boucles et open source, inspiré par TypeScript
DeepCoder : l'IA développée par Microsoft Research capable de coder en assemblant des bouts de codes récupérés dans des programmes existants
Richard Stallman était invité à prendre la parole au siège de Microsoft Research, l'initiateur du mouvement du logiciel libre partage son expérience
Orleans, un framework multiplateforme pour la création d'applications distribuées robustes et évolutives,
S'appuie sur la productivité des développeurs .NET
Orleans, un framework multiplateforme pour la création d'applications distribuées robustes et évolutives,
S'appuie sur la productivité des développeurs .NET
Le , par Bill Fassinou
Une erreur dans cette actualité ? Signalez-nous-la !