Aller au contenu

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

Fenêtre de terminal
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: 1
subgraphs:
- 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.

Fenêtre de terminal
git clone https://github.com/Civilisation-IT/demo-graphql
cd apollo-router-demo
docker compose up -d

Une fois les sous graphes lancés, nous pouvons générer la configuration json du router :

Fenêtre de terminal
cd cosmo
wgc router compose --input graph.yaml --out config.json

Une fois le config.json généré, nous pouvons lancer le router :

Fenêtre de terminal
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/.

playground

Pour ajouter une query ou subscription, suivez les étapes 1,2,3,4 de l’image suivante :

play cosmo

Et ici nous sommes sur un produit exceptionnel car les subscriptions sont nativement pris en charge :

A description of my image.

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 :

  1. Cosmo Router : Point d’entrée principal pour les requêtes API, gère le routage et l’authentification.
  2. Cosmo CDN Server : Sert la configuration au Router, crucial pour la haute disponibilité.
  3. Cosmo Config Storage : Stockage S3 pour la configuration du Router.
  4. Studio : Interface utilisateur pour la gestion et le monitoring des services.
  5. Controlplane : Gère les graphes et leurs schémas.
  6. OTEL Collector : Agrège les données de télémétrie.
  7. GraphQL Metrics Collector : Collecte les informations d’utilisation du schéma.
  8. Keycloak : Gère l’authentification et l’autorisation des utilisateurs.
  9. 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 :

  1. Cosmo Router : Peut être déployé dans des conteneurs Docker, Kubernetes, ou même AWS Lambda.
  2. CDN Server et Config Storage : Peuvent utiliser n’importe quel stockage compatible S3, comme MinIO pour le développement local.
  3. Studio, Controlplane, et Collectors : Déployables via Kubernetes avec des charts Helm fournis.
  4. Bases de données : PostgreSQL, Redis, et Clickhouse peuvent être hébergés sur votre infrastructure.
  5. Keycloak : Peut être intégré à votre propre fournisseur d’identité.

Footnotes

  1. https://wundergraph.com/blog/an-intro-to-cosmo-router 2 3 4 5 6 7 8 9 10 11

  2. https://wundergraph.com/router-gateway 2 3 4 5 6 7 8 9 10 11 12 13

  3. https://wundergraph.com/blog/integration_testing_for_distributed_systems_cosmo_router

  4. https://wundergraph.com/blog/native-subscriptions-with-cosmo-router

  5. https://plainenglish.io/community/native-subscriptions-in-federated-graphql-with-cosmo-router-498ebc 2 3

  6. https://cosmo-docs.wundergraph.com/router/subscriptions/websocket-subprotocols

  7. https://github.com/wundergraph/cosmo-docs/blob/main/router/subscriptions/router-configuration-for-subscriptions.md