Un shard es una conexión a Discord que se encarga de una porción de tus servidores. Por debajo de cierto tamaño necesitas exactamente uno y no deberías pensar en esto en absoluto; pasado ese punto, Discord te obliga a dividir, y unas cuantas cosas de tu bot tienen que cambiar.
El umbral
Discord exige que un bot use sharding en cuanto está en 2.500 servidores o más. Es un requisito duro y no una sugerencia: sin él la conexión se rechaza. Por debajo de ese número, un solo shard es lo correcto y añadir más solo añade complejidad.
Qué cambia al hacer sharding
| Cosa | Antes | Después |
|---|---|---|
| Conexiones a Discord | Una | Una por shard |
| Memoria | Un proceso | Normalmente un proceso por shard, o un gestor que los lanza |
| Obtener un servidor por id | Inmediato | Puede vivir en otro shard |
| Contar usuarios totales | Una propiedad | Una consulta a todos los shards que tienes que agregar |
| Reiniciar | Un proceso | Por tandas, si quieres evitar una caída completa |
Todo lo que daba por hecho que tu bot podía ver todos los servidores a la vez deja de ser cierto. Un comando /stats que cuenta servidores, un anuncio global, una búsqueda por id de usuario: todo eso necesita preguntarle a cada shard y combinar las respuestas. Ese es el trabajo real de migración, y merece la pena escribir esos comandos a la defensiva mucho antes de llegar al umbral.
Si te estás acercando
- Usa el gestor de shards de tu librería
Las dos librerías principales tienen uno. Escribir tu propia orquestación de procesos es un problema resuelto que no necesitas volver a resolver.
- Audita todo lo que itere sobre todos los servidores
Esos son tus fallos futuros. Encuéntralos mientras el bot sigue siendo lo bastante pequeño como para que funcionen de casualidad.
- Planifica memoria por shard, no en total
Cada shard guarda su propia caché. El sharding no reduce el uso de memoria: lo reparte, y muchas veces aumenta el total.
- Prueba con dos shards mucho antes de necesitar muchos
Forzar dos shards en local saca a la luz cada suposición entre shards al momento, sin tráfico y sin riesgo.
Los bots van lentos o se quedan sin memoria por motivos corrientes: una fuga, un bucle caro, demasiada caché. Hacer sharding en un bot pequeño para arreglar el rendimiento añade piezas y no arregla nada, porque el cuello de botella nunca fue el número de conexiones.