Le RGESN millésime 2024 est un bon point de départ pour revoir sa stratégie numérique durable et ses pratiques d’éco-conception. Avant de se faire rattraper par les exigences légales...
Embauché il y a 2 ans pour digitaliser les process, Alexandre Aubry raconte tous les changements que cela a induit : transformation de l'organisation, de l'infrastructure matérielle et réseau, ouverture et décommissionnement progressif de l'ERP Cobol...
Nous avons assisté à la conférence client de l'entreprise Orange à Agile en Seine. Cet article vous propose de découvrir comment l'IA Gen devient déjà un atout incontournable chez certains clients.
La puissance de la programmation réactive et des systèmes réactifs
La programmation réactive est idéale pour gérer la logique interne et la transformation du flux de données, mais les systèmes réactifs sont la clé de la résilience et de l'élasticité des systèmes distribués.
Vous êtes-vous déjà demandés en quoi la programmation réactive et les systèmes réactifs diffèrent ?
La programmation réactive est une excellente technique pour gérer la logique interne et la transformation d'un flux de données, localement dans les composants, afin d'optimiser la clarté du code, les performances et l'efficacité des ressources.
Les systèmes réactifs, qui cumulent un ensemble de principes architecturaux, mettent l'accent sur la communication asynchrone et nous donnent des outils pour aborder la résilience et l'élasticité dans les systèmes distribués.
Programmation réactive, idéale pour gérer la logique interne
L'un des problèmes courants liés à l'utilisation exclusive de la programmation réactive est que son couplage étroit entre les étapes de calcul, dans un programme déclaratif ou basé sur des callbacks événementiels, rend la résilience plus difficile à atteindre. En effet, ces chaînes de transformation sont souvent éphémères et les étapes - callbacks ou combinateurs - sont anonymes, c'est-à-dire non adressables. Cela signifie que les systèmes traitent généralement le succès ou l'échec directement sans le signaler au monde extérieur. Par conséquent, les échecs sont liés aux demandes des clients éphémères plutôt qu'à la santé globale du composant, ce qui n'est pas idéal.
Un autre contraste avec l'approche des systèmes réactifs est que la programmation réactive pure permet le découplage dans le temps, mais pas dans l'espace (à moins de tirer parti du passage de messages pour distribuer le graphe de flux de données à travers le réseau, comme discuté précédemment). Comme nous l'avons mentionné, le découplage dans le temps permet la concurrence, mais c'est le découplage dans l'espace qui permet la distribution et la mobilité - permettant des topologies non seulement statiques mais aussi dynamiques - ce qui est essentiel pour l'élasticité.
Systèmes réactifs, clés de la résilience et de l'élasticité
En raison du manque de transparence de l'emplacement, il est difficile de faire évoluer un programme purement basé sur des techniques de programmation réactive de manière adaptative et élastique ; ce qui implique la mise en place d'outils supplémentaires, tels qu'un bus de messages, une grille de données ou des protocoles de réseau sur mesure. C'est là qu'intervient la programmation par messages des systèmes réactifs, puisqu'il s'agit d'une abstraction de communication qui conserve son modèle de programmation et sa sémantique dans toutes les dimensions de l'échelle, et qui réduit donc la complexité du système et les frais généraux cognitifs.
Un problème communément cité de la programmation basée sur les callbacks est que, bien que l'écriture de tels programmes puisse être comparativement facile, elle peut avoir des conséquences réelles à long terme. Par exemple, les systèmes basés sur des callbacks anonymes fournissent très peu d'informations lorsqu'il s'agit de raisonner à leur sujet, de les maintenir ou, plus important encore, de déterminer ce qui se passe, où et pourquoi les pannes de production et les mauvais comportements se produisent. Les bibliothèques et les plates-formes conçues pour les systèmes réactifs (comme le projet Akka et la plate-forme Erlang) ont appris cette leçon depuis longtemps et s'appuient sur des composants adressables à longue durée de vie qui sont plus faciles à conceptualiser sur le long terme.
Ainsi, le choix d'un bon paradigme de programmation, qui impose des éléments tels que l'adressabilité et la gestion des défaillances, s'est avéré inestimable en production, car il est conçu en tenant compte de la dureté de la réalité, pour s'attendre à l'échec et savoir l'accepter, plutôt que d'essayer de l'éviter.
La programmation réactive est une technique de mise en œuvre très utile, qui peut être utilisée dans une architecture réactive. Cependant, pour construire un système réactif, il ne suffit pas de faire abstraction des ressources spécifiques au système d'exploitation et de saupoudrer des API asynchrones et des coupe-circuits sur une pile logicielle existante et héritée. Il s'agit plutôt d'accepter le fait que vous construisiez un système distribué comprenant de multiples services. Ils doivent travailler de concert et fournir une expérience cohérente et réactive ; non seulement lorsque les choses fonctionnent comme prévu, mais aussi en cas de défaillance et sous une charge imprévisible.