DEV Community

Tarık Anafarta
Tarık Anafarta

Posted on

Elasticsearch vs RDBMS, Logstash vs Fluentd, Elasticsearch vs Opensearch

Elasticsearch vs RDBMS

Elasticsearch, büyük veri içinde özellikle metin tabanlı arama (full-text search) yapmak için kullanılan, açık kaynaklı ve dağıtık mimariye sahip bir arama motorudur. Temel amacı çok büyük veri kümeleri içinde belirli kelime veya bilgileri çok hızlı bulabilmektir.

full-text search

Klasik bir veritabanında veri doğrudan satırlar üzerinden taranırken, Elasticsearch verileri index üzerinden arar. Bu yaklaşım sayesinde milyarlarca kayıt içinde arama işlemleri neredeyse gerçek zamanlı olarak gerçekleştirilebilir.

Elasticsearch indeksleri, ilişkisel veritabanlarında (RDBMS) bulunan indekslerle aynı değildir. Bir Elasticsearch cluster'ı, içinde birçok indeks barındırabilen bir veritabanı gibidir. Her indeks bir tabloya benzer, ve her indeksin içinde birçok doküman bulunur.

RDBMS => Databases => Tables => Columns/Rows
Elasticsearch => Clusters => Indices => Shards => Documents (key-value pairs)
Enter fullscreen mode Exit fullscreen mode

Elasticsearch temelde Apache Lucene üzerine kuruludur. Lucene, metinlerin indekslenmesi ve aranması için kullanılan güçlü bir kütüphanedir. Elasticsearch ise bu altyapıyı kullanarak hem structured hem de unstructured verilerin indekslenmesini ve aranmasını sağlar. Elasticsearch'te tutulan her veri JSON formatında bir document olarak saklanır hepsinin bir id'si vardır.

Bir veri Elasticsearch'e eklendiğinde sistem bu veriyi doğrudan taranabilir halde saklamaz. Bunun yerine belirlenen alanlar indekslenir. İndeksleme sırasında her kelimenin hangi dokümanlarda geçtiği bir liste halinde tutulur. Buna inverted index mantığı denir. Bu yapı Elasticsearch’ün çok hızlı çalışmasının temel sebebidir.

Inverted index

Elasticsearch'ün dağıtık çalışmasını sağlayan önemli yapılardan biri shard ve replica kavramlarıdır. Büyük veri kümelerini tek bir sunucuda tutmak zor olabileceği için bir index birden fazla shard'a bölünür. Shard'lar farklı node'lara dağıtılarak paralel işlem yapılması sağlanır. Böylece hem performans artar hem de sistem yatay olarak ölçeklenebilir.

Scaling


Logstash vs Fluentd

Logstash'ın çalışabilmesi için JVM gereklidir. Bu bağımlılık yüksek bellek tüketiminin temel nedeni haline gelmiştir. Logstash daha ağırdır ama güçlü transform yapar, Fluentd ise daha hafif ve yüksek ölçekli log toplama için tercih edilir.

ban-java

Ayrıca Fluent Bit yalnızca log değil, aynı zamanda metrik verilerini de toplayabilir.

Fluentd + Elasticsearch genelde DaemonSet olarak çalışan bir log collector modeliyle kullanılır; logları pod dosyalarından okuyup Kubernetes metadata ekleyerek direkt Elasticsearch'e yollar. Logstash + Elasticsearch tarafında ise Logstash da Kubernetes'te çalıştırılabilir ama JVM tabanlı olduğu için kaynak ayarı ve operasyonu daha ağırdır.

Benchmark Sonuçları

workflow

Düşük hacimli veri akışlarında Logstash ve Fluentd sistem üzerinde benzer bir yük oluşturur. Ancak bu durum 16 thread / iş yükü düğümü (workload nodes) noktasına gelindiğinde değişir ve Logstash'ın aynı miktarda olayı işleyebilmek için daha fazla CPU kullandığı açıkça görülür. Ortalama olarak CPU kullanımı %25 daha yüksektir.

Performans elbette kullanılan senaryoya bağlı olsa da Logstash'ın Fluentd'ye kıyasla daha fazla bellek tükettiği bilinmektedir. Fluentd verimli bir log toplayıcıdır ve ölçeklenebilirliği oldukça iyidir.

Docker Desteği

Docker'ın Fluentd için yerleşik bir logging driver'ı vardır, ancak Logstash için böyle bir driver bulunmaz. Fluentd kullanıldığında container üzerinde logları Fluentd'ye göndermek için ekstra bir agent çalıştırmaya gerek yoktur. Loglar ek bir log dosyasına ihtiyaç duymadan doğrudan STDOUT üzerinden Fluentd servisine gönderilir. Logstash'ta ise uygulama loglarının okunabilmesi ve Logstash'a gönderilebilmesi için bir plugin'e (filebeat) ihtiyaç vardır.

Sonuç

Kubernetes ortamlarında da Fluentd, yerleşik Docker logging driver'ı ve parser'ı sayesinde ideal bir aday gibi görünmektedir. Bu yapı sayesinde container üzerinde logları Fluentd'ye göndermek için ek bir agent çalıştırmaya gerek kalmaz. Logstash ile karşılaştırıldığında bu durum mimarinin daha az karmaşık olmasını sağlar ve loglama hataları oluşma riskini de azaltır.


Elasticsearch vs OpenSearch

Benchmark Sonuçları

"Çeşitli testlerin sonuçları dikkate alındığında, Elasticsearch'ün OpenSearch'e kıyasla sürekli olarak daha iyi performans gösterdiği açıkça görülmektedir. Basit sorguların çalıştırılması, verilerin sıralanması, histogram oluşturulması, terim veya aralık sorgularının işlenmesi ya da kaynakların daha verimli kullanılması gibi durumların hepsinde Elasticsearch öne çıkmaktadır." (Kobar & Sangiorgi, 2023)

Elasticsearch'ün arama özellikleri Opensearch'e göre daha gelişmiştir ve AI/ML alanında da geliştirmeler yapmaya başlamıştır.

Top comments (0)