Lingkungan pekerja Elastic Beanstalk - AWS Elastic Beanstalk

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Lingkungan pekerja Elastic Beanstalk

Jika aplikasi AWS Elastic Beanstalk Anda melakukan operasi atau alur kerja yang membutuhkan waktu lama untuk diselesaikan, Anda dapat menurunkan tugas tersebut ke lingkungan pekerja. Pemisahan aplikasi web front end Anda dari proses yang melakukan operasi pemblokiran adalah cara yang umum untuk memastikan bahwa aplikasi Anda tetap responsif di bawah beban.

Tugas yang berjalan lama adalah sesuatu yang secara substansial meningkatkan waktu yang diperlukan untuk menyelesaikan permintaan, seperti memproses gambar atau video, mengirim email, atau membuat arsip ZIP. Operasi ini dapat mengambil hanya satu atau dua detik untuk menyelesaikan, tetapi penundaan beberapa detik adalah banyak untuk permintaan web yang jika tidak akan selesai dalam waktu kurang dari 500 ms.

Salah satu pilihan adalah untuk memunculkan proses pekerja lokal, mengembalikan keberhasilan, dan memproses tugas secara asinkron. Ini bekerja jika instans Anda dapat mengikuti semua tugas yang dikirim ke sana. Di bawah beban tinggi, bagaimanapun, sebuah instans dapat menjadi kewalahan dengan tugas latar belakang dan menjadi tidak responsif terhadap permintaan prioritas yang lebih tinggi. Jika pengguna individu dapat menghasilkan beberapa tugas, peningkatan beban mungkin tidak sesuai dengan peningkatan pengguna, sehingga sulit untuk menskalakan keluar tingkat server web Anda secara efektif.

Untuk menghindari menjalankan tugas yang berjalan lama secara lokal, Anda dapat menggunakan AWS SDK untuk bahasa pemrograman Anda untuk mengirim mereka ke antrean Amazon Simple Queue Service (Amazon SQS), dan menjalankan proses yang menjalankannya pada satu set terpisah dari instans. Anda kemudian merancang instans pekerja ini untuk mengambil item dari antrean hanya ketika mereka memiliki kapasitas untuk menjalankannya, mencegah mereka dari menjadi kewalahan.

Lingkungan pekerja Elastic Beanstalk menyederhanakan proses ini dengan mengelola antrean Amazon SQS dan menjalankan proses daemon pada setiap instans yang berbunyi dari antrean untuk Anda. Ketika daemon menarik item dari antrean, ia akan mengirimkan permintaan HTTP POST secara lokal ke http://localhost/ pada port 80 dengan isi pesan antrean dalam tubuh. Semua yang aplikasi Anda perlu lakukan adalah melakukan tugas lama berjalan dalam menanggapi POST. Anda dapat mengonfigurasi daemon untuk mengirim ke jalur yang berbeda, menggunakan jenis MIME selain aplikasi/JSON, terhubung ke antrean yang ada, atau menyesuaikan koneksi (permintaan bersamaan maksimum), batas waktu, dan percobaan ulang.

Lingkungan pekerja Elastic Beanstalk Amazon SQS pengolahan pesan

Dengan tugas berkala, Anda juga dapat mengonfigurasi pekerja daemon untuk pesan antrean berdasarkan jadwal cron. Setiap tugas periodik dapat POST ke jalan yang berbeda. Mengaktifkan tugas-tugas periodik dengan memasukkan file YAML dalam kode sumber Anda yang mendefinisikan jadwal dan jalan untuk setiap tugas.

catatan

.NET pada platform Windows Server tidak mendukung lingkungan pekerja.

Daemon SQS lingkungan pekerja

Lingkungan pekerja menjalankan proses daemon yang disediakan oleh Elastic Beanstalk. Daemon ini diperbarui secara teratur untuk menambahkan fitur dan memperbaiki bug. Untuk mendapatkan versi terbaru daemon, perbarui ke versi platform terbaru.

Ketika aplikasi di lingkungan pekerja mengembalikan respons 200 OK untuk mengakui bahwa ia telah menerima dan berhasil memproses permintaan, daemon mengirimkan panggilan DeleteMessage ke antrean Amazon SQS untuk menghapus pesan dari antrean. Jika aplikasi mengembalikan respons selain 200 OK, Elastic Beanstalk menunggu untuk menempatkan pesan kembali antrean setelah periode ErrorVisibilityTimeout dikonfigurasi. Jika tidak ada respons, Elastic Beanstalk menunggu untuk menempatkan pesan kembali dalam antrean setelah periode InactivityTimeout sehingga pesan tersedia untuk upaya pemrosesan lainnya.

catatan

Properti antrean Amazon SQS (urutan pesan, at-least-once pengiriman, dan sampel pesan) dapat mempengaruhi cara Anda merancang aplikasi web untuk lingkungan pekerja. Untuk informasi selengkapnya, lihat Properti Antrean Terdistribusi di Panduan Developer Amazon Simple Queue Service.

Amazon SQS secara otomatis menghapus pesan yang telah dalam antrean selama lebih lama daripada RetentionPeriod yang dikonfigurasi.

Daemon menetapkan header HTTP berikut.

Header HTTP

Nama Nilai

User-Agent

aws-sqsd

aws-sqsd/1.11

X-Aws-Sqsd-Msgid

ID pesan SQS, digunakan untuk mendeteksi strom pesan (jumlah pesan baru yang luar biasa tinggi).

X-Aws-Sqsd-Queue

Nama antrean SQS.

X-Aws-Sqsd-First-Received-At

Waktu UTC, di Format ISO 8601, saat pesan pertama kali diterima.

X-Aws-Sqsd-Receive-Count

Pesan SQS menerima hitungan.

X-Aws-Sqsd-Attr-message-attribute-name

Atribut pesan khusus yang ditetapkan ke pesan yang sedang diproses. message-attribute-name adalah nama atribut pesan yang sebenarnya. Semua string dan nomor atribut pesan ditambahkan ke header. Atribut biner dibuang dan tidak termasuk dalam header.

Content-Type

Konfigurasi tipe mime; secara default, application/json.

Antrean surat mati

Lingkungan pekerja Elastic Beanstalk mendukung antrean surat mati Amazon Simple Queue Service (Amazon SQS). Antrean surat mati adalah antrean di mana antrian (sumber) lainnya dapat mengirim pesan yang untuk beberapa alasan tidak dapat berhasil diproses. Manfaat utama menggunakan antrean surat mati adalah kemampuan untuk mengesampingkan dan mengisolasi pesan tidak berhasil diproses. Anda kemudian dapat menganalisis pesan yang dikirim ke antrean surat mati untuk mencoba menentukan mengapa pesan tersebut tidak berhasil diproses.

Jika Anda menentukan antrean Amazon SQS otomatis pada saat Anda membuat tingkat lingkungan pekerja Anda, antrean surat mati diaktifkan secara default untuk lingkungan pekerja. Jika Anda memilih antrean SQS yang ada untuk lingkungan pekerja Anda, Anda harus menggunakan SQS untuk mengonfigurasi antrean surat mati secara independen. Untuk informasi tentang cara menggunakan SQS untuk mengonfigurasi antrean surat mati, lihat Menggunakan Antrean Surat Mati Amazon SQS.

Anda tidak dapat menonaktifkan antrean surat mati. Pesan yang tidak dapat dikirim selalu akhirnya dikirim ke antrean surat mati. Namun, Anda dapat menonaktifkan fitur ini secara efektif dengan menetapkan pilihan MaxRetries untuk nilai maksimum yang valid 100.

Jika antrean surat mati tidak dikonfigurasi untuk antrean Amazon SQS lingkungan pekerja Anda, Amazon SQS menyimpan pesan di antrean sampai periode penyimpanan berakhir. Untuk rincian tentang cara mengonfigurasi periode penyimpanan, lihat Mengonfigurasi lingkungan pekerja.

catatan

Pilihan Elastic Beanstalk MaxRetries setara dengan pilihan SQS MaxReceiveCount. Jika lingkungan pekerja Anda tidak menggunakan antrean SQS otomatis, gunakan pilihan MaxReceiveCount di SQS untuk secara efektif menonaktifkan antrean surat mati Anda. Untuk informasi selengkapnya, lihat Menggunakan antrean surat mati Amazon SQS.

Untuk informasi lebih lanjut tentang siklus hidup pesan SQS, silakan kunjungi Pesan Siklus hidup.

Tugas periodik

Anda dapat menentukan tugas-tugas periodik dalam sebuah file bernama cron.yaml dalam paket sumber Anda untuk menambahkan lowongan ke antrean lingkungan pekerja Anda secara otomatis pada interval reguler.

Misalnya, yang berikut ini file cron.yaml membuat dua tugas periodik. Yang pertama berjalan setiap 12 jam dan yang kedua berjalan pada pukul 11 PM UTC setiap hari.

contoh cron.yaml
version: 1 cron: - name: "backup-job" url: "/backup" schedule: "0 */12 * * *" - name: "audit" url: "/audit" schedule: "0 23 * * *"

name harus unik untuk setiap tugas. URL adalah jalur dimana permintaan POST dikirim untuk memicu pekerjaan. Jadwalnya adalah ekspresi CRON yang menentukan kapan tugas berjalan.

Ketika tugas berjalan, daemon memposting pesan ke lingkungan antrean SQS dengan header menunjukkan pekerjaan yang perlu dilakukan. Setiap instans di lingkungan dapat mengambil pesan dan memproses pekerjaan.

catatan

Jika Anda mengonfigurasi lingkungan pekerja Anda dengan antrean SQS yang ada dan memilih antrean Amazon SQS FIFO, tugas periodik tidak didukung.

Elastic Beanstalk menggunakan pemilihan pemimpin untuk menentukan instans di lingkungan pekerja Anda yang mengantre tugas periodik. Setiap instans mencoba untuk menjadi pemimpin dengan menulis ke tabel Amazon DynamoDB. Intans pertama yang berhasil adalah pemimpin, dan harus terus menulis ke meja untuk mempertahankan status pemimpin. Jika pemimpin keluar dari layanan, instans lainnya dengan cepat mengambil tempatnya.

Untuk tugas berkala, daemon pekerja menetapkan header tambahan berikut.

Header HTTP

Nama Nilai

X-Aws-Sqsd-Taskname

Untuk tugas berkala, nama tugas yang harus dilakukan.

X-Aws-Sqsd-Scheduled-At

Waktu di mana tugas periodik dijadwalkan

X-Aws-Sqsd-Sender-Id

Nomor akun AWS dari pengirim pesan

Gunakan Amazon CloudWatch untuk penskalaan otomatis di tingkatan lingkungan pekerja

Bersama-sama, Amazon EC2 Auto Scaling dan CloudWatch memantau penggunaan CPU dari instans yang berjalan di lingkungan pekerja. Bagaimana Anda mengonfigurasi batas penskalaan otomatis untuk kapasitas CPU menentukan berapa banyak instans grup Auto Scaling berjalan dengan tepat mengelola throughput pesan dalam antrean Amazon SQS. Setiap instans EC2 instans EC2 menerbitkan metrik utilisasi CPU CloudWatch. Amazon EC2 Auto Scaling mengambil CloudWatch dari penggunaan CPU rata-rata di semua instans di lingkungan pekerja. Anda mengonfigurasi ambang atas dan bawah serta berapa banyak instans untuk menambah atau mengakhiri sesuai dengan kapasitas CPU. Ketika Amazon EC2 Auto Scaling mendeteksi bahwa Anda telah mencapai ambang batas atas yang ditentukan pada kapasitas CPU, Elastic Beanstalk menciptakan instans baru di lingkungan pekerja. Intans dihapus ketika beban CPU turun kembali di bawah ambang batas.

catatan

Pesan yang belum diproses pada saat sebuah instans yang dihentikan dikembalikan ke antrean di mana mereka dapat diproses oleh daemon lain pada instans yang masih berjalan.

Anda juga dapat mengatur CloudWatch alarm lain, sesuai kebutuhan, dengan menggunakan Konsol Elastic Beanstalk, CLI, atau file pilihan. Untuk informasi lebih lanjut, lihat Menggunakan Elastic Beanstalk dengan AmazonCloudWatch dan Membuat grup Auto Scaling dengan Kebijakan Penskalaan Langkah.

Mengonfigurasi lingkungan pekerja

Anda dapat mengelola konfigurasi lingkungan pekerja dengan mengedit kategori Pekerja pada halaman Konfigurasi di konsol manajemen lingkungan.

Memodifikasi halaman konfigurasi pekerja di konsol Elastic Beanstalk
catatan

Anda dapat mengonfigurasi jalur URL untuk mengirimkan pesan antrean pekerja, namun Anda tidak dapat mengonfigurasi port IP. Elastic Beanstalk selalu memposting pesan antrean pekerja di port 80. Aplikasi lingkungan pekerja atau proksi harus mendengarkan port 80.

Untuk mengonfigurasikan daemon worker
  1. Buka Konsol Elastic Beanstalk, dan di daftar Wilayah, pilih Konsol Elastic BeanstalkWilayah AWS.

  2. Di panel navigasi, pilih Lingkungan, dan kemudian pilih nama lingkungan Anda dari daftar.

    catatan

    Jika Anda memiliki banyak lingkungan, gunakan bilah pencarian untuk memfilter daftar lingkungan.

  3. Di panel navigasi, pilih Konfigurasi.

  4. Dalam kategori konfigurasi Pekerja, pilih Edit.

Halaman konfigurasi Memodifikasi pekerja memiliki opsi berikut.

Di bagian Antre:

  • Antrean Pekerja – Tentukan antrean Amazon SQS dari mana daemon membaca. Jika Anda memilikinya, Anda dapat memilih antrean yang ada. Jika Anda memilih Antrean otomatis, Elastic Beanstalk membuat antrean Amazon SQS baru dan sesuai URL antrean pekerja.

    catatan

    Bila Anda memilih Antrean otomatis, antrean yang Elastic Beanstalk buat adalah antrean Amazon SQS standar. Bila Anda memilih antrean yang ada, Anda dapat memberikan standar atau antrean Amazon SQS FIFO. Ketahuilah bahwa jika Anda memberikan antrean FIFO, tugas berkala tidak didukung.

  • URL antrean pekerja – Jika Anda memilihAntrean pekerja yang ada, pengaturan ini menampilkan URL yang terkait dengan antrean Amazon SQS.

Di bagian Pesan:

  • Jalur HTTP – Tentukan jalur relatif ke aplikasi yang akan menerima data dari antrean Amazon SQS. Data dimasukkan ke dalam badan pesan dari pesan HTTP POST. Nilai default-nya adalah /.

  • Jenis MIME – menunjukkan tipe MIME yang digunakan oleh pesan HTTP POST. Nilai default-nya adalah application/json. Namun, nilai apa pun berlaku karena Anda dapat membuat dan kemudian menentukan jenis MIME Anda sendiri.

  • Koneksi HTTP – Tentukan jumlah maksimum koneksi bersamaan yang daemon dapat membuat aplikasi apapun dalam instans Amazon EC2. Default-nya adalah 50. Anda dapat menentukan 1 ke 100.

  • Waktu habis – Tunjukkan jumlah waktu, dalam hitungan detik, pesan masuk dari antrean Amazon SQS terkunci untuk diproses. Setelah jumlah waktu yang dikonfigurasi telah berlalu, pesan kembali dibuat terlihat dalam antrean untuk membaca daemon lain. Memilih nilai yang lebih panjang dari yang Anda harapkan aplikasi Anda butuhkan untuk memproses pesan, hingga 43200 detik.

  • Batas waktu visibilitas kesalahan – Menunjukkan jumlah waktu, dalam detik, yang berlalu sebelum Elastic Beanstalk mengembalikan pesan ke antrean Amazon SQS setelah upaya untuk memproses gagal dengan kesalahan eksplisit. Anda dapat menentukan 0 ke 43200 detik.

Di bagian Pilihan lanjutan:

  • Coba lagi Maks – Tentukan jumlah maksimum kali Elastic Beanstalk mencoba untuk mengirim pesan ke antrean Amazon SQS sebelum memindahkan pesan ke antrean surat mati. Nilai default-nya adalah 10. Anda dapat menentukan 1 ke 100.

    catatan

    Opsi percobaan ulang Max hanya berlaku untuk antrean Amazon SQS yang dikonfigurasi dengan antrean huruf mati. Untuk antrean Amazon SQS yang tidak dikonfigurasi dengan antrean huruf mati, Amazon SQS mempertahankan pesan dalam antrean dan proses mereka sampai periode yang ditentukan oleh pilihan Periode penahanan kedaluwarsa.

  • Koneksi waktu habis – Tunjukkan jumlah waktu, dalam hitungan detik, untuk menunggu koneksi sukses ke aplikasi. Nilai default-nya adalah 5. Anda dapat menentukan 1 ke 60 detik.

  • Waktu habis tidak aktif – Tunjukkan jumlah waktu, dalam detik, untuk menunggu respons pada koneksi yang ada ke aplikasi. Nilai default-nya adalah 180. Anda dapat menentukan 1 ke 36000 detik.

  • Periode penahanan – Tunjukkan jumlah waktu, dalam hitungan detik, pesan valid dan diproses secara aktif. Nilai default-nya adalah 345600. Anda dapat menentukan 60 ke 1209600 detik.

Jika Anda menggunakan antrean Amazon SQS yang ada, pengaturan yang Anda mengonfigurasi ketika Anda membuat lingkungan pekerja dapat konflik dengan pengaturan Anda dikonfigurasi secara langsung di Amazon SQS. Sebagai contoh, jika Anda mengonfigurasi lingkungan pekerja dengan nilai RetentionPeriod yang lebih tinggi dari nilai MessageRetentionPeriod yang Anda tetapkan di Amazon SQS, Amazon SQS menghapus pesan ketika melebihi MessageRetentionPeriod.

Sebaliknya, jika nilai RetentionPeriod yang Anda mengonfigurasi dalam pengaturan lingkungan pekerja lebih rendah dari nilai MessageRetentionPeriod yang Anda tetapkan di Amazon SQS, daemon menghapus pesan sebelum Amazon SQS dapat menghapusnya. Untuk VisibilityTimeout, nilai yang Anda mengonfigurasi untuk daemon dalam pengaturan lingkungan pekerja menimpa pengaturan Amazon SQS VisibilityTimeout. Pastikan bahwa pesan dihapus tepat dengan membandingkan pengaturan Elastic Beanstalk Anda untuk pengaturan Amazon SQS Anda.