ปรับปรุงความยืดหยุ่นด้วยแรงดันย้อนกลับและการควบคุมการรับเข้าสำหรับ Amazon OpenSearch Service | บริการเว็บอเมซอน

ปรับปรุงความยืดหยุ่นด้วยแรงดันย้อนกลับและการควบคุมการรับเข้าสำหรับ Amazon OpenSearch Service | บริการเว็บอเมซอน

โหนดต้นทาง: 2723961

บริการ Amazon OpenSearch เป็นบริการที่มีการจัดการซึ่งทำให้ง่ายต่อการรักษาความปลอดภัย ปรับใช้ และดำเนินการคลัสเตอร์ OpenSearch ใน AWS Cloud ตามขนาด ปีที่แล้วเราแนะนำ แรงดันย้อนกลับการจัดทำดัชนีเศษ และ การควบคุมการรับเข้าซึ่งตรวจสอบทรัพยากรคลัสเตอร์และทราฟฟิกขาเข้าเพื่อเลือกปฏิเสธคำขอที่อาจก่อให้เกิดความเสี่ยงด้านความเสถียร เช่น หน่วยความจำไม่เพียงพอและส่งผลกระทบต่อประสิทธิภาพของคลัสเตอร์เนื่องจากการแย่งชิงหน่วยความจำ ความอิ่มตัวของ CPU และโอเวอร์เฮด GC และอื่นๆ

ขณะนี้เรารู้สึกตื่นเต้นที่จะแนะนำ Search Backpressure และการควบคุมการรับเข้าที่ใช้ CPU สำหรับ OpenSearch Service ซึ่งช่วยเพิ่มความยืดหยุ่นของคลัสเตอร์ การปรับปรุงเหล่านี้ใช้ได้กับ OpenSearch เวอร์ชัน 1.3 หรือสูงกว่าทั้งหมด

ค้นหาแรงดันย้อนกลับ

แรงดันย้อนกลับช่วยป้องกันไม่ให้ระบบทำงานหนักเกินไป ทำได้โดยการควบคุมอัตราการรับส่งข้อมูลหรือโดยการปลดภาระที่มากเกินไป เพื่อป้องกันการล่มและการสูญหายของข้อมูล ปรับปรุงประสิทธิภาพ และหลีกเลี่ยงความล้มเหลวทั้งหมดของระบบ

Search Backpressure เป็นกลไกในการระบุและยกเลิกคำขอค้นหาที่ใช้ทรัพยากรมากในเที่ยวบิน เมื่อโหนดอยู่ภายใต้การบังคับขู่เข็ญ มีผลกับปริมาณงานการค้นหาที่มีการใช้งานทรัพยากรสูงอย่างผิดปกติ (เช่น การสืบค้นที่ซับซ้อน การสืบค้นช้า การเข้าชมจำนวนมาก หรือการรวมจำนวนมาก) ซึ่งอาจทำให้โหนดล่มและส่งผลกระทบต่อสถานภาพของคลัสเตอร์

Search Backpressure สร้างขึ้นบนเฟรมเวิร์กการติดตามทรัพยากรงาน ซึ่งมี API ที่ใช้งานง่ายเพื่อตรวจสอบการใช้ทรัพยากรของแต่ละงาน Search Backpressure ใช้เธรดพื้นหลังที่วัดการใช้ทรัพยากรของโหนดเป็นระยะๆ และกำหนดคะแนนการยกเลิกให้กับงานค้นหาบนเที่ยวบินแต่ละรายการตามปัจจัยต่างๆ เช่น เวลา CPU การจัดสรรฮีป และเวลาที่ผ่านไป คะแนนการยกเลิกที่สูงขึ้นสอดคล้องกับคำขอค้นหาที่ใช้ทรัพยากรมากขึ้น คำขอค้นหาจะถูกยกเลิกตามลำดับคะแนนการยกเลิกจากมากไปน้อยเพื่อกู้คืนโหนดอย่างรวดเร็ว แต่จำนวนการยกเลิกจะถูกจำกัดอัตราเพื่อหลีกเลี่ยงการทำงานที่สิ้นเปลือง

ไดอะแกรมต่อไปนี้แสดงเวิร์กโฟลว์ Search Backpressure

คำขอค้นหาส่งคืนรหัสสถานะ HTTP 429 "คำขอมากเกินไป" เมื่อยกเลิก OpenSearch ส่งคืนผลลัพธ์บางส่วนหากมีเพียงเศษส่วนบางส่วนเท่านั้นที่ล้มเหลวและอนุญาตให้ใช้ผลลัพธ์เพียงบางส่วน ดูรหัสต่อไปนี้:

{ "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
}

การตรวจสอบแรงดันย้อนกลับของการค้นหา

คุณสามารถตรวจสอบสถานะแรงดันย้อนกลับของการค้นหาโดยละเอียดโดยใช้ API สถิติของโหนด:

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

คุณยังสามารถดูสรุปการยกเลิกทั่วทั้งคลัสเตอร์โดยใช้ อเมซอน คลาวด์วอตช์. เมตริกต่อไปนี้พร้อมใช้งานแล้วใน ES/OpenSearchService เนมสเปซ:

  • ค้นหางานยกเลิก – จำนวนการยกเลิกโหนดผู้ประสานงาน
  • ค้นหา ShardTask ยกเลิกแล้ว – จำนวนการยกเลิกโหนดข้อมูล

ภาพหน้าจอต่อไปนี้แสดงตัวอย่างการติดตามตัววัดเหล่านี้บนคอนโซล CloudWatch

การควบคุมการรับเข้าที่ใช้ CPU

การควบคุมการรับเข้าเป็นกลไกการเฝ้าประตูที่จำกัดจำนวนคำขอไปยังโหนดเชิงรุกตามความสามารถปัจจุบัน ทั้งสำหรับการเพิ่มขึ้นทั่วไปและการเพิ่มขึ้นอย่างรวดเร็วของการรับส่งข้อมูล

นอกจากเกณฑ์แรงดันหน่วยความจำ JVM และขนาดคำขอแล้ว ตอนนี้ยังตรวจสอบการใช้งาน CPU เฉลี่ยแบบกลิ้งของแต่ละโหนดเพื่อปฏิเสธการรับเข้า _search และ _bulk คำขอ ช่วยป้องกันไม่ให้โหนดถูกร้องขอมากเกินไปซึ่งนำไปสู่ฮอตสปอต ปัญหาด้านประสิทธิภาพ การหมดเวลาของคำขอ และความล้มเหลวในการเรียงซ้อนอื่นๆ คำขอที่มากเกินไปส่งคืนรหัสสถานะ HTTP 429 "คำขอมากเกินไป" เมื่อถูกปฏิเสธ

การจัดการข้อผิดพลาด HTTP 429

คุณจะได้รับข้อผิดพลาด HTTP 429 หากคุณส่งทราฟฟิกไปยังโหนดมากเกินไป ซึ่งบ่งชี้ว่าทรัพยากรคลัสเตอร์ไม่เพียงพอ คำขอค้นหาที่ใช้ทรัพยากรมาก หรือปริมาณงานพุ่งสูงขึ้นโดยไม่ได้ตั้งใจ

Search Backpressure ให้เหตุผลในการปฏิเสธ ซึ่งสามารถช่วยปรับแต่งคำขอค้นหาที่ใช้ทรัพยากรมาก สำหรับทราฟฟิกที่เพิ่มขึ้น เราขอแนะนำให้ลองฝั่งไคลเอ็นต์ใหม่โดยใช้การถอยกลับแบบเอ็กซ์โปเนนเชียลและการกระวนกระวายใจ

คุณยังสามารถทำตามคำแนะนำในการแก้ปัญหาเหล่านี้เพื่อแก้ปัญหาการปฏิเสธที่มากเกินไป:

สรุป

Search Backpressure เป็นกลไกตอบสนองเพื่อลดโหลดที่มากเกินไป ในขณะที่การควบคุมการรับเข้าเป็นกลไกเชิงรุกเพื่อจำกัดจำนวนคำขอไปยังโหนดที่เกินขีดความสามารถ ทั้งสองทำงานควบคู่กันเพื่อปรับปรุงความยืดหยุ่นโดยรวมของคลัสเตอร์ OpenSearch

ค้นหา Backpressure ได้ใน OpenSearchและเรามักจะมองหา ผลงานภายนอก. คุณสามารถอ้างถึง RFC ที่จะเริ่มต้น


เกี่ยวกับผู้แต่ง

คีตัน เวอร์มา เป็น SDE อาวุโสที่ทำงานบน Amazon OpenSearch Service เขาหลงใหลเกี่ยวกับการสร้างระบบกระจายขนาดใหญ่ ปรับปรุงประสิทธิภาพ และทำให้แนวคิดที่ซับซ้อนง่ายขึ้นด้วยสิ่งที่เป็นนามธรรม เขาชอบที่จะอ่านหนังสือและพัฒนาทักษะบาริสต้าที่บ้านของเขา

ซูเรช NS เป็น SDE อาวุโสที่ทำงานบน Amazon OpenSearch Service เขามีความกระตือรือร้นในการแก้ปัญหาในระบบกระจายขนาดใหญ่

ปริตกุมารลดานี เป็น SDE-2 ที่ทำงานบน Amazon OpenSearch Service เขาชอบมีส่วนร่วมในการพัฒนาซอฟต์แวร์โอเพ่นซอร์ส และหลงใหลเกี่ยวกับระบบแบบกระจาย เขาเป็นนักแบดมินตันสมัครเล่นและชอบเดินป่า

บุคตาวาร์ ข่าน เป็นวิศวกรหลักที่ทำงานเกี่ยวกับ Amazon OpenSearch Service เขาสนใจที่จะสร้างระบบกระจายและอิสระ เขาเป็นผู้ดูแลและมีส่วนร่วมกับ OpenSearch

ประทับเวลา:

เพิ่มเติมจาก AWS ข้อมูลขนาดใหญ่