~/VibeHandbook
PDF Gratis

Cloudflare

developers.cloudflare.com

Durable Objects

Apa itu ini

Bayangkan satu resepsionis yang melayani satu orang dalam satu waktu dan mengingat semua orang yang pernah datang sebelumnya — tidak ada resepsionis kedua yang bisa memberi jawaban yang bertentangan. Durable Object adalah resepsionis itu dalam bentuk perangkat lunak: server kecil yang menyimpan ingatannya sendiri (disebut "stateful", artinya punya keadaan/ingatan) dan yang dijamin oleh Cloudflare untuk selalu ada di tepat satu tempat dalam satu waktu. Setiap object punya ID unik, penyimpanan permanennya sendiri, dan memproses permintaan satu per satu, sehingga ia menjadi tempat yang alami untuk koordinasi — penghitung (counter), kunci (lock), ruang permainan, sesi obrolan. Jika Worker melupakan segalanya di antara permintaan (disebut "stateless", artinya tanpa keadaan) dan berjalan di banyak tempat sekaligus, Durable Object justru mengingat dan bersifat tunggal.

Kelebihan

  • Jaminan satu-instance — tidak ada race condition (kondisi balapan, ketika beberapa proses berebut mengubah data yang sama secara bersamaan) di antara replika.
  • Penyimpanan permanen bawaan (kini didukung oleh SQLite) yang terletak bersama object-nya.
  • Ideal untuk aplikasi real-time (waktu nyata): WebSockets (koneksi dua arah yang tetap terbuka sehingga server bisa langsung mengirim pembaruan), presence (status kehadiran), kolaborasi langsung.
  • Konsistensi kuat: pembacaan-setelah-penulisan di dalam satu object terjadi seketika.
  • Alarm memungkinkan sebuah object menjadwalkan pekerjaannya sendiri di masa depan.

Trade-off (kompromi)

  • Satu-thread per object — object yang sibuk bisa menjadi titik penyumbat (bottleneck); bagi bebannya (shard) berdasarkan key.
  • Lebih banyak yang perlu dipikirkan dibanding Worker biasa; kamu harus merancang sendiri batasan-batasan object-nya.
  • Penyimpanan per object terbatas; bukan pengganti D1 ( ) atau R2 (penyimpanan berkas) dalam skala besar.
  • Berlebihan untuk penanganan permintaan yang bersifat stateless.

Kapan menggunakannya

Gunakan Durable Objects ketika kamu butuh koordinasi atau keadaan per-entitas: ruang obrolan, keadaan permainan multipemain, pembatas laju (rate limiter), pemilihan pemimpin (leader election), atau dokumen langsung yang diedit banyak klien sekaligus.

Kecocokan dengan vibe coding

Durable Objects unggul untuk fitur real-time yang biasanya rumit dibangun, dan sebuah bisa menyusun kerangka class-nya, binding-nya, dan penanganan WebSocket-nya. Beri tahu agent cara membagi bebannya (shard) — biasanya satu object per ruangan, pengguna, atau dokumen — supaya satu object saja tidak menyerialkan semua trafikmu. Konfigurasi di bawah ini mendeklarasikan sebuah class Durable Object beserta migrasinya.

# wrangler.toml
[[durable_objects.bindings]]
name = "ROOM"
class_name = "ChatRoom"

[[migrations]]
tag = "v1"
new_sqlite_classes = ["ChatRoom"]
npx wrangler deploy