AWS ปรับขนาดอัตโนมัติแบบไดนามิกตามข้อความใน SQS

กรณีการใช้งาน:

ทุกๆ เช้า SQS จะถูกเติม (เพียงครั้งเดียว และจำนวนข้อความอาจแตกต่างกันอย่างมาก) ฉันต้องการสร้างอินสแตนซ์ใหม่ตามจำนวนข้อความในคิว

เช่น สำหรับ 200,000 ข้อความ 4 อินสแตนซ์, 400,000 8 อินสแตนซ์

มีวิธีที่เราสามารถบรรลุเป้าหมายนี้ได้หรือไม่?


person najeeb    schedule 04.02.2016    source แหล่งที่มา


คำตอบ (1)


  1. คุณสามารถตั้งค่างาน cron บนเซิร์ฟเวอร์ของคุณหรือ Lambda ที่กระตุ้นตามเวลาเพื่อสืบค้น SQS เพื่อค้นหาจำนวนข้อความที่มองเห็นได้ในคิว หากคุณใช้ AWS CLI คุณจะต้องเรียกใช้ aws sqs get-queue-attributes และอ่านฟิลด์ตอบกลับ ApproximateNumberOfMessages เพื่อรับจำนวนรายการในคิว จากนั้นคุณจะใช้ตัวเลขนั้นเพื่อคำนวณจำนวนอินสแตนซ์แล้วเรียก aws ec2 run-instances --count 4 บวกกับพารามิเตอร์ที่เหลือ เมื่อทุกอย่างเสร็จสิ้น คุณจะยุติอินสแตนซ์

  2. อีกวิธีในการทำเช่นนี้คือใช้การปรับขนาดอัตโนมัติและการเตือน คุณสามารถตั้งค่านโยบาย ScaleOut ที่เพิ่ม 1 เซิร์ฟเวอร์ไปยัง AutoScaling Group ของคุณและทริกเกอร์นโยบายนั้นด้วยการแจ้งเตือน CloudWatch บน SQS ApproximateNumberOfMessages >= เกณฑ์บางอย่าง ตัวเลือกนี้จะไม่รอถึงเช้าเพื่อประมวลผลคิว คุณจะปล่อยให้มันทำงานตลอดเวลา คุณยังสามารถมีนโยบาย ScaleIn เพื่อลดความจุที่ต้องการ (# ของเซิร์ฟเวอร์) ในกลุ่ม AutoScaling ของคุณเมื่อ ApproximateNumberOfMessages ‹= เกณฑ์บางอย่าง

person Max    schedule 04.02.2016
comment
ขอบคุณแม็กซ์ เราจะพยายามติดต่อกลับหาคุณ ในแนวทางที่สอง การปรับขนาดจะเตะใน 1 ครั้งใช่ไหม มันวางไข่ได้มากเท่าที่จำเป็นสำหรับจำนวนข้อความได้อย่างไร - person najeeb; 05.02.2016
comment
ในนโยบายการปรับขนาดของคุณ ให้ตั้งค่าคูลดาวน์ เช่น 10 นาที. ตราบใดที่สัญญาณเตือนของคุณถูกกระตุ้น (>= x ข้อความ) มันจะพยายามกระตุ้นนโยบายการขยายขนาดต่อไป แต่การคูลดาวน์จะทำให้แน่ใจได้ว่าจะทำให้เซิร์ฟเวอร์ใช้งานได้มากที่สุดทุกๆ 10 นาทีเท่านั้น หากคิวว่างภายใน 10 นาที สัญญาณเตือนของคุณจะเปลี่ยนเป็นสถานะตกลง และหยุดเรียกนโยบายการขยายขนาดออก - person Max; 05.02.2016
comment
โอเค ขอบคุณ จะใช้แนวทางที่ 1 เนื่องจากเราสามารถควบคุมระบบได้มากขึ้น - person najeeb; 05.02.2016