Guide de déploiement
Choisissez la forme de déploiement d’une application Server SDK selon son échelle, de la machine unique aux nœuds de collaboration multiples.
Cette page décrit trois formes de déploiement d’une application Server SDK selon l’échelle. Lisez d’abord Collaboration SDK, import et export et les exemples pour voir comment les modules s’assemblent ; le déploiement place ce même assemblage sur un ou plusieurs nœuds.
| Forme | Collaboration | Import et export | Échelle recommandée |
|---|---|---|---|
| Machine unique | Un nœud | Même nœud | Applications locales, développement et tests, quelques utilisateurs internes |
| Séparer l’import et l’export | Un nœud | Nœud distinct | Service en ligne multi-utilisateurs dans la capacité d’un nœud |
| Plusieurs nœuds | Plusieurs nœuds | Nœud distinct | Au-delà de la capacité d’un nœud, ou basculement entre nœuds |
Machine unique
Toutes les fonctions sont déployées dans un seul processus Node.js et le navigateur s’y connecte directement.
- Le Database Adapter implémente le contrat
IDatabaseAdapter; voir Adaptateurs de base de données. - Le stockage des tâches et des fichiers, les délais d’expiration et les liens de téléchargement de l’import et de l’export sont décrits dans Intégration de l’échange de fichiers.
- Une conversion sollicite fortement le processeur et un fichier volumineux ralentit la collaboration.
Séparez l’import et l’export lorsque les conversions pèsent sur la réactivité de la collaboration ou que le service doit servir de nombreux utilisateurs en continu.
Séparer l’import et l’export
L’import et l’export passent sur un nœud distinct ; la collaboration reste sur un nœud ; la passerelle route séparément les deux types de chemins ; les deux utilisent la même base de données.
Le nœud d’import et d’export assemble le Database Adapter, un UniverCollabService et le module de conversion, et accède directement à la base de données ; les points d’injection sont les mêmes que sur une machine unique.
Les documents servis par un seul nœud de collaboration sont limités par la mémoire du processus. Passez à plusieurs nœuds au-delà de cette capacité ou pour le basculement.
Plusieurs nœuds de collaboration
Plusieurs nœuds de collaboration exécutent le même code sur la même base de données. Un adaptateur pub/sub relaie les Rooms, la Presence et les diffusions entre les nœuds, un ticket store partage les Session Tickets et @univerjs-pro/collaboration-cluster-redis fournit l’implémentation Redis. Exemple de référence : Multi-node.
Chaque nœud de collaboration transmet l’adaptateur pub/sub et le ticket store Redis à l’Endpoint ; le reste de l’assemblage reste identique :
import { createClient } from "redis";import { RedisPubSubAdapter, RedisSessionTicketStore } from "@univerjs-pro/collaboration-cluster-redis";import { UniverCollabEndpoint } from "@univerjs-pro/collaboration-endpoint";const client = createClient({ url: process.env.REDIS_URL });const subClient = client.duplicate();await Promise.all([client.connect(), subClient.connect()]);const pubSub = new RedisPubSubAdapter({ pubClient: client, subClient });const ticketStore = new RedisSessionTicketStore({ client });const endpoint = new UniverCollabEndpoint(service, { pubSub, ticketStore });Pour aller plus loin
Un très grand document ralentit les requêtes des petits documents du même nœud. Répartissez les nœuds en groupes selon la taille des documents et laissez la passerelle router les grands documents vers un groupe dédié ; la clé de routage reste l’unit ID et tous les groupes partagent la base de données et le pub/sub.
Que pensez-vous de ce guide ?