Penerapan manual vs. Amazon Elastic Beanstalk

114

Apa keuntungan yang kami dapatkan dengan menggunakan Elastic Beanstalk daripada membuat instans EC2 secara manual dan menyiapkan server kucing jantan dan menerapkan dll untuk aplikasi web java yang khas. Apakah kelebihan load balancing, Pemantauan, dan penskalaan otomatis?

Misalkan untuk aplikasi web saya yang menggunakan database, saya menginstal database di instance EC2 itu sendiri. Ketika Autoscalling terjadi, apakah database akan dibuat dalam instance yang baru dibuat atau akan mengakses database yang saya buat di instance master ... Jika hanya membuat replika saat autoscaling terjadi, bagaimana sinkronisasi data terjadi di antara instance?

Elango
sumber

Jawaban:

144

Semua hal yang Anda sebutkan seperti load balancing, pemantauan, dan penskalaan otomatis jelas merupakan keuntungan.

Namun, Anda harus memikirkannya seperti ini: Dalam True Platform as a Service (PAAS), tujuannya adalah untuk memisahkan aplikasi dari platform. Sebagai pengembang, Anda hanya mengkhawatirkan aplikasi Anda. Platform ini "disewakan" untuk Anda. Platform "instance" secara otomatis diperbarui, dikelola, diskalakan, seimbang, dll. Untuk Anda. Anda baru saja mengunggah file WAR Anda dan itu berfungsi (setidaknya secara teoritis).

EC2 dengan sendirinya bukan PAAS. Ini lebih seperti IAAS ( Infrastructure as a Service ). Anda masih harus menjaga instance server, menginstal perangkat lunak di dalamnya, terus memperbaruinya, dll.

Elastic Beanstalk adalah sistem PAAS. Begitu juga App Engine dan Azure di antara banyak lainnya.

Dalam sistem PAAS yang sebenarnya, DBMS adalah komponen terpisah dari server aplikasi web. Alasannya jelas: DBMS tidak mungkin diinstal pada instans yang digunakan untuk server aplikasi karena, saat instans dibuat dan dihancurkan berdasarkan lalu lintas Anda, DBMS akan hilang! Memiliki DBMS dan server aplikasi pada mesin / instans yang sama umumnya bukanlah ide yang baik.

Dalam sistem PAAS, DBMS adalah layanan terpisah. Untuk Amazon, itu adalah Amazon RDS . Sama seperti dengan Elastic Beanstalk, di mana Anda tidak perlu khawatir tentang server aplikasi dan Anda cukup mengunggah file WAR Anda, dengan RDS, Anda tidak perlu khawatir tentang DBMS dan Anda cukup menyebarkan basis data Anda.

Elastic Beanstalk dan RDS bekerja sama dengan sangat baik, terutama saat diterapkan di zona ketersediaan yang sama, dengan latensi yang sangat rendah.

Terakhir, penggunaan Elastic Beanstalk tidak memerlukan biaya apa pun selain sumber daya yang diterapkan (instans EC2 dan penyeimbang beban). Namun, RDS tidak murah dan pasti akan lebih mahal daripada menggunakan instans EC2 tunggal untuk server aplikasi dan DBMS.

stepanian
sumber
3
Tempat yang bagus. Sebagai tambahan: Anda dapat menetapkan AMI khusus untuk dijadikan dasar untuk setiap pembuatan instance. Jadi, Anda dapat, misalnya, menyesuaikan gambar Apache dengan semua konfigurasi dan aplikasi yang diperlukan dan menggunakannya sebagai AMI dasar (ada bidang ID AMI Khusus pada konfigurasi lingkungan Pohon Kacang) Namun, data yang dihasilkan waktu proses akan benar-benar dihapus pada setiap penghentian instans (dan penyeimbang beban akan melakukannya!).
André Felipe
1
Satu hal yang membuat saya lengah adalah fakta bahwa Elastic Beanstalk membuat penyeimbang beban untuk setiap lingkungan yang diterapkan. Load balancer tidak terlalu mahal untuk dijalankan, tetapi biayanya kira-kira sama dengan instance mikro.
Ken Liu
@KenLiu, Load Balancer lebih kuat daripada instance mikro.
BigSack
7
@BigSack - poin yang saya coba sampaikan adalah bahwa Elastic Beanstalk seharusnya gratis tetapi AWS tidak menjelaskan bahwa setiap lingkungan akan mengalokasikan penyeimbang beban yang akan dikenakan biaya sekitar $ 15 per bulan. Saya tidak membandingkan dengan contoh mikro.
Ken Liu
Sejauh yang saya tahu, RDS hampir sama harganya dengan EC2 hari ini, sambil memberikan utilitas, pemeliharaan, dan keandalan yang jauh lebih besar.
Justin Schier
38

Elastic Beanstalk melakukan lebih dari sekadar load balancing, pemantauan, dan penskalaan otomatis.

1) Mengelola versi aplikasi dengan menyimpan dan mengelola berbagai versi aplikasi Anda, memungkinkan Anda dengan mudah beralih antara versi aplikasi yang berbeda.

2) Memiliki konsep "lingkungan" untuk setiap aplikasi, memungkinkan Anda untuk menerapkan versi yang berbeda dari aplikasi Anda di setiap lingkungan. Ini berguna misalnya jika Anda ingin menyiapkan lingkungan QA dan DEV yang terpisah, dan Anda ingin dengan mudah menerapkan build terlebih dahulu di DEV, lalu menerapkan versi aplikasi yang sama di QA saat tim QA Anda siap untuk build berikutnya.

3) Mengeksternalisasikan properti konfigurasi container yang penting (pengaturan memori Tomcat, misalnya) ke konsol dan API Elastic Beanstalk. Karenanya, Anda dapat dengan mudah menyimpan pengaturan dan menyalinnya antar lingkungan.

4) Lihat file log aplikasi melalui konsol dan secara otomatis menggulung dan mengarsipkan file log ke S3. (Memang fitur ini saat ini agak lemah.)

Ken Liu
sumber
Pokoknya dalam konsep saya, saya pikir dia ingin mengerti tentang kinerja, yang tidak saya suka di pohon kacang, kerusakan pada penyebaran dan kasus bencana, dan semuanya bisa sama atau lebih baik menggunakan LAMBDA. Sulit tetapi itu adalah peluru perak bagi Anda ketersediaan tinggi.
Lucas Rodrigues Sena
Hanya untuk menambah poin terakhir: Anda dapat mengirimkan semua log aplikasi dengan baik ke CloudWatch.
SebaGra
6

Saya memiliki aplikasi yang digunakan baik di EC2 dedicated (Nginx & Gunicorn) dan Beanstalk Environment (CentOS & Apache2).

Pengamatan saya:

  • BeanStalk adalah Paas. Membuat instans EC2 (IAAS) secara manual, seperti melakukan semuanya dari awal, tetapi Anda memiliki kontrol yang solid.

  • BeanStalk hadir dengan CentOS dan Apache (Httpd) default. Anda dapat memilih OS dalam contoh khusus.

  • Hal-hal ini yang penting bagi saya,

    • Ada banyak kesalahan 504 yang muncul di lingkungan Pohon Kacang.
    • Sulit untuk men-debug ketika server BeanStalk rusak, karena log juga tidak akan muncul dan tidak dapat melakukan ssh ke mesin. Ini sangat penting.
    • Instalasi / konfigurasi alat seperti Celery, Redis (perlu menjalankan port lain) dll.,. dalam contoh khusus jauh lebih mudah.
  • Dalam kasus saya, saya harus meningkatkan server (Pohon Kacang) untuk menjalankan instalasi beberapa paket (seperti pandoc). Hal-hal ini lebih sederhana di Ubuntu.

  • Penskalaan jauh lebih mudah di BeanStalk. Kloning server sangat mudah di BeanStalk.

  • Saya telah mengambil mikro dalam kedua kasus (berdedikasi & Pohon Kacang). Saya merasa contoh mikro khusus lebih baik.

  • Penerapan otomatis di Pohon Kacang. Saya harus menulis skrip untuk mengotomatiskan hal yang sama, yang tidak masalah, karena hanya sekali.

SuperNova
sumber