全部产品
Search
文档中心

Function Compute:Konfigurasikan konkurensi instans

更新时间:Dec 04, 2025

Konkurensi instans menentukan jumlah maksimum permintaan konkuren yang dapat diproses oleh setiap instans fungsi dalam satu waktu. Anda dapat menggunakan fitur konkurensi instans dari Function Compute untuk mengelola penggunaan resource secara efisien selama puncak traffic dan mengurangi dampak cold start, sehingga meningkatkan performa serta mengurangi biaya.

Informasi latar belakang

Penggunaan resource Function Compute ditagih berdasarkan durasi eksekusi dan spesifikasi instans fungsi. Semakin lama durasi eksekusi suatu instans fungsi, semakin tinggi biaya penggunaan resource-nya.

Sebagai contoh, tiga permintaan perlu diproses secara bersamaan, dengan masing-masing memerlukan waktu 10 detik. Berikut penjelasan durasi eksekusi berdasarkan pengaturan konkurensi yang berbeda:

  • Jika konkurensi instans diatur ke 1, setiap instans hanya dapat memproses satu permintaan dalam satu waktu. Function Compute membuat tiga instans untuk memproses ketiga permintaan tersebut, sehingga total durasi eksekusi adalah 30 detik.

  • Jika konkurensi instans diatur ke 10 dan nilai tersebut tidak melebihi batas permintaan per detik (QPS) untuk suatu instans, setiap instans dapat memproses hingga 10 permintaan sekaligus. Function Compute hanya membuat satu instans untuk memproses ketiga permintaan tersebut, sehingga total durasi eksekusi adalah 10 detik.

Catatan
  • Jika konkurensi suatu instans fungsi diatur ke 1, setiap instans hanya dapat memproses satu permintaan dalam satu waktu. Jika Anda mengatur konkurensi instans ke nilai lebih dari 1, Function Compute hanya membuat instans baru ketika jumlah permintaan yang diproses secara konkuren oleh instans yang ada melebihi nilai yang ditentukan.

  • Konkurensi instans biasanya dikonfigurasi bersama dengan spesifikasi instans untuk mengoptimalkan performa fungsi dan mengurangi biaya.

Gambar berikut menunjukkan perbedaan eksekusi permintaan ketika konkurensi instans diatur ke nilai yang berbeda.

Manfaat

  • Mengurangi durasi eksekusi dan biaya.

    Sebagai contoh, untuk fungsi yang melibatkan banyak operasi I/O, Anda dapat menggunakan satu instans untuk memproses beberapa permintaan secara konkuren. Hal ini mengurangi jumlah instans yang digunakan serta total durasi eksekusi permintaan.

  • Berbagi status di antara permintaan.

    Beberapa permintaan dapat berbagi kolam koneksi database dalam satu instans untuk meminimalkan koneksi antara permintaan dan database.

  • Mengurangi frekuensi cold start.

    Satu instans dapat memproses beberapa permintaan, sehingga mengurangi jumlah instans baru dan frekuensi cold start.

  • Mengurangi jumlah alamat IP yang digunakan dalam virtual private cloud (VPC).

    Untuk jumlah permintaan tetap yang harus diproses, jumlah instans yang diperlukan berkurang jika setiap instans dapat memproses beberapa permintaan. Hal ini mengurangi jumlah alamat IP yang digunakan dalam VPC.

    Penting

    Pastikan vSwitch yang terkait dengan VPC Anda memiliki setidaknya dua alamat IP yang tersedia. Jika tidak, layanan mungkin tidak tersedia dan menyebabkan kegagalan permintaan.

Skenario

Jika fungsi memerlukan waktu lama untuk mendapatkan tanggapan dari layanan downstream, kami menyarankan agar Anda menggunakan satu instans untuk memproses beberapa permintaan secara konkuren. Dalam kebanyakan kasus, menunggu tanggapan tidak mengonsumsi resource. Pemrosesan konkuren beberapa permintaan oleh satu instans menghemat biaya serta meningkatkan responsivitas dan throughput aplikasi.

Batasan

Item

Batasan

Lingkungan runtime yang didukung oleh layer.

  • Custom runtimes

  • Custom images

Nilai valid konkurensi instans

1 hingga 200

Log eksekusi fungsi yang disediakan dalam header respons X-Fc-Log-Result

Tidak didukung jika konkurensi instans diatur ke nilai lebih dari 1

Prosedur

Anda dapat menentukan konkurensi instans suatu fungsi saat membuat fungsi tersebut.

Untuk mengubah konkurensi instans fungsi yang telah dibuat, buka halaman detail fungsi dan klik tab Configurations. Lalu, pada bagian Instance Configuration, klik Modify. Pada panel yang muncul, ubah nilai konkurensi instans.

Dampak

Bagian ini menjelaskan perbedaan antara skenario di mana satu instans hanya dapat memproses satu permintaan dalam satu waktu (Konkurensi Instans = 1) dan skenario di mana satu instans dapat memproses beberapa permintaan dalam satu waktu (Konkurensi Instans > 1).

Penagihan

Durasi eksekusi dan biaya suatu instans fungsi bervariasi tergantung pada konkurensi instans. Untuk informasi selengkapnya, lihat Billing overview.

  • Konkurensi Instans = 1

    Satu instans hanya dapat memproses satu permintaan dalam satu waktu. Durasi penagihan dimulai saat permintaan pertama mulai diproses dan berakhir saat permintaan terakhir selesai diproses.

  • Konkurensi Instans > 1

    Satu instans dapat memproses beberapa permintaan dalam satu waktu. Durasi eksekusi fungsi diukur berdasarkan durasi aktual instans tersebut berjalan. Durasi penagihan dimulai saat permintaan pertama mulai diproses dan berakhir saat permintaan terakhir selesai diproses.

Pembatasan kecepatan konkurensi

Secara default, Function Compute mendukung hingga 100 Instans sesuai permintaan dalam satu Wilayah. Jumlah maksimum permintaan yang dapat diproses secara konkuren dalam satu Wilayah dihitung menggunakan rumus berikut: 100 × Konkurensi instans. Sebagai contoh, jika Anda mengatur konkurensi instans ke 10, maksimal 1.000 permintaan konkuren dapat diproses secara bersamaan dalam satu Wilayah. Jika jumlah permintaan konkuren melebihi kapasitas maksimum yang dapat ditangani oleh Function Compute, error pembatasan kecepatan ResourceExhausted akan dilaporkan.

Catatan

Untuk menambah jumlah maksimum instans dalam satu Wilayah, hubungi kami.

Pencatatan log

  • Jika konkurensi instans diatur ke 1, Function Compute mengembalikan log fungsi dalam header respons X-Fc-Log-Result jika Anda menentukan X-Fc-Log-Type: Tail dalam Header permintaan HTTP saat memanggil fungsi. Jika konkurensi instans diatur ke nilai lebih dari 1, header respons tidak menyertakan log fungsi karena log permintaan tertentu tidak dapat diidentifikasi di antara permintaan yang diproses secara konkuren.

  • 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 menampilkan ID permintaan seperti yang diharapkan. Semua ID permintaan ditampilkan sebagai req 2. Contoh log berikut menunjukkan ilustrasinya:

    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 end                    

    Dalam kasus ini, kami menyarankan agar Anda menggunakan context.logger.info() untuk mencetak log. Metode ini memungkinkan ID permintaan ditampilkan seperti yang diharapkan. Contoh kode berikut menunjukkan implementasinya:

    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);
    };                   

Penanganan error

Ketika suatu instans memproses beberapa permintaan secara konkuren, proses yang berhenti secara tak terduga akibat kegagalan permintaan dapat memengaruhi permintaan konkuren lainnya. Oleh karena itu, Anda harus menyusun logika untuk menangkap exception tingkat permintaan dalam kode fungsi guna mencegah dampak terhadap permintaan lain. Contoh berikut menunjukkan kode sampel dalam Node.js:

exports.handler = (event, context, callback) => {
    try {
        JSON.parse(event);
    } catch (ex) {
        callback(ex);
    }

    callback(null, 'hello world');
};                    

Variabel bersama

Ketika suatu instans memproses beberapa permintaan secara konkuren, error dapat terjadi jika beberapa permintaan mencoba mengubah variabel yang sama dalam waktu bersamaan. Anda harus menerapkan mutual exclusion dalam kode untuk mencegah modifikasi variabel yang tidak aman bagi thread. Contoh berikut menunjukkan kode sampel dalam 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());
    }
}