Un shard est une connexion à Discord qui gère une portion de vos serveurs. En dessous d'une certaine taille, il vous en faut exactement un et vous ne devriez pas y penser du tout ; au-delà, Discord vous impose de diviser, et quelques aspects de votre bot doivent changer.
Le seuil
Discord exige qu'un bot soit shardé dès qu'il est présent sur 2 500 serveurs ou plus. C'est une exigence stricte et non une suggestion : sans cela la connexion est refusée. En dessous, un shard unique est correct et en ajouter n'apporte que de la complexité.
Ce qui change avec le sharding
| Élément | Avant | Après |
|---|---|---|
| Connexions à Discord | Une | Une par shard |
| Mémoire | Un processus | Généralement un processus par shard, ou un gestionnaire qui les lance |
| Obtenir un serveur par identifiant | Immédiat | Il peut vivre sur un autre shard |
| Compter les utilisateurs totaux | Une propriété | Une requête sur tous les shards que vous devez agréger |
| Redémarrer | Un processus | Par vagues, si vous voulez éviter une coupure complète |
Tout ce qui supposait que votre bot voyait tous les serveurs à la fois cesse d'être vrai. Une commande /stats qui compte les serveurs, une annonce globale, une recherche par identifiant d'utilisateur : tout cela doit interroger chaque shard et combiner les réponses. C'est le vrai travail de migration, et il vaut la peine d'écrire ces commandes prudemment bien avant d'atteindre le seuil.
Si vous vous en approchez
- Utilisez le gestionnaire de shards de votre bibliothèque
Les deux grandes bibliothèques en ont un. Écrire sa propre orchestration de processus est un problème résolu qu'il est inutile de résoudre à nouveau.
- Auditez tout ce qui itère sur tous les serveurs
Ce sont vos futurs bugs. Trouvez-les tant que le bot est assez petit pour qu'ils marchent par hasard.
- Planifiez la mémoire par shard, pas au total
Chaque shard garde son propre cache. Le sharding ne réduit pas l'usage mémoire : il le répartit, et augmente souvent le total.
- Testez avec deux shards bien avant d'en avoir besoin de beaucoup
Forcer deux shards en local fait remonter immédiatement chaque hypothèse inter-shards, sans trafic et sans enjeu.
Les bots rament ou manquent de mémoire pour des raisons ordinaires : une fuite, une boucle coûteuse, trop de cache. Sharder un petit bot pour corriger les performances ajoute des pièces et ne corrige rien, car le goulot n'a jamais été le nombre de connexions.