Elasticsearch – základní koncept – poznámky

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
  • 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í

Zdroj

Příspěvek byl publikován v rubrice Nezařazené se štítky . Můžete si uložit jeho odkaz mezi své oblíbené záložky.