Service (architecture)
Tout au long des chapitres suivants nous allons parler de Service, regardons donc ensemble que signifie ce terme.
You first need to define what a service is
Services in Domain-Driven Design (DDD)
The term service is overloaded and its meaning takes on different shades depending on the context
Un service n’est pas quelque chose de clairement défini. En réalité, ce qu’un service doit faire est très spécifique à l’architecture :
- Dans une architecture en couche, un service est synonyme de la couche Business Logic. C’est la couche entre l’interface utilisateur et les données.
- Dans une architecture SOA, un service est une propriété d’un domaine métier (chaque service possède ses propres données, ses propres règles métier et sa propre UI)
Définition
Un service est une unité déployable qui accomplit une activité métier ou d’infrastructure
Dans l’exemple de la vidéo, nous obtenons :
- un service
Ticket
qui contient l’ensemble de règles de métiers. Un service est donc un regroupement logique de règles (qui sont des classes Modules, des classes Java, etc …) - mais ce même service peut être vu comme deux services distincts. Un premier qui assure la maintenance du ticket (sa création, sa réalisation, etc …), un second qui s’occupe de l’acheminement des tickets.
Avec cette exemple, on voit que nos services peuvent être vus avec des granularités différentes.
Service as composant
L’une des principales raisons d’utiliser les services comme composants (plutôt que comme bibliothèques) est que les services peuvent être déployés indépendamment les uns des autres. Si vous avez une application qui consiste en plusieurs bibliothèques dans un processus unique, une modification de l’un des composants entraîne le redéploiement de l’ensemble de l’application. En revanche, si cette application est décomposée en plusieurs services, on peut s’attendre à ce que de nombreuses modifications apportées à un seul service n’entraînent qu’un redéploiement de ce dernier.
Caractérisiques par architecture
Nous revenons sur les différents nom donnés à un service dans les archiectures distribuées
Microservices
Le service se nomme un microservice
Caractéristisques :
- répond à un seul objectif (e.g. Service création de tickets)
- d’une granularité fine
- posséde leur propre base de données (bounded context)
- communique fréquement avec les autres (micro)services
Service-Based
Le service se nomme un domain service
Caractéristisques :
- contient plusieurs fonctionnalités métiers (e.g. le domaine ticket, le domaine facture, etc …)
- d’une granularité gros grain
- tous les domain services partagent une même base de données
- communique rarement avec les autres (domain)services
Event-Driven
Le service se nomme un event processor
Caractéristisques :
- d’une granularité variante
- Déclenche et/ou répond à des évènements
- La communication entres les events processus se fait de manière asynchrone (via broker)
- peut posséder sa propre base de données ou avoir une base de données partagée
Space-based
Le service se nomme une processing unit
Caractéristisques :
- d’une granularité variante
- Contient un stockage de données in-memory
- La communication avec la base de données se fait de manière asynchrone
- Les services se up et se down fréquement (élasticité forte)