Elasticsearch Nedir? Elasticsearch Mimarisi

ElasticSearch Nedir?

Elasticsearch bir search ve analytics engine’dir. Java ile Apache Lucene yapısı üzerinde geliştirilmiştir. Kullanımı ve ölçeklendirilmesi kolaydır. Elasticsearch tüm data tipleri için near real time search ve analytics işlemleri sunar. Data structured veya unstructured olabileceği gibi text, numerical vb türlerde olabilir. Elasticsearch bu datayı en etkili şekilde search edilebilecek formatta depoar(indexler) . 2010 yılında ilk sürümü yayınlanmış olup 2022 itibari ile 8.5 en güncel versiyonudur.

Use Cases;

  • Search işlemi gerektiren uygulamalarda sıklıkla kullanılır. Yaygın bir kullanım alanı olarak Application loglarının ve system metriclerinin analiz edilmesi gösterilebilir.(APM – application performance management)
  • Auto-completion 
  • Website veya applicationlarda search işlemleri 
  • Sistem loglarını, metriclerini ve security event datasını depolayıp analiz etme
  • Machine learning modelleri ile veriyi gerçek zamanlı analiz etme
  • Büyük ölçekli datada, analiz işlemlerinde başarılıdır

Avantaj ve Dezavantajları;

Java ile geliştirildiği için bütün platformlar ile uyumludur.

Real-time bir search engine olduğu için 1 saniye önce indexlenmiş bir doküman search edilebilir.

Doküman tabanlı ve dağıtık mimaride çalışan bir yapısı olduğu için scale etmek kolaydır.

Open source bir üründür, basic özellikler ile kullanılmak istenir ise ücretsizdir.

Data store etme konusunda mongodb, hadoop gibi teknolojilere göre iyi değildir.

Elastic Stack Nedir?

Elasticsearch tarafından geliştirilen Xpack, kibana, logstash, beats gibi ürünleri de kapsayan yapıya verilen isimdir. Bu ürünler genelde birlikte kullanılır. 

Kibana : Elasticsearch yönetimsel işlemleri ve visualization için kullanılan web arayüzüdür.
Logstash : Uygulama loglarının elasticsearch’e gönderilmesini sağlar. Data processing pipeline. Input filter ve output olmak üzere 3 ayrı yapıdan meydana gelir.

Xpack : Elastic ve kibana’ya ekstra fonksiyonlar kazandıran bir pakettir. Güvenlik, Ldap entagrasyonu, user and role tanımları, elasticstack monitoring,  alerting , reporting, graph (örneğin ilişkili ürünler)

Beats : collects data. Filebeat en yaygın kullanılanı. Metricbeat servis metriklerini toplar.

Elasticsearch Mimari 

Node

Elasticsearch instance’larına verilen isimdir. Her node datanın bir parçasını depolar.  Bu sayede distributed and scaleable bir ortam sunar. Node kavramı direkt olarak sunucu kavramına denk gelmez çünkü bir sunucu üzerinde birden çok ES instance (node) çalışabilir.

Cluster

Bir veya daha çok ES node’unun iletişim haline çalışması ile ortaya çıkan yapıdır. Her node bir cluster’a aittir. Single node çalışan bir ES mimarisinde bile bir Cluster kavramı vardır. Bir node başlatıldığında konfigürasyonda belirtilen node’a otomatik olarak dahil olur. 

Document

Elasticsearch’te data dökümanlar halinde tutulur. Elasticsearchte döküman kavramı rdbms’lerdeki satır(row) kavramına denk gelir. Dökümanlar da içersinde field denilen ve datayı tanımlayan alanları barındırır. Ki bunlar da rdbmslerdeki column kavramına denk gelir. Doküman kavramı için fieldların bir arada tutulduğu bir collection da denebilir. Döküman bir JSON objesidir.

Index
Her document bir index içinde depolanır. İndexler ise benzer yapıda olan document objelerinin oluşturduğu gruptur. Indexler bir veya daha fazla fiziksel shard’dan meydana gelen logical yapılardır.

Shard
Büyük ölçekli datanın dağıtık mimaride depolanmasını sağlayan yapıdır. Index datası shard adı verilen daha küçük parçalara bölünerek depolanır. Bir index’in shardları clusterda birden çok node üzerinde dağıtılır.

Shardlar ise primary ve replica shard olarak 2 tiptir.Bir indexte yer alan her doküman 1 primary shard’a aittir. Replica shard ise primary shard’ın bir kopyasıdır. Replica shardlar sayesinde datanın hardware hatalarına karşı korunması sağlanır.

Replica

Shardların data yedekliliği için tutulan kopyalarıdır. Data yedekliliğini sağlamasının yanında read operasyonlarında da bu kopyalardan okuma yapılır ve performans arttırılır.

Type

Benzer dökümanları tanımlar. 

Mapping

Indexlenecek dökümanda yer alan field’ların yapısını belirler. Mapping işlemi otomatik olarak yapılabileceği gibi, manuel olarak da oluşturulabilir.

Nasıl Çalışır?

Birden çok node’un bulunduğu bir clusterda elasticsearch dökümanları dağıtık olarak depolar ve ihtiyaç anında bu node’lardan okunur. Elasticsearch inverted index adı verilen bir data structure kullanır ve bu sayede çok hızlı şekilde full-text search işlemlerini gerçekleştirir. 

Inverted index dökümanların içinde yer alan terimlerin (term) hangi doküman ile ilişkisinin olduğunu tutan yapılardır. Örnek olarak 2 dökümanımız olsun;
Winter is coming.

Weather is too cold in winter.

Bu dökümanlar öncelikle çeşitli filtrelerden geçirilir ve term’lere ayrılır.  Daha sonra hangi term hangi dökümanda ve hangi sırada ise indexe kaydedilir. Termler sıralı bir şekilde listelenir. 

Dökümanlar client tarafından bir REST API aracılığı ile sorgulanır. Direkt olarak komut satırından CLI aracılığı ile veya kibana üzerinden developer console aracılığı ile komutlar gönderilebilir. ES Rest API , structured query ve full text queryleri destekler. Kullanılan iki tip sorgulama dili vardır denebilir; bunlardan ilki Json-style bir sorgulama dili olan Query DSL’dir. Diğeri ise SQL-Style query olup JDBC ve ODBC  driverlar ile kullanılabilir.

Veysel YUKSEL
Latest posts by Veysel YUKSEL (see all)

Veysel YUKSEL

RDBMS ve NoSQL veri tabanı yönetimi ve Big Data teknolojileri.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir