Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Les principaux avantages de Orleans sont les suivants :
- Productivité des développeurs : même pour les programmeurs non experts.
- Extensibilité transparente par défaut : nécessite aucun effort spécial du développeur.
Productivité des développeurs
Le Orleans modèle de programmation augmente la productivité, quel que soit le niveau d’expertise, en fournissant les abstractions clés, les garanties et les services système suivants.
Paradigme de programmation orientée objet (OOP) familier
Les grains sont des classes .NET qui implémentent des interfaces de grain .NET déclarées avec des méthodes asynchrones. Les grains apparaissent en tant qu’objets distants dont les méthodes peuvent être appelées directement. Cela fournit le paradigme OOP familier en transformant les appels de méthode en messages, en les acheminant vers les points de terminaison appropriés, en appelant les méthodes du grain cible et en gérant en toute transparence les échecs et les cas d’angle.
Exécution monofil des grains
Le runtime garantit qu’un grain ne s’exécute jamais sur plusieurs threads à la fois. Combiné à l’isolation d’autres grains, les développeurs ne sont jamais confrontés à la concurrence au niveau du grain et n’ont jamais besoin de verrous ou d’autres mécanismes de synchronisation pour contrôler l’accès aux données partagées. Cette fonctionnalité rend le développement d'applications distribuées gérable, même pour les programmeurs non experts.
Activation transparente
Le runtime active un grain uniquement lorsqu’il y a un message à traiter. Cela sépare proprement la création d’une référence de grain (contrôlée par le code d’application) et l’activation physique du grain en mémoire (transparente pour l’application). Cela est similaire à la mémoire virtuelle où le système d’exploitation décide de mettre des pages en mémoire et quand supprimer des pages de la mémoire. De même, dans Orleans, le runtime décide quand activer un grain (l’amener en mémoire) et quand désactiver un grain (le supprimer de la mémoire). L’application a un accès ininterrompu à l’espace « mémoire » complet des grains créés logiquement, qu’ils soient en mémoire physique à un moment donné.
L’activation transparente permet l’équilibrage de charge dynamique et adaptatif via le placement et la migration des grains dans le pool de ressources matérielles. Cette fonctionnalité améliore considérablement le modèle d’acteur traditionnel, où la durée de vie de l’acteur est gérée par l’application.
Transparence de l’emplacement
Une référence de grain (objet proxy) utilisée pour appeler les méthodes d’un grain ou passer à d’autres composants contient uniquement l’identité logique du grain. Le Orleans runtime gère de manière transparente la traduction de l’identité logique du grain vers son emplacement physique et son routage des messages en conséquence.
Le code d’application communique avec les grains sans connaître leur emplacement physique. Cet emplacement peut changer au fil du temps en raison de pannes, de la gestion des ressources ou car un grain est désactivé lorsqu’il est appelé.
Intégration transparente à un magasin persistant
Orleans permet de réaliser un mappage déclaratif de l'état en mémoire d'un grain vers un magasin persistant. Il synchronise les mises à jour, garantissant en toute transparence que les appelants reçoivent les résultats uniquement après la mise à jour réussie de l'état persistant. L’extension et/ou la personnalisation de l’ensemble des fournisseurs de stockage persistant existants est simple.
Propagation automatique des erreurs
Le runtime propage automatiquement les erreurs non gérées dans la chaîne d’appels selon les principes de try/catch asynchrone et distribuée. Par conséquent, les erreurs ne se perdent pas dans une application. Cela permet de placer la logique de gestion des erreurs dans des emplacements appropriés sans le travail fastidieux de propagation manuelle des erreurs à chaque niveau.
Extensibilité transparente par défaut
Le Orleans modèle de programmation guide les développeurs vers la mise à l’échelle des applications ou des services à travers plusieurs ordres de grandeur. Pour ce faire, il incorpore les meilleures pratiques et modèles éprouvés et fournit une implémentation efficace des fonctionnalités système de niveau inférieur.
Voici quelques facteurs clés qui permettent l’extensibilité et les performances :
Partitionnement affiné implicite de l’état de l’application
L'utilisation des grains en tant qu'entités directement adressables décompose implicitement l'état général de l'application. Bien que le Orleans modèle de programmation ne prescrivent pas la taille du grain, dans la plupart des cas, avoir un nombre relativement élevé de grains (millions ou plus) est logique, chacun représentant une entité d’application naturelle, telle qu’un compte d’utilisateur ou un bon de commande.
Avec les grains adressables individuellement et l'abstraction de leur emplacement physique par l'environnement d'exécution, Orleans offre une grande souplesse pour équilibrer la charge et gérer les points chauds de manière transparente et générique, sans nécessiter l'intervention du développeur d'applications.
Gestion des ressources adaptatives
Les grains ne supposent pas la localité d’autres grains lors de l’interaction. En raison de cette transparence d’emplacement, le runtime peut gérer et ajuster dynamiquement l’allocation des ressources matérielles disponibles. Le runtime effectue cette opération en prenant des décisions précises sur le placement et la migration de grains sur le cluster de calcul en réaction aux modèles de charge et de communication, sans interruption des requêtes entrantes. En créant plusieurs réplicas d’un grain particulier, le runtime peut augmenter son débit sans modifier le code de l’application.
Communication multiplexée
Les grains ayant Orleans des points de terminaison logiques et la messagerie entre eux est multiplexée dans un ensemble fixe de connexions physiques toutes-à-toutes (sockets TCP). Cela permet au runtime d’héberger des millions d’entités adressables avec une surcharge de système d’exploitation faible par grain. En outre, l’activation et la désactivation d’un grain n’entraînent pas le coût d’inscription/annulation de l’inscription d’un point de terminaison physique (comme un port TCP ou une URL HTTP) ou même la fermeture d’une connexion TCP.
Planification efficace
Le runtime planifie l’exécution de nombreux grains à thread unique à l’aide du pool de threads .NET, qui est hautement optimisé pour les performances. Lorsque le code grain est écrit dans le style non-bloquant basé sur la continuation (une exigence du modèle de programmation Orleans), le code de l'application s'exécute de manière très efficace dans un mode coopératif multithread sans contention. Cela permet au système d’obtenir un débit élevé et de s’exécuter à une utilisation très élevée du processeur (jusqu’à 90%+) avec une grande stabilité.
Le fait que la croissance du nombre de grains et l’augmentation de la charge n’entraînent pas de threads supplémentaires ou d’autres primitives de système d’exploitation aident à l’extensibilité des nœuds individuels et au système entier.
Asynchronie explicite
Le Orleans modèle de programmation rend la nature asynchrone des applications distribuées explicite et guide les développeurs à écrire du code asynchrone non bloquant. Combiné à la messagerie asynchrone et à une planification efficace, cela permet un grand degré de parallélisme distribué et un débit global sans nécessiter de multithreading explicite.