Ketahanan yang ditingkatkan dengan tekanan balik dan kontrol penerimaan untuk Amazon OpenSearch Service | Layanan Web Amazon

Ketahanan yang ditingkatkan dengan tekanan balik dan kontrol penerimaan untuk Amazon OpenSearch Service | Layanan Web Amazon

Node Sumber: 2723961

Layanan Pencarian Terbuka Amazon adalah layanan terkelola yang mempermudah pengamanan, penerapan, dan pengoperasian klaster OpenSearch dalam skala besar di AWS Cloud. Tahun lalu, kami memperkenalkan Tekanan Balik Pengindeksan Shard dan kontrol penerimaan, yang memantau sumber daya klaster dan lalu lintas masuk untuk secara selektif menolak permintaan yang akan menimbulkan risiko stabilitas seperti kehabisan memori dan memengaruhi kinerja klaster karena pertengkaran memori, saturasi CPU dan overhead GC, dan banyak lagi.

Kami sekarang bersemangat untuk memperkenalkan Search Backpressure dan kontrol masuk berbasis CPU untuk Layanan OpenSearch, yang semakin meningkatkan ketahanan klaster. Perbaikan ini tersedia untuk semua OpenSearch versi 1.3 atau lebih tinggi.

Cari Tekanan Balik

Backpressure mencegah sistem dari kewalahan dengan pekerjaan. Itu dilakukan dengan mengendalikan tingkat lalu lintas atau dengan menumpahkan beban berlebihan untuk mencegah kerusakan dan kehilangan data, meningkatkan kinerja, dan menghindari kegagalan total sistem.

Search Backpressure adalah mekanisme untuk mengidentifikasi dan membatalkan permintaan pencarian intensif sumber daya saat sebuah node berada di bawah tekanan. Ini efektif terhadap beban kerja penelusuran dengan penggunaan sumber daya yang sangat tinggi (seperti kueri kompleks, kueri lambat, banyak hit, atau agregasi berat), yang dapat menyebabkan node mogok dan berdampak pada kesehatan cluster.

Search Backpressure dibangun di atas kerangka kerja pelacakan sumber daya tugas, yang menyediakan API yang mudah digunakan untuk memantau penggunaan sumber daya setiap tugas. Search Backpressure menggunakan utas latar belakang yang mengukur penggunaan sumber daya node secara berkala dan menetapkan skor pembatalan untuk setiap tugas pencarian dalam penerbangan berdasarkan faktor seperti waktu CPU, alokasi tumpukan, dan waktu yang telah berlalu. Skor pembatalan yang lebih tinggi sesuai dengan permintaan pencarian yang lebih intensif sumber daya. Permintaan pencarian dibatalkan dalam urutan menurun dari skor pembatalannya untuk memulihkan node dengan cepat, tetapi jumlah pembatalan dibatasi untuk menghindari pekerjaan yang sia-sia.

Diagram berikut mengilustrasikan alur kerja Search Backpressure.

Permintaan pencarian mengembalikan kode status HTTP 429 "Terlalu Banyak Permintaan" setelah pembatalan. OpenSearch mengembalikan hasil parsial jika hanya beberapa shard yang gagal dan hasil parsial diperbolehkan. Lihat kode berikut:

{ "error": { "root_cause": [ { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } ], "type": "search_phase_execution_exception", "reason": "SearchTask was cancelled", "phase": "fetch", "grouped": true, "failed_shards": [ { "shard": 0, "index": "nyc_taxis", "node": "9gB3PDp6Speu61KvOheDXA", "reason": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } } ], "caused_by": { "type": "task_cancelled_exception", "reason": "cancelled task with reason: heap usage exceeded [403mb >= 77.6mb], elapsed time exceeded [1.7m >= 45s]" } }, "status": 429
}

Memantau Backpressure Pencarian

Anda dapat memantau status Search Backpressure mendetail menggunakan API statistik node:

curl -X GET "https://{endpoint}/_nodes/stats/search_backpressure"

Anda juga dapat melihat ringkasan pembatalan di seluruh cluster menggunakan amazoncloudwatch. Metrik berikut sekarang tersedia di Layanan ES/OpenSearch ruang nama:

  • PencarianTugas Dibatalkan – Jumlah pembatalan node koordinator
  • SearchShardTaskDibatalkan – Jumlah pembatalan node data

Tangkapan layar berikut menunjukkan contoh pelacakan metrik ini di konsol CloudWatch.

kontrol penerimaan berbasis CPU

Kontrol penerimaan adalah mekanisme penjaga gerbang yang secara proaktif membatasi jumlah permintaan ke sebuah node berdasarkan kapasitasnya saat ini, baik untuk peningkatan organik maupun lonjakan lalu lintas.

Selain tekanan memori JVM dan ambang ukuran permintaan, sekarang juga memantau penggunaan CPU rata-rata bergulir setiap node untuk menolak masuk _search dan _bulk permintaan. Ini mencegah node kewalahan dengan terlalu banyak permintaan yang mengarah ke hot spot, masalah kinerja, waktu tunggu permintaan, dan kegagalan kaskade lainnya. Permintaan berlebihan mengembalikan kode status HTTP 429 "Terlalu Banyak Permintaan" setelah ditolak.

Menangani kesalahan HTTP 429

Anda akan menerima kesalahan HTTP 429 jika mengirimkan lalu lintas yang berlebihan ke sebuah node. Ini menunjukkan sumber daya cluster yang tidak mencukupi, permintaan pencarian intensif sumber daya, atau lonjakan beban kerja yang tidak disengaja.

Search Backpressure memberikan alasan penolakan, yang dapat membantu menyempurnakan permintaan pencarian intensif sumber daya. Untuk lonjakan traffic, kami merekomendasikan percobaan ulang sisi klien dengan backoff dan jitter eksponensial.

Anda juga dapat mengikuti panduan pemecahan masalah ini untuk men-debug penolakan yang berlebihan:

Kesimpulan

Search Backpressure adalah mekanisme reaktif untuk membuang beban yang berlebihan, sementara kontrol masuk adalah mekanisme proaktif untuk membatasi jumlah permintaan ke sebuah node di luar kapasitasnya. Keduanya bekerja bersama-sama untuk meningkatkan ketahanan keseluruhan klaster OpenSearch.

Search Backpressure tersedia di Pencarian Terbuka, dan kami selalu mencari kontribusi eksternal. Anda dapat merujuk ke RFC untuk memulai.


Tentang penulis

Ketan Verma adalah SDE Senior yang bekerja di Amazon OpenSearch Service. Dia bersemangat membangun sistem terdistribusi berskala besar, meningkatkan kinerja, dan menyederhanakan ide kompleks dengan abstraksi sederhana. Di luar pekerjaan, dia suka membaca dan meningkatkan keterampilan barista rumahnya.

Suresh NS adalah SDE Senior yang bekerja di Amazon OpenSearch Service. Dia bersemangat untuk memecahkan masalah dalam sistem terdistribusi skala besar.

Pritkumar Ladani adalah SDE-2 yang bekerja di Amazon OpenSearch Service. Dia suka berkontribusi pada pengembangan perangkat lunak sumber terbuka, dan sangat menyukai sistem terdistribusi. Dia adalah pemain bulu tangkis amatir dan menikmati trekking.

Bukhtawar Khan adalah Insinyur Utama yang bekerja di Amazon OpenSearch Service. Dia tertarik untuk membangun sistem terdistribusi dan otonom. Dia adalah pengelola dan kontributor aktif untuk OpenSearch.

Stempel Waktu:

Lebih dari Data Besar AWS