Ana içeriğe geç
Version: 1.0.1

Data Partitioning

Data partitioning, büyük veri kümelerini daha küçük paraçalar ayırma ve bunları tüm server node’lar arasında dengeli bir şekilde dağıtma yöntemidir.

Partitioning affinity function tarafından kontrol edilir. Affinity function, keyler ve partitionlar arasındaki eşlemeyi belirler. Her partition, sınırlı bir kümeden bir sayı ile tanımlanır (varsayılan olarak 0 ila 1023). Partition kümesi, şua nada mevcut olan server node’lar arasında dağıtılır. Böylece her key belirli bir node’a eşlenir ve o node’da depolanır. Clusterdaki node sayısı değiştiğinde, partitionlar rebalancing adı verilen bir süreç aracılığıyla yeni node kümesi arasında yeniden dağıtılır.

partitioning.png

Affinity function, affinity key’ini bağımsız bir değişken olarak alır. Affinity key, cache’te saklanan nesnelerin herhangi bir field’ı olabilir (SQL tablolarında herhangi bir sütun olabilir). Affinity key belirtilmemişse varsayılan olarak key kullanılır (SQL tablolarında, PRIMARY KEY sütunu olur).

Partitioning hem okuma hem de yazma işlemlerini dağıtarak performansı arttırır. Ayrıca veri modellemesi, birlikte kullanılan veri girişlerinin birlikte(yani bir partitionda) saklanacağı şekilde tasarlanabilir. Bu, veriler talep edildiğinde, az sayıda partition’un yani az sayıda verinin taranacağı demektir. Bu tekniğe Affinity Colocation denir.

Partitioning, neredeyse her ölçekte doğrusal ölçeklenebilirlik elde etmeye yardımcı olur. Veri kümesi büyüdükçe cluster’a daha fazla node eklenebilir ve Ignite, verilerin tüm node’lar arasında eşit olarak dağıtılmasını sağlar.

Affinity Function

Affinity function, veri girişlerinin partitionlara ve partitionların node’lara nasıl eşlendiğini kontrol eder. Varsayılan affinity function, [rendezvous hashing](https://en.wikipedia.org/wiki/Rendezvous_hashing) algoritmasını uygular. Partitiondan node’a eşlemede biraz tutarsızlığa izin verir (yani, bazı node’lar diğerlerinden biraz daha fazla sayıda partitiondan sorumlu olabilir). Ancak affinity function, topoloji değiştiğinde partitionların yalnızca katılan yeni node’a veya ayrılan node’dan taşınmasını garanti eder. Kalan node’lar arasında veri alışverişi olmaz.

Partitioned/Replicated Mode

Bir cache veya SQL tablosu oluştururkeni partitionlanmış ve replice edilmiş cache işlemi modeları arasında seçim yapılabilir. İki mod, farklı kullanım senaryoları için tasarlanmıştır ve farklı performans ve erişilebilirlik avantajları sağlar.

Partitioned Mode

Bu modda, tüm partitionlar tüm server node’lar arasında eşit olarak bölünür. Bu mod, en ölçeklenebilir dağıtık cache modudur ve tüm node’larda bulunan toplam belleğe(RAM ve disk) sığdığı kadar veri depolamaya izin verir. Temel olarak ne kadar çok node olursa o kadar çok veri depolanabilir.

Clusterdaki her node’un güncellenmesi gerektiğinden güncellemelerin(update) pahalı olduğu REPLICATED modunun aksine, PARTITIONED modunda her key için yalnızca bir primary node(ve isteğe bağlı olarak 1 veya daha fazla backup node) güncellenmesi gerektiğinden güncellemeler ucuz hale gelir.

Partitioned cacheler, veri kümeleri büyük olduğunda ve güncellemeler sık olduğunda idealdir.

partitioned_cache.png

Replicated Mode

Bu modda, tüm veriler(her partition) clusterdaki her node’a replike edilir. Bu cache modunda, veriler her node’da mevcut olduğu için verilere en üst düzeyde erişilebilirlik sağlar. Ancak, her veri güncellemesinin diğer tüm node’lara yayılması gerekir, bu da performansı ve ölçeklenebilirliği etkileyebilir.

Replicated cacheler, veri kümelerinin küçük olduğu ve güncellemelerin seyrek olduğu durumlar için idealdir.

replicated_cache.png

Aynı veriler tüm cluster node’larında depolandığından, replicated bir cache’in boyutu, node’da bulunan bellek (RAM ve disk) miktarıyla sınırlıdır. Bu mod, cache okumalarının cahce yazmalarından çok daha sık olduğu ve veri kümelerinin küçük olduğu senaryolar için idealdir. Sistemde yapılan işlemlerin %80'i veya daha fazlası cache araması yapıyorsa, replicated cache modu kullanılabilir.

Backup Partitions

Varsayılan olarak Ignite, her partition’un tek bir kopyasını (tüm veri kümesinin tek bir kopyası) tutar. Bu durumda, bir veya daha fazla node kullanılamaz hale gelirse, bu node’larda depolanan partitionlara olan erişim kaybedilir. Bunu önlemek için, Ignite her partition’un yedek kopyalarını tutacak şekilde yapılandırılabilir.

By default, backups are disabled.

Backup(yedek) kopyalar, cacahe(veya tablo) başına yapılandırılır. 2 yedek kopya yapılandırılırsa, cluster her partition’un 3 kopyasını tutar. Partitionlardan biri primary partition, diğer ikisi ise backup partition olarak adlandırılır. Primary partition’a sahip olan node, partitionda depolanan keyler için primary node olarak adlandırılır. Backup partitionları olan node, backup node olarak adlandırılır.

Bazı keyler için primary partition’a sahip bir node cluster’dan ayrıldığında, Ignite partition map exchange(PME) işlemini tetikler. PME, key için backup partitionlarından birini(yapılandırılmışlarsa) primary olarak etiketler.

Backup partitionları, verilerin erişilebilirliğini ve bazı durumlarda okuma işlemlerinin hızını arttırır, çünkü Ignite local node’da mevcutsa backup node’lardan verileri okur(bu, devre dışı bırakılabilen varsayılan bir davranıştır). Ancak bellek tüketimini ve eğer etkinleştirilmişse kalıcı(persistent) depolama boyutunuda arttırır.

Backup partitionları yalnızca PARTITIONED modda yapılandırılabilir.

Partition Map Exchange(PME)

PME, her node’un belirli keyleri nerede arayacağını bilmesi için cluster genelinde partition dağılımı (partition map) hakkında bilgi paylaşma işlemidir. Herhangi bir cache için partition dağılımı değiştiğinde, örneğin topolojiye yeni node’lar eklendiğinde veya eski node’lar topolojiden ayrıldığında (kullanıcı isteği üzerine veya bir arıza nedeniyle) PME gereklidir.

PME'yi tetikleyen olayların örnekleri (ancak bunlarla sınırlı değildir):

  • Yeni bir node topolojiye katılır/ayrılır.
  • Yeni bir cache başlar/durur.
  • Bir indeks oluşturulur.

PME'yi tetikleyen olaylardan biri meydana geldiğinde, cluster devam eden tüm işlemlerin tamamlanmasını bekler ve ardından PME'yi başlatır. Ayrıca PME sırasında yeni işlemler süreç bitene kadar ertelenir.

PME süreci şu şekilde çalışır: Koordinatör node, tüm node’lardan sahip oldukları partitionlar hakkındaki bilgileri ister. Her node bu bilgiyi koordinatöre gönderir. Koordinatör node, tüm node’lardan gelen mesajları aldıktan sonra, bilgileri tam bir partition mapte birleştirir ve tüm node’lara gönderir. Koordinatör tüm node’lardan onay mesajları aldığında, PME tamamlanmış kabul edilir.