StyloBot Release Series: La propriété de compression (Français (French))

StyloBot Release Series: La propriété de compression

Thursday, 10 September 2026

//

16 minute read

La même forme de quatre pièces, -, continue d’apparaître à l’échelle du StyloBot.:, établit une base,,, maintient le delta utile,,, mesure la dérive et se consolide lorsque les éléments probants le justifient.

StyloBot

Le modèle comportemental débute dans Comportement, Non identité. Le modèle de cache et d’apprentissage est en Apprentissage pour devenir plus rapide, pendant Signal Shingle couvre le tableau de bord en détail. La source est sur GitHub.


La forme récurrente

Un système conventionnel stocke souvent d’abord des événements détaillés et ajoute un rôle de roulissement-up plus tardM SK1 Le StyloBot a un comportement de roulement-up à plusieurs niveaux différents , mais aucun élément ne possède l’idée de compressionMSC4

Le modèle comporte quatre parties:

  • Base: le sommaire stable selon lequel les observations subséquentes sont comparées à
  • Delta: la partie d’une nouvelle observation que la base ne décrit pas déjà
  • Déplacement: un changement mesuré par rapport à la base
  • Consolidation: remplacement ou mise à jour de la base une fois que les preuves suffisantes ont été recueillies

Les noms changent à chaque couche, mais le travail ne l'est pas

Surface Base MSC2 Delta MSC3 Drift SMC4 Consolidation SMC5
empreinte digitale archétype et RootCentroid DeltaFromArchetype distance de nouveauté et changements de surface absorption et rétablissement des racines de grappe
Persévérance courant dans la mémoire ou les rangées durables - mutations depuis le dernier passage M âge et importance R fusion coaléxée de l'écriture ou des rangées P
tableau de bord dernière page matérialisée changement d'outil de saisie shingle données - changement du curseur supprimé MSк6 traduction en ligne SMk7 matérialisation SMk8
Nombre de nodes réputation durable partagée chaque node ' observations locales vue locale froide ou dépassée SSK5 écrire MSG6 derrière et lire MSg7 par l'entremise SMG8

Cela est important parce que les observations ne sont pas limitées. Un service actif de longue durée - ne peut garder chaque demande en mémoire ou en détail pour toujoursM SK2 L’état sommaire est limité par le nombre d’acteurs , et non par le number of requests.

Le résumé doit encore se déplacer. S’il change à chaque demande , il n’est pas une référence utile. s’il ne se modifie jamaisM SK3 la dérive comportementale réelle disparaît dans l’histoire inachevéeMNK4 StyloBot vise le milieuMRK5 suffisamment stable pour reconnaître un acteurMMK6 mais capable de se déplaçar lorsque les éléments de preuve le font MNK7 J’ai appelé cela Mesure de la métastabilité dans Comportement, Non identité.

Détection: réduit les observations à une forme mobile

StyloBot représente un comportement en tant que vecteur: une liste ordonnée de numéros décrivant des caractéristiques telles que le moment et la forme de demande. Un archétype est un vecteur de référence connu. A centroid est la position moyenne d’un ensemble d’observations. Si ces termes sont nouveauxM SK1 le modèle vecteur est introduit visuellement dans Comportement, Non identité.

L'article 5 de la Loi sur l'immigration et le statut des réfugiés Fingerprint le document porte à la fois une référence et une différence compacte de ce dernier:

public float[]? RootCentroid       { get; init; }
public float[]? DeltaFromArchetype { get; init; }
public string?  DeltaArchetypeId   { get; init; }
public int      DeltaCount         { get; init; }
public int      NoveltyCount       { get; init; }

RootCentroid est la référence de vie plus longue- utilisée pour le déplacement . À l’allocation ordinaire, elle commence à partir du centroïde d’archétype le plus proche, puis un passe-groupe peut la remplacer par une moyenne communautaireMSC3 Les champs delta répondent à une question différenteM SK4 où se situe cette empreinte digitaleMSL5 les observations récentesMSR6 les observations ordinaires se trouvent en relation avec leur archetype le moins proche MSL7

Mesure de la nouveauté

IdentityDeltaMath.FoldObservation Résolve l’archétype le plus proche pour chaque observation. Il mesure ensuite la distance entre l’observation et cet archétype.

Il s’agit d’un Distance de Mahalanobis, qui mesure chaque dimension par sa variance escomptée . En anglais simplesM SK2 le mouvement d'une caractéristique normalement stable compte plus que le même mouvement sur une caractérisation bruyante . C'est plus utile ici que de traiter toutes les dimensions comme étant tout aussi fiables

Le code sépare ensuite le mouvement ordinaire de la nouveauté:

if (distance < options.MahalanobisNoveltyThreshold)
{
    var existing = newDeltaFromArchetype;
    var count = newDeltaCount;
    var updated = new float[vec.Length];

    for (var i = 0; i < vec.Length; i++)
    {
        var residual = vec[i] - anchor.Archetype.Centroid[i];
        updated[i] = existing is not null && existing.Length == vec.Length && count > 0
            ? (existing[i] * count + residual) / (count + 1)
            : residual;
    }

    newDeltaFromArchetype = updated;
    newDeltaCount = count + 1;
}
else
{
    newNoveltyCount = fp.NoveltyCount + 1;
}

Une observation à l'intérieur du seuil est pliée en moyenne courante. Le système garde un vecteur et un compte au lieu de garder chaque vecteur contribuantM SK1 Une observation hors du seuille ne distorsionne pas cette moyenne. Elle augmente NoveltyCount plutôt.

Cette distinction est importante. Le delta décrit les mouvements normaux à l’intérieur d’un embarquement connu.

Le centroid est une autre compression.

Le centre de l’imprimerie personnelle de ' est mis à jour séparément dans FingerprintAbsorptionService:

newCentroid[i] =
    (obs.Centroid[i] * maturity + obs.Vector[i]) / (maturity + 1);

Il s’agit d’une moyenne courante. CentroidMaturity enregistre le nombre d’observations qui y ont contribué, de sorte que l’état demeure un vecteur plus un comptement peu importe combien d’observations arrivent.

Il est étroitement lié à la mise à jour de l’EWMA utilisée ailleurs dans StyloBot: les deux déploient un résumé existant vers une nouvelle observation . La différence est la taille des étapes. Cette centroide utilise 1 / (maturity + 1), qui devient plus petit au fil du temps et donne à chaque observation un poids égal dans la moyenne finale . Une EWMA conserve habituellement une taille fixe des étapes M SK2 qui donne davantage d’influence aux observations récentes et laisse les preuves antérieures s’éffacer Apprentissage pour devenir plus rapide Cette distinction s’articule autour de la Ewma.Update Code.

Le pli ne fonctionne pas en ligne avec chaque demande. La première ObservationAppended Le signal ouvre une fenêtre per-détecteur d'oeil, présentement 250 ms par défautM SK3 Lorsque cette fenêtre fixe est ferméeMSC4 le service plie tout ce qui s'y trouve accumulé Tick5m arrêt de travail manquant en raison d'une exception, un restart, ou une ligne tardiveM SK2 Ce modèle suit le signalMSC3développé par la programmation décrit dans Signales éphémères.

Une écriture limitée, n'est pas une écriture libre

La vérification de la durabilité compare les compteurs de mémoire in- aux derniers compteurs persistants:

public static bool DeltaAdvancedPastWatermark(
    int deltaCount, int noveltyCount,
    int persistedDeltaCount, int persistedNoveltyCount)
    => deltaCount != persistedDeltaCount ||
       noveltyCount != persistedNoveltyCount;

Une observation confirmatoire avance encore DeltaCount, afin qu'il puisse causer une mise à jour durableM SK1 L'épargne est la forme de cette mise à niveau . Si un empreinte digitale change plusieurs fois entre les passes des échantillonnateurs, le passe écrive son dernier paramètre fixeMSC4 delta de largeur et compte une seule foisMNK5 Il n'ajoute pas le même nombre de lignes d'événement

Déplacement de surface

Un deuxième sommaire de dimensions, septM SK1 manipule les changements de surface tels que le pays , l’ASN et l’utilisateur M SK3 la famille des agents . Au moment d’absorption MSC5 DetectSurfaceDimDriftAsync comparer ces dimensions avec la ligne de base établie. Sur changement, il replie leurs magnitudes en une largeur fixe DriftMagnitudes vector et promeut les valeurs les plus récentes à la nouvelle ligne de base.

DriftFrequency utilise le Modèle EWMA du système d'apprentissage. Les changements récents comptent plus que les anciens ,, ce qui permet d’estimer de façon compacte la fréquence à laquelle l’ empreinte digitale change sans tenir une liste historique. Explication de la NIST donne le formulaire statistique général.

Qu'est-ce que vivre aujourd'hui

Le delta et le chemin de la nouveauté sont derrière DeltaNoveltyOptions.Enabled, par défaut false. Lorsqu'il est désactivéM SK1, les champs delta restent nulles ou zéro et le comportement centroïde antérieur se poursuit inchangé .

Il existe également une importante limite entre les données mises en œuvre et le comportement prévu. NoveltyCount est enregistrée et persistante, mais aucun chemin de regroupement en cours ne l’affiche encore . Les commentaires la décrivent comme un apport à une décision future de consolidation BotClusterService ne le consomme pas.

Ce qui fonctionne est le passeur de groupe. Il regroupe la fenêtre de signature en utilisant Détection communautaire de Leiden, avec la propagation de l'étiquette disponible en tant que répercussion ReseatRootCentroidsAsync pour les grappes appropriées. La base est vraiment remplacée sur un calendrier,, mais aujourd’hui cette décision provient du snapshot de la grappe plutôt que NoveltyCount.

Persistence: sauvegarder la forme actuelle

A écrire-à l'arrière de la boutique mise à jour de la mémoire immédiatement, puis persiste dans l'arrière-plan . Cela maintient la latence de la base de données hors du chemin de requête. Un LFU, ou au moinsM SK1 fréquemment - cache utilisé, limite la mémoire en éliminant les entrées froides avant celles chaudes Apprentissage des LRU passe plus en profondeur dans les raisons pour lesquelles une cache limitée peut améliorer un système d’apprentissage.

StyloBot's réutilisables WriteBehindLfuStore<TKey, TValue, TWriteOp> appuie deux modes d'écoulement. Par défaut, les opérations en queue sont reprises. Les entrepôts qui optent pour l'échantillonnage comportemental prennent une route plus comprimée :

if (UseBehaviouralSampleDrain)
{
    // A hot key that mutates N times this cycle persists once, not N times.
    _dirtyKeys[key] = 0;
}
else
{
    _writeQueue.Writer.TryWrite(op);
}

Dans le mode d'échantillonnage, une mutation ne marque que la clé nulle . Le draineur lit plus tard la clé' sa valeur couranteM SK3 classe les entrées nulles par significationMSC4 et instaure un lot limitéMNK5 Une clé modifiée MRK6 fois au cours de l'intervalle apparaît une fois dans ce lot MNK7 La signature SQLiteMMK8 les entrepôts centroïdes de session et d'intention optent pour ce modeMسک9

La rangée durable est la base.

Enfouissement de la table des détections

Le tableau de bord SQLite de ' detections Tableau applique la même idée aux rangées historiques. Il utilise une forme de rangée pour les événements et les résumés bruts . Une ligne sommaire est marquée fused = 1.

Chaque détection reçoit une note d’importance une fois :

flowchart TB
    R["Aged detection rows"] --> P1{"Older than HotWindow<br/>and low importance?"}
    P1 -->|yes| FUSE["Fuse by signature, hour,<br/>domain, country and bot type"]
    P1 -->|no| P2{"Older than<br/>FullAbsorptionAge?"}
    P2 -->|yes| THIN["Remove request detail"]
    P2 -->|no| KEEP["Keep full detail"]
    FUSE --> COUNT["Keep exact aggregate counters"]
    COUNT --> PRUNE["Delete after retention"]
    THIN --> PRUNE

    classDef outline fill:none,stroke:#94a3b8,stroke-width:2px;
    classDef fold fill:none,stroke:#38bdf8,stroke-width:3px;
    classDef lifecycle fill:none,stroke:#a78bfa,stroke-width:3px;
    class R,P1,P2,KEEP outline;
    class FUSE,THIN,COUNT fold;
    class PRUNE lifecycle;
    linkStyle default stroke:#94a3b8,stroke-width:1.5px;

Low-Les rangées d'importance supérieures aux deux sont regroupées par signature.

Les rangées qui doivent demeurer vérifiables individuellement, telles que l'application et les rangées élevéesM SK1 rangées menaçantes , ne se fusionnent pas. Une fois qu'elles passent la MSC4 heure de défaut complèteMNK5 âge d'absorption MNK6 le détail de leur demande est annulé mais leurs champs agrégatifs restent–. La conservation supprime en fin de compte les deux types de rangée.

Le chemin de lecture comprend le marqueur sommaire. Utilisation des demandes de compte hit_count pour les lignes fusionnées, pendant le forage-les demandes descendantes excluent des lignes Fusionnées parce qu’elles ne représentent plus de demandes individuellesM SK2 Ceci préserve les cotes agrégées tout en permettant la disparition du détail de l’ancienne demandeMSC3

Dans la voie FOSS SQLite, ce pli est opt-in: TemporalStore.CompressionEnabled par défaut à false. Si elle reste hors de la ligne, les rangées conservent tout le détail jusqu’à ce que leur conservation normale les supprime.

Tableau de bord: materialiser la base, mettre à jour les pièces

Matérialisation signifie calculer une vue avant qu’une demande ne l’exige. Au lieu de reconstruire une page du tableau de bord pour chaque lecteur , DashboardMaterializerCoordinator préparer un modèle de page hors du fil de demande et le stocker dans DashboardContentCache.

Le chemin de demande est délibérément incapable de composer sur un miss froid:

if (_atom.TryGet(key, out var existing))
{
    if (!existing!.IsWarming)
        RecordWarm(key.Envelope, tick, key.Window);
    return Task.FromResult(existing!);
}

return Task.FromResult(DashboardPageResult.Warming);

Un lecteur à froid obtient un résultat de réchauffement honnête. Un lecteur dont la dernière génération est encore préparée obtiendra le dernier coup d’œil chauffé avec succès. Un vol unique- La tâche est partagée par des tentatives concomitantes de réchauffer le même enveloppe, qui empêchent les travaux de composition doubles.

Le matérialisateur ne reconstruit pas tout sur chaque tick de l'horloge. Il observe le changement des curseurs pour les surfaces de données pertinentes. Un curseur mobile rend l'enveloppe due ; l'intervalle de refroidissement agit comme une limite maximale d'immersion lorsqu'aucun curseur ne se déplaceM SK3

Le modèle de page est la base. DashboardWidgetShingleCache détient les petits morceaux rendus. Chaque clé de shingle inclut le widget, ses filtres et un fichier de donnéesM SK2 modifier la version . Lorsque l'un des fichiers de données du widget*' est modifié, ce dernier reçoit une nouvelle clé et un nouveau fragmentMSC6 Le serveur peut retourner seulement ces fragments en utilisant HTMX out-of-band swaps, qui remplacent les éléments correspondants ailleurs sur la page

Il s'agit de la représentation-version layer de la même propriété de compression :reutiliser la page complète qui est encore valide, alors envoyer seulement les pièces dont la version a changéM SK3 Signal Shingle couvre l’architecture de rendering intégrale.

Le tableau de bord évite également d’entreposer des verdicts du même type. SignatureAggregateCache conserve le nombre de demandes et les données de projection, mais les scalars de verdict sont résolus à partir du chemin des empreintes digitales canoniques par ResolvedVerdict. La page passe à la source au lieu de maintenir une autre copie qui change indépendamment

Plusieurs nodes: convergent dans un état durable

Deux procédés ne peuvent pas partager un entrée de cache ou d'enregistrement central dans la mémoire.- Chaque node a sa propre vue chaude.

Les documents de déploiement FOSS décrivent les répliques qui partagent un magasin de réputation persistant, permettant que l’on reconnaisse une empreinte digitale apprise par une réplique par une autre Architecture de l'automobile montre la forme plus large de déploiement.

Il s’agit d’une convergence.

Les familles de signature sont apparentées, mais leur champ d’application est plus restreintM SK1 SignatureConvergenceService Évalue les familles détenues par les nodes's dans le processus SignatureCoordinator. Il ne s'agit pas d'un protocole de la famille des nodes

Dans cette sphère locale, une famille a une signature canonique choisie parmi les membres ayant le plus grand nombre de demandes, soit , avec la première, - avec des liens de rupture du temps observés, .. La cote de fusion combine un chevauchement temporel,,, une similarité temporelle, MSC5, l'entropie du chemin, M SK6, le taux de demande et le bot, MSL7, un accord de probabilité, MST8. Une signature classifiée par un bot, à savoir -, ne peut pas se fusionner avec une personne.

La séparation fournit le chemin de dérive. Si la probabilité moyenne du bot d’un membre' diffère assez loin de la moyenne familialeM SK2 il est retiré . Un réfrigération de cinq minutesMSC4 empêche l’appartenance immédiate du même couple de se regrouper de nouveauMNK5

_splitCooldowns[cooldownKey] = DateTime.UtcNow.AddMinutes(5);

Ce retard est hysterèse: la transition inverse est rendue plus difficile que la transition vers l’avant, de sorte que les faibles fluctuations ne font pas le chatter entre deux états du système. Apprentissage pour devenir plus rapide.

Quel est le coût du modèle?

La compression déplace les coûts et l’incertitude autour de ce problème. Elle n’enlève pas ces coûts.

Une base prend du temps pour devenir utile. Les nouvelles empreintes digitales ont besoin d’observations , les nouveaux enveloppes de tableaux de bord peuvent brièvement indiquer le réchauffement, et les magasins partagés ont encore besoin de temps pour propager un node

Une base peut aussi être erronée. Les voies de récupération font donc partie du design: les preuves récentes reçoivent plus d’importance , les observations nouvelles restent hors du delta ordinaireM SK3 les membres de la famille divergentes peuvent se scinderMSC4 et les pages matérialisées ont un intervalle de refroidissement limitéMNK5

Le modèle n’est pas universel. Une surface fortement personnaliséeM SK1 écrire - une surface lourde peut ne pas avoir de base stable commune qui vaut la peine d’être préservée. Il fonctionne ici parce que la détection des robots est un flux d’observations répétées sur les acteurs qui se déplacent lentementMSC4 et le tableau de bord est un tableau de lecture- vue lourde sur cet état.

La version d’un-sentence

La compression est la façon dont StyloBot maintient l’état: s’accorde sur une base , conserve les différences utiles M SK2 mesure le mouvement , et ne remplace pas la base que lorsque des preuves suffisantes sont arrivées


StyloBot Release Series

  1. Comportement, Non identité: pourquoi StyloBot modele les clients de façon comportementale
  2. Behaviour-Aware ASP.NET UI: le serveur - remet la surface sur ce résultat de détection
  3. Trouver et rétablir une croissance sans limites dans les services longs-Running .NET: maintenir le moteur limité dans la production
  4. Behaviour-Aware TypeScript UI: ExpressM SK1 Fastify, et composants de navigateur
  5. L'architecture de la Sidecar: reliant le détecteur aux piles NET non -.
  6. Apprentissage pour devenir plus rapide: quatre - niveau de mémoire et apprentissage adaptatif
  7. Étudier ce qui ne va pas se tenir: essai d'un détecteur non deterministe
  8. StyloExtract: un convertisseur local-learning HTML à Markdown
  9. La propriété de compression: base , deltaM SK2 dérive, consolider

Articles connexes

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.