Tarantool: Look Analyst

Bonjour à tous! Je m'appelle Andrey Kapustin. Je travaille en tant qu'analyste de systèmes chez Mail.ru Group. Nos produits forment un écosystème unique pour l'utilisateur, dans lequel les données génèrent de nombreuses infrastructures indépendantes: services de taxi et de commande de nourriture, services postaux, réseaux sociaux. Aujourd'hui, plus vite et plus précisément nous pouvons prédire les besoins du client, plus vite et plus précisément nous pouvons lui proposer nos produits.

De nombreux analystes et ingénieurs système posent maintenant des questions:

  1. Comment concevoir une architecture de plateforme de déclenchement pour le marketing en temps réel?
  2. Comment organiser une structure de données répondant aux exigences d'une stratégie marketing pour interagir avec les clients?
  3. Comment assurer un fonctionnement stable d'un tel système sous des charges très élevées?

Ces systèmes sont basés sur le traitement à haute charge et l'analyse des mégadonnées. Nous avons acquis une expérience considérable dans ces domaines. Et comme exemple d'une histoire réelle, je vais vous parler de notre approche de l'analyse et du développement de solutions dans le domaine du marketing en temps réel à l'aide de Tarantool.

Une fois, un grand opérateur de télécommunications est venu nous voir pour obtenir de l'aide.

La tâche était la suivante:

Nous avons plus de 100 millions d'abonnés. Nous en savons beaucoup sur eux: solde actuel, volume de trafic, services connectés, trajets, lieux favoris. Nous utilisons les informations comme nous le pouvons: nous collectons des données pendant la journée, mettons d'énormes quantités d'informations dans le référentiel (DataLake). Nous commençons les gestionnaires la nuit, le matin nous créons des campagnes publicitaires et envoyons des offres.

Et nous voulons faire la même chose en temps réel!

Pourquoi? Parce que plus l'opérateur de télécommunications traite rapidement les informations, plus il peut gagner d'argent. Par exemple, sur les achats impulsifs: un utilisateur passe devant un café à l'heure du déjeuner, puis une remise vient sur son téléphone pour qu'il choisisse ce café en particulier. Autrement dit, vous devez «simplement» proposer le bon produit au bon moment et aider à répondre immédiatement à l'offre de manière pratique.



Ce dont vous avez besoin pour résoudre un problème commercial:

  • Vous pouvez dĂ©terminer le besoin via le profil client.
  • DĂ©terminez le moment - en fonction des Ă©vĂ©nements de la vie humaine.
  • Stimulez le feedback - choisissez le canal de communication optimal.

C'est ce qu'on appelle le marketing en temps réel. En ce qui concerne le secteur des télécommunications, l'envoi de messages personnalisés pertinents aux abonnés au bon moment avec la possibilité de répondre IMMÉDIATEMENT à une offre. Les propositions peuvent être formulées à la fois pour le groupe cible et pour un utilisateur spécifique, tandis que la demande doit dans tous les cas être traitée en temps réel.

D'un point de vue technique, nous devons résoudre les problèmes suivants:

  • Tenir Ă  jour les donnĂ©es de plus de 100 millions d'abonnĂ©s;
  • Traitement des flux d'Ă©vĂ©nements en temps rĂ©el Ă  une charge de 30 000 RPS;
  • Formation et routage d'offres ciblĂ©es aux abonnĂ©s avec la satisfaction d'exigences non fonctionnelles (temps de rĂ©ponse, disponibilitĂ©, etc.);
  • Connexion transparente de nouvelles sources de donnĂ©es hĂ©tĂ©rogènes par les abonnĂ©s.

Dans ce cas, le «temps réel» signifie le traitement des informations en 30 secondes. C’est inutile plus longtemps, le moment est manqué, le client est parti. Et le plus triste, c'est que dans une telle situation, il ne sera pas clair pourquoi (?) - avons-nous proposé la mauvaise chose ou n'avons-nous pas réussi à temps?

Obtenir la réponse à cette question est très important pour le développement de produits:

  1. Promotion marketing de vos produits: testez les hypothèses, augmentez les revenus.
  2. Nous attirons des clients potentiels: nous investissons dans la publicité, nous conquérons le marché.
  3. Nous connectons des services ou services supplémentaires: nous élargissons la gamme de produits.

Il est facile de faire des erreurs à chaque étape. Et le prix de l'erreur est super. Nous devons battre rapidement et avec précision! Et pour cela, les informations client doivent être complètes et à jour. Dans ce cas, l'information vaut vraiment le coup!

Après tout, plus nous en savons sur nos clients, plus nous gagnons. Cela signifie que l'ajout de chaque nouveau paramètre au profil client augmente la précision du ciblage. Mais c'est un processus continu parce que:

  1. La clientèle est en constante augmentation.
  2. La gamme de services s'Ă©largit.

Dans ces conditions, il est très efficace de segmenter la clientèle. Dans ce cas, il a été décidé d'utiliser le mécanisme de stratification - classification multivariée des abonnés.

En termes simples, nous distinguons des groupes spécifiques d'abonnés (strates) par des plages de valeurs d'un nombre illimité d'attributs. Dans ce cas, l'abonné doit changer automatiquement la strate immédiatement lors de la transition de la valeur d'attribut vers la plage correspondante.

La figure ci-dessous est un exemple de modèle tridimensionnel de stratification de l'enfance. Une balle est un abonné.



Pour chaque client, nous pouvons calculer combien ils ont dépensé pour l'attirer, combien ils ont gagné et comment. Autrement dit, nous savons combien coûte l'information et combien nous perdons si nous ne la mettons pas à jour.

Ils ont compté et décidé - il faut mettre à jour! Et immédiatement des problèmes surgissent: il manque toujours quelque chose. Dans chaque projet, de nouvelles exigences viennent du client qui contredisent les savoirs traditionnels, l'architecture, les uns des autres et ... le bon sens. Le maintien de l'intégrité et de la pertinence des données devient chaque jour plus difficile. De nouvelles sources d'informations apparaissent avec de nouveaux attributs qui ne savent pas où stocker et comment traiter.

Il convient de garder à l' esprit que plus normaliséles données, plus les restrictions, les répertoires, les vérifie. Quiconque a essayé d'ajouter quelques champs à la table «on the go» sait de quel type de «peintre» il s'agit: il ne rentre pas dans le modèle de données actuel! Et comment le client peut-il expliquer que si vous ajoutez un nouveau champ, vous devrez réécrire la moitié du code du projet?! Nous «réduisons» ou «jetons» les analyses «supplémentaires» à l'entrée et, par conséquent, nous ne pouvons pas proposer d'offres pertinentes.

Des collègues occidentaux appellent cet effet «Merde - Merde».

Par conséquent, les données occupent plus d'espace et sont plus difficiles à traiter. Avec l'augmentation de la quantité d'informations, cela devient critique, car la vitesse de traitement des transactions diminue. Et notre objectif est de traiter chaque demande pendant moins d'une minute avec une charge de 30 000 demandes par seconde.

Conclusion: pour le marketing en temps réel, normalisationne convient pas à plus de 100 millions d'abonnés.

Nous sommes arrivés à une solution sous la forme d'un profil client universel. Il réside dans le stockage de la valeur-clé, nous ne pouvons donc pas corriger la structure des données. Chaque colonne est une clé et une valeur, qui peuvent être n'importe quoi.

Nous avons obtenu une combinaison de:

  • Attributs statiques rarement mis Ă  jour (nom, passeport, adresse). Bloc obligatoire avec ID.
  • Et une queue dynamique de longueur arbitraire - des donnĂ©es souvent mises Ă  jour qui dĂ©pendent de la source. Plusieurs blocs indĂ©pendants pour chaque source.

Cette approche est appelée dénormalisation. Est-ce pratique?

  1. La «queue» peut ne pas être validée.
  2. Nous sauvegardons les données "brutes" telles quelles sans traitement.
  3. Nous sauvegardons toutes les informations entrantes, nous ne perdons rien.
  4. ID , .
  5. ( 2-3 ), .
  6. : .


Vous devez maintenant sélectionner un outil pour la mise en œuvre. Ceci est généralement effectué par l'architecte en fonction des exigences que l'analyste a assemblées. Il est très important de connaître le NFT - la quantité de données attendue et le niveau de charge. Cela dépend des méthodes de stockage et de traitement des données que nous utiliserons.

Le titre de ce chapitre indique que notre service traitera un grand nombre de données. Et beaucoup - combien? Voyons cela.

Les données peuvent être considérées comme volumineuses si la relation ne leur est pas visible à l'œil nu.

Nous traitons plus de 100 millions de profils de clients différents qui contiennent des informations non structurées, sont souvent mis à jour et utilisés - ce sont de vrais big data.

Vous devez mettre en cache les profils clients actuels. Sans stockage de données chaudes dans la RAM, le traitement en temps réel ne peut pas être réalisé.

Charge élevée


Nous allons maintenant traiter de l'intensité de la charge, c'est-à-dire du nombre de demandes. Le terme «charge élevée» est utilisé pour décrire des situations où l'équipement cesse de supporter la charge.

Nous traitons différents types d'événements qui se produisent en continu avec une intensité de 10 à 30 000 requêtes par seconde. Dans ce cas, une logique métier complexe est utilisée et la vitesse de réaction est critique. De toute évidence, nous concevons un service très chargé, qui devrait évoluer dynamiquement en fonction de la charge instantanée.

Tarantool comme accélérateur


Chez Mail.ru Group, nous utilisons Tarantool pour résoudre ces problèmes. Sur Habré, beaucoup a été dit sur la façon dont il est construit «sous le capot», je ne le répéterai pas, je ne retiendrai que les points principaux:

Tarantool est un SGBD et un serveur d'applications en mémoire dans une bouteille.

Lorsque vous travaillez avec une grande quantité de données, il est conseillé de l'utiliser de deux manières:

  1. En tant que vitrine de données pour la mise en cache des informations dans la RAM dans le but d'accélérer l'accès.
  2. En tant que serveur d'applications pour le traitement des données selon les règles spécifiées.

Autrement dit, la logique métier est stockée à côté des données, ce qui est vital pour les services très chargés. Dans notre projet, nous avons utilisé Tarantool comme une vitrine de données «intelligente» avec une logique métier intégrée, selon laquelle le traitement à la volée du flux entrant d'événements et d'informations a lieu.

Pourquoi Tarantool est efficace pour RTM:

  1. Mise en cache des données à chaud. Le profil client est mis en cache en mémoire, il est donc toujours à jour.
  2. Informatique complexe en temps réel. Des offres personnalisées aux clients sont formées en temps réel pour chaque événement.
  3. Solution tolérante aux pannes et évolutive:

Il y a deux risques Ă©vidents dans notre projet:

  1. , . — Tarantool c , .
  2. , . , . , . , . , c'est à dire. répartir 100 millions d'enregistrements de la table de profil client entre plusieurs fragments afin de paralléliser le traitement des requêtes et ainsi réduire la charge sur l'enregistrement. L'exemple le plus simple consiste à diviser la table de profil client par la plage de valeurs d'ID. Pour résoudre ce problème, Tarantool fournit des outils de mise à l'échelle horizontale, dont vous trouverez plus d'informations, par exemple, dans l'article « Tarantool Cartridge: sharding Lua backend in three lines ».

Conclusion


Tarantool ne remplace pas Oracle ou d'autres référentiels analytiques. En même temps, il est efficace pour traiter une grande quantité de données en temps réel. Nous avons réussi à résoudre la tâche du client dans les conditions convenues et le budget du projet, je recommande donc d'expérimenter avec cet outil lors de la création de services très chargés.

All Articles