Log in to leave a comment
No posts yet
Saat bekerja dengan fungsi serverless, Anda akan membentur batasan waktu eksekusi. Vercel Workflows memecahkan masalah ini dengan mengubah fungsi asinkron menjadi proses yang dapat mempertahankan status (stateful). Kunci utamanya adalah menghilangkan elemen yang tidak pasti seperti penulisan database atau fungsi acak di dalam fungsi orchestrator. Semua efek samping (side effects) harus dikurung di dalam blok step.run agar sistem tidak menjadi kacau.
Deklarasikan use workflow pada fungsi yang mengontrol seluruh logika dan fokuslah pada pengelolaan alur saja. Definisikan pemanggilan API atau tugas DB yang sebenarnya sebagai langkah (step) independen. Saat beralih ke langkah berikutnya, pilih hanya data yang diperlukan untuk dikirim guna menghemat biaya penyimpanan log. Dengan struktur ini, jika tugas gagal di tengah jalan, Anda tidak perlu memulai dari awal. Cukup lanjutkan dari titik kegagalan tersebut.
Dalam sistem terdistribusi, kesalahan jaringan dapat menyebabkan langkah yang sama dijalankan dua kali. Dalam sistem pembayaran, hal ini bisa menjadi bencana. Vercel Workflows menyediakan stepId unik untuk setiap langkah. Saat mengintegrasikan layanan seperti Toss Payments atau Stripe, gunakan ID ini sebagai kunci idempotensi (idempotency key) untuk mencegah insiden pembayaran ganda.
Masukkan pola ke dalam kode untuk memeriksa apakah detail transaksi sudah diproses sebelum menulis data. Anda dapat menetapkan ID yang diekstrak dengan getStepMetadata() ke header permintaan layanan eksternal. Rancang sistem agar segera mengembalikan respons jika transaksi sudah diproses. Dengan struktur yang tepat ini, Anda dapat mengurangi pemanggilan API yang tidak perlu dan menghemat biaya infrastruktur hingga lebih dari 20%.
Fungsi serverless Vercel biasanya mati dalam 1 hingga 15 menit. Namun, dengan step.sleep, Anda dapat dengan mudah menangani tugas terjadwal yang memakan waktu berhari-hari. Saat fungsi ini dijalankan, status workflow dicatat dalam penyimpanan dan fungsi segera dihentikan. Tidak ada biaya komputasi yang dikenakan selama masa tunggu.
Misalnya, jika Anda perlu mengirim email survei 3 hari setelah pembayaran selesai, satu baris await step.sleep('3 days') sudah cukup. Anda tidak perlu lagi mengelola crontab atau scheduler terpisah, sehingga waktu operasional berkurang sekitar 2 jam per minggu. Biaya menjalankan server 24 jam pun hilang.
Proses pengulangan antara deployment dan revisi dapat menghambat kecepatan pengembangan. Dengan memanfaatkan fitur Vercel CLI, Anda dapat melakukan pengujian secara lokal tanpa harus mengunggah ke cloud. Jika Anda perlu menerima webhook eksternal, gunakan alat seperti ngrok untuk mengekspos localhost ke luar.
Jalankan vercel dev dan daftarkan URL yang dihasilkan oleh ngrok ke pengaturan webhook Stripe, maka kode lokal Anda akan menerima event eksternal secara real-time. Anda dapat memverifikasi skenario kegagalan sebelum deployment, sehingga kecepatan pengembangan bisa meningkat dua kali lipat. Ini juga mengurangi waktu yang terbuang akibat kesalahan pengaturan variabel lingkungan (environment variables).
Jika terjadi percobaan ulang (retry) tanpa henti karena pembatasan kecepatan (rate limit) API atau gangguan jaringan sementara, Anda akan terkena lonjakan biaya. Anda harus merespons secara berbeda tergantung pada jenis kesalahannya. Hentikan segera untuk kesalahan permanen seperti kegagalan autentikasi, dan coba lagi setelah beberapa waktu untuk masalah sementara seperti gangguan jaringan.
Terapkan rumus exponential backoff untuk meningkatkan interval percobaan ulang secara bertahap.
Batasi jumlah maksimum percobaan dengan mengatur maxRetries: 3 pada fungsi step.run. Karena sistem pulih secara otomatis, ketersediaan layanan akan meningkat dan tagihan akibat loop tak terbatas dapat dicegah sejak dini.
Vercel Workflows menyediakan kuota dasar 50.000 langkah eksekusi untuk paket Pro. Jika melebihi kuota, biayanya sekitar $2.50 per 100.000 langkah. Biaya penyimpanan yang timbul selama penantian jangka panjang sangat murah, yaitu $0.00069 per GB-Hour.
| Kategori | Kuota Termasuk (Hobby/Pro) | Tarif Kelebihan |
|---|---|---|
| Workflow Steps | 50.000 langkah | $2.50 per 100.000 langkah |
| Workflow Storage | 720 GB-Hours | $0.00069 per GB-Hour |
| Serverless Function | 1.000 GB-Hours | $0.60 per GB-Hour |
Ini jauh lebih ekonomis dibandingkan dengan membangun dan mengelola antrean pesan (message queue) yang kompleks secara mandiri. Dengan menggabungkan jaminan idempotensi dan exponential backoff secara tepat, Anda dapat memperoleh keandalan tingkat produksi tanpa beban manajemen infrastruktur. Tidak ada pilihan yang lebih masuk akal bagi pengembang solo yang ingin fokus hanya pada logika bisnis.