Cosmo Router
Maintenant que nous avons vu l’outil de Apollo, nous allons voir comment utiliser Cosmo Router.
Fonctionnalités de Cosmo Router
Performance
- Ludicrous Mode : Réduit les requêtes redondantes en partageant les résultats identiques entre requêtes simultanées12.
- Dataloader 3.0 : Optimise le chargement des données via une exécution en largeur d’abord pour les listes imbriquées12.
- Planificateur de requêtes : Décompose les requêtes complexes en sous-requêtes parallèles/séquentielles (Go)12.
- Cache Warmer : Pré-cache les plans de requêtes pour gérer les pics de trafic (ex. Super Bowl)2.
Fédération GraphQL
- Compatibilité Apollo v1/v2 : Intégration transparente avec les architectures existantes13.
- Open Federation : Spécification open source pour les graphes fédérés1.
- Abonnements fédérés (EDFS) : Gestion évolutive des flux temps réel via événements42.
Sécurité
- Authentification JWT : Au niveau des champs et support multi-fournisseurs2.
- Persisted Operations : Remplace les requêtes par des identifiants pour limiter les attaques2.
- RBAC/OIDC : Contrôle d’accès granulaire et intégration OpenID Connect12.
Observabilité
- OpenTelemetry : Traçage distribué et métriques RED (latence, erreurs)12.
- Prometheus : Export des métriques pour l’analyse de performance12.
Personnalisation
- Modules Go : Extensions pour middleware, logging, cache, etc.1.
- Stateless Architecture : Scalabilité horizontale sans gestion d’état15.
Support Multi-Protocoles
- WebSocket/SSE : Abonnements via graphql-ws, graphql-transport-ws ou Server-Sent Events67.
- AWS Lambda : Déploiement serverless avec cold-starts optimisés2.
Modèle Open Source
- Licence : Apache 2.0, permettant utilisation/modification commerciale sans restrictions152.
- Auto-hébergement : Déploiement on-premise ou cloud (adapté aux exigences de conformité)52.
Installation de Cosmo CLI tool
npm i -g wgc@latest
Utilisation de Cosmo Router
Pour utiliser Cosmo Router il faut d’abord créer un fichier de configuration des sous-graphes.
version: 1subgraphs: - name: products routing_url: http://localhost:4001/graphql - name: users routing_url: http://localhost:4002/graphql - name: reviews routing_url: http://localhost:4003/graphql
Voici le projet demo avec la configurations du router et trois sous-graphes avec un sous graphe en websocket.
git clone https://github.com/Civilisation-IT/demo-graphqlcd apollo-router-demodocker compose up -d
Une fois les sous graphes lancés, nous pouvons générer la configuration json du router :
cd cosmowgc router compose --input graph.yaml --out config.json
Une fois le config.json généré, nous pouvons lancer le router :
docker run \ --name cosmo-router \ --rm \ -p 3002:3002 \ --add-host=host.docker.internal:host-gateway \ --platform=linux/amd64 \ -e pull=always \ -e DEV_MODE=true \ -e LISTEN_ADDR=0.0.0.0:3002 \ -e EXECUTION_CONFIG_FILE_PATH="/config/config.json" \ -v "$(pwd)/config.json:/config/config.json" \ ghcr.io/wundergraph/cosmo/router:latest
Nous pouvons accéder à notre playground à l’adresse http://localhost:3002/.
Pour ajouter une query ou subscription, suivez les étapes 1,2,3,4 de l’image suivante :
Et ici nous sommes sur un produit exceptionnel car les subscriptions sont nativement pris en charge :

Avis
Je trouve que Cosmo router est très intéressant comme produit car il y a un réel écosystème open source et plein de fonctionnalités pré développées par la communauté.
Je n’ai pas trouver la possibilité d’avoir du hot reload comme Apollo router, mais d’autres fonctionnalités sont présentes qui sont intéressant, donc votre choix dépend de votre besoin.
Environnement Wundergraph
Wundergraph n’est pas seulement un router, ils ont refait tout l’environnement GraphOS qui est propriétaire Apollo.
Voici les éléments clés de Wundergraph :
- Cosmo Router : Point d’entrée principal pour les requêtes API, gère le routage et l’authentification.
- Cosmo CDN Server : Sert la configuration au Router, crucial pour la haute disponibilité.
- Cosmo Config Storage : Stockage S3 pour la configuration du Router.
- Studio : Interface utilisateur pour la gestion et le monitoring des services.
- Controlplane : Gère les graphes et leurs schémas.
- OTEL Collector : Agrège les données de télémétrie.
- GraphQL Metrics Collector : Collecte les informations d’utilisation du schéma.
- Keycloak : Gère l’authentification et l’autorisation des utilisateurs.
- Bases de données : PostgreSQL, Redis et Clickhouse pour le stockage et l’analyse des données.
Composants auto-hébergeables
Tous les composants de Cosmo peuvent être auto-hébergés, offrant une flexibilité maximale :
- Cosmo Router : Peut être déployé dans des conteneurs Docker, Kubernetes, ou même AWS Lambda.
- CDN Server et Config Storage : Peuvent utiliser n’importe quel stockage compatible S3, comme MinIO pour le développement local.
- Studio, Controlplane, et Collectors : Déployables via Kubernetes avec des charts Helm fournis.
- Bases de données : PostgreSQL, Redis, et Clickhouse peuvent être hébergés sur votre infrastructure.
- Keycloak : Peut être intégré à votre propre fournisseur d’identité.
Footnotes
-
https://wundergraph.com/blog/an-intro-to-cosmo-router ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11
-
https://wundergraph.com/router-gateway ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11 ↩12 ↩13
-
https://wundergraph.com/blog/integration_testing_for_distributed_systems_cosmo_router ↩
-
https://wundergraph.com/blog/native-subscriptions-with-cosmo-router ↩
-
https://plainenglish.io/community/native-subscriptions-in-federated-graphql-with-cosmo-router-498ebc ↩ ↩2 ↩3
-
https://cosmo-docs.wundergraph.com/router/subscriptions/websocket-subprotocols ↩
-
https://github.com/wundergraph/cosmo-docs/blob/main/router/subscriptions/router-configuration-for-subscriptions.md ↩