gorse-clickhouse-cloud-incompatible

Par divinevideo · divine-mobile

Corrigez l'échec de connexion du moteur de recommandation Gorse à ClickHouse Cloud avec des erreurs EOF. À utiliser lorsque : (1) les pods Gorse plantent avec les erreurs "failed to connect data database" et "EOF", (2) ClickHouse Cloud (*.clickhouse.cloud) est utilisé comme magasin de données Gorse, (3) la connexion TLS fonctionne (vérifiée avec openssl) mais Gorse échoue quand même, (4) vous avez essayé secure=true, différents ports (8443, 9440), des paramètres de timeout sans succès. Le driver ClickHouse de Gorse est incompatible avec le protocole natif de ClickHouse Cloud.

npx skills add https://github.com/divinevideo/divine-mobile --skill gorse-clickhouse-cloud-incompatible

Incompatibilité Gorse + ClickHouse Cloud

Problème

Le moteur de recommandation Gorse échoue à se connecter à ClickHouse Cloud avec des erreurs EOF lors de la négociation du protocole, même si la poignée de main TLS réussit.

Contexte / Conditions déclenchantes

  • Les pods Gorse master/server affichent CrashLoopBackOff
  • Les logs montrent : failed to connect data database: EOF ou transport failed to send a request to ClickHouse: EOF
  • Utilisation de ClickHouse Cloud (*.clickhouse.cloud) comme GORSE_DATA_STORE
  • La connexion TLS fonctionne quand testée avec openssl s_client
  • Tentatives avec différents paramètres de connexion sans succès

Cause racine

Bien que le schéma d'URL clickhouse:// suggère le protocole natif, Gorse utilise en réalité l'interface HTTP sur le port 8123 (pas le protocole natif sur le port 9000/9440). L'interface HTTP de ClickHouse Cloud sur le port 8443 a des problèmes de compatibilité avec le driver de Gorse.

Faits clés :

  • Gorse utilise l'interface HTTP de ClickHouse (port 8123), PAS le protocole natif (port 9000)
  • Port 8443 de ClickHouse Cloud : protocole HTTP/HTTPS
  • Port 9440 de ClickHouse Cloud : protocole natif avec TLS
  • Gorse n'accepte que : clickhouse://, mysql://, postgres://, mongodb://
  • Gorse ne supporte PAS le schéma https:// (retourne « unsupported data storage backend »)
  • Redis est uniquement pour le cache, PAS pour le data store
  • Si vous utilisez le port 9000 avec une ClickHouse in-cluster, vous obtiendrez : « Port 9000 is for clickhouse-client program. You must use port 8123 for HTTP. »

Options de solution

Option 1 : Utiliser une ClickHouse In-Cluster (Recommandé)

Déployez l'opérateur ClickHouse avec une instance in-cluster pour Gorse :

# La connexion standard in-cluster fonctionne
GORSE_DATA_STORE: "clickhouse://user:password@clickhouse-host:8123/gorse"

Option 2 : Utiliser une base de données différente

Gorse supporte MySQL et PostgreSQL comme data stores :

GORSE_DATA_STORE: "mysql://user:password@host:3306/gorse"
# ou
GORSE_DATA_STORE: "postgres://user:password@host:5432/gorse"

Option 3 : Déployer un proxy ClickHouse

Mettez en place un proxy (comme chproxy) qui traduit entre les protocoles.

Option 4 : Revenir aux vidéos populaires

Gardez Gorse désactivé et laissez l'API utiliser les recommandations basées sur la popularité :

{"videos": [...], "source": "popular"}

Vérification

Après avoir choisi une solution, vérifiez les logs du master Gorse :

kubectl logs -l app=gorse-master -n gorse --tail=20

Devrait afficher une connexion réussie au lieu des erreurs EOF.

Remarques

  • La couche TLS fonctionne correctement - le problème est au niveau du protocole ClickHouse
  • Cela peut être corrigé dans les futures versions du driver clickhouse-go
  • La ClickHouse in-cluster n'a pas ce problème car elle utilise une connexion en clair sur le port 8123

Skills similaires