Projet

Général

Profil

Development #41026

install de base : utiliser un cache cohérent

Ajouté par Benjamin Dauvergne il y a environ 4 ans. Mis à jour il y a environ 4 ans.

Statut:
Rejeté
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
-
Début:
25 mars 2020
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Non
Planning:
Non
Club:
Non

Description

Il faudrait configurer haproxy en proxy TCP vers les deux memcaches des deux noeuds, en priorité toujours sur le premier, parce que des fois des outils s'attendent à un cache cohérent (django-select2 par exemple).

Réfléchir à utiliser par défaut un backend de cache qui soit cohérent.


Demandes liées

Lié à Authentic 2 - Bug #41017: select2 vs plusieurs serveurs derrière une IPFermé25 mars 2020

Actions

Historique

#1

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Lié à Bug #41017: select2 vs plusieurs serveurs derrière une IP ajouté
#2

Mis à jour par Frédéric Péters il y a environ 4 ans

Je n'ai pas vu le problème sur le SaaS, le navigateur résoud une IP et semble s'y tenir.

#3

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Frédéric Péters a écrit :

Je n'ai pas vu le problème sur le SaaS, le navigateur résoud une IP et semble s'y tenir.

Oui mais le haproxy peut décider de balancer ça sur l'autre noeud non ? S'il a reçu une 500 dernièrement par exemple.

#4

Mis à jour par Thomas Noël il y a environ 4 ans

Le problème se pose surtout sur des haproxy qu'on ne gère pas (toulouse et toodego) et donc on ne pourra pas faire grand chose.

Quid d'utiliser django.core.cache.backends.db.DatabaseCache (cache en base de données) ?

#5

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Thomas Noël a écrit :

Le problème se pose surtout sur des haproxy qu'on ne gère pas (toulouse et toodego) et donc on ne pourra pas faire grand chose.

Quid d'utiliser django.core.cache.backends.db.DatabaseCache (cache en base de données) ?

Oui, sur une instance peu utilisée (toodego/toulouse) ça doit passer, mais à toodego on a déjà redis en fait, c'est juste pas configuré coté GNM, mais il est disponible sur 10.128.3.70:6379 en recette et 10.128.2.250:6379 en prod.

Y a juste à mettre :

## Redis for cache and sessions
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://redis.gl:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        },
        "KEY_PREFIX": "cut_0_",
    }
}

SESSION_ENGINE = "django.contrib.sessions.backends.cache" 
SESSION_CACHE_ALIAS = "default" 
SESSION_COOKIE_AGE = 3600

#6

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Projet changé de Admin système à Publik
  • Sujet changé de rendre memcache cohérent à install de base : utiliser un cache cohérent
  • Club mis à Non

Je déplace le ticket sur Publik parce que ça sort du cadre de notre SaaS en fait. Je pense que la proposition de Thomas est la bonne, dans publik-devinst et nos installs par défaut on devrait utiliser le cache en base (et le backend de session en base classique aussi, ça sert à rien de mettre la session deux fois en base); passer à memcache ou autre serait une optimisation à gérer manuellement, avec settings.d ce n'est maintenant pas trop dur.

#7

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Description mis à jour (diff)
#8

Mis à jour par Frédéric Péters il y a environ 4 ans

À part le bout django-select2, il y a d'autres endroits qui posent problème ? (parce que je me dis que le bout select2 il doit pouvoir se corriger)

#9

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

Frédéric Péters a écrit :

À part le bout django-select2, il y a d'autres endroits qui posent problème ? (parce que je me dis que le bout select2 il doit pouvoir se corriger)

Comment ?

#10

Mis à jour par Frédéric Péters il y a environ 4 ans

Ma question étant surtout l'existence d'autres endroits concernés. Sur le comment, je n'ai pas regardé en détail mais à première vue il n'y a aucune construction particulière autour des widgets, ils sont statiques dans le queryset concerné, plutôt qu'une clé de cache une clé textuelle contenant juste le nom du widget concerné pourrait faire l'affaire. Alternativement faire sans django-select2 qui n'emmerde pas pour la première fois.

#11

Mis à jour par Benjamin Dauvergne il y a environ 4 ans

  • Statut changé de Nouveau à Rejeté

Ça reviendra.

Formats disponibles : Atom PDF