CONTEXTE
J'ai un robot discord qui fonctionne depuis longtemps (plus de 3 ans) écrit en anglais. discord.py
qui a toujours fonctionné sur GCP, zone us-east4-a. Le robot fonctionne en k8s
en utilisant discord.py 1.7.2 et Python 3.9.
PROBLÈME
Au cours des deux derniers mois, j'ai commencé à voir un nombre croissant d'interruptions de connexion, [Error 104] Connexion réinitialisée par l'homologue. Les réinitialisations ne sont pas directement liées à la quantité d'activité du robot. Elles se produisent de manière intermittente tout au long de la journée en production (toutes les quelques minutes en moyenne).
Ces réinitialisations provoquent des échecs aléatoires de l'API HTTP de discord et entraînent un niveau élevé de déconnexions sur le WebSocket. Un grand nombre de ces déconnexions de shard peuvent reprendre, mais beaucoup (~200 par jour) finissent par donner lieu à un appel IDENTIFY comme une nouvelle connexion et déclenchent parfois des attentes prolongées de backoff et des pannes partielles.
EXEMPLE
Voici un exemple de déconnexion :
Traceback (most recent call last):
File "/opt/venv/lib/python3.9/site-packages/discord/shard.py", line 187, in reconnect
self.ws = await asyncio.wait_for(coro, timeout=60.0)
File "/usr/local/lib/python3.9/asyncio/tasks.py", line 481, in wait_for
return fut.result()
File "/opt/venv/lib/python3.9/site-packages/discord/gateway.py", line 305, in from_client
gateway = gateway or await client.http.get_gateway()
File "/opt/venv/lib/python3.9/site-packages/discord/http.py", line 967, in get_gateway
data = await self.request(Route('GET', '/gateway'))
File "/opt/venv/lib/python3.9/site-packages/discord/http.py", line 192, in request
async with self.__session.request(method, url, **kwargs) as r:
File "/opt/venv/lib/python3.9/site-packages/aiohttp/client.py", line 1117, in __aenter__
self._resp = await self._coro
File "/opt/venv/lib/python3.9/site-packages/aiohttp/client.py", line 544, in _request
await resp.start(conn)
File "/opt/venv/lib/python3.9/site-packages/aiohttp/client_reqrep.py", line 890, in start
message, payload = await self._protocol.read() # type: ignore
File "/opt/venv/lib/python3.9/site-packages/aiohttp/streams.py", line 604, in read
await self._waiter
aiohttp.client_exceptions.ClientOSError: [Errno 104] Connection reset by peer
UNE EXPÉRIENCE POUR ISOLER LE PROBLÈME
J'ai réalisé une expérience pour isoler la cause du problème. J'ai déployé un conteneur avec mon bot dans une VM (pas de k8s
) et je l'ai isolé de façon à ce qu'il ne communique qu'avec discord (pas de base de données extérieure) et lui envoie automatiquement des commandes pour simuler le comportement et la charge des utilisateurs (j'envoie environ 60 commandes par minute dans le même serveur - bien en dessous de ma charge de production). J'exécute ceci pendant 20 minutes ou jusqu'à ce que j'observe si des réinitialisations de connexion se produisent, et je vois ce qui suit :
- Sur
us-east4-a
Je suis capable de reproduire des réinitialisations intermittentes de la connexion. - Sur
us-east4-b
Je suis capable de reproduire des réinitialisations intermittentes de la connexion. - Sur
us-east4-c
Je suis capable de reproduire des réinitialisations intermittentes de la connexion. - Sur
us-central1-a
Je suis je n'arrive pas à reproduire les réinitialisations de connexion (même après 3 heures -- pas de déconnexion de shard du tout). - Sur
us-east1-b
Je suis je n'arrive pas à reproduire les réinitialisations de connexion . - Sur mon ordinateur portable (internet résidentiel sur la côte est), je suis je n'arrive pas à reproduire les réinitialisations de connexion .
Toutes les expériences utilisent le même récipient, le même type de machine et la même procédure de test.
J'ai répété l'expérience en us-east4-a
avec plusieurs types de machines jusqu'à 8 vCPU et avec les niveaux de réseau premium et standard, et je vois toujours des réinitialisations. J'ai également essayé une autre machine virtuelle dans un projet différent, mais les problèmes de connexion persistent toujours en us-east4
.
J'ai ouvert un dossier d'assistance auprès de GCP car il semble s'agir d'un problème spécifique à une région.
Y a-t-il des expériences supplémentaires que je pourrais fournir pour tenter de réduire la cause de ce problème ? Y a-t-il des problèmes courants de configuration des BPC qui pourraient entraîner ce problème ?
À moins de déménager dans une autre région, j'ai l'impression d'être à court d'options.
0 votes
Pouvez-vous confirmer si votre problème est résolu ou si vous êtes toujours confronté à un problème ?