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 / _mappingDengan 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_productionsimpul.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: 10Ia 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: 20pintu 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: benarDalam ES v5.versi x +, harta ini telah berubah menjadi:
tali kasut.memory_lock: benarSekiranya 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: salahApabila 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: 2000Ini 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.