HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

ElasticSearch temel bilgiler

Cluster

Cluster verilerin tümünün tutan bir yada birden çok node'un (server'ın) kümelenmiş halidir. Cluster'lar eşsiz isimlere sahiptir ve default isimleri "elasticsearch"tür. Bu isim önemli çünkü bir node sadece - isimle belirlenmiş olan, katılmasının mümkün olduğu cluster'a katılabilir. Production'da özel bir isim koymak faydalı olacaktır. Ayrıca içerisinde tek bir node bulunan bir cluster kullanmanın da herhangi bir sakıncası olmadığı gibi, her biri eşsiz isimlere sahip birden çok cluster'da kullanılabilir.

Node

Node, bir cluster'ın parçası olan tek bir server'dır. Node'lar verileri tutar ve cluster'ın indexleme ve arama becerilerine katkıda bulunur. Aynı cluster'lar gibi node'larda isimlere sahiptir (rastgele bir Marvel karakterinin adı) ve bu isim node başlatıldığı anda atanır. İsteğe bağlı olarak node'ların isimleri değiştirilebilmektedir. Bu sayede, mantıklı isimler vererek hangi node'un hangi cluster'da olduğu anlaşılabilir.

Bir node cluster ismi ile, belirlenmiş özel bir cluster'a katılmak üzere konfigüre edilebilir. Default olarak her node oluşturulduğu anda, "elasticsearch" ismindeki cluster'a katılma davranışı gösterir. Tek bir cluster içerisinde istenilen miktarda node oluşturulabilir. Eğer networkte çalışan başka bir node yoksa, bir node oluşturulduğunda aynı zamanda "elasticsearch" isminde bir cluster oluşturur.

Index

Bir index benzer özelliklere sahip belgeler topluluğudur. Örneğin müşteri bilgilerinin tutulduğu, ürünlerin tutulduğu, siparişlerin tutulduğu ayrı ayrı index'ler olabilir. Index'ler tümü küçük harften oluşan isimler ile tanımlanır.

Type

Bir index içerisinde bir veya birden çok type tanımlanabilir. Type - herhangi bir index içerisinde ki mantıksal bir kategori/partition'ı temsil eden yapıdır. Örneğin bir blog siteniz olduğunu var sayın, bu site için tanımladığınız index'te, ortak özelliklere sahip kullanıcı bilgilerini tutan bir type, gönderileri tutan bir type ve yorumları tutan bir type tanımlayabilirsiniz.

Document

Document indexlenebilir en küçük bilgi parçasıdır. Örneğin bir döküman tek bir müşterinin bilgileri, tek bir ürünün bilgileri veya tek bir siparişin bilgilerini tutabilir. Tüm dökümanlar JSON olarak tutulmaktadır. Herhangi bir index veya type içerisinde istenilen miktarda document tutulabilir. Bir döküman index'lenebilmesi için mutlaka index içerisinde ki bir type'a atanmış olmalıdır.

Shards & Replicas

Bir index, çok fazla veri barındırdığı zaman node'un donanımsal depolama limitlerini zorlayabilecek duruma gelebilir. Örneğin, içerisinde trilyonlarca document olan tek bir index düşünün ve bu index 1TB disk alanı kaplasın. Bu boyutta bir indexin diske sığmama olasılığı olduğu gibi, bu index'te tek bir node'dan gelen arama istekleride çok yavaş ceveplanabilecektir.

Bu sorunu çözmek için elasticsearch, bir index'i birden çok parçaya bölmemize olanak tanıyan "shards" yapısını kullanmakta. Bir index oluşturduğunuzda çok kolay bir şekilde kaç tane shard kullanmak istediğinizi tanımlayabilirsiniz. Her bir shard, bir index'in sahip olduğu tüm özelliklere sahip olan ve cluster'da ki herhangi bir node'da barındırılabilen tamamen bağımsız bir indexe sahiptir.

Sharding iki sebepten ötürü önemlidir:

  1. Yığının yatak olarak bölünebilmesini ve ölçeklenebilmesini sağlar.
  2. İşlemleri shard'lar üzerinde (muhtemelen farklı node'lar üzerinde ki) bölmenize ve paralel işlemler yürütmenize olanak tanıyarak performans artışı sağlar.

Shard mekanizması ve shardların nasıl dağıtık hale getirildiği tamamen elasticsearch tarafından yönetilen - ancak kullanıcı tarafından da görülebilen süreçlerdir.

Bir ağda veya bulut ortamında herhangi bir zamanda kesinti yaşanması mümkündür. Bu yüzden de, shard'ın veya node'un devre dışı kalmasına karşı mutlaka durumun üstesinden gelecek bir kurgu yapılmalıdır. Bu amaçla elasticsearch'te - index shard'larının bir veya birden çok kopyasının oluşturulabilmesini sağlayan replica shard (replika) yapısı bulunur.

Replikalar iki sebepten dolayı önemlidir:

  1. Herhangi bir shard veya node erişilemez olduğunda yüksek erişilebilirlik sağlar. Bu yüzden de, replica shard'lar asla kopyası olduğu shard ile aynı node üzerinde bulunmamalıdır!
  2. Aramalar tüm replikalar üzerinde paralel bir şekilde yürütülebildiği için, hızlı ölçeklenebilir arama sağlar.

Özetlemek gerekirse, her bir index birden çok parçaya (shard) bölünebilir. Bir index ayrıca hiç replika edilmeyebilir ve istendiği kadar da replika edilebilir. Herhangi bir index replika edildiği zaman bir tane birincil shard'ı bir tanede replika shard'ı (birincilin kopyası) oluşur. Kaç tane shard kullanılacağı ve replikaların sayısı herhangi bir index oluşturulurken tanımlanabilir. İndex oluşturulduktan sonra ise replikaların sayısı dinamik olarak değiştirilebilirken, shard'ların sayısı değiştirilemez.

Default olarak elasticsearch'te ki bir bir index 5 tane birincil shard'a ve 1 tane replikaya sahiptir. Bu da, eğer cluster'ınızda 2 tane node'unuz varsa, indexinizin 5 tane birincil shard'ının ve 5 tanede replika (yani 1 tam replika) shard'ının - yani toplamda 10 shard'ınızın olacağı anlamına gelir.

Her bir shard bir Lucene indexidir ve bir Lucene indexinde en fazla 2.147.483.519 tane document bulunabilir. Shard'ların boyutları _cat/shards API'si ile kontrol edilebilir.


Share this post!


Blog Comments powered by Disqus.