Microservices
Microservices
Microservices
L’architecture monolithique
Principe
En général, l'architecture monolithique utilise une technologie de
développement unique, limitant la disponibilité d'un outil adapté pour chaque tâche
que le système doit exécuter. Selon Nielsen, dans un seul exécutable logique, toute
modification effectuée dans une section de ce type de système implique la
construction et le déploiement d'une nouvelle version de l'ensemble du système.
Les aspects les plus impliqués ou les couches de présentation, de traitement et de
stockage constituent un composant unique du logiciel requis pour s'exécuter sur un
serveur.
Le logiciel monolithique est conçu pour être autonome, dans lequel les
composants ou les fonctions du programme sont étroitement couplés plutôt que
faiblement couplés , comme dans les programmes logiciels modulaires . Dans une
architecture monolithique, chaque composant et ses composants associés doivent
tous être présents pour que le code soit exécuté ou compilé et pour que le logiciel
s'exécute.
Les applications monolithiques sont à un niveau, ce qui signifie que plusieurs
composants sont combinés en une seule grande application. Par conséquent, ils ont
tendance à avoir de grandes bases de code , ce qui peut être lourd à gérer dans le
temps.
De plus, si un composant du programme doit être mis à jour, d'autres éléments
peuvent également nécessiter une réécriture, et l'ensemble de l'application doit être
recompilé et testé. Le processus peut prendre du temps et peut limiter l'agilité et la
rapidité des équipes de développement de logiciels. Malgré ces problèmes,
l'approche est toujours utilisée car elle offre certains avantages. De plus, de
nombreuses premières applications ont été développées en tant que logiciels
monolithiques, de sorte que l'approche ne peut pas être complètement ignorée
lorsque ces applications sont encore utilisées et nécessitent des mises à jour.
Exemple
Pour comprendre l'architecture monolithique, prenons un exemple d'application
bancaire. Le site Web de l'application bancaire autorise d'abord les clients, les
connecte à leur compte et leur permet d'effectuer des transferts d'argent en ligne
vers d'autres comptes. Plusieurs composants sont impliqués dans l'ensemble de ce
processus, y compris l' interface utilisateur orientée client , ainsi que des services
d'authentification de l'utilisateur , de téléchargement de relevés, de transferts
d'argent, etc.
La couche DAO
La couche DAO dans l'architecture logicielle est chargée de fournir la prise en
charge de la manipulation des données aux consommateurs de données de couche
supérieure indépendamment de la couche de persistance des données sous-jacente.
L'idée est que si nous décidons de remplacer complètement la couche de
manipulation de données, les autres couches n'en seront même pas conscientes. Il
se compose d'un ensemble de classes gérant la communication avec la couche de
persistance, qu'il s'agisse d'une base de données (NO)SQL, d'un système de fichiers
ou d'un service REST externe. Il fournit également un ensemble cohérent
d'abstractions aux consommateurs de couche supérieure du DAO, rationalisant
leurs options d'accès et unifiant leur expérience d'accès à une approche plus
standardisée. De plus, fournir des informations sur les charges sur les composants
et sa nature aux décideurs et comment optimiser, où optimiser, pourquoi…
La couche Service
La couche service représente la couche qui implémente la logique métier
d’une application. Toutes les spécifications fonctionnelles du problème sont
implémentées dans cette couche. Cette couche est constituée d’interfaces et
d’implémentations. Les opérations de cette couche sont souvent transactionnelles.
Les transactions sont gérées facilement en utilisant «Spring Transactions» d’une
manière déclarative à travers l’annotation @Transactional. Cette couche est liée aux
interfaces de la couche DAO (Repositories) pour les opérations nécessitant l’accès
aux bases de données de l’application. Pour éviter de faire propager les entités JPA
qui sont lourdes du fait qu’elle soit surveillée par le Framework de persistance
comme Hibernate, vers les couches supérieures de l’application comme la couche
Web (UI), il est souvent recommandé de créer d’autres objet DTO (Data Transfer
Object) pour le transfert des données issues des entités JPA vers la couche UI Web.
Pour chaque requête cliente, une opération du contrôleur est invoquée par
DispatcherSevlet en lui transmettant les données de la requête dans un objet de
type RequestDTO conçu sur mesure à chaque type requête UI. L’opération du
contrôleur fait souvent appel à la couche service pour appliquer la logique métier
en lui transmettant en Input l’objet RequestDTO, après quoi le contrôleur reçoit en
retour sous forme d’objet ResponseDTO. Il ne reste au contrôleur qu’à envoyer la
partie UI les résultats les résultats au rendu UI, soit au format HTML ou encore au
format JSON pour les modèles classiques ou au format binaire GRPC pour les
modèles plus récents basés sur la technologie GRPC qui exploite les atouts du
protocole Http2 apportant plus de performances au niveau de la communication
entre le Browser et serveur Web.