Topik ini menjelaskan informasi latar belakang, skenario, manfaat, dan batasan dari konkurensi instans. Topik ini juga menjelaskan cara mengonfigurasi konkurensi instans di konsol Function Compute.
Informasi Latar Belakang
Function Compute menghitung biaya berdasarkan durasi eksekusi instans. Sebagai contoh, jika latensi akses database adalah 10 detik dan tiga permintaan diproses oleh tiga instans terpisah, total durasi eksekusi adalah 30 detik. Namun, jika ketiga permintaan tersebut diproses secara bersamaan oleh satu instans, total durasi eksekusi menjadi 10 detik. Untuk membantu mengurangi biaya Anda, Function Compute memungkinkan Anda menggunakan satu instans untuk memproses beberapa permintaan secara bersamaan. Anda dapat menentukan jumlah permintaan yang akan diproses secara bersamaan oleh sebuah instans menggunakan parameter Konkurensi Instans. Gambar berikut membandingkan dua skenario: satu di mana instans memproses satu permintaan pada satu waktu, dan lainnya di mana instans memproses beberapa permintaan secara bersamaan.
Pada gambar sebelumnya, asumsikan bahwa tiga permintaan perlu diproses pada saat yang sama.
Jika Konkurensi Instans diatur ke 1, setiap instans memproses satu permintaan pada satu waktu. Function Compute perlu membuat tiga instans untuk memproses tiga permintaan.
Jika Konkurensi Instans diatur ke 10, setiap instans dapat memproses 10 permintaan pada satu waktu. Function Compute hanya perlu membuat satu instans untuk memproses semua tiga permintaan.
Secara default, Konkurensi Instans diatur ke 1. Artinya, satu instans hanya dapat memproses satu permintaan pada satu waktu. Jika Anda mengatur Konkurensi Instans ke nilai lebih dari 1, Function Compute membuat instans baru untuk memproses permintaan hanya ketika instans yang ada berada pada kapasitas penuh.
Skenario
Jika fungsi membutuhkan waktu lama untuk mendapatkan respons dari layanan hilir, kami sarankan Anda menggunakan satu instans untuk memproses beberapa permintaan secara bersamaan. Dalam banyak kasus, sumber daya tidak dikonsumsi ketika permintaan sedang menunggu respons. Jika Anda menggunakan satu instans untuk memproses beberapa permintaan secara bersamaan, biaya dapat dikurangi.
Manfaat
Mengurangi durasi eksekusi dan biaya.
Sebagai contoh, untuk fungsi yang memerlukan operasi I/O, Anda dapat menggunakan satu instans untuk memproses beberapa permintaan secara bersamaan. Ini mengurangi jumlah instans yang digunakan untuk memproses permintaan sehingga mengurangi total durasi eksekusi permintaan.
Berbagi status di antara permintaan.
Beberapa permintaan dapat berbagi kumpulan koneksi database dalam satu instans untuk meminimalkan koneksi antara permintaan dan database.
Mengurangi frekuensi cold start.
Satu instans dapat memproses beberapa permintaan, yang mengurangi jumlah instans baru dan menurunkan frekuensi cold start.
Mengurangi jumlah alamat IP yang digunakan dalam virtual private cloud (VPC).
Untuk jumlah tetap permintaan yang harus diproses, jumlah instans yang diperlukan berkurang jika setiap instans dapat memproses beberapa permintaan. Ini mengurangi jumlah alamat IP yang digunakan dalam VPC.
PentingPastikan bahwa vSwitch yang terkait dengan VPC Anda memiliki setidaknya dua alamat IP yang tersedia. Jika tidak, layanan mungkin tidak tersedia, yang menyebabkan kesalahan permintaan.
Dampak
Bagian ini membandingkan dua skenario: satu di mana instans memproses satu permintaan pada satu waktu (Konkurensi Instans = 1), dan lainnya di mana instans memproses beberapa permintaan secara bersamaan (Konkurensi Instans > 1).
Billing
Konkurensi Instans = 1
Instans hanya dapat memproses satu permintaan pada satu waktu. Durasi penagihan dimulai ketika permintaan pertama mulai diproses dan berakhir ketika permintaan terakhir diproses.
Konkurensi Instans > 1
Instans dapat memproses beberapa permintaan pada satu waktu. Durasi penagihan dimulai ketika permintaan pertama mulai diproses dan berakhir ketika permintaan terakhir diproses.
Untuk informasi lebih lanjut, lihat Ikhtisar Penagihan.
Concurrency throttling
Secara default, Function Compute mendukung hingga 100 instans on-demand di wilayah tertentu. Jumlah maksimum permintaan yang dapat diproses secara bersamaan di wilayah tertentu dihitung menggunakan rumus berikut: 100 × Konkurensi Instans. Sebagai contoh, jika Anda mengatur Konkurensi Instans ke 10, maksimal 1.000 permintaan dapat diproses secara bersamaan di wilayah tertentu. Jika jumlah permintaan bersamaan melebihi jumlah maksimum permintaan yang dapat diproses secara bersamaan oleh Function Compute, kesalahan ResourceExhausted akan dikembalikan.
Untuk meningkatkan batas atas instans on-demand di wilayah tertentu, hubungi kami.
Logging
Jika Konkurensi Instans diatur ke 1, Function Compute mengembalikan log fungsi di bidang
X-Fc-Log-Resultheader respons jika Anda menentukanX-Fc-Log-Type: Taildi header HTTP saat Anda memanggil fungsi. Jika Konkurensi Instans diatur ke nilai lebih dari 1, header respons tidak berisi log fungsi karena log permintaan tertentu tidak dapat diperoleh di antara permintaan bersamaan.Untuk runtime Node.js, fungsi
console.info()digunakan untuk mengembalikan log, yang mencakup ID permintaan. Jika Konkurensi Instans diatur ke nilai lebih dari 1,console.info()tidak dapat mencetak ID permintaan seperti yang diharapkan. Semua ID permintaan dicetak sebagaireq 2. Contoh log sampel berikut menunjukkan contohnya:2019-11-06T14:23:37.587Z req1 [info] logger begin 2019-11-06T14:23:37.587Z req1 [info] ctxlogger begin 2019-11-06T14:23:37.587Z req2 [info] logger begin 2019-11-06T14:23:37.587Z req2 [info] ctxlogger begin 2019-11-06T14:23:40.587Z req1 [info] ctxlogger end 2019-11-06T14:23:40.587Z req2 [info] ctxlogger end 2019-11-06T14:23:37.587Z req2 [info] logger end 2019-11-06T14:23:37.587Z req2 [info] logger endDalam hal ini, kami sarankan Anda menggunakan
context.logger.info()untuk mencetak log. Metode ini memungkinkan ID permintaan dicetak seperti yang diharapkan. Contoh kode sampel berikut menunjukkan contohnya:exports.handler = (event, context, callback) => { console.info('logger begin'); context.logger.info('ctxlogger begin'); setTimeout(function() { context.logger.info('ctxlogger end'); console.info('logger end'); callback(null, 'hello world'); }, 3000); };
Error handling
Ketika instans memproses beberapa permintaan secara bersamaan, keluar proses tak terduga yang disebabkan oleh permintaan gagal memengaruhi permintaan bersamaan lainnya. Oleh karena itu, Anda harus menyusun logika untuk menangkap pengecualian tingkat permintaan dalam kode fungsi dan mencegah dampak tersebut pada permintaan lainnya. Contoh kode sampel berikut menunjukkan contohnya dalam runtime Node.js:
exports.handler = (event, context, callback) => {
try {
JSON.parse(event);
} catch (ex) {
callback(ex);
}
callback(null, 'hello world');
}; Shared variables
Ketika instans memproses beberapa permintaan secara bersamaan, kesalahan mungkin terjadi jika permintaan-permintaan tersebut mencoba memodifikasi variabel yang sama secara bersamaan. Oleh karena itu, Anda harus menggunakan mutual exclusion dalam kode Anda untuk mencegah modifikasi variabel yang tidak aman untuk thread. Contoh kode sampel berikut menunjukkan contohnya dalam runtime Java:
public class App implements StreamRequestHandler
{
private static int counter = 0;
@Override
public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) throws IOException {
synchronized (this) {
counter = counter + 1;
}
outputStream.write(new String("hello world").getBytes());
}
} Monitoring metrics
Setelah Anda mengatur Konkurensi Instans ke nilai lebih dari 1, Anda dapat melihat bahwa jumlah instans yang digunakan berkurang dalam grafik pemantauan instans.
Batasan
Item | Deskripsi |
Runtime yang didukung |
|
Jumlah permintaan yang dapat diproses secara bersamaan oleh satu instans | 1–200 |
Log eksekusi fungsi yang disediakan di bidang X-Fc-Log-Result di header respons | Tidak didukung jika parameter Konkurensi Instans diatur ke nilai lebih dari 1 |
Konkurensi instans untuk fungsi
Ketika Anda membuat atau memperbarui fungsi, Anda dapat mengonfigurasi parameter Konkurensi Instans. Untuk informasi lebih lanjut, lihat Kelola fungsi.

Instans yang disediakan juga dapat memproses beberapa permintaan secara bersamaan. Untuk informasi lebih lanjut, lihat Konfigurasikan instans yang disediakan dan aturan penskalaan otomatis.
Informasi lebih lanjut
Untuk informasi lebih lanjut tentang cara menggunakan SDK untuk Node.js untuk mengonfigurasi konkurensi instans, lihat Tentukan konkurensi instans.