BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités La Catégorisation Des Emails Par Slack

La Catégorisation Des Emails Par Slack

Slack a récemment publié les détails de son moteur de catégorisation d'adresses mail, capable de déterminer si une adresse est interne ou externe. Les développeurs ont utilisé une représentation quasi temps réel, assurant la cohérence à terme des données. Ils ont aussi implémenté un mécanisme de détection de dérive pour corriger les données erronées sans interrompre le fonctionnement du moteur.

Les motivations des choix d'architecture de l'équipe sont expliquées ici par Sarah Henkens, développeuse chez Slack :

Pour fournir des suggestions intelligentes à nos utilisateurs, nous avons développé un moteur de catégorisation capable de déterminer si une adresse électronique est interne ou externe. Pour ce faire, nous avons besoin d'une représentation quasi temps réel du nombre total d'utilisateurs de chaque équipe, regroupés par domaine et par rôle.

Une réécriture complète des données nécessitait d’effectuer l'agrégation de millions d'utilisateurs qui aurait été trop coûteuse à exécuter quotidiennement. En s’appuyant sur une cohérence à terme de nos données, nous avons pu déployer cette fonctionnalité avec des mises à jour de données en temps réel, afin de fournir un modèle de données très précis pour prédire les types d'e-mails échangés par une équipe.

Lorsque les utilisateurs de Slack invitent des collègues dans un espace de travail, Slack doit déterminer s'ils ont l'intention d'inviter des collaborateurs internes ou externes. Il recommande alors d'utiliser soit des invitations d'espace de travail standard pour les collaborateurs internes, soit des invitations Slack Connect pour les collaborateurs externes. Le diagramme suivant décrit le processus.


Source: https://slack.engineering/email-classification/

Tout d'abord, les ingénieurs de Slack comparent le domaine de l’adresse de chaque invité avec les paramètres de domaine du responsable et de l'émetteur de l’invitation. Cette comparaison qui repose sur les données du contexte est effectuée en O(1), donc rapide à exécuter.

En revanche, la récupération du contexte d’une équipe nécessite une requête en base de données pour chaque domaine. Sarah Henkens explique le problème:

Étant donné que les groupes Slack peuvent atteindre plus d'un million d'utilisateurs, un contrôle par agrégation des données en temps réel pendant le processus de catégorisation serait trop coûteux. Nous avons dû concevoir un modèle de données qui reflète l'ensemble des données agrégées en temps réel.

Nous utilisons Vitess pour stocker les données agrégées dans une simple table partagée par team_id. Comme la catégorisation se fait toujours dans le contexte d'une seule équipe, cela garantit que nous n’utilisons qu'un seul shard.

Chaque shard consolide une vue matérialisée agrégeant le nombre d'apparitions du domaine de l'email, pour une entreprise et un rôle donnés. Ensuite, le moteur de catégorisation peut interroger cette vue et prendre une décision à l’aide d’une analyse heuristique des données en base. Voici le schéma de la vue.

CREATE TABLE `domains` (
   `team_id` bigint unsigned NOT NULL,
   `domain` varchar NOT NULL,
   `count` int NOT NULL DEFAULT '0',
   `date_update` int unsigned NOT NULL,
   `role` varchar NOT NULL,
   PRIMARY KEY (`team_id`, `domain`, `role`)
)

Par exemple, chaque fois qu'un utilisateur rejoint un espace de travail ou modifie son adresse électronique, un événement est généré dans le système. Un programme utilise ces événements pour appliquer les mutations appropriées sur la vue matérialisée, au lieu de la recalculer constamment.


Source: https://slack.engineering/email-classification/

Cependant, avec des queues asynchrones, il n'est pas garanti que le job de mutation traitera chaque événement une seule fois. Cela entraîne progressivement une dérive du compte total dont les ingénieurs doivent tenir compte. Une des solutions possibles est de reconstruire régulièrement la vue intégralement.

Néanmoins, les ingénieurs de Slack ont décidé de construire un module de correction. Ce dernier est déclenché chaque fois que le compte total d'un domaine devient négatif afin d’indiquer des données invalides. Il compare alors les données agrégées avec les données en temps réel et effectue une mise à jour pour corriger le problème. Comme les opérations correctives sont de simples UPSERT qui effectuent un +N ou un -N avec la valeur de comptage relevée dans la base de données, les mutations effectuées en parallèle d'une correction ne sont jamais perdues, mais traitées sans interruption.

La prochaine étape pour Slack sera la mise en œuvre de deep learning afin d’améliorer encore ce moteur, ainsi que la précision de ses résultats.

 

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT