Mise à l’échelle d’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, and many others. Cela dit, sous le capot, Elasticsearch est un système complexe et distribué avec de nombreux leviers à actionner pour atteindre des performances optimales.
Dans ce weblog, nous passons en revue les options aux problèmes de performances courants d’Elasticsearch à grande échelle, notamment l’indexation lente, la vitesse de recherche, le dimensionnement des partitions et des index et la multilocation. De nombreuses options sont points 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.
Remark puis-je améliorer les performances d’indexation dans Elasticsearch ?
Lorsque vous traitez des costs de travail qui ont un débit d’écriture élevé, vous devrez peut-être régler Elasticsearch pour augmenter les performances d’indexation. Nous fournissons plusieurs bonnes pratiques pour disposer de ressources adéquates pour l’indexation afin que l’opération n’affecte pas les performances de recherche dans votre software :
- Augmenter le intervalle de rafraîchissement: Elasticsearch rend les nouvelles données disponibles pour la recherche en actualisant l’index. Les actualisations sont définies 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 afin de réserver davantage de ressources pour l’indexation.
- Utilisez le API de masse: lors de l’ingestion de données à grande échelle, le temps d’indexation à l’aide de l’API de mise à jour est connu pour prendre des semaines. 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 de transfert en masse. Même avec l’API de transfert en masse, vous souhaitez connaître le nombre de paperwork indexés et la taille globale de la requête en masse pour vous assurer qu’elle n’entrave pas les performances du cluster. Elastic recommande de comparer la taille du quantity et, en règle générale, est 5-15 Mo/requête groupée.
- Augmenter taille du tampon d’index: vous pouvez augmenter la limite de mémoire pour les requêtes d’indexation en attente au-dessus de la valeur par défaut de 10 % du tas. Cela peut être conseillé pour les costs de travail lourdes en indexation, mais peut avoir un affect sur d’autres opérations gourmandes en mémoire.
- 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 cost de travail.
- Limitez les upserts sur place et les mutations de données: Les insertions, mises à jour et suppressions nécessitent la réindexation de paperwork entiers. Si vous diffusez des données CDC ou transactionnelles dans Elasticsearch, vous pouvez envisager de stocker moins de données, automobile il y a alors moins de données à réindexer.
- Simplifiez la construction des données : gardez à l’esprit que l’utilisation de buildings de données telles que objets imbriqués 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.
Que dois-je faire pour augmenter ma vitesse de recherche dans Elasticsearch ?
Lorsque vos requêtes prennent trop de temps à s’exécuter, 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 index composé: 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 couramment pour votre requête.
- Activer routage personnalisé de paperwork : Elasticsearch diffuse une requête à tous les shards pour renvoyer un résultat. Avec le routage personnalisé, vous pouvez déterminer sur quelle partition vos données résident pour accélérer l’exécution des requêtes. Cela dit, vous voulez être à l’affût des factors chauds lors de l’adoption d’un routage personnalisé.
- Utilisez le sort de champ de mot-clé pour les recherches structurées : lorsque vous souhaitez filtrer en fonction du contenu, tel qu’un ID ou un code postal, il est recommandé d’utiliser le sort de champ de mot-clé plutôt que le sort d’entier ou d’autres sorts de champs numériques pour une récupération plus rapide.
- S’éloigner de objets parent-enfant et objets imbriqués: Les relations parent-enfant sont une bonne answer de contournement pour le manque de prise en cost des jointures dans Elasticsearch et ont contribué à accélérer l’ingestion et à limiter la réindexation. Finalement, les organisations atteignent les limites de mémoire avec cette approche. Lorsque cela se produit, vous pourrez accélérer les performances des requêtes en procédant à la dénormalisation des données.
Remark dois-je dimensionner les partitions et les index Elasticsearch pour 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’y a pas de stratégie distinctive pour le nombre de fragments que vous devriez avoir ou la taille de vos fragments. La meilleure façon de déterminer la stratégie consiste à exécuter des exams et des analyses comparatives sur des costs de travail de manufacturing uniformes. Voici quelques conseils supplémentaires à prendre en compte :
- Utilisez le API de fusion forcée: utilisez l’API de fusion forcée pour réduire le nombre de segments dans chaque partition. Les fusions de segments se produisent automatiquement en arrière-plan et suppriment tous les paperwork supprimés. L’utilisation d’une fusion forcée peut supprimer manuellement les anciens paperwork et accélérer les performances. Cela peut être gourmand en ressources et ne devrait donc pas se produire pendant les pics d’utilisation.
- Consideration à déséquilibre de cost: Elasticsearch ne dispose pas d’un bon moyen de comprendre l’utilisation des ressources par partition et d’en tenir compte lors de la détermination du placement des partitions. En conséquence, il est attainable d’avoir des fragments chauds. Pour éviter cette scenario, vous pouvez envisager d’avoir plus de partitions que de notes de données et des partitions plus petites que les nœuds de données.
- Utiliser index basés sur le temps: 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 suggest également une API d’index de survol afin que vous puissiez passer à un nouvel index en fonction de l’âge ou de la taille du doc pour libérer des ressources.
Remark dois-je concevoir pour la multilocation ?
Les stratégies les plus courantes pour la multilocation constant à avoir un index par shopper ou locataire ou à utiliser un routage personnalisé. Voici remark vous pouvez peser les stratégies pour votre cost de travail :
- Index par shopper ou locataire : la configuration d’index distincts par shopper fonctionne bien pour les entreprises qui ont une base d’utilisateurs réduite, des centaines à quelques milliers de shoppers et lorsque les shoppers ne partagent pas de données. Il est également utile d’avoir un index par shopper si chaque shopper 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 doc, par exemple l’ID shopper ou l’ID locataire, pour spécifier le routage lors de l’indexation d’un doc. Lors d’une requête basée sur un shopper spécifique, la requête ira directement à la partition contenant les données shopper pour des temps de réponse plus rapides. Le routage personnalisé est une bonne approche lorsque vous avez un schéma cohérent entre vos shoppers et que vous avez beaucoup de shoppers, 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 d’analyse de journaux et de 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 options à Elasticsearch.
Rockset est l’une des options 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. Apprendre à migrer depuis Elasticsearch et explorez les différences architecturales entre les deux systèmes.