it-swarm.dev

Haruskah saya menggunakan AWS Elastic Beanstalk atau Amazon EC2 Container Service (ECS) untuk menskala wadah Docker?

Saya telah mengembangkan aplikasi berbasis Docker yang terdiri dari beberapa layanan microser. Itu harus mengkonsumsi pesan Amazon SQS dan memprosesnya. Awalnya saya ingin menggunakan AWS Elastic Beanstalk, tetapi kemudian saya jatuh ke EC2 Container Service. Sekarang saya tidak tahu mana yang harus dipilih.

Sampai sekarang, Elastic Beanstalk mendukung Multi-Container-Environments. Itu bagus karena setiap microservice memiliki server aplikasi sendiri di dalam wadah buruh pelabuhan. Masalah selanjutnya adalah penskalaan:

Saya tidak tahu bagaimana mekanisme penskalaan bekerja. Sebagai contoh: Saya memiliki 5 kontainer buruh pelabuhan di Lingkungan Pohon Kacang Elastis saya. Sekarang hanya kontainer buruh pelabuhan kelima di bawah beban berat, karena memiliki sejumlah besar pesan SQS untuk diproses, empat lainnya hampir menganggur, karena mereka tidak membutuhkan banyak CPU atau mungkin tidak memiliki banyak pesan SQS. Mari kita asumsikan wadah ke-5 menjalankan server aplikasi JBoss. Sejauh yang saya tahu, server hanya dapat mengkonsumsi sejumlah permintaan paralel meskipun ada cukup CPU/memori yang tersedia.

Jika wadah JBoss Docker tidak dapat menangani jumlah permintaan, tetapi ada cukup CPU/memori yang tersedia, tentu saja saya ingin secara otomatis memulai wadah Docker/JBoss kedua pada contoh yang sama. Tetapi apa yang terjadi, jika saya tidak memiliki cukup CPU/memori? Tentu saja saya ingin memutar pada instance kedua, yang dapat dikonfigurasi melalui grup penskalaan otomatis di EB. Sekarang instance kedua berputar, tetapi setiap kontainer kecuali dari ke-5 hampir tidak digunakan, tentu saja saya tidak ingin mereka memunculkan 4 yang tidak perlu pada instance kedua juga, yang akan menjadi pemborosan sumber daya. Hanya yang ke-5 yang akan muncul dan yang lainnya harus berskala seperti skala ke-5 berdasarkan parameter yang dapat dikonfigurasi seperti mis .: CPU/memori/SQS.

Saya tidak tahu persis apakah Amazon ECS melakukan itu, atau apakah itu mungkin, tetapi saya benar-benar tidak dapat menemukan sumber apa pun di internet tentang topik ini, yang secara umum dikatakan, penskalaan berdasarkan instans/wadah.

68
orbatschow

EB vs ECS benar-benar turun ke kontrol. Apakah Anda ingin mengontrol penskalaan dan kapasitas Anda atau apakah Anda ingin yang lebih abstrak dan bukannya fokus terutama pada aplikasi Anda. ECS akan memberi Anda kontrol, karena Anda harus menentukan ukuran dan jumlah node dalam cluster dan apakah penskalaan otomatis harus digunakan atau tidak. Dengan EB, Anda cukup menyediakan Dockerfile dan EB menangani penskalaan jumlah dan ukuran node Anda, pada dasarnya Anda bisa melupakan infrastruktur dengan rute EB.

Berikut dokumentasi EB tentang Docker: http://docs.aws.Amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.html

Dengan ECS Anda harus membangun infrastruktur terlebih dahulu sebelum Anda dapat mulai menggunakan Dockerfile sehingga benar-benar turun ke 1) keakraban Anda dengan infrastruktur dan 2) tingkat upaya yang ingin Anda habiskan untuk infrastruktur vs aplikasi.

59
alanwill

Bukan untuk membangkitkan pertanyaan mati, tapi semoga ini membantu seseorang.

Jawaban yang diterima tidak cukup jelas: berdasarkan apa yang OP jelaskan, OP menginginkan ECS, bukan Multi-Container Elastic Beanstalk (MCEB). Sejauh yang saya tahu, MCEB tidak pernah mencoba untuk mengemas kontainer secara efisien ke dalam instance. OP bertanya dalam komentar, "jika hanya satu yang dimuat, timbangan hanya satu ini, atau apakah itu selalu meningkatkan contoh dan memulai semua kontainer, tidak peduli di bawah beban apa mereka?" Dan jawabannya adalah "yang terakhir"; MCEB meningkatkan instans dan memulai semua kontainer, apa pun bebannya.

Edit

Jangan gunakan arsitektur yang Anda bayangkan.

Seberapa mikro microservices Anda? Apakah konyol memberi mereka masing-masing t2.nano? Kemudian buat mereka masing-masing satu aplikasi Docker EB wadah tunggal - aplikasi pekerja EB dapat didorong oleh pesan SQS. Atau gunakan apex.run .

Edit 1/31/18:

AWS Fargate sepertinya cukup keren.

Edit 6/5/19:

Gunakan EKS jika Anda perlu mengatur wadah, untuk memuaskan rasa gatal. Tapi sungguh, cobalah untuk menghindari ini. Sistem terdistribusi sulit.

9
Sam H.