• Application Search
  • Logiciel et technologie

GitHub : Accélérer le développement de logiciels

EN RÉSUMÉ

  • 2
    milliard de documents
  • 8
    millions de dépôts de code
  • 4
    millions d’utilisateurs actifs

Le Défi

Comment faire pour répondre aux besoins de recherche des 4 millions d'utilisateurs de GitHub tout en fournissant simultanément des indicateurs opérationnels et tactiques permettant d'améliorer de manière itérative le service client ?

La Solution

Utiliser Elasticsearch pour indexer plus de 8 millions de dépôts de code ainsi que des données sur les événements critiques.

L’essentiel du cas d’utilisation

Fournir une indexation pratiquement en temps réel dès qu'un utilisateur charge de nouvelles données

  • Se développer pour répondre aux besoins d'une base d'utilisateurs en pleine expansion, en migrant d'Apache Solr vers Elasticsearch
  • Indexer et interroger pratiquement tous types de données accessibles publiquement
  • Permettre des recherches programmatiques plus poussées pour les applications de développeurs

Exploiter les statistiques sur les données de recherche

  • Démasquer les utilisateurs malveillants en interrogeant les données indexées de logging
  • Déceler les bugs logiciels au sein de la plateforme GitHub en indexant la totalité des alertes, événements, logs et en surveillant la fréquence de certaines exceptions de code
  • Effectuer des requêtes allant au-delà d'un SQL standard

Une recherche sophistiquée pour des utilisateurs sophistiqués

Elasticsearch permet d'exécuter des recherches sur GitHub, le plus grand système hébergé de gestion de versions au monde, fort d'une base client comportant plus de 4 millions d'utilisateurs techniques. GitHub fait appel à Elasticsearch pour indexer en continu les données d'un catalogue en pleine expansion, constitué de plus de 8 millions de dépôts de code et comportant plus de 2 milliards de documents. Grâce à Elasticsearch, GitHub est en mesure de permettre à ses utilisateurs de réaliser facilement des recherches au sein de ces données.

« La fonction de recherche est l'âme de GitHub, » explique Tim Pease, ingénieur d'exploitation chez GitHub. « En vous rendant sur GitHub.com/search, vous pouvez rechercher parmi des dépôts, des utilisateurs, des problèmes, des requêtes Pull et des codes source. »

L'un des objectifs de l'implémentation Elasticsearch de GitHub est d'indexer tout ce qui est disponible publiquement sur GitHub. com et de rendre ce contenu plus facile à trouver. Bien entendu, les recherches en texte intégral sont totalement prises en charge, mais il est également possible d'effectuer des recherches à partir de toutes sortes de critères, et ce en toute simplicité.

« Vous pouvez par exemple rechercher un projet qui utilise Clojure comme langage principal et qui a fait preuve d'activité au cours du dernier mois, et toutes ces fonctionnalités seront exécutées par Elasticsearch, » déclare M. Pease.

Le stockage flexible et les différents formats d'extraction d'Elasticsearch, qui permettent à la fois à des données extrêmement structurées ou très peu structurées de coexister au sein du même stockage de recherche, ainsi que le grand choix de primitives de recherche offertes par Elasticsearch, ont grandement facilité l'implémentation des recherches.

« Avec Elasticsearch, il est possible de lancer énormément de requêtes sur ces données qui ne seraient pas prises en charge par une base de données SQL standard, » souligne M. Pease.

Prendre en charge des indicateurs analytiques au-delà du pare-feu

GitHub utilise les capacités combinées d'Elasticsearch à indexer les recherches et à analyser les données pour exécuter de nombreux projets. Par exemple, GitHub s'est servi des capacités analytiques des requêtes d'Elasticsearch sur des données stockées d'audit et de logging afin de surveiller les activités des utilisateurs en termes de sécurité.

« Avec les requêtes d'Elasticsearch, il nous est possible d'obtenir rapidement un aperçu de toutes les actions réalisées par un utilisateur, » explique M. Pease. « C'est un moyen très pratique de vérifier si un compte a été usurpé ou piraté, ou bien si l'utilisateur s'en est servi à des fins malveillantes. »

Alors que GitHub cherchait un moyen de suivre et d'analyser les exceptions de code générées par les divers éléments logiciels qui alimentent GitHub.com, une base de données NoSQL populaire a été utilisée à l'origine. Les exceptions de code étaient stockées dans des indexes secondaires, et ses fonctionnalités analytiques étaient utilisées pour analyser les exceptions passées. Les résultats étaient ensuite également stockés dans la base de données.

« Pour nos cas d'utilisation, cela n'a pas très bien fonctionné, » se remémore Grant Rodgers, membre de l'équipe technique de GitHub. « Une fois que nous avons migré sous Elasticsearch et commencé à utiliser les recherches à facette d'histogramme, tout s'est arrangé. »

GitHub fait appel à la capacité de recherche à facette d'histogramme d'Elasticsearch, ainsi qu'aux autres facettes statistiques, pour surveiller les augmentations de fréquence de certains types d'exceptions de code. Ce procédé permet de révéler des bugs dans les systèmes logiciels. « La capacité de recherche à facette d'histogramme d'Elasticsearch est extrêmement performante. Nous cherchons à développer son utilisation pour cette application en particulier, » explique M. Rodgers

quote

« Avec les requêtes d'Elasticsearch, il nous est possible d'obtenir rapidement un aperçu de toutes les actions réalisées par un uti-lisateur. C'est un moyen très pratique de vérifier si un compte a été usurpé ou piraté, ou bien si l'utilisateur s'en est servi à des fins malveillantes. »

Tim Pease
Ingénieur d'exploitation