paint-brush
4 Elasticsearch Performans Zorlukları ve Bunların Çözümüile@rocksetcloud
4,042 okumalar
4,042 okumalar

4 Elasticsearch Performans Zorlukları ve Bunların Çözümü

ile Rockset5m2024/05/16
Read on Terminal Reader

Çok uzun; Okumak

Bu blogda yavaş indeksleme, arama hızı, parça ve indeks boyutlandırma ve çoklu kiracılık dahil olmak üzere yaygın Elasticsearch performans sorunlarına geniş ölçekte çözümler sunuyoruz.
featured image - 4 Elasticsearch Performans Zorlukları ve Bunların Çözümü
Rockset HackerNoon profile picture


Elasticsearch'ü Ölçeklendirme

Elasticsearch, günlük analizi, metin araması, gerçek zamanlı analiz ve daha fazlası için kullanılması kolay bir NoSQL arama ve analiz motorudur. Bununla birlikte, Elasticsearch, optimum performansı elde etmek için çekilecek birçok kolun bulunduğu karmaşık, dağıtılmış bir sistemdir.


Bu blogda yavaş indeksleme, arama hızı, parça ve indeks boyutlandırma ve çoklu kiracılık dahil olmak üzere yaygın Elasticsearch performans sorunlarına geniş ölçekte çözümler sunuyoruz. Çözümlerin çoğu, sistemi geniş ölçekte çalıştırma konusunda uygulamalı deneyime sahip mühendislik liderleri ve mimarlarla yapılan görüşmeler ve tartışmalardan elde edilir.

Elasticsearch'te indeksleme performansını nasıl geliştirebilirim?

Yüksek yazma verimine sahip iş yükleriyle uğraşırken, indeksleme performansını artırmak için Elasticsearch'ü ayarlamanız gerekebilir. İşlemin uygulamanızdaki arama performansını etkilememesi amacıyla indeksleme için yeterli kaynağın hazır bulundurulmasına yönelik birkaç en iyi uygulamayı sunuyoruz:


  • Yenileme aralığını artırın: Elasticsearch, dizini yenileyerek yeni verileri arama için kullanılabilir hale getirir. Yenilemeler, bir dizin son 30 saniye içinde bir sorgu aldığında her saniyede bir otomatik olarak gerçekleşecek şekilde ayarlanmıştır. Dizin oluşturmaya daha fazla kaynak ayırmak için yenileme aralığını artırabilirsiniz.


  • Toplu API'yi kullanın: Büyük ölçekli verileri alırken, Güncelleme API'sini kullanarak indeksleme süresinin haftalar sürdüğü bilinmektedir. Bu senaryolarda, Toplu API'yi kullanarak verilerin kaynak açısından daha verimli bir şekilde dizine eklenmesini hızlandırabilirsiniz. Toplu API ile bile, küme performansını engellemediğinden emin olmak için dizine eklenen belge sayısından ve toplu isteğin genel boyutundan haberdar olmak istersiniz. Elastic toplu boyutun karşılaştırılmasını önerir ve genel kural olarak toplu istek başına 5-15 MB'dir .


  • Dizin arabellek boyutunu artırın: Bekleyen dizin oluşturma istekleri için bellek sınırını, yığının %10'u olan varsayılan değerin üzerine artırabilirsiniz. Bu, indeksleme açısından ağır iş yükleri için önerilebilir, ancak bellek yoğunluğu olan diğer işlemleri etkileyebilir.


  • Çoğaltmayı devre dışı bırakın: Dizin oluşturmayı hızlandırmak için çoğaltmayı sıfıra ayarlayabilirsiniz ancak iş yükünüz için kayıt sistemi Elasticsearch ise bu önerilmez.


  • Yerinde yükseltmeleri ve veri değişimlerini sınırlayın : Eklemeler, güncellemeler ve silmeler, tüm belgelerin yeniden indekslenmesini gerektirir. CDC veya işlem verilerini Elasticsearch'e aktarıyorsanız daha az veri depolamayı düşünebilirsiniz çünkü bu durumda yeniden indekslenecek daha az veri kalır.


  • Veri yapısını basitleştirin: İç içe geçmiş nesneler gibi veri yapılarını kullanmanın yazma ve dizin sayısını artıracağını unutmayın. Alan sayısını ve veri modelinin karmaşıklığını basitleştirerek indekslemeyi hızlandırabilirsiniz.

Elasticsearch'te arama hızımı artırmak için ne yapmalıyım?

Sorgularınızın yürütülmesi çok uzun sürüyorsa bu, veri modelinizi basitleştirmeniz veya sorgu karmaşıklığını ortadan kaldırmanız gerektiği anlamına gelebilir. İşte dikkate alınması gereken birkaç alan:


  • Bileşik dizin oluşturun: Kolayca aranabilen ve alınabilen yüksek kardinaliteli bir alan oluşturmak için iki düşük kardinaliteli alanın değerlerini birleştirin. Örneğin, sorgunuz için genellikle filtrelediğiniz iki alan varsa, posta kodu ve ay içeren bir alanı birleştirebilirsiniz.


  • Belgelerin özel yönlendirmesini etkinleştirin: Elasticsearch, bir sonuç döndürmek için tüm parçalara bir sorgu yayınlar. Özel yönlendirmeyle, sorgu yürütmeyi hızlandırmak için verilerinizin hangi parçada bulunduğunu belirleyebilirsiniz. Bununla birlikte, özel yönlendirmeyi benimserken sıcak noktalara dikkat etmek istersiniz.


  • Yapılandırılmış aramalar için anahtar kelime alanı türünü kullanın: Kimlik veya posta kodu gibi içeriğe göre filtrelemek istediğinizde, daha hızlı erişim için tamsayı türü veya diğer sayısal alan türleri yerine anahtar kelime alanı türünü kullanmanız önerilir.


  • Ebeveyn-çocuk ve iç içe geçmiş nesnelerden uzaklaşın: Ebeveyn-çocuk ilişkileri, Elasticsearch'teki birleştirme desteği eksikliği için iyi bir geçici çözümdür ve alımın hızlandırılmasına ve yeniden indekslemenin sınırlandırılmasına yardımcı olmuştur. Sonuçta kuruluşlar bu yaklaşımla hafıza sınırlarına ulaşırlar. Böyle bir durum meydana geldiğinde, veri normalleştirmesini gerçekleştirerek sorgu performansını hızlandırabileceksiniz.

Elasticsearch parçalarını ve dizinlerini ölçeklendirme için nasıl boyutlandırmalıyım?

Elasticsearch'teki ölçeklendirme zorluklarının çoğu, parçalama ve indeksleme stratejisinden kaynaklanmaktadır. Kaç parçaya sahip olmanız gerektiği veya parçalarınızın ne kadar büyük olması gerektiği konusunda herkese uyan tek bir strateji yoktur. Stratejiyi belirlemenin en iyi yolu, tek tip üretim iş yükleri üzerinde testler ve kıyaslamalar yapmaktır. İşte dikkate almanız gereken bazı ek tavsiyeler:


  • Birleştirmeyi Zorla API'sini kullanın: Her bir parçadaki segment sayısını azaltmak için zorla birleştirme API'sini kullanın. Segment birleştirmeleri arka planda otomatik olarak gerçekleşir ve silinen tüm belgeleri kaldırır. Zorunlu birleştirmenin kullanılması eski belgeleri manuel olarak kaldırabilir ve performansı hızlandırabilir. Bu, kaynak açısından yoğun olabilir ve bu nedenle kullanımın en yoğun olduğu zamanlarda gerçekleşmemelidir.


  • Yük dengesizliğine dikkat edin: Elasticsearch, parçaya göre kaynak kullanımını anlama ve parça yerleşimini belirlerken bunu dikkate alma konusunda iyi bir yola sahip değildir. Sonuç olarak sıcak parçalara sahip olmak mümkündür. Bu durumu önlemek için veri notlarından daha fazla parçaya ve veri düğümlerinden daha küçük parçalara sahip olmayı düşünebilirsiniz.


  • Zamana dayalı dizinleri kullanın: Zamana dayalı dizinler, saklamaya bağlı olarak kümenizdeki dizinlerin ve parçaların sayısını azaltabilir. Elasticsearch ayrıca kaynakları boşaltmak amacıyla yaş veya belge boyutuna göre yeni bir dizine geçebilmeniz için bir rollover index API'si de sunar.

Çoklu kiracılık için nasıl tasarım yapmalıyım?

Çoklu kiracılığa yönelik en yaygın stratejiler, müşteri veya kiracı başına bir dizine sahip olmak veya özel yönlendirme kullanmaktır. İş yükünüz için stratejileri nasıl değerlendirebileceğiniz aşağıda açıklanmıştır:


  • Müşteri veya kiracı başına dizin: Müşteriye göre ayrı dizinler yapılandırmak, daha küçük bir kullanıcı tabanına, yüzlerce ila birkaç bin müşteriye sahip şirketlerde ve müşterilerin veri paylaşmadığı durumlarda iyi sonuç verir. Her müşterinin kendi şeması varsa ve daha fazla esnekliğe ihtiyaç duyuyorsa, müşteri başına bir dizine sahip olmak da yararlı olur.


  • Özel yönlendirme: Özel yönlendirme, bir belgeyi dizine eklerken yönlendirmeyi belirtmek için bir belgenin bulunduğu parçayı (örneğin, müşteri kimliği veya kiracı kimliği) belirtmenize olanak tanır. Belirli bir müşteriye göre sorgulama yapılırken, daha hızlı yanıt süreleri için sorgu doğrudan müşteri verilerini içeren parçaya gidecektir. Müşterileriniz arasında tutarlı bir şemaya sahip olduğunuzda ve çok sayıda müşteriniz olduğunda, özel yönlendirme iyi bir yaklaşımdır; bu, ücretsiz bir model sunduğunuzda yaygındır.

Elasticsearch'ü ölçeklemek ya da ölçeklendirmemek!

Elasticsearch, günlük analizi ve metin arama kullanım durumları için tasarlanmıştır. Gerçek zamanlı analiz için geniş ölçekte Elasticsearch'ü kullanan birçok kuruluş, performansı veya maliyet verimliliğini korumak için sorgu karmaşıklığını ve veri alma gecikmesini sınırlamak da dahil olmak üzere bazı tavizler vermek zorunda kalacak. Kullanım kalıplarını sınırlamaya başladığınızda, yenileme aralığınız SLA'nızı aştığında veya birleştirilmesi gereken daha fazla veri kümesi eklediğinizde, Elasticsearch'e alternatifler aramak mantıklı olabilir.


Rockset alternatiflerden biridir ve gerçek zamanlı veri akışı ve geniş ölçekte düşük gecikmeli sorgular için özel olarak tasarlanmıştır. Elasticsearch'ten nasıl geçiş yapacağınızı öğrenin ve iki sistem arasındaki mimari farklılıkları keşfedin.