Loadbalancing

Fonctionnement du loadbalancer ?

Lorsque l’on zappe sur une chaîne cryptée, OSCam recherche un reader et une carte valide pour pouvoir effectuer le décryptage.

Une demande d’ECM est alors envoyée aux readers valides pour effectuer cette tâche.

Vous trouverez ci-après la manière utilisée par le loadbalancer pour apprendre quelles srvid (chaînes) sont disponible sur quel reader.

Comment OSCam peut trouver un reader valide ?

Les conditions pour qu’un reader soit considéré comme valide sont les suivantes:

  • Le reader et le client (account) doivent appartenir au même groupe
  • Le reader est activé et existe
  • La demande d’ECM peut être traitée pour les caid définis, ou aucun caid n’a été défini dans le reader
  • La demande d’ECM peut être traitée pour les services définis, ou aucun service n’est défini dans le reader
  • La demande d’ECM peut être traitée pour les ident définis, ou aucun ident n’est défini dans le reader
  • La demande d’ECM peut être traitée pour les chid définis, ou aucun chid n’est défini dans le reader
  • pour le caid 0500 un test supplémentaire des nanos est effectué

Si tous les tests sont positifs, le reader sera sélectionné pour cette demande d’ECM. Ce test est effectué pour tous les readers et le loadbalancer obtient ainsi une liste des reader qui peuvent répondre à cette demande d’ECM.
Si le loadbalancer est activé, les valeurs pour le loadbalancing sont déterminées de manière suivante.
Pour chaque reader (voir la liste des readers valides) la VALEUR_LB est déterminée en…

lb_mode=1: …divisant le temps moyen de réponse des lecteurs pour ce service par le lb_weight

lb_mode=2: …comparant le dernier temps de réponse au temps de réponse précédent

lb_mode=3: …mesurant le niveau d’utilisation (comparaison du temps d’inactivité par rapport au temps de traitement des ECM)

Les readers sélectionnés seront ensuite triés en fonction de la VALEUR_LB, le premier sera celui avec la valeur la plus basse :

  • Si “Prefer local cards” est activé, les premiers choisis seront les lb_nbest reader qui ne sont pas des proxys.
  • Si le lb_nbest_readers n’est pas encore déterminé, les readers seront choisi suivant leur place dans la liste, jusqu’à ce qu’un lb_nbest_readers soit déterminé.
  • Ensuite, les lb_nfb_readers seront choisis comme fallback reader

Normalement, la valeur du lb_nbest_readers devrait être lb_nbest_readers = 1 car il n’est pas nécessaire de solliciter plus d’un reader.

Particularités de certaines conditions pour la sélection :

  • Pas de statistiques disponibles: le reader est sélectionné
  • Statistiques sont disponibles mais le lb_min_ecmcount n’est pas encore atteint: Le reader est sélectionné
  • Statistiques sont disponibles, le nombre des ECM est supérieur au lb_max_ecmcount: Le reader est sélectionné, quand le temps moyen de réponse est supérieur au lb_retrylimit et lorsque les statistiques sont réinitialisées.

La demande d’ECM est alors exécutée et envoyée au reader approprié.

Si un reader répond par “not found”, il sera bloqué.

Si 5x de suite un reader ne répond pas aux demandes d’ECM (timeout), il sera bloqué. (lb_min_ecmcount)

Si un reader répond positivement, le temps de réponse sera mesuré et introduit dans les statistiques.

Si des services ou des idents existent dans le reader, les demandes d’ECM seront toujours effectuées sur cela.

Comment le “poids” d’un reader est estimé ? (lb_weight)

Plus la valeur est élevée, plus grande est la probabilité que le reader sera choisis.

Il est un indicateur du temps moyen de réponse au sein de l’équilibrage de charge (Loadbalancing).

lb_weight = xxxx
          =  # [rien] Valeur par défaut : 100

Lb weight calc2.png
La première colonne reprend les temps de réponse des reader. La première ligne reprend les valeurs lb_weight. L’intersection des deux donne le temps de réponse corrigé en fonction du lb_weight

Exemple:

Vous avez deux reader avec un temps de réponse de 400ms. Vous voulez privilégier un reader en faisant croire que son temps de réponse est de 300ms.

Dans le tableau, vous repérez la ligne qui commence par 400, vous recherchez dans cette ligne la valeur 300 . Dans l’entête de colonne vos trouvez la valeur lb_weight à donner au reader (130). En entrant cette donnée, vous privilégiez ce reader.