Expériences d'infrastructure A / B dans la grande recherche. Rapport Yandex

Les tests A / B sont un moyen puissant de tester les interfaces avant de publier à un public entier. J'ai décidé de dire en quoi cet outil consiste, de quelles fonctionnalités de journalisation il dispose, comment les métriques sont compilées et quelle est l'essence des expériences dans l'interface. Parlons de leur appareil et de leurs services pour résoudre les tùches analytiques quotidiennes. Nous allons discuter de plusieurs pistes de développement pour un développeur qui semble déjà capable de tout faire mais qui en veut plus.



- Mon nom est Lesha, je travaille dans la recherche et développe les résultats de recherche de produits les plus importants, probablement Yandex.

Vous avez tous, d'une maniÚre ou d'une autre, déjà utilisé l'une des recherches. Quelques termes. Le problÚme se compose de différents blocs. Il existe de simples documents organiques que nous collectons sur Internet et que nous savons comment présenter, et il existe des blocs spéciaux que nous affichons en tant que balisage spécial. Nous connaissons beaucoup de données sur leur contenu. Ces blocs sont appelés sorciers. Terminologie spécifique adoptée par Yandex et pas seulement.

Aujourd'hui, je veux vous dire comment nous menons des expériences, quelles nuances, quels outils et quelles merveilleuses inventions sont dans nos zashniks dans ce domaine de notre activité.

À quoi servent les tests A / B?


Par oĂč commencer? Pourquoi Yandex a-t-il besoin d'expĂ©riences A / B?

J'aimerais commencer par les paroles. Il n'y a pas si longtemps, avec ma fille, j'ai regardé un court métrage scientifique «4,5 milliards d'années en 40 minutes. Histoire de la Terre. " Il y a trÚs souvent des expériences A / B. Y compris ces derniers. J'ai essayé de faire l'un des plus intéressants et amusants de cette diapositive. C'est alors que l'évolution a plusieurs branches. Par exemple, il existe deux familles: les marsupiaux et le placentaire. Et comme nous le voyons maintenant, placentaire gagne en quelque sorte. C'est pourquoi ils gagnent.



C'est dĂ©jĂ  le cerveau humain conçu. Dans le dĂ©veloppement prĂ©natal et ultĂ©rieur des marsupiaux, la boĂźte du crĂąne durcit rapidement et empĂȘche le cerveau de se dĂ©velopper. Et dans le placentaire, tout progresse, tout est mou jusqu'Ă  ce que le cerveau se plie avec des sillons, la surface s'agrandit, ce qui refroidit le nĂ©ocortex. En consĂ©quence, le placentaire gagnera en Ă©volution. À quoi ça sert? La nature a une Ă©volution et ses forces motrices sont la mutation et la sĂ©lection naturelle, comme vous le savez probablement.





La sociĂ©tĂ© a une analogie avec les expĂ©riences A / B de la nature: toute entreprise veut se dĂ©velopper de maniĂšre stable et investit certains efforts, en utilisant les expĂ©riences A / B comme moyen de muter quelque chose, de changer quelque chose. La sociĂ©tĂ© utilise toute la puissance mathĂ©matique de l'analyse pour sĂ©lectionner ces mĂȘmes expĂ©riences.

Les expériences A / B et toute l'évolution visent à atteindre des objectifs, à pouvoir s'observer de l'extérieur, à se comparer aux concurrents et à rechercher de nouvelles niches, hypothÚses. Pour les développeurs en général, en particulier pour les fournisseurs frontaux, il est important de tester de nouvelles fonctionnalités sur une petite fraction de la production.



Une courte histoire ressemble à ceci. On peut dire que 2010, lorsque nos chefs de produit ont fait les premiÚres expériences A / B, est une telle post-période aprÚs le Big Bang. Certains amas d'étoiles commencent tout juste à apparaßtre, une compréhension de la façon de mener des expériences A / B, de ce qu'il faut regarder, de la façon de se connecter. Les premiÚres bosses, les premiÚres erreurs, se sont accumulées.

Au cours de cette période de 2010 à 2019, nous avons obtenu des résultats significatifs. Aujourd'hui, tous ces termes concernant les journaux, les expériences, les métriques, les objectifs, les réalisations, etc. sont déjà fondamentaux pour nous, en particulier pour les nouveaux arrivants aux nouveaux développeurs. C'est notre argot, notre mentalité interne à Yandex.

Big Search


Nous passons directement Ă  la viande, Ă  propos de la grande recherche. Big Search dans sa structure ressemble Ă  ceci.


Nous avons un navigateur, un équilibreur, beaucoup de centres de données et une énorme infrastructure riche sous le capot. Le diagramme montre que l'appareil est complexe, il existe de nombreux composants. Et ce qui est le plus surprenant, tous ces composants sont capables de mener des expériences A / B et, bien sûr, d'écrire et d'analyser des journaux.

Journaux




Les journaux sont écrits par de trÚs nombreux composants. Bien sûr, il est plus intéressant pour nous de parler dans le contexte du frontend. Le frontend enregistre deux grandes tranches importantes. Il s'agit de journaux purement techniques liés à la mesure directe d'un certain temps, des performances sur les appareils clients. Mesure réelle de l'utilisateur, métriques RUM. Voici les temps avant le premier octet, avant le premier rendu, avant de charger tout le contenu DOM et avant l'interactivité.

ParallĂšlement Ă  cela, il existe des journaux Ă©crits par la composition du serveur et du client. Ce sont des journaux d'Ă©picerie. Dans nos rĂ©alitĂ©s, mĂȘme ici, il existe un terme «baobab». Pourquoi le baobab? Parce que l'arborescence: l'arborescence des composants, l'arborescence des fonctionnalitĂ©s, dans laquelle l'un des principaux journaux est les journaux d'impressions, de clics et d'autres Ă©vĂ©nements techniques que nous enregistrons pour une analyse ultĂ©rieure.



Cette diapositive montre un outil pour stocker des journaux dans Yandex et pour l'informatique distribuĂ©e. Nous l'avons appelĂ© Yandex Tables, YT . Tout ce qui a Ă©tĂ© dĂ©veloppĂ© dans Yandex porte la lettre Y. J'ai essayĂ© de rappeler l'analogue de cet outil dans le monde extĂ©rieur. À mon avis, Facebook a un outil MapReduce appelĂ© Hadoop. Il vous permet d'implĂ©menter le stockage et le calcul.

La diapositive montre les statistiques du 8 aoĂ»t de cette annĂ©e. L'un des journaux de recherche les plus prĂ©cieux, les sessions utilisateur, reprĂ©sente 54 tĂ©raoctets par jour sous sa forme. Il s'agit d'une Ă©norme quantitĂ© d'informations qui ne peuvent pas ĂȘtre pellĂ©es sous leur forme brute. Par consĂ©quent, il faut ĂȘtre capable de construire des histoires de haut niveau.

Pour travailler avec des journaux, en particulier, tous nos développeurs particuliÚrement expérimentés doivent maßtriser une sorte d'outil d'analyse.



À l'intĂ©rieur de Yandex, il existe un outil YQL . Il s'agit d'un langage de requĂȘte et de calcul de type SQL sur nos journaux, qui vous permet de crĂ©er toutes sortes d'environnements, d'effectuer uniquement des analyses de bas niveau, de regarder directement des nombres spĂ©cifiques, des centiles moyens et de gĂ©nĂ©rer des rapports. L'outil est assez puissant, il a une Ă©norme API branchĂ©e et de nombreuses fonctionnalitĂ©s. De nombreux processus d'infrastructure sont construits sur sa base.



De plus, parmi nos développeurs front-end et, en particulier, les analystes, l'outil Jupyter est trÚs demandé et populaire. Il est déjà possible avec la puissance des outils Numpy et d'autres que vous connaissez, par exemple Pandas, de faire une sorte de transformations et d'analyses de haut niveau sur nos journaux.



Nous apprécions vraiment les journaux, nous nous battons littéralement pour chaque entrée. Pour ce faire, dans le référentiel de notre projet de recherche, il y a des tests dans le code frontal qui nous permettent de vérifier que tous les événements sont correctement enregistrés. Nous écrivons des tests pour chacune de nos fonctionnalités, nous pouvons vérifier un script spécifique, cliquer sur certains liens, boutons, faire défiler certaines galeries dans notre interface et voir exactement ce que le nombre de journaux est enregistré exactement avec les valeurs que nous attendons, que nous avons enregistrées, pour lesquelles nous avons fait certaines normes. Et puis nous allons entrer dans ces valeurs de référence.



Nous accordons Ă©galement une grande attention aux performances de nos interfaces. Dans toute demande de pool avec de nouvelles fonctionnalitĂ©s ou refactoring de fonctionnalitĂ©s existantes, nous portons une grande attention aux dĂ©lais, volumes, nombre d'appels de certaines fonctions. Sur la diapositive se trouve l'un des rapports d'une demande de pool complĂštement alĂ©atoire. Nous avons deux Ă©tapes de recherche, l'une est de type ajax: nous chargeons d'abord l'en-tĂȘte sur la page avec la flĂšche de recherche, et lorsque toutes les sources de recherche fonctionnent, nous pouvons toujours mesurer les temps du modĂšle et toutes les performances lors du rendu de la partie principale de la sortie.



Pour nous, comme, bien sĂ»r, et pour tout autre sujet informatique, les erreurs de production et dans des environnements spĂ©ciaux sont trĂšs importantes. Nous avons un outil appelĂ© booster d'erreurs, qui vous permet de regarder les vraies erreurs de production en temps rĂ©el avec un assez bon dĂ©lai. Sous le capot, cet outil utilise la base de donnĂ©es ClickHouse, dans laquelle les demandes sont traitĂ©es assez rapidement, et la base de donnĂ©es elle-mĂȘme est conçue pour un travail analytique. La plupart des interactions sont implĂ©mentĂ©es spĂ©cifiquement avec ClickHouse.

Nous avons parlé des grumes, de leurs variétés. Il y en a beaucoup. Afin de déplacer des expériences et d'analyser quelque chose, de prendre des décisions sur quelque chose, nous avons un grand nombre de métriques. Ce sont des circonvolutions sur de gros volumes de données brutes.

Mesures




Yandex compte dĂ©sormais environ 8,6 milliers de mĂ©triques diffĂ©rentes basĂ©es sur les mĂȘmes journaux bruts - et des niveaux supĂ©rieurs, tels que la recherche et les sessions utilisateur. Ils sont trĂšs divers, et souvent prĂ©cisĂ©ment orientĂ©s vers les fonctionnalitĂ©s. Autrement dit, ce sont des mesures spĂ©cifiques Ă  un sorcier particulier, un bloc spĂ©cifique, une tranche de demandes, le type de documents que nous affichons.



Dans nos scénarios de test, il est possible de vérifier la valeur des métriques dans nos propres interfaces. Lorsque nous avons perdu certains scénarios, nous pouvons regarder les résultats des calculs sur les journaux et trouver certaines valeurs métriques.



Les métriques de vitesse jouent un rÎle important. Tous sont assez simples et arrangés. Il s'agit généralement soit d'une sorte de centile, soit de la valeur moyenne et de son écart et de sa signification statistique.



Ils sont nombreux, ils prennent en compte Ă  la fois le temps de standardisation et le temps de livraison du contenu sur l'appareil de l'utilisateur.



Les performances directes du client sont également prises en compte: temps de rendu, temps d'interactivité, etc.

Les expériences




Alors, comment menons-nous des expériences? Par exemple, deux utilisateurs ont soudainement décidé d'utiliser la recherche Yandex. Nous nous sommes mis d'accord - nous allons aujourd'hui, par exemple, chez Starbucks, et nous le recherchons à l'aide de notre recherche. Leurs demandes, tombant dans l'infrastructure de nos sources de recherche, sont marquées de certains marqueurs. Par marqueurs, ces utilisateurs entrent dans divers paniers d'expériences. Chaque panier contient un ensemble spécifique de drapeaux qui activent des expériences dans chacune des sources de recherche. Par exemple, ces deux utilisateurs sont allés aux résultats de recherche et ont utilisé des indices de recherche. Le premier introduit "Starbucks", voit quelques indices mot à mot sous forme de mots. Quand il se retrouve avec une recherche, il voit un bloc sur cette organisation, dit - oui, je l'ai trouvé, j'y vais. Et le deuxiÚme utilisateur découvre un indice de navigation déjà dans l'interface des indices de recherche, passe rapidement à l'organisation et reçoit une réponse plus rapidement.

Pour toute cette variĂ©tĂ© de changements, diffĂ©rences d'interface, dans une certaine fonctionnalitĂ©, l'outil BEM est responsable. Ce n'est pas seulement un cadre, mais toute une mĂ©thodologie pour la dĂ©claration des composants visuels, leurs modifications. MĂȘme ici en arriĂšre-plan se trouvent les chromosomes mĂȘmes de l'ADN qui semblent muter Ă  travers le bem. En fait, le bem est l'ADN de Yandex, l'ADN des expĂ©riences Ă  l'avant.



Il existe plusieurs implĂ©mentations dans la mĂ©thodologie. L'un d'eux se trouve sur la pile i-bem dĂ©jĂ  Ă©tablie, qui se trouve quelque part sous le capot connectĂ© Ă  jQuery. C'est dĂ©jĂ  une technologie assez mature. Sur une telle pile, nous pouvons rĂ©soudre beaucoup de problĂšmes. Aujourd'hui, la technologie bem-react, qui est dĂ©jĂ  implĂ©mentĂ©e sur le framework React et le langage TypeScript, gagne en puissance et en dĂ©veloppement. Tous ces outils vous permettent de construire des expĂ©riences et de prĂȘcher l'idĂ©e principale - la possibilitĂ© de dĂ©clarer les composants visuels et leurs modifications. Nous avons un tout autre niveau dans le rĂ©fĂ©rentiel avec les dĂ©clarations de ces mĂȘmes expĂ©riences. Mais vers 2015, ils ont rĂ©alisĂ© qu'il n'Ă©tait pas rentable sur le plan Ă©conomique de diffuser nos indicateurs expĂ©rimentaux sur l'ensemble du code frontal. Le fait est que les unitĂ©s d'expĂ©riences atteignent une production rĂ©elle, et tout ce qui n'est pas utilisĂ© est trĂšs difficile Ă  dĂ©couper plus tard dans le code. Par consĂ©quent, nous les avons expulsĂ©s Ă  un niveau de dĂ©finition distinct. Et lĂ  encore grĂące Ă  la mĂ©thodologie bem, qui nous a permis d'utiliser des niveaux de redĂ©finition. Nous dĂ©clarons nos expĂ©riences sur eux.



Ceci est l'un des rapports d'expĂ©riences. Deux colonnes: contrĂŽle et expĂ©rience. Avant vous, il n'y a mĂȘme pas tout ce qui est dans le rapport. Pourquoi est-il si long? Tout d'abord, vous avez vu combien de mesures nous avons - 8,6 milliers.



Mais le rĂŽle principal n'est en fait jouĂ© que par les mĂ©triques qui diffĂšrent. Et nous pouvons mener nos expĂ©riences en mĂȘme temps, c'est-Ă -dire que sur un utilisateur, nous pouvons avoir simultanĂ©ment une vingtaine d'expĂ©riences. Ils n'entrent pas en conflit les uns avec les autres, et dans toutes nos expĂ©riences, seules leurs mĂ©triques de produit pur sont colorĂ©es, sans affecter les uns les autres. Maintenant, il y a environ 800 expĂ©riences en production: non seulement des moteurs de recherche, mais aussi de tant de services. L'outil s'appelle AB, ce qui n'est pas surprenant. Les services dĂ©marrent des expĂ©riences, dĂ©clarent certains Ă©chantillons, puis examinent les diffĂ©rences entre les mĂ©triques, qui aprĂšs une certaine pĂ©riode commencent Ă  diffĂ©rer en termes d'expĂ©rience et de contrĂŽle.

RÎles de développeur associés


En raison de cette diversitĂ© dans le travail des dĂ©veloppeurs front-end, il y a mĂȘme des rĂŽles parmi eux. Il y a des experts en expĂ©rimentations, et pour cela nous donnons officiellement des rĂ©alisations dans le cadre du rĂ©seau interne Yandex, les gens passent vraiment les examens. Ils analysent les expĂ©riences, valident leurs rĂ©sultats sur les experts et obtiennent un passeport qui dit: "Je suis analyste, je peux analyser les expĂ©riences." Et en gĂ©nĂ©ral, tout travail avec des expĂ©riences, avec nos mĂ©triques, se concentre principalement sur l'amĂ©lioration du produit lui-mĂȘme. Je suis l'un des reprĂ©sentants, je suis trĂšs motivĂ© pour dĂ©velopper le produit, et pas seulement le code et pas la technologie. Et cela me motive vraiment lorsque je viens en Ă©quipe et que je fabrique un produit.



Quel est le résultat net? Nous avons un grand nombre de journaux écrits quotidiennement dans nos systÚmes de stockage. Il existe un grand nombre de métriques que nous calculons, nous effectuons des expériences sur celles-ci. TrÚs grande infrastructure. Le meilleur outil moderne qui vous permet d'implémenter un grand nombre d'outils est le package bem-react. Nous accordons une grande attention aux indicateurs de vitesse et de qualité, à la stabilité du produit. Et en général, nous développons dans nos développeurs de plus en plus de nouveaux rÎles liés à la spécialité principale - le frontend. J'ai tout. Merci de votre attention.

Source: https://habr.com/ru/post/fr465929/


All Articles