Elasticsearch (ES)
- vysoce škálovatelný, open-source fulltextový vyhledávač a analytický nástroj umožňující pracovat s daty v téměř reálném čase
- ukázkový use-cases
- katalog produktů s vyhledáváním a našeptáváním
- sbírání dat pro analýzu – trendy, statistika, anomálie,…
- výstrahy (alerts & notifications) – pokud data v ES splní nějakou podmínku
- rychlé výstupy pro „ad hoc“ dotazy nad velkým množství dat (např. ve spojení s Kibanou – vizualizace dat)
Základní koncept
- NRT (near real time)
- při vkládání dokumentů do ES dochází k malému zpoždění, než jsou vložená data dostupná ve vyhledávání
- Programová část
- Dokument
- základní záznam dat, který je uložen jako jedna položka, která může být ve vyhledávání
- například informace o jednom konkrétním produktu a jeho vlastnostech
- dokument je zaznamenaný ve formátu JSON
- Index
- kolekce dokumentů, např. lze mít index pro katalog produktů, objednávek,…
- Type
- jeden index mohl dříve mít několik typů dokumentů – bylo možné mít dokumenty s produkty a objednávkami v jednom indexu
- tento postup je nyní zastaralý (ES verze 6+) – viz. Removal of mapping types, nyní 1 index, 1 typ dokumentu
- Dokument
- Infrastruktura
- Node
- samostatný server, který je součástí skupiny počítačů (clusteru)
- ukládá data a podílí se na indexovací a vyhledávací kapacitě clusteru
- lze pojmenovat, výchozím jménem je náhodné UUID – důležité při nastavování clusteru
- Cluster
- kolekce jednoho nebo více serverů (nodů), které společně drží data
- sjednocuje indexovací a vyhledávací kapacity všech nodů
- jméno clusteru be mělo být unikátní; v opačném případě by se mohl do clusteru připojovat nod, který do něj nepatří
- Shards
- protože index může vlivem uložených dat přesahovat možnosti disku serveru, je možné ho rozdělit do několika částí (shards)
- při vytváření indexu je možné nastavit, do kolika částí má být rozdělen (po vytvoření indexu již tento počet není možné změnit)
- každá část (shard) je pak plně funkční a nezávislý index, který může být na kterémkoli nodu
- maximální počet dokumentů v shardu je 2,147,483,519 (= Integer.MAX_VALUE – 128) LUCENE-5843, zjištění aktuální velikosti shardu _cat/shards
- hlavními výhodami je možnost
- rozdělit objem dat
- paralelizovat operace nad rozdělenými částmi (rozhozením na několik nodů) a zvýšit tím výkon a průchodnost
- mechanismus rozdělení shardů a sbírání výsledků vyhledávání z nich, zajišťuje ES
- protože může dojít k odpojení / výpadku některého z uzlů, je významně doporučováno, mít implementovaný mechanismus, který na tyto chyby bude reagovat – samotný ES pro snížení těchto chyb umožňuje vytvořit kopii shardu (=replica)
- Směrování dokumentů na shardy (Routing a Document to a Shard)
- ES rozděluje vkládané dokumenty na jednotlivé shardy podle dané funkce, která může být případně změněna (např., aby dokumenty, vztahující se k jednomu uživateli, byly všechny na jednom stejném shardu)
- rozdělování dokumentů se váže nejen k vkládání, ale i vyhledávání, aktualizaci,… proto se nastavený počet shardů nemůže později změnit
- Replica
- kopie shardu
- hlavními výhodami je
- vyšší dostupnost v případě výpadku některého nodu (předpokladem je, že replika není na stejném serveru jako shard který kopíruje)
- další zvýšení výkonu a průchodnosti vyhledávání
- počet replik je možné nastavit jak při vytváření indexu, tak v průběhu jeho používání
- Node
Zdroj