Pencarian Elastik

Amalan Terbaik Elasticsearch dan Meningkatkan Prestasi

Amalan Terbaik Elasticsearch dan Meningkatkan Prestasi
Dalam catatan ini, kami akan berusaha mengumpulkan amalan terbaik dan juga perkara yang harus dielakkan semasa bekerja dengan Elasticsearch dan memasukkan data ke dalamnya. Dengan cara ini, kita akan mengetahui semua perkara yang perlu kita jaga sebelum kita mula bekerja dengan Mesin Pencari yang sangat baik ini.

Amalan Terbaik Elasticsearch

Kami akan mula bekerjasama dengan Amalan Terbaik untuk diikuti dengan Elasticsearch dan masalah apa yang boleh ditimbulkannya ketika kita mengelakkan perkara ini. Mari kita mulakan.

Sentiasa tentukan Pemetaan ES

Satu perkara yang pasti dapat dilakukan oleh ES ialah bekerja tanpa pemetaan. Oleh itu, apabila anda mula memasukkan data JSON ke indeks ES anda, ia akan berulang pada bidang data dan membuat pemetaan yang sesuai. Ini nampak langsung dan mudah kerana ES memilih jenis data itu sendiri. Berdasarkan data anda, anda mungkin memerlukan bidang untuk jenis data tertentu.

Contohnya, anggap anda mengindeks dokumen berikut:


"id": 1,
"title": "Pasang ElasticSearch di Ubuntu",
"link": "https: // linuxhint.com / install-elasticsearch-ubuntu / ",
"tarikh": "2018-03-25"

Dengan cara ini, Elasticsearch akan menandakan bidang "tarikh" sebagai jenis "tarikh". Tetapi apabila anda mengindeks dokumen berikut:


"id": 1,
"title": "Amalan dan Prestasi Terbaik ES",
"tarikh": "Belum selesai"

Kali ini, jenis bidang tarikh telah diubah dan ES akan membuat kesalahan dan tidak akan membenarkan dokumen anda diindeks. Untuk mempermudah, anda dapat mengindeks beberapa dokumen, melihat bidang apa yang diindeks oleh ES dan mengambil pemetaan dari URL ini:

GET / index_name / doc_type / _mapping

Dengan cara ini, anda tidak perlu membuat pemetaan lengkap juga.

Bendera Pengeluaran

Nama kluster lalai yang ES mulakan dipanggil carian elastik. Apabila anda mempunyai banyak node dalam kluster anda, adalah idea yang baik untuk memastikan bendera penamaan selaras mungkin, seperti:

gugusan.nama: app_es_production
simpul.nama: app_es_node_001

Selain daripada itu, tetapan pemulihan untuk nod juga penting. Katakan beberapa nod dalam kluster dimulakan semula kerana kegagalan dan beberapa nod dimulakan sedikit selepas nod lain. Untuk memastikan data tetap konsisten di antara semua node ini, kita harus menjalankan program konsistensi yang akan memastikan semua kluster berada dalam keadaan yang konsisten.

pintu masuk.recovery_after_nodes: 10

Ia juga berguna apabila anda memberitahu kluster terlebih dahulu berapa banyak nod yang akan ada dalam kluster dan berapa banyak masa pemulihan yang diperlukan:

pintu masuk.jangkaan_node: 20
pintu masuk.pulih_ selepas_kerja: 7m

Dengan konfigurasi yang betul, pemulihan yang memerlukan waktu berjam-jam boleh memakan masa hanya seminit dan dapat menjimatkan banyak wang kepada mana-mana syarikat.

Penyediaan Kapasiti

Penting untuk mengetahui berapa banyak ruang yang akan diambil oleh data anda dan kadar alirannya ke Elasticsearch, kerana itu akan menentukan jumlah RAM yang anda perlukan pada setiap simpul kluster dan nod induk juga.

Sudah tentu, tidak ada garis panduan khusus untuk mencapai jumlah yang diperlukan tetapi kita dapat mengambil beberapa langkah yang memberi kita idea yang baik. Salah satu langkahnya ialah mensimulasikan kes penggunaan. Buat kluster ES dan beri makan dengan kadar data yang hampir sama seperti yang anda harapkan dengan persediaan pengeluaran anda. Konsep mulakan besar dan turunkan juga dapat membantu anda konsisten mengenai berapa banyak ruang yang diperlukan.

Templat Besar

Apabila anda menentukan templat besar yang diindeks, anda akan selalu menghadapi masalah yang berkaitan dengan menyegerakkan templat di pelbagai nod kluster anda. Sentiasa perhatikan bahawa templat harus ditentukan semula setiap kali perubahan model data berlaku. Ini adalah idea yang lebih baik untuk mengekalkan templat sebagai dinamik. Templat Dinamik mengemas kini pemetaan medan secara automatik berdasarkan pemetaan yang kami tentukan sebelumnya dan bidang baru. Perhatikan bahawa tidak ada pengganti untuk menyimpan templat sekecil mungkin.

2Menggunakan mlockall pada Ubuntu Server

Linux menggunakan proses Swapping ketika memerlukan memori untuk halaman baru. Pertukaran menjadikan perkara menjadi perlahan kerana cakera lebih perlahan daripada memori. The mlockall harta benda dalam konfigurasi ES memberitahu ES untuk tidak menukar halamannya dari memori walaupun tidak diperlukan buat masa ini. Properti ini boleh ditetapkan dalam fail YAML:

tali kasut.mlockall: benar

Dalam ES v5.versi x +, harta ini telah berubah menjadi:

tali kasut.memory_lock: benar

Sekiranya anda menggunakan harta tanah ini, pastikan anda menyediakan ES dengan memori timbunan yang cukup besar menggunakan -DXmx pilihan atau ES_HEAP_SIZE.

Minimumkan Pemetaan Pemetaan

Prestasi kluster sedikit terpengaruh setiap kali anda membuat pemetaan permintaan kemas kini pada kluster ES anda. Sekiranya anda tidak dapat mengawal ini dan masih mahu membuat kemas kini pemetaan, anda boleh menggunakan harta dalam fail konfigurasi ES YAML:

Indeks.gugusan.send_refresh_mapping: salah

Apabila permintaan kemas kini model menunggu giliran untuk simpul induk dan mengirimkan data dengan pemetaan lama ke node, ia juga harus mengirim permintaan kemas kini kemudian ke semua node. Ini boleh menjadikan keadaan menjadi perlahan. Apabila kami menetapkan harta di atas ke palsu, ini masuk akal bahawa kemas kini telah dibuat ke pemetaan dan tidak akan menghantar permintaan kemas kini ke node. Perhatikan bahawa ini hanya berguna jika anda membuat banyak perubahan pada pemetaan anda secara berkala.

Thread-pool yang dioptimumkan

Nod ES mempunyai banyak kumpulan utas untuk meningkatkan bagaimana urutan benang dikendalikan dalam nod. Tetapi ada batasan berapa banyak data yang dapat dijaga oleh setiap utas. Untuk mengesan nilai ini, kita dapat menggunakan harta ES:

kolam benang.pukal.queue_size: 2000

Ini memberitahu ES jumlah permintaan dalam pecahan yang dapat diantrekan untuk pelaksanaan di simpul ketika tidak ada utas yang tersedia untuk memproses permintaan. Sekiranya jumlah tugas lebih tinggi daripada nilai ini, anda akan mendapat RemoteTransportException. Semakin tinggi nilai ini, semakin tinggi jumlah ruang timbunan yang diperlukan pada mesin nod anda dan timbunan JVM juga akan digunakan. Anda juga harus memastikan kod anda siap sekiranya pengecualian ini dilemparkan.

Kesimpulannya

Dalam pelajaran ini, kami melihat bagaimana kami dapat meningkatkan prestasi Elasticsearch dengan mengelakkan kesalahan yang biasa dan tidak biasa dilakukan orang. Baca lebih banyak artikel Elasticsearch di LinuxHint.

Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...
Permainan Perintah Terbaik untuk Linux
Baris perintah bukan hanya sekutu terbesar anda ketika menggunakan Linux-ia juga dapat menjadi sumber hiburan kerana anda dapat menggunakannya untuk m...