การปรับใช้ด้วยตนเองเทียบกับ Amazon Elastic Beanstalk


114

อะไรคือข้อดีที่เราได้รับจากการใช้ Elastic Beanstalk ในการสร้างอินสแตนซ์ EC2 และการตั้งค่าเซิร์ฟเวอร์ tomcat และปรับใช้ ฯลฯ สำหรับการใช้งานเว็บ java ทั่วไป การจัดสรรภาระงานการตรวจสอบและการปรับขนาดอัตโนมัติเป็นข้อดีเพียงประการเดียวหรือไม่?

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

คำตอบ:


144

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

อย่างไรก็ตามคุณต้องคิดอย่างนี้: ในPlatform as a Service (PAAS) ที่แท้จริงเป้าหมายคือการแยกแอปพลิเคชันออกจากแพลตฟอร์ม ในฐานะนักพัฒนาคุณเพียงกังวลเกี่ยวกับแอปพลิเคชันของคุณ คุณ "เช่าแพลตฟอร์ม" แล้ว "อินสแตนซ์" ของแพลตฟอร์มจะได้รับการอัปเดตดูแลจัดการปรับขนาดสมดุล ฯลฯ ให้คุณโดยอัตโนมัติ คุณเพียงแค่อัปโหลดไฟล์ WAR ของคุณและมันก็ใช้งานได้ (อย่างน้อยก็ในทางทฤษฎี)

EC2 โดยตัวมันเองไม่ใช่ PAAS เป็นเหมือน IAAS ( โครงสร้างพื้นฐานเป็นบริการ ) มากกว่า คุณยังคงต้องดูแลอินสแตนซ์เซิร์ฟเวอร์ติดตั้งซอฟต์แวร์อัปเดตอยู่เสมอ ฯลฯ

Elastic Beanstalk เป็นระบบ PAAS ดังนั้นApp EngineและAzureในหมู่อื่น ๆ อีกมากมาย

ในระบบ PAAS จริง DBMS เป็นคอมโพเนนต์ที่แยกจากเว็บแอ็พพลิเคชันเซิร์ฟเวอร์ เหตุผลที่ชัดเจน: ไม่สามารถติดตั้ง DBMS บนอินสแตนซ์ที่ใช้สำหรับแอ็พพลิเคชันเซิร์ฟเวอร์ได้เนื่องจากอินสแตนซ์ถูกสร้างและทำลายตามปริมาณการใช้งานของคุณ DBMS จะหายไป! การมี DBMS และแอ็พพลิเคชันเซิร์ฟเวอร์บนเครื่อง / อินสแตนซ์เดียวกันโดยทั่วไปไม่ใช่ความคิดที่ดี

ในระบบ PAAS DBMS เป็นบริการแยกต่างหาก สำหรับ Amazon ก็จะAmazon RDS เช่นเดียวกับ Elastic Beanstalk ที่คุณไม่ต้องกังวลเกี่ยวกับแอ็พพลิเคชันเซิร์ฟเวอร์และคุณเพียงแค่อัปโหลดไฟล์ WAR ของคุณด้วย RDS คุณไม่ต้องกังวลเกี่ยวกับ DBMS และคุณเพียงแค่ปรับใช้ฐานข้อมูลของคุณ

Elastic Beanstalk และ RDS ทำงานร่วมกันได้เป็นอย่างดีโดยเฉพาะเมื่อใช้งานในโซนความพร้อมใช้งานเดียวกันซึ่งเวลาแฝงจะต่ำมาก

สุดท้ายการใช้ Elastic Beanstalk ไม่เสียค่าใช้จ่ายมากไปกว่าทรัพยากรที่ปรับใช้ (อินสแตนซ์ EC2 และตัวโหลดบาลานเซอร์) อย่างไรก็ตาม RDS นั้นไม่ถูกและจะแพงกว่าการใช้อินสแตนซ์ EC2 เดียวสำหรับทั้งแอ็พพลิเคชันเซิร์ฟเวอร์และ DBMS


3
ใส่อย่างดี เพียงเพิ่มเติม: คุณสามารถระบุ AMI ที่กำหนดเองเพื่อใช้เป็นฐานสำหรับการสร้างอินสแตนซ์แต่ละครั้ง ตัวอย่างเช่นคุณสามารถปรับแต่งอิมเมจ Apache ด้วยการกำหนดค่าและแอพทั้งหมดที่จำเป็นและใช้เป็น AMI พื้นฐาน (มีฟิลด์ AMI ID ที่กำหนดเองในการกำหนดค่าสภาพแวดล้อม Beanstalk) อย่างไรก็ตามข้อมูลที่สร้างรันไทม์จะถูกลบอย่างแน่นอนในทุกการยุติอินสแตนซ์ (และตัวจัดสรรภาระงานจะทำเช่นนั้น!)
André Felipe

1
สิ่งหนึ่งที่ทำให้ฉันไม่ทันระวังคือความจริงที่ว่า Elastic Beanstalk สร้างตัวจัดสรรภาระงานสำหรับแต่ละสภาพแวดล้อมที่ใช้งาน ตัวจัดสรรภาระงานไม่ได้มีราคาแพงนัก แต่มีค่าใช้จ่ายพอ ๆ กับไมโครอินสแตนซ์
Ken Liu

@KenLiu ตัวโหลดบาลานเซอร์มีประสิทธิภาพมากกว่าไมโครอินสแตนซ์
BigSack

7
@BigSack - ประเด็นที่ฉันพยายามทำคือ Elastic Beanstalk ควรจะฟรี แต่ AWS ไม่ได้ทำให้ชัดเจนว่าแต่ละสภาพแวดล้อมจะจัดสรรตัวจัดสรรภาระงานซึ่งจะทำให้คุณเสียค่าใช้จ่ายประมาณ 15 เหรียญต่อเดือน ฉันไม่ได้เปรียบเทียบกับไมโครอินสแตนซ์
Ken Liu

เท่าที่ฉันรู้ RDS มีราคาเกือบเทียบเท่ากับ EC2 ในปัจจุบันในขณะที่ให้ประโยชน์ใช้สอยความสามารถในการบำรุงรักษาและความน่าเชื่อถือที่ดีกว่ามาก
Justin Schier

38

Elastic Beanstalk ทำมากกว่าแค่โหลดบาลานซ์การตรวจสอบและการปรับขนาดอัตโนมัติ

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

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

3) กำหนดคุณสมบัติคอนฟิกูเรชันคอนเทนเนอร์ที่สำคัญ (เช่นการตั้งค่าหน่วยความจำ Tomcat) ไปยังคอนโซล Elastic Beanstalk และ API ด้วยเหตุนี้คุณจึงสามารถบันทึกการตั้งค่าและคัดลอกระหว่างสภาพแวดล้อมได้อย่างง่ายดาย

4) ดูไฟล์บันทึกแอปพลิเคชันผ่านคอนโซลและม้วนและเก็บไฟล์บันทึกไปยัง S3 โดยอัตโนมัติ (เป็นที่ยอมรับว่าฟีเจอร์นี้ยังอ่อนแออยู่เล็กน้อย)


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

เพียงเพิ่มในประเด็นสุดท้าย: คุณสามารถจัดส่งบันทึกแอปพลิเคชันทั้งหมดไปยัง CloudWatch ได้อย่างดี
SebaGra

6

ฉันมีแอปที่ติดตั้งทั้งใน EC2 ทุ่มเท (Nginx & Gunicorn) และ Beanstalk Environment (CentOS & Apache2)

ข้อสังเกตของฉัน:

  • BeanStalk คือ Paas การสร้างอินสแตนซ์ EC2 (IAAS) ด้วยตนเองเหมือนกับการทำทุกอย่างตั้งแต่เริ่มต้น แต่คุณมีการควบคุมที่มั่นคง

  • BeanStalk มาพร้อมกับ CentOS และ Apache (Httpd) โดยค่าเริ่มต้น คุณสามารถเลือก OS ในอินสแตนซ์เฉพาะ

  • สิ่งเหล่านี้สำคัญสำหรับฉัน

    • มีข้อผิดพลาด 504 จำนวนมากปรากฏขึ้นในสภาพแวดล้อม Beanstalk
    • เป็นการยากที่จะดีบักเมื่อเซิร์ฟเวอร์ BeanStalk ขัดข้องเนื่องจากบันทึกจะไม่ปรากฏขึ้นและไม่สามารถ ssh เข้าสู่เครื่องได้ สิ่งนี้สำคัญมาก
    • การติดตั้ง / กำหนดค่าเครื่องมือเช่น Celery, Redis (จำเป็นต้องเรียกใช้พอร์ตอื่น) เป็นต้น,. ในอินสแตนซ์เฉพาะนั้นง่ายกว่ามาก
  • ในกรณีของฉันฉันต้องเพิ่มขนาดเซิร์ฟเวอร์ (Beanstalk) เพื่อเรียกใช้การติดตั้งแพ็คเกจบางอย่าง (เช่น pandoc) สิ่งเหล่านี้ง่ายกว่าใน Ubuntu

  • การปรับขนาดนั้นง่ายกว่ามากใน BeanStalk การโคลนเซิร์ฟเวอร์นั้นตรงไปตรงมาใน BeanStalk

  • ฉันใช้ไมโครในทั้งสองกรณี (ทุ่มเท & Beanstalk) ฉันรู้สึกว่าไมโครอินสแตนซ์เฉพาะนั้นดีกว่า

  • การปรับใช้อัตโนมัติใน Beanstalk ฉันต้องเขียนสคริปต์ให้เป็นแบบเดียวกันโดยอัตโนมัติซึ่งก็ใช้ได้เพราะมันเป็นเพียงครั้งเดียว

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