ทำอย่างไรจึงจะป้องกันไม่ให้กอดแห่งความตายในอินสแตนซ์ EC2


9

ฉันเป็นแอพ iOS บนแอพสโตร์และเมื่อเร็ว ๆ นี้ฉันได้รับปริมาณข้อมูลจำนวนมากไปยังหน้าที่เชื่อมโยงไปถึงที่โฮสต์บน EC2 และส่งผลให้หน้าไม่ตอบสนองโชคดีที่ฉันสามารถกู้คืนได้ด้วยการรีสตาร์ทและอัปเกรดอินสแตนซ์เป็น t2.medium

ตอนนี้ฉันกำลังมองหาคนที่จะใช้เทคโนโลยีเพื่อป้องกันความตายแบบเดียวกันอีกครั้ง ประสบการณ์ของฉันยืดออกไปมากจนทำให้ฉันสามารถเข้าใจสิ่งพื้นฐานที่ devops แต่ไม่เพียงพอสำหรับ load balancer บน AWS ฉันต้องการทราบว่าการใช้งานที่เหมาะสมสำหรับอินสแตนซ์ของฉันคืออะไร

หน้าที่เชื่อมโยงไปถึงและแบ็กเอนด์แอป iOS ของฉันโฮสต์อยู่บนอินสแตนซ์เดียวกัน


1
หน้า Landing Page ของคุณเป็นแบบคงที่หรือไม่
Michael - sqlbot

คำตอบ:


8

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

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

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


1

ฉันขอแนะนำให้ปรับขนาดอัตโนมัติตามที่กล่าวไว้ข้างต้นด้วยการเพิ่มสัญญาณเตือน CloudWatch บางอย่างเพื่อเริ่มกระบวนการปรับขนาดอัตโนมัติเมื่อเกณฑ์เฉพาะเริ่มเพิ่มขึ้นไม่ใช่เมื่อมันหายไปไกลมากแล้ว

ตัวอย่างเช่น; กำหนดค่า CloudWatch เพื่อตรวจสอบเซิร์ฟเวอร์ของคุณเมื่อ CPU อยู่ที่ 50% หรือสูงกว่าเป็นระยะเวลา 30 วินาทีหรือมากกว่าเริ่มกระบวนการปรับขนาดอัตโนมัติ

สิ่งนี้อาจไม่ผิดพลาดอย่างสมบูรณ์ แต่สามารถทำได้ง่ายผ่านคู่มือออนไลน์บางส่วนและกำหนดค่าได้ทั้งหมดผ่าน GUI

นอกจากนี้หากหน้า Landing Page ของคุณเป็นแบบคงที่ทำไมไม่โฮสต์บน t2.micro แบบฟรีเทียร์และใช้ t2.micro ฟรีระดับอื่นสำหรับแอปของคุณ


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

1

ฉันยินดีที่จะช่วยเหลือหากคุณกำลังมองหาความช่วยเหลือ ขึ้นอยู่กับหน้าของคุณคุณอาจไม่ต้องการ ec2 เลย ตัวอย่างเช่นหากการให้บริการของคุณคงที่หรือ JavaScript ก็สามารถให้บริการจาก s3 ที่มีการกระจาย cloudfront หรือเราอาจใช้กลุ่มปรับขนาดอัตโนมัติหากจำเป็นจริงๆ


1

มีกลยุทธ์ทั่วไปสองวิธีในการจัดการกับปริมาณการจราจร: การเพิ่มกำลังการผลิตและลดต้นทุน

การเพิ่มขีดความสามารถหมายถึงการปรับขนาดอัตโนมัติซึ่งทุกคนรู้สึกตื่นเต้นมากเมื่อมีการเปิดใช้งานระบบคลาวด์สาธารณะเป็นครั้งแรก ในแง่พื้นฐานที่สุดแล้วนี่จะบูตเว็บเซิร์ฟเวอร์ให้คุณมากขึ้นตามโหลดและเพิ่มลงใน load balancer แต่เนื่องจากอาจเป็นปัญหาในการจัดการมีโซลูชันอัตโนมัติมากขึ้นเช่น Elastic Beanstalk

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

โดยการโกงฉันหมายถึงแคชซึ่งวางอยู่บนแนวคิดที่ว่าเวลาส่วนใหญ่คุณสามารถให้ข้อมูลล้าสมัยแก่ผู้ใช้เล็กน้อยและพวกเขาจะไม่สังเกตเห็นและนั่นจะช่วยให้คุณประหยัดเวลาได้มาก ลองนึกภาพว่าคุณมีหน้าเว็บที่คุณตัดสินใจว่ามันโอเคถ้ามันล้าสมัยไปแล้วห้าวินาทีและมันจะได้ 20 req / s คุณจะใช้การคำนวณนั้นได้ 1200 ครั้งต่อนาทีในขณะที่การแคชเป็นเพียง 12 คุณสามารถดูว่าสิ่งนี้สามารถสร้างความแตกต่างอย่างมากได้อย่างไร

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

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

หากคุณต้องการพลังในระดับหนึ่งการทำแคชแบบเต็มหน้าเป็นทางเลือกที่ดี Nginx มีความสามารถในการทำเช่นนี้ แต่ฉันชอบวานิชเพราะความยืดหยุ่นของมัน

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


0

ฉันต้องการแบ่งปันประสบการณ์ของเรากับ AWS เราปรับใช้แอปพลิเคชันของเราบน EC2 และประสบปัญหาเดียวกันและมีค่าใช้จ่ายสูง เราปรับใช้แอปพลิเคชันAmazon EC2 Container Serviceของเราแม้ว่าแอปพลิเคชันของเราจะเป็นแบบเสาหิน แต่เราทำได้

  • ความพร้อมใช้งาน
  • ต้นทุนที่มีประสิทธิภาพ
  • scalability

Application load balancer จะจัดการกับทราฟฟิกและกำหนดเส้นทางทราฟฟิกไปยังอินสแตนซ์ที่ดีต่อสุขภาพและคุณสามารถเรียกใช้หลายงานของบริการเดียวกันโดยไม่ต้องกังวลเรื่องการปรับสเกลและปรับสมดุลโหลด

สถาปัตยกรรมนี้ทำให้การแยกความล้มเหลวง่ายขึ้น เทคนิคต่าง ๆ เช่นการตรวจสุขภาพแคชแคชหรือเบรกเกอร์วงจรช่วยให้คุณลดรัศมีการระเบิดของส่วนประกอบที่ล้มเหลวและเพื่อปรับปรุงความพร้อมใช้งานโดยรวมของแอปพลิเคชันที่กำหนด


นอกจากนี้ยังไม่มีการกำหนดราคาแยกต่างหากสำหรับ ECSเพียงทรัพยากร EC2 พื้นฐานดังนั้นวิธีการใช้ ECS ค่าใช้จ่ายใดมีประสิทธิภาพมากขึ้น? ควรใช้ทรัพยากรในปริมาณเท่ากันไม่ว่าคุณจะจัดการกับคอนเทนเนอร์ด้วยตนเองหรือปล่อยให้ Amazon ทำเช่นนั้น
Xiong Chiamiov

ในคอนเทนเนอร์ถ้าคุณใช้อัลไพน์ซึ่งเป็น 5mb และ ec2 คุณใช้ Ubuntu ซึ่งเป็น 2GB หรือไม่? สิ่งใดที่ดีที่สุด? ใน t2 micro คุณสามารถรันคอนเทนเนอร์ 5 php ที่มีสเกลเข้าและออกบนฐานของ trafic .. คุณสามารถรันใน ec2 ที่มีสเกลในและสเกลออกได้หรือไม่
Adiii

คุณไม่จำเป็นต้องใช้ Ubuntu สำหรับอินสแตนซ์ของ ec2 คุณสามารถอัปโหลดภาพอัลไพน์และใช้งานได้หากคุณต้องการ หากคุณได้รับทุกสิ่งที่ทำงานกับ ECS นั้นยอดเยี่ยมและไม่น่าเป็นไปได้ที่คุณจะต้องการย้อนกลับ แต่ประเด็นของฉันคือการย้ายไปที่ ECS เพียงอย่างเดียวไม่ทำให้แอปปรับขนาดได้หรือคุ้มค่ากว่า เป็นการเปลี่ยนแปลงอื่น ๆ ที่คุณทำกับแอพโครงสร้างพื้นฐานและสถาปัตยกรรมในเวลาเดียวกันกับที่ทำ
Xiong Chiamiov

0

สิ่งนี้ขึ้นอยู่กับสถาปัตยกรรมเฉพาะเป็นอย่างมาก แต่ตัวอย่างเช่น:

  • โหลดเว็บไซต์ของคุณด้วย CloudFront เพื่อลดภาระบนโฮสต์
  • ใช้บริการโฮสติ้งฝั่งไคลเอ็นต์ในรูปแบบ S3
  • Elastic Load Balancer พร้อมกลุ่มปรับค่าอัตโนมัติ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.