CDN (Content Delivery Network) adalah jaringan server di banyak kota yang menyimpan salinan konten situsmu dekat dengan pengguna. Edge computing artinya menjalankan kode di server-server itu juga, bukan cuma menyajikan file. Bayangin pabrik roti di satu kota. Toko cabang di kota-kota lain menyimpan stok roti yang paling laku, jadi pembeli gak perlu menunggu roti dikirim dari pabrik. Stok di cabang punya tanggal kedaluwarsa, dan bisa ditarik kalau resepnya berubah. Kue ulang tahun pesanan atas nama satu orang tetap dibuat di pabrik. Kasir cabang juga bisa mengerjakan urusan kecil sendiri, seperti mengecek kupon, tanpa menelepon pabrik.
🧪 Tebakan cepat: origin TiketNada di Virginia, Amerika Serikat. Poster Konser Nusantara sudah tersimpan di PoP Jakarta. Budi di Jakarta memintanya. Berapa lama: sekitar 8 ms, 230 ms, atau 232 ms? Tebak dulu, jawabannya ada di bagian "HIT, MISS, dan jarak".
Istilah: origin, PoP, edge
- Origin: server aslimu, tempat aplikasi dan database TiketNada berjalan. Pabriknya.
- PoP (Point of Presence): lokasi fisik server CDN di sebuah kota. Toko cabangnya. Pengguna di Surabaya dilayani PoP terdekat, bukan origin yang mungkin ada di benua lain.
- Edge server: server di dalam PoP. "Di edge" artinya di PoP, dekat pengguna.
- Cache HIT: PoP sudah punya salinan dan langsung menjawab. MISS: belum punya, jadi PoP mengambil dari origin lalu menyimpan salinannya. Cloudflare menulis statusnya di header
cf-cache-status.
Latency mengikuti jarak
Sinyal di kabel serat optik paling cepat sekitar 200 km per milidetik, dan jalurnya gak pernah lurus. Makin jauh, makin lama, dan gak ada optimasi kode yang bisa menghapusnya. Model contoh di Lab, waktu bolak-balik (round trip) dari HP pembeli. Angka Jakarta sama dengan lesson Client-Server Architecture:
| Pembeli di | ke Jakarta | ke Singapura | ke Makassar | ke Virginia |
|---|---|---|---|---|
| Jakarta | 8 ms | 20 ms | 30 ms | 230 ms |
| Medan | 30 ms | 15 ms | 55 ms | 245 ms |
| Jayapura | 70 ms | 85 ms | 40 ms | 290 ms |
Di Lab ada tiga PoP contoh: Jakarta, Singapura, dan Makassar. Tiap pembeli memakai yang terdekat: Jakarta ke PoP Jakarta (8 ms), Medan ke Singapura (15 ms), Jayapura ke Makassar (40 ms).
HIT, MISS, dan jarak
Request MISS menempuh tiga jalan: pembeli ke PoP, PoP ke origin lewat jaringan provider CDN, lalu kerja origin (2 ms untuk file, 20 ms untuk halaman). Request HIT cuma menempuh jalan pertama. Poster dari Jakarta, origin di Virginia:
| Request | Jalannya | Total |
|---|---|---|
| Pertama: MISS | 8 ms ke PoP Jakarta + 220 ms PoP ke Virginia + 2 ms | 230 ms |
| Kedua: HIT | 8 ms ke PoP Jakarta | 8 ms |
| Tanpa CDN | 230 ms ke Virginia + 2 ms | 232 ms |
Jawabannya 8 ms. Itu jawaban tebakannya. Begitu salinannya ada di PoP, jauhnya origin gak berpengaruh lagi. Yang membayar jarak cuma MISS, dan MISS sedikit lebih lambat dari tanpa CDN, karena ada satu persinggahan tambahan.
Untungnya berlipat karena satu salinan dipakai bersama. Saat war tiket, 10.000 orang per detik membuka poster yang sama. Dengan hit ratio (persen request yang HIT) 99%, origin cuma menerima 100 request per detik. Sisanya dijawab PoP.
Apa yang di-cache: statis atau dinamis
Konten yang paling tepat di-cache CDN adalah aset statis yang sama untuk semua orang dan jarang berubah: gambar, CSS, bundle JavaScript, font. Konten yang dibuat khusus untuk satu orang (keranjang, profil, riwayat pesanan) atau yang berubah tiap detik jangan di-cache di CDN: kalau tersimpan di PoP, pembeli lain bisa menerima keranjang Budi.
Origin memberi tahu CDN lewat header Cache-Control:
// Aturan TiketNada di origin
const RULES = {
'/img/poster-nusantara.jpg': 'public, max-age=86400', // statis: 1 hari
'/events/42': 'public, s-maxage=60', // halaman konser: 60 detik di CDN
'/api/cart': 'private, no-store', // keranjang satu pembeli: jangan simpan
};
publicartinya semua cache boleh menyimpan, termasuk CDN.max-age=86400membuatnya segar 86.400 detik, satu hari.s-maxage=60khusus untuk cache bersama seperti CDN: halaman konser disimpan 60 detik.private, no-storemembuat CDN gak menyimpan sama sekali. Tiap request diteruskan ke origin, dan statusnya BYPASS.
Detail semua nilai Cache-Control, nama file ber-hash, dan purge per tag ada di lesson CDN & Edge Caching (track Performance).
TTL dan purge: segar atau cepat
TTL (time to live) adalah berapa lama salinan dianggap segar. Selama TTL, PoP gak bertanya ke origin, jadi dia gak tahu kalau data di origin berubah. Di Lab, halaman /events/42 disimpan di detik 0, lalu harganya turun dari Rp750.000 jadi Rp700.000:
| Detik | Request ke PoP | Status | Harga yang tampil |
|---|---|---|---|
| 0 | pertama | MISS | Rp750.000 |
| 30 | setelah harga turun | HIT | Rp750.000, basi |
| 61 | TTL 60 detik sudah lewat | EXPIRED | Rp700.000 |
Purge menghapus salinan di semua PoP sekarang juga, jadi request berikutnya MISS dan mengambil versi baru. Ini trade-off-nya: TTL panjang berarti hit ratio tinggi dan origin santai, tapi data basi lebih lama. TTL pendek berarti lebih segar, tapi lebih banyak request ke origin. Untuk data yang sama untuk semua orang tapi bisa berubah, pakai TTL pendek dan purge saat datanya berubah.
Edge computing: kode yang jalan di PoP
CDN modern bisa menjalankan kode di PoP: Cloudflare Workers, Vercel Edge Functions, Fastly Compute. Edge computing adalah menjalankan logika aplikasi di server CDN yang dekat dengan pengguna, bukan cuma menyajikan file statis. Contoh TiketNada saat war tiket: cek token antrean sebelum request boleh ke origin.
// Cloudflare Worker: jalan di PoP, bukan di origin
export default {
async fetch(request) {
const cookie = request.headers.get('Cookie') || '';
if (!cookie.includes('giliran=ok')) {
return new Response('Kamu di antrean. Halaman ini dicoba lagi sebentar lagi.');
}
return fetch(request); // sudah giliran: teruskan ke cache atau origin
},
};
fetch(request)di sini adalah function yang dipanggil Cloudflare untuk tiap request yang masuk ke PoP.- Tanpa cookie
giliran=ok, PoP langsung menjawab sendiri. Dari Jayapura itu 40 + 1 = 41 ms, dibanding 290 + 20 = 310 ms kalau dicek di origin Virginia. return fetch(request)meneruskan request yang sudah gilirannya, jadi origin cuma menerima pembeli yang memang boleh masuk.
Edge cocok untuk logika kecil: redirect per negara, A/B test, cek token, blokir bot. Datanya tetap di origin, jadi logika yang butuh database tetap lebih baik di sana. Lebih lanjut di lesson Cloudflare Workers & Edge Computing (track DevOps).
🎯 Strategi per jenis konten
| Konten | Strategi |
|---|---|
File ber-hash (app.3f9a1c.js), poster, font |
cache lama: max-age=31536000, immutable atau sehari |
| Halaman publik yang bisa berubah (detail konser) | cache pendek (s-maxage=60) + purge saat berubah |
| Data pribadi (keranjang, profil, riwayat pesanan) | jangan di-cache: private, no-store |
| Data real-time (sisa kursi detik ini) | jangan di-cache, atau beberapa detik saja |
| Logika kecil sebelum origin (antrean, redirect) | edge function |
⚠️ Jebakan yang sering ketemu
- Data pribadi dengan
public. CDN bisa mengirim keranjang satu pembeli ke pembeli lain. - TTL panjang tanpa purge. Harga atau jadwal yang berubah tetap tampil versi lama sampai TTL habis.
- Mengira CDN mempercepat semuanya. Request dinamis tetap ke origin, dan MISS malah sedikit lebih lambat. Untungnya ada di HIT.
- Tanpa PoP dekat pengguna. Pembeli di Jayapura yang dilayani PoP Jakarta masih menempuh 70 ms. Cek lokasi PoP provider-mu.
TL;DR: CDN menyimpan salinan konten di PoP (Point of Presence), lokasi server CDN di kota dekat pengguna, jadi latency-nya mengikuti jarak ke PoP, bukan ke origin. Di model TiketNada, poster dari Jakarta dengan origin di Virginia: MISS 230 ms, HIT 8 ms, tanpa CDN 232 ms. Dengan hit ratio 99%, origin cuma menerima 1 dari 100 request. Cache aset statis yang sama untuk semua orang (gambar, CSS, JavaScript) lama; halaman publik yang berubah dengan TTL pendek plus purge; data pribadi dan real-time jangan di-cache (private, no-store, BYPASS). Selama TTL, PoP gak tahu origin berubah, jadi bisa mengirim harga lama sampai TTL habis atau di-purge. Edge computing menjalankan logika aplikasi di server CDN dekat pengguna, misalnya cek token antrean dalam 41 ms dari Jayapura, bukan 310 ms ke origin.