Elasticsearch werd gelanceerd in 2010 en was een van de eerste gedistribueerde zoekmachines die gemaakt waren voor het snel opvragen van data om weer te geven in analytics of big data output. Op dat moment stapelden meer ondernemingen enorme hoeveelheden data op, maar traditionele database-engines konden dit niet bijhouden. Elasticsearch werd geïntroduceerd als een vectordatabase die in staat is gestructureerde en ongestructureerde data op te slaan. Het was de eerste grote sprong naar big data-indexering en snellere query's toen bedrijfsanalyses terabytes aan data overtroffen, wat prestatieproblemen veroorzaakte.
Wat is Elasticsearch?
Elasticsearch is een datastore die wordt gebruikt om data samen te voegen en doorzoekbaar te maken via een API. Het is gebaseerd op Apache Lucene, een indexerings- en opslagservice die data in shards distribueert. Elke shard heeft zijn eigen data, maar de shards worden gescheiden van elkaar gehouden om data over nodes te verdelen. Elasticsearch bundelt alle shards en biedt een API voor ontwikkelaars om data op te vragen. Met de API kunnen beheerders machtigingen instellen voor specifieke gebruikers om gegevens verder te beveiligen en alleen geautoriseerde gebruikers toegang te geven tot specifieke gegevens.
Ontwikkelaars zijn niet beperkt tot gestructureerde of ongestructureerde data. Met Elasticsearch kunnen gebruikers zowel gestructureerde als ongestructureerde data ophalen, maar het vraagt data op in de gedistribueerde shards alsof opslag één grote database is. De manier waarop Elasticsearch data verwerkt, maakt het veel sneller dan een standaard database-engine, dus het is het beste voor applicaties met analytics, zoekfunctionaliteit voor veel data of netwerkverkeersanalyse.
Kerncomponenten van Elasticsearch-architectuur
De eerste kerncomponent van Elasticsearch is de node. Een node is een server of apparaat waar data worden opgeslagen. Clusters bestaan uit een verzameling nodes. Knooppunten en clusters kunnen voor redundantie over datacenters worden verdeeld, maar gedistribueerde data verbeteren de prestaties in dataquery's. Elasticsearch is een vectordatabase, maar slaat data op als een document. Een document is een entiteit die ongestructureerde data opslaat, hoewel gestructureerde data er ook in kunnen worden opgeslagen.
Data wordt over nodes geschoven. Scherven zijn een deel van data om grote datastores in kleinere delen te segmenteren, waardoor het gemakkelijker wordt om data te distribueren en tegelijkertijd op te vragen in een resultaatset voor de frontend-applicatie. Logstash wordt gebruikt als de datapijplijn, die data in zijn ruwe vorm neemt en deze omzet in een bruikbare vorm.
Elasticsearch heeft ook een API die de toegangspoort tot data is. Ontwikkelaars moeten zich verifiëren in de API en deze opvragen met een sleutel. De API regelt de toegang tot de data en de manier waarop ontwikkelaars deze kunnen opvragen. Het hebben van een API verbergt ook de backend-architectuur en beveiligt deze, waardoor deze toegankelijk is voor ontwikkelaars die niet bekend zijn met de manier waarop Apache Lucene en andere componenten functioneren.
Knooppunten en clusters
Een cluster is een groep nodes, maar nodes hebben hun eigen specifieke rol in een cluster. Het hoofdknooppunt bestuurt het cluster in het algemeen. Het masterknooppunt kan indexen maken of verwijderen en andere knooppunten volgen die aan het cluster deelnemen. Elk cluster heeft een master node.
Een data node slaat de data op. Manipulatie of wijzigingen in data zijn de verantwoordelijkheid van het dataknooppunt. Terwijl u data verzamelt, voegt u toe aan het dataknooppunt. De zoekfunctionaliteit vindt ook plaats op het dataknooppunt.
Zie het coördineren van nodes als de gateways die het verkeer naar de juiste node regelen. Een coördinerend knooppunt stuurt verzoeken naar het masterknooppunt of de dataknooppunten, afhankelijk van hun bestemming. Wanneer bijvoorbeeld een zoekopdracht naar het cluster wordt verzonden, beheert het coördinerende knooppunt zijn verzoek.
Elasticsearch heeft een pijplijn voor het transformeren en verplaatsen van data. De ingest node is verantwoordelijk voor het beheer van documenten en het transformeren ervan voor indexering. Elasticsearch raadt aan om een onafhankelijk van de master- en datanodes een opnamenode te hebben in omgevingen met zware dataoverdrachten.
Externe nodes sturen verzoeken naar andere clusters in het Elasticsearch-systeem. Zoekopdrachten kunnen data vinden met behulp van cross-clusterfunctionaliteit met een node die op afstand in aanmerking komt. Replicatie van data tussen clusters is ook de verantwoordelijkheid van de nodes die op afstand in aanmerking komen.
Scherven en replica's
Snelle zoekopdrachten en query's vereisen indexen. Indexen zijn de manier waarop een datastore data organiseert op een manier die zoekopdrachten sneller maakt. In Elasticsearch bestaat elke index uit een aantal scherven. Scherven worden opgeslagen over nodes waar Elasticsearch ze over het cluster verspreidt voor snellere verwerking. Shards hebben één kopie van data, maar Elasticsearch kan gelijktijdige zoekopdrachten uitvoeren op meerdere shards.
Redundantie is noodzakelijk voor failover en fouttolerantie, dus replica's verwerken een kopie van scherven. Replica's worden op verschillende nodes opgeslagen, zodat data niet verloren gaan wanneer één node uitvalt. Als een node uitvalt, zou Elasticsearch vervolgens toegang hebben tot data op een replica op een andere node.
Dataflow in Elasticsearch
Elasticsearch biedt een API voor ontwikkelaars om hun vragen te verzenden. De API beschermt ontwikkelaars tegen de complexiteit van de backend. De backend, zoals besproken, bestaat uit verschillende componenten, waaronder shards, nodes, indexen en replica's. In plaats van ontwikkelaars te dwingen om Elasticsearch-onderzoekers te beheren, begint de datastroom met een query naar de API.
De API stuurt de query eerst naar een coördinator. De coördinator stuurt het naar de juiste node waar shards zich bevinden. Een query kan ook naar meerdere shards worden gestuurd, elk met hun eigen set data. Routing wordt uitgevoerd door de coördinator, die de juiste scherven voor de query bepaalt.
Nadat scherven documenten hebben verzameld, worden de indexen voor de documenten teruggestuurd naar de coördinator. Wanneer verschillende shards data terugsturen naar de coördinator, zal de coördinator de indexen organiseren, samenvoegen en sorteren. Met de indexen gesorteerd, haalt de coördinator vervolgens de feitelijke documenten op uit de shards. Nadat data zijn opgehaald, worden ze via de API teruggestuurd naar de applicatie.
Best practices voor het optimaliseren van de Elasticsearch-architectuur
Elasticsearch is veel complexer dan de gemiddelde database-engine, dus het optimaliseren ervan vergt een andere aanpak. U moet er eerst voor zorgen dat er voldoende resources in de backend worden uitgevoerd. Als de query's te traag zijn, overweeg dan om de opslagcapaciteit van CPU, geheugen of server te verhogen.
Indexen zijn nodig om data te doorzoeken, maar sommige data worden niet zo vaak gebruikt als andere data. Met Elasticsearch kunt u indexen bevriezen, waardoor ongebruikte indexen naar een andere shard worden verplaatst. Coördinatoren hebben dan minder shards om naar elke vraag te zoeken, waardoor de prestaties worden verbeterd.
Threadpools in Elasticsearch-controlequerygroottes en moeten worden geoptimaliseerd om de hoeveelheid data die in elke query wordt verwerkt te ondersteunen. Configureer thread pools om genoeg data te verwerken voor uw query's, maar ze zijn ook verbonden met node resources. Zowel nodes als thread pools moeten voldoende resources hebben, of u kunt verminderde prestaties zien tijdens query's met grote volumes.
Conclusie
Elasticsearch is veel complexer dan een standaard database, dus het hebben van de juiste architectuur en computerbronnen is nodig voor optimale prestaties. Gebruik best practices wanneer u Elasticsearch configureert, maar het is ook belangrijk om de juiste computerbronnen te hebben om de query's en dataopslag te ondersteunen die nodig zijn voor de backend.
Een manier om ervoor te zorgen dat u voldoende opslagresources hebt, is door gebruik te maken van Pure Storage® FLASHBLADE®. FLASHBLADE ondersteunt exponentiële groei voor kleine tot grote ondernemingen. Uw applicaties kunnen schalen naarmate meer gebruikers data opslaan en een willekeurig aantal klanten ondersteunen.