Deux articles ont récemment été publiés par SoundCloud pour décrire l'évolution de leur architecture de service vers la mise en oeuvre de Domain Gateways, en passant par les Value-Added Services. Les auteurs décrivent comment ces patterns basés sur le Domain-Driven Design ont aidé à réduire les doublons et à homogénéiser la logique métier et le contrôle d’accès.
Un value-added service est un service qui est chargé de fournir des agrégats à ses appelants. Les Domain Gateways permettent de gérer la même entité à travers différents domaines.
Selon les auteurs, la première architecture de services de SoundCloud comportait deux couches de services. Les services périphériques récupéraient toutes les données des services de base. Chaque service périphérique orchestrait tous ses appels et était également responsable du contrôle d’accès. A terme, ce pattern a fini par entraîner des doublons dans le code et la logique, lorsque différents services ont évolué pour utiliser les mêmes données de manière légèrement différente.
Les auteurs écrivent que la seconde étape de l'évolution de l'architecture de services de l'entreprise a consisté à ajouter une troisième couche intermédiaire mettant en œuvre le pattern des Value-Added Services (VAS). Cette bascule vers les Value-Added Services a permis de mieux répartir les responsabilités. La couche périphérique fournit des fonctionnalités d’API gateway et répond aux besoins spécifiques des clients, tandis que la couche VAS consomme les données des services de base, les transformant en entités agrégées. Les services de la couche périphérique consomment ensuite ces agrégats.
Source: https://developers.soundcloud.com/blog/service-architecture-2
Un pattern tel que les VAS comporte certains inconvénients que les auteurs ont identifiés, comme un ensemble de services plus large et des latences réseau accrues en raison des rebonds supplémentaires introduits par les services intermédiaires. Ils envisagèrent d'utiliser plutôt des bibliothèques partagées mais conclurent finalement qu'une couche VAS était préférable dans leur cas.
La prise en charge des réponses partielles dans les Value-Added Services permet d'adapter la quantité de données renvoyées aux besoins de chaque client. Des réponses partielles peuvent également réduire le nombre d'appels réseau, mais les auteurs précisent que SoundCloud est focalisé sur la gestion de la complexité au niveau de la couche périphérique.
Les auteurs ajoutent que leurs Value-added Services ont fini par inclure la possibilité de modifier les données des entités. Des interfaces distinctes ont permis d'isoler les opérations d'écriture des opérations de lecture en utilisant les concepts de "commande" et de "requête", qui constituent le cœur du célèbre pattern Command Query Responsibility Segregation (CQRS).
Au fur et à mesure que les VAS de SoundCloud prenaient de l'ampleur, il devint visible que les mêmes entités étaient utilisées dans différents domaines avec des objectifs et des exigences d’agrégation différents, soulignent les auteurs. Le pattern Domain Gateway fut la solution choisie pour éviter de mettre en œuvre toutes les variations possibles dans le même service. Les auteurs décrivent ces services de passerelle comme des implémentations VAS liées à des domaines métier spécifiques.
Selon les auteurs, la duplication introduite par les services de passerelle est acceptable "dans les cas où les différents domaines ont des patterns d'accès très différents et des ensembles de fonctionnalités très disjoints, ou lorsque la communication et la collaboration entre les équipes sont difficiles".
Ces deux articles sur le blog de SoundCloud font suite à un article précédent sur les Backends For Frontends pattern, déjà abordés sur InfoQ. Un aggrégat est un pattern Domain-Driven Design et représente un groupe d'objets de domaine qui peuvent être traités comme une seule unité. Les patterns Value-Added Services et Domain Gateway sont des formes d’architectures domain-oriented utilisées dans l’industrie.