วิธีตรวจสอบราคา AWS spot อัตโนมัติ?


15

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

สัญชาตญาณแรกของฉันคือเส้นทางที่ดีที่สุดคือการมีงาน Jenkins รายชั่วโมงที่เรียกใช้aws ec2 describe-spot-instance-requestsและตรวจสอบคำขอที่ล้มเหลว (และทำให้เราล้มเหลว) แต่ฉันสงสัยว่ามีวิธีที่สะอาดกว่าหรือไม่ซึ่งเกี่ยวข้องกับการเปรียบเทียบราคาที่ยากจริง ๆ (และอาจบอกเราได้อย่างชัดเจนว่าเกิดอะไรขึ้นและจำนวนเท่าไร) แทนที่จะดูคำขอที่ประสบความสำเร็จ / ล้มเหลว

ใครตั้งค่าคล้ายกันบ้าง คุณจะทำอย่างไร


1
คำถามที่เหมาะสมฉันเดาว่า ... แต่ทำไมคุณไม่เพียงเสนอราคาอินสแตนซ์ที่คุ้มค่ากับคุณเลือกอินสแตนซ์หลายประเภท (รวมถึงอินสแตนซ์ที่ใหญ่กว่าสิ่งที่คุณต้องการซึ่งบางครั้งราคาถูกกว่า) บางครั้ง - รวมตอนนี้เมื่อฉันเขียนนี้ - ฉันพบว่าตัวเองมี cc2.8x large เนื่องจากขณะนี้ราคาถูกกว่า c3.2x large ฉันต้องการแม้จะมีแกนและ 4x 4x หน่วยความจำและให้ระบบจัดการอินสแตนซ์ เลือกประเภทและตำแหน่ง AZ ตามตลาดหรือไม่
Michael - sqlbot

1
@ Michael-sqlbot ฉันไม่ได้พูดในส่วนนั้นของกระบวนการ เรามีเอกสารที่ระบุว่าเราซื้ออินสแตนซ์บางขนาดเพื่อวัตถุประสงค์ในการตรวจสอบและนั่นคือสิ่งที่เราติดอยู่ เพียงแค่พยายามทำให้สถานการณ์ส่วนใหญ่เกิดประโยชน์สูงสุด
อเล็กซ์

1
ยุติธรรมเพียงพอ @Alex แค่คิดว่าฉันจะโยนมันเข้าไปในกรณีที่คุณไม่ได้พิจารณา
Michael - sqlbot

@Alex ไม่สนใจขนาดของอินสแตนซ์ที่แน่นอนจึงสามารถดูได้อย่างง่ายดายบนตั๋วเงิน? เนื่องจากคุณ (ค่อนข้างพวกเขา!) สามารถใช้แท็กจากนั้นดูได้ใน Cost Explorer
ทิมมาโลน

คำตอบ:


15

พบเครื่องมือโอเพนซอร์สที่เรียกว่าการลงคะแนนอัตโนมัติที่อาจช่วยได้:

เมื่อเปิดใช้งานกับกลุ่ม AutoScaling ตามความต้องการที่มีอยู่แล้วจะเปิดตัวอินสแตนซ์จุด EC2 ที่มีราคาถูกกว่าอย่างน้อยใหญ่และกำหนดค่าแบบเดียวกับอินสแตนซ์ตามความต้องการในปัจจุบันของคุณ ทันทีที่อินสแตนซ์ใหม่พร้อมจะถูกเพิ่มไปยังกลุ่มและอินสแตนซ์ตามความต้องการจะถูกแยกออกจากกลุ่มและยกเลิก

เรามีสิ่งนี้ในไปป์ไลน์ที่ต้องทำของเราจะสามารถเพิ่มบริบทเพิ่มเติมได้เมื่อเราเสร็จสิ้น

ปรับปรุง:

เครื่องมืออีกตัวอย่างหนึ่งที่เพิ่งได้รับการสาธิตในการประชุมคือmapbox / spotswap

วิธีนี้ทำงานแตกต่างกันเล็กน้อย มันจะตรวจสอบ ASG ปกติด้วยอินสแตนซ์ตามสั่งหรือสำรองแล้วถ้ามีขนาดเกิดขึ้นการเสนอราคาและการกำหนดจุดอินสแตนซ์ของระดับการคำนวณที่คล้ายกันใน ASG แยกต่างหาก


2
ยินดีต้อนรับสู่เว็บไซต์ Hashfyre :)
Dawny33

1
ฉันเป็นผู้เขียน AutoSpotting ขอบคุณที่พูดถึงมัน! คุณลองดูหรือยัง ฉันยินดีรับฟังความคิดเห็นจากผู้ใช้
Cristian Măgherușan-Stanciu

6

ฉันจะพิจารณาแบบจำลองเช่นนี้เป็นการส่วนตัว:

Timed Lambdas -> Checks spot price -> Push to ElastiCache

จากนั้นเมื่อคุณต้องการอินสแตนซ์:

Timed lambdas -> Pulls spot price from ElastiCache, sets it as environment variable on your Machine where you spin up IaC from -> This is parsed as argument to IaC code and pushes out the spot price

คุณสามารถตั้งค่าความคลาดเคลื่อนบางอย่างได้เช่นกันภายในลูกแกะ (เช่นเพิ่มขึ้น 10, 25, 50% ตามความสำคัญ) และความต้องการแบบออนดีมานด์ นอกจากนี้ยังเป็นสถานที่ที่ดีในการสร้างตรรกะเพื่อจัดการเช่นการค้นหา AZ ที่ถูกที่สุดการหาราคา spot ที่ค่อนข้างถูกที่สุด ( 2xt2.mediumvs t2.large) เป็นต้น


สำหรับข้อมูลคุณสามารถแก้ไขคำตอบที่ถูกลบและตั้งค่าสถานะเพื่อขอการลบ (ไม่ทำอันตรายมันเป็นเพียงการให้ข้อมูล :))
Tensibai

1
ฉันจะปล่อยให้ความละอายของฉันที่จะสานต่อเพื่อเตือนให้ฉันวันที่เข้าใจผิดของฉันตลอดกาล
เฮนรี่

rofl มีจริงๆไม่มีความละอายไม่ต้องกังวล :)
Tensibai

3
แผลเป็นของฉันคือใคร
เฮนรี่

แนวคิดที่ยอดเยี่ยม - อาจคุ้มค่าที่จะกล่าวถึงว่าสามารถผลักราคาไปที่ตาราง DynamoDB ในกรณีที่พวกเขาไม่มีคลัสเตอร์ ElastiCache ที่วางอยู่รอบ ๆ ;) หรืออาจเป็นไฟล์ JSON ในที่ฝากข้อมูล S3
ทิมมาโลน

4

ฉันจะให้วิธีที่ไม่เชื่อเรื่องพระเจ้าแก่คุณเกี่ยวกับการพยายามทำสิ่งนี้

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

เราประสบปัญหาเดียวกันในโครงสร้างพื้นฐานที่เรากำลังสร้าง ดังนั้นเราจึงมีif-elseสไตล์บล็อคเพื่อกำหนดราคาเสนอขึ้นอยู่กับราคาตามความต้องการของอินสแตนซ์

AWS มีAPIสำหรับรับราคาตามความต้องการของอินสแตนซ์ เราใช้เครื่องมือห่อหุ้มงูหลามเพื่อจุดประสงค์

ดังนั้นเมื่อเราได้ราคาตามความต้องการ (ขอบอกX) เราเสียบif-elseบล็อกสไตล์ซึ่งมี0.4*X, 0.6*X, 0.8*X, Xซึ่งหมายความว่าเรากำลังพยายามที่ราคาการเสนอราคาอยู่ในช่วง 40%, 60%, 80% ของที่อยู่บน - ราคาคงที่ หากทั้งหมดล้มเหลวเราจะกลับไปสร้างอินสแตนซ์ตามความต้องการ

นอกจากนี้เนื่องจากเป็นอิสระจากการกำหนดราคาปัจจุบันของ AWS เราไม่เคยจ่ายราคาสูงกว่าราคาตามความต้องการ

แต่ถ้าคุณกำลังมองหาวิธีที่จะทำในทันทีโซลูชั่นของ Hashfyre ควรเป็นวิธีที่จะไป

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.