Capacité et dimensionnement
Combien de personnes une instance Archestack sert en même temps, de quels serveurs elle a besoin pour cela, et combien d'espaces de travail un serveur de base de données accueille. Chaque chiffre de cette page a été mesuré lors de tests de charge le 23 septembre 2026, avec des personnes simulées qui se connectent et travaillent dans l'application. Aucun n'est une projection : une installation plus grande se dimensionne en blocs entiers d'une taille testée.
En un coup d'œil
| Quoi | Mesuré | Conditions |
|---|---|---|
| Un espace de travail | 1 000 personnes en même temps, sans que la limite soit atteinte | 4 cœurs applicatifs, 2 cœurs de base de données |
| Petite installation | 3 000 personnes en même temps, sans que la limite soit atteinte | 2 cœurs applicatifs, 2 cœurs de base de données |
| Un bloc | 4 000 personnes en même temps | 4 cœurs applicatifs, 4 cœurs de base de données, PgBouncer |
| Un serveur de base de données | 5 000 espaces de travail, sans aucune inscription ni requête en échec | Les espaces de travail inutilisés n'occupent aucune connexion à la base de données |
Tous ces chiffres sont obtenus avec les mises à jour en direct désactivées. Lorsqu'elles sont activées, ce qui est le cas par défaut, un espace de travail reste confortable jusqu'à environ 100 personnes en même temps.
Comment se déroulent les tests
- Les personnes. Chaque personne simulée se connecte avec son propre compte, consulte des listes et des enregistrements, fait des recherches, enregistre des modifications et ouvre un tableau de bord, avec une pause de 6 secondes en moyenne entre deux clics. Un quart d'entre elles utilisent le builder, les autres l'application publiée. "Personnes en même temps" compte les personnes qui cliquent au même moment, pas les comptes.
- Les paliers. Les personnes sont ajoutées sur 45 secondes, puis maintenues pendant 3 minutes. Chaque chiffre provient de ces 3 minutes stables.
- Rapide. Un palier est considéré comme rapide quand 95 % des chargements de page se terminent en moins d'une seconde et que moins de 1 % des requêtes échouent. Un chargement de page va du clic jusqu'à la dernière donnée affichée sur la page.
- La machine. Un seul PC de bureau équipé d'un Intel Core i9-12900KF et de 96 Go de mémoire. Chaque serveur tournait dans un conteneur disposant de ses propres cœurs de processeur, et le générateur de charge avait lui aussi ses propres cœurs. PostgreSQL 16, PgBouncer 1.25 là où il était utilisé, limitation de débit activée.
Un espace de travail, de nombreuses personnes
Une entreprise dont tout le monde travaille dans le même espace de travail, avec 2 500 clients, 25 000 commandes et 75 000 lignes de commande, sur un serveur d'application de 4 cœurs et un serveur de base de données de 2 cœurs :
| Personnes en même temps | Page, médiane | Page, 95 % en moins de | Cœurs applicatifs utilisés | Cœurs de base de données utilisés |
|---|---|---|---|---|
| 100 | 23 ms | 52 ms | 0,09 | 0,13 |
| 200 | 26 ms | 102 ms | 0,18 | 0,28 |
| 400 | 26 ms | 67 ms | 0,33 | 0,37 |
| 600 | 30 ms | 95 ms | 0,45 | 0,52 |
| 800 | 41 ms | 230 ms | 0,58 | 0,66 |
| 1 000 | 82 ms | 590 ms | 0,65 | 0,80 |
Au-delà de 1 000 personnes, le générateur de charge manquait de processeur, si bien que la limite d'un espace de travail n'a pas été trouvée. À 1 000, aucun des deux serveurs n'utilisait un cœur entier.
Mises à jour en direct
Par défaut, chaque ligne enregistrée est poussée vers chaque écran ouvert qui l'affiche, et chacun de ces écrans recharge son enregistrement, ses listes liées et leurs libellés. Ce coût croît avec le carré du nombre de personnes dans un espace de travail. Sur le même build et les mêmes serveurs, environ 100 personnes en même temps travaillaient confortablement avec les mises à jour en direct activées, contre 1 000 avec elles désactivées ; à 200 personnes, 86 % de toutes les requêtes étaient ces rechargements.
Désactivez-les avec Realtime__EntityChanges=false sur le serveur d'application.
Les écrans ouverts affichent alors la modification d'un collègue à leur prochain chargement.
L'enregistrement des modifications, la recherche, les notifications et l'affichage des autres
personnes présentes sur une page fonctionnent comme avant. Tous les autres chiffres de cette
page sont obtenus avec les mises à jour en direct désactivées.
Plusieurs entreprises sur une instance
Des entreprises de 100 personnes chacune, chaque entreprise étant un espace de travail avec sa propre copie de l'application (500 clients, 5 000 commandes et 15 000 lignes de commande), sur deux tailles de serveurs :
| Serveurs | Rapide jusqu'à | Cœurs utilisés | Mémoire utilisée | Limite |
|---|---|---|---|---|
| 2 + 2 cœurs, 4 + 8 Go | 3 000 personnes | 1,2 + 1,2 | 1,3 + 2,8 Go | Non atteinte |
| 4 + 4 cœurs, 8 + 16 Go | 4 000 personnes | 2,1 + 1,9 | 1,8 + 5,4 Go | Connexions à la base de données, à 5 000 |
Le premier chiffre de chaque paire correspond au serveur d'application, le second au serveur de base de données. En règle générale, 1 000 personnes en même temps utilisent environ un demi-cœur applicatif et un demi-cœur de base de données.
Là où un serveur de base de données atteint sa limite
En connexion directe, chaque espace de travail conserve ses propres pools de connexions, qui grandissent avec la charge. À 5 000 personnes, le serveur de base de données de la paire 4 + 4 a atteint près de 2 000 connexions et les chargements de page se sont effondrés ; une paire 6 + 6 ne s'est jamais stabilisée. Via PgBouncer en mode transaction, les bases de données des espaces de travail partagent des pools de quelques connexions chacun : la paire 4 + 4 a alors servi 4 000 personnes avec 95 % des pages en moins de 54 ms sur 400 connexions, et une paire 8 + 8 a tenu 8 000 personnes sur 757. Ce test 8 + 8 partageait les cœurs du PC avec le générateur de charge ; il ne renseigne donc que sur les connexions et n'est pas utilisé pour le dimensionnement.
Des serveurs pour davantage de personnes
Un bloc est la paire testée : un serveur d'application de 4 cœurs et un serveur de base de données de 4 cœurs avec PgBouncer, compté pour 4 000 personnes afin de garder une certaine marge. Une installation plus grande ajoute des blocs entiers.
| Personnes en même temps | Serveurs | Application | Base de données |
|---|---|---|---|
| 3 000 | Petite installation | 1 serveur, 2 cœurs, 4 Go | 1 serveur, 2 cœurs, 8 Go |
| 4 000 | 1 bloc | 1 serveur, 4 cœurs, 8 Go | 1 serveur, 4 cœurs, 16 Go |
| 8 000 | 2 blocs | 2 serveurs, 4 cœurs, 8 Go chacun | 2 serveurs, 4 cœurs, 16 Go chacun |
| 10 000 | 3 blocs | 3 serveurs, 4 cœurs, 8 Go chacun | 3 serveurs, 4 cœurs, 16 Go chacun |
Aujourd'hui, chaque bloc est un déploiement à part entière, et une entreprise vit sur un seul bloc. Répartir les entreprises sur plusieurs blocs derrière une seule adresse et une seule authentification n'existe pas encore.
De nombreux espaces de travail sur un serveur de base de données
Un test distinct a ajouté des espaces de travail à un même serveur de base de données, dont 50 utilisés à tout moment, jusqu'à 5 000 espaces de travail :
- Aucun échec. 5 000 espaces de travail sans aucune inscription ni requête en échec.
- L'inactivité ne coûte rien. Un espace de travail que personne n'utilise n'occupe aucune connexion à la base de données. Après six minutes sans utilisation, les 5 000 occupaient 3 connexions à eux tous.
- Un nouvel espace de travail en une seconde environ. 0,9 seconde en médiane, les deux bases de données créées et préparées.
- Environ 18 Mo de disque par espace de travail : deux bases de données et une petite application, avant vos propres données.
| Espaces de travail | Requêtes, 95 % en moins de | Connexions occupées | Mémoire applicative | Mémoire partagée de la base de données | Disque | Redémarrage |
|---|---|---|---|---|---|---|
| 1 000 | 201 ms | 286 | 2,2 Go | 125 Mo | 17 Go | 21 s |
| 2 000 | 244 ms | 299 | 3,3 Go | 253 Mo | 35 Go | 45 s |
| 3 000 | 1,8 s | 190 | 4,2 Go | 381 Mo | 52 Go | 74 s |
| 4 000 | 388 ms | 203 | 5,0 Go | 509 Mo | 70 Go | 147 s |
| 5 000 | 364 ms | 236 | 5,6 Go | 509 Mo | 87 Go | 221 s |
Le nombre de connexions occupées reste stable quel que soit le nombre d'espaces de travail, car seuls ceux qui sont utilisés en occupent. Deux choses augmentent avec le nombre d'espaces de travail : la mémoire du serveur d'application, et le temps qu'il faut après un redémarrage pour que l'API réponde à nouveau, qui a atteint près de quatre minutes à 5 000 espaces de travail. Planifiez les redémarrages d'une grande instance en conséquence.
Les paramètres derrière ces chiffres
- Mises à jour en direct désactivées :
Realtime__EntityChanges=falsesur le serveur d'application, voir plus haut. - Mémoire partagée de la base de données :
shm_size: 1gsur le conteneur PostgreSQL. PostgreSQL conserve des statistiques pour chaque base de données en mémoire partagée, environ 55 Ko chacune, et Docker accorde 64 Mo à un conteneur sauf indication contraire. 1 Go couvre quelque 9 000 espaces de travail. - Pooling de connexions : PgBouncer en mode transaction, avec une entrée de
base de données générique pour qu'un nouvel espace de travail ne demande aucune configuration,
2 connexions par base de données avec 1 en réserve, et un plafond de connexions serveur d'au
moins 4 par entreprise active et inférieur au
max_connectionsde PostgreSQL. Un plafond plus serré oblige PgBouncer à fermer les connexions d'une entreprise pour ouvrir celles d'une autre : 400 connexions pour 150 entreprises ont saturé les deux serveurs avec ce va-et-vient. Les chaînes de connexion du serveur d'application portentNo Reset On Close=true. La synchronisation de données avec des systèmes tiers utilise des tables temporaires, que le pooling en mode transaction ne conserve pas ; elle a donc toujours besoin d'une connexion directe. - Maintenance de la base de données : avec des milliers de bases de données, un
autovacuum_naptimeplus long espace les passages que PostgreSQL effectue lui-même dans chaque base de données.
Ce que les chiffres ne couvrent pas
- Les processeurs cloud. Un processeur virtuel dans le cloud est généralement plus lent qu'un cœur de ce processeur de bureau.
- Le réseau et le navigateur. Les temps de page n'incluent ni le réseau entre les serveurs et vos utilisateurs, ni le temps que met le navigateur à dessiner la page.
- Des applications plus lourdes. Des pages avec davantage de listes liées, ou des tables plus volumineuses, coûtent plus cher par page que celles de l'application de test.
- Au-delà de 10 000 personnes. Rien ici n'est extrapolé au-delà d'une taille testée.
Pour aller plus loin
Espaces de travail et hébergement explique le choix entre un espace de travail par instance et plusieurs, ainsi que les deux façons d'exécuter les conteneurs.