It’s a movement that is defined by empowering developers to single-handedly build apps that handle production level traffic. They don’t have to actively manage scaling their infrastructure. They don't have to provision servers, or pay for resources that go unused. They can just focus on building. https://www.serverless.com/learn/manifesto/
Kalau bicara soal traffic handling, semua developer pasti kenal dengan nama Cloudflare. Misalnya untuk urusan CDN, data builtwith.com menunjukkan bahwa Cloudflare memegang market share terbesar dengan digunakan oleh 45,14% dari top 10k websites. Cloudflare sendiri mengklaim melayani lebih dari 25 juta internet properties.
Dalam bidang serverless computing Cloudflare memiliki Cloudflare Workers yang men-support secara penuh bahasa pemrograman javascript.
Dibandingkan dengan AWS Lambda, atau Google Cloud Functions, memang product yang ditawarkan oleh Cloudflare ini kalah populer.
Tapi ada keunikan sendiri yang membedakannya dengan AWS atau Google. Uniknya adalah code javascript tidak running diatas Node.js, tapi menggunakan V8 Isolates.
Dengan model ini tidak ada yang namanya cold start, yaitu ketika request pertama akan memperoleh response yang lambat karena instance membutuhkan waktu untuk "bangun" dari sebelumnya dalam kondisi "tidur" ketika tidak ada request yang masuk dalam rentang waktu tertentu. Dan juga tidak ada pemilihan lokasi seperti di AWS misalnya memilih lokasi ap-southeast-1
untuk data center Singapore.
Kenapa tidak perlu memilih lokasi? Karena code akan running di lokasi terdekat dengan user, atau biasa disebut dengan istilah Edge Computing. Misalnya jika user datang dari pulau Jawa, maka akan otomatis di-serve oleh data center Cloudflare yang ada di Jakarta.
Untuk artikel ini saya membuat ulang url-shortener yang telah saya buat dua minggu yang lalu dengan Netlify redirects.
Kali ini menggunakan Cloudflare Worker. Saya tambahkan juga user interface di website https://kuy.app sehingga sekarang bisa digunakan oleh siapa saja.
Setup
Dokumentasi lebih detil terdapat di Gettting Started resmi Cloudflare Workers.
Buat akun Cloudflare, kemudian di dashboard cloudflare tambahkan website baru.
Install Workers CLI
npm install -g @cloudflare/wrangler
- Buat project baru dengan template starter
wrangler generate my-worker
cd my-worker
Di dalam folder my-worker
akan terdapat file konfigurasi wrangler.toml
untuk konfigurasi account_id. Dapatkan account_id kamu di dashboard Cloudflare, lalu update file wrangler.toml
name = "hello"
type = "javascript"
account_id = "<your cloudflare account_id>"
workers_dev = true
route = ""
- Untuk menjalankan di environment development
wrangler dev
Development server akan berjalan default di http://localhost:8787
Menghandle Request dengan Cloudflare Worker
Menulis code javascript untuk Cloudflare Workers tidak sama dengan menulis code untuk Node.js, tapi seperti menulis code untuk Service Worker.
Request yang masuk ke workers akan diterima sebagai event fetch
. Lalu untuk response yang dikirim ke user, dibuat menggunakan object Response standard dari Web API.
Hello World dengan Cloudflare Workers:
addEventListener('fetch', (event) => {
event.respondWith(
new Response('Hello world!', {
headers: { 'content-type': 'text/plain' },
})
);
});
Detil dari request terdapat pada properti event.request
yang juga merupakan object Request standard dari Web API.
Jika body request yang masuk adalah berupa data JSON, bisa diparse dengan method .json()
addEventListener('fetch', (event) => {
if (event.request.method === 'GET') {
event.respondWith(
new Response('Hello world!', {
headers: { 'content-type': 'text/plain' },
})
);
} else {
event.request.json().then((body) => {
// echo user request
event.respondWith(
new Response(JSON.stringify(body), {
headers: { 'content-type': 'application/json' },
})
);
});
}
});
Publish ke Cloudflare Workers
Untuk mem-publish gunakan command berikut
wrangler publish
Nah untuk code yang berkaitan dengan metode url shortening bisa langsung dilihat saja di repository github berikut:
Untuk data persistence, di sini saya menggunakan faunaDB yang juga sangat cocok digunakan pada environment serverless.
Top comments (0)