Faire évoluer Elasticsearch Elasticsearch est un moteur de recherche et d'analyse NoSQL facile à utiliser pour l'analyse de journaux, la recherche de texte, l'analyse en temps réel et bien plus encore. Cela dit, Elasticsearch est un système distribué complexe avec de nombreux leviers à actionner pour obtenir des performances optimales. Dans ce blog, nous passons en revue les solutions aux problèmes courants de performances d'Elasticsearch à grande échelle, notamment l'indexation lente, la vitesse de recherche, le dimensionnement des partitions et des index et la multilocation. De nombreuses solutions proviennent d'entretiens et de discussions avec des responsables de l'ingénierie et des architectes qui ont une expérience pratique de l'exploitation du système à grande échelle. Comment puis-je améliorer les performances d'indexation dans Elasticsearch ? Lorsque vous traitez des charges de travail ayant un débit d'écriture élevé, vous devrez peut-être régler Elasticsearch pour augmenter les performances d'indexation. Nous proposons plusieurs bonnes pratiques pour disposer de ressources adéquates pour l'indexation afin que l'opération n'ait pas d'impact sur les performances de recherche dans votre application : Augmentez l' : Elasticsearch rend les nouvelles données disponibles pour la recherche en actualisant l'index. Les actualisations sont configurées pour se produire automatiquement toutes les secondes lorsqu'un index a reçu une requête au cours des 30 dernières secondes. Vous pouvez augmenter l'intervalle d'actualisation pour réserver davantage de ressources pour l'indexation. intervalle d'actualisation Utiliser l' : lors de l'ingestion de données à grande échelle, le temps d'indexation à l'aide de l'API Update peut . Dans ces scénarios, vous pouvez accélérer l'indexation des données de manière plus efficace en termes de ressources à l'aide de l'API Bulk. Même avec l'API Bulk, vous souhaitez connaître le nombre de documents indexés et la taille globale de la requête groupée pour vous assurer qu'elle n'entrave pas les performances du cluster. Elastic recommande d'évaluer la taille du volume et, en règle générale, est . API Bulk prendre des semaines de 5 à 15 Mo/requête groupée Augmenter : vous pouvez augmenter la limite de mémoire pour les demandes d'indexation en attente au-dessus de la valeur par défaut de 10 % du tas. Cela peut être conseillé pour les charges de travail d'indexation lourdes, mais peut avoir un impact sur d'autres opérations gourmandes en mémoire. la taille du tampon d'index Désactiver la réplication : vous pouvez définir la réplication sur zéro pour accélérer l'indexation, mais cela n'est pas conseillé si Elasticsearch est le système d'enregistrement de votre charge de travail. : les insertions, mises à jour et suppressions nécessitent la réindexation de documents entiers. Si vous diffusez des données CDC ou transactionnelles dans Elasticsearch, vous souhaiterez peut-être envisager de stocker moins de données, car il y a alors moins de données à réindexer. Limitez les insertions sur place et les mutations de données Simplifiez la structure des données : gardez à l'esprit que l'utilisation de structures de données telles que augmentera les écritures et les index. En simplifiant le nombre de champs et la complexité du modèle de données, vous pouvez accélérer l'indexation. des objets imbriqués Que dois-je faire pour augmenter ma vitesse de recherche dans Elasticsearch ? Lorsque l'exécution de vos requêtes prend trop de temps, cela peut signifier que vous devez simplifier votre modèle de données ou supprimer la complexité des requêtes. Voici quelques domaines à considérer : Créer un : fusionnez les valeurs de deux champs de faible cardinalité pour créer un champ de cardinalité élevée qui peut être facilement recherché et récupéré. Par exemple, vous pouvez fusionner un champ avec le code postal et le mois, s'il s'agit de deux champs sur lesquels vous filtrez généralement pour votre requête. index composite Activer des documents : Elasticsearch diffuse une requête à toutes les partitions pour renvoyer un résultat. Avec le routage personnalisé, vous pouvez déterminer sur quelle partition résident vos données pour accélérer l'exécution des requêtes. Cela dit, vous devez être à l'affût des points chauds lorsque vous adoptez un routage personnalisé. le routage personnalisé Utilisez le pour les recherches structurées : lorsque vous souhaitez filtrer en fonction du contenu, tel qu'un identifiant ou un code postal, il est recommandé d'utiliser le type de champ de mot-clé plutôt que le type entier ou d'autres types de champ numérique pour une récupération plus rapide. type de champ de mot-clé Éloignez-vous des : les relations parent-enfant constituent une bonne solution de contournement au manque de dans Elasticsearch et ont contribué à accélérer l'ingestion et à limiter la réindexation. Finalement, les organisations atteignent des limites de mémoire avec cette approche. Lorsque cela se produit, vous pourrez accélérer les performances des requêtes en effectuant une dénormalisation des données. objets parent-enfant et imbriqués prise en charge des jointures Comment dimensionner les partitions et les index Elasticsearch pour les adapter à l'échelle ? De nombreux défis de mise à l'échelle avec Elasticsearch se résument à la stratégie de partitionnement et d'indexation. Il n’existe pas de stratégie universelle quant au nombre de fragments que vous devez avoir ou à la taille de vos fragments. La meilleure façon de déterminer la stratégie consiste à exécuter des tests et des analyses comparatives sur des charges de travail de production uniformes. Voici quelques conseils supplémentaires à prendre en compte : Utiliser l' : utilisez l'API de fusion forcée pour réduire le nombre de segments dans chaque partition. Les fusions de segments s'effectuent automatiquement en arrière-plan et suppriment tous les documents supprimés. L’utilisation d’une fusion forcée peut supprimer manuellement les anciens documents et accélérer les performances. Cela peut nécessiter beaucoup de ressources et ne devrait donc pas se produire lors des pics d’utilisation. API Force Merge Méfiez-vous du : Elasticsearch ne dispose pas d'un bon moyen de comprendre l'utilisation des ressources par fragment et d'en tenir compte lors de la détermination de l'emplacement des fragments. En conséquence, il est possible d'avoir des fragments chauds. Pour éviter cette situation, vous souhaiterez peut-être envisager d'avoir plus de partitions que de notes de données et des partitions plus petites que de nœuds de données. déséquilibre de charge Utilisez : les index basés sur le temps peuvent réduire le nombre d'index et de partitions dans votre cluster en fonction de la rétention. Elasticsearch propose également une API d'index de basculement afin que vous puissiez basculer vers un nouvel index en fonction de l'âge ou de la taille du document afin de libérer des ressources. des index basés sur le temps Comment dois-je concevoir pour la multilocation ? Les stratégies les plus courantes en matière de multilocation consistent à disposer d'un index par client ou locataire ou à utiliser un routage personnalisé. Voici comment vous pouvez évaluer les stratégies adaptées à votre charge de travail : Index par client ou locataire : la configuration d'index distincts par client fonctionne bien pour les entreprises qui disposent d'une base d'utilisateurs plus petite, de plusieurs centaines à quelques milliers de clients, et lorsque les clients ne partagent pas de données. Il est également utile d'avoir un index par client si chaque client a son propre schéma et a besoin d'une plus grande flexibilité. Routage personnalisé : le routage personnalisé vous permet de spécifier la partition sur laquelle réside un document, par exemple l'ID client ou l'ID locataire, pour spécifier le routage lors de l'indexation d'un document. Lors d'une requête basée sur un client spécifique, la requête sera directement envoyée à la partition contenant les données client pour des temps de réponse plus rapides. Le routage personnalisé est une bonne approche lorsque vous disposez d'un schéma cohérent pour vos clients et que vous avez de nombreux clients, ce qui est courant lorsque vous proposez un modèle freemium. Faire évoluer ou ne pas faire évoluer Elasticsearch ! Elasticsearch est conçu pour les cas d'utilisation de l'analyse de journaux et de la recherche de texte. De nombreuses organisations qui utilisent Elasticsearch pour des analyses en temps réel à grande échelle devront faire des compromis pour maintenir les performances ou la rentabilité, notamment en limitant la complexité des requêtes et la latence d'ingestion des données. Lorsque vous commencez à limiter les modèles d'utilisation, que votre intervalle d'actualisation dépasse votre SLA ou que vous ajoutez d'autres ensembles de données qui doivent être réunis, il peut être judicieux de rechercher des alternatives à Elasticsearch. Rockset est l'une des alternatives et est spécialement conçu pour l'ingestion de données en streaming en temps réel et les requêtes à faible latence à grande échelle. Découvrez comment et explorez les entre les deux systèmes. migrer hors d'Elasticsearch différences architecturales