Semua artikel

Arsitektur Stateless: Kenapa Penting untuk Hosting yang Hemat

Pelajari bagaimana arsitektur stateless membantu menghemat biaya hosting dan membuat aplikasi lebih scalable.


Apa itu Arsitektur Stateless?

Arsitektur stateless berarti aplikasi kamu tidak menyimpan data apapun di dalam container. Setiap request ditangani secara independen, tanpa bergantung pada state lokal dari request sebelumnya.

Dalam arsitektur ini:

  • Container bisa di-restart kapan saja tanpa kehilangan data penting
  • Multiple instance bisa berjalan bersamaan untuk menangani traffic tinggi
  • Scale up dan scale down bisa dilakukan otomatis berdasarkan beban

Kenapa Stateless Lebih Hemat?

1. Scale to Zero

Dengan arsitektur stateless, container bisa di-shutdown sepenuhnya saat tidak ada traffic. Di getlaunch.dev, kamu hanya bayar CPU saat aplikasi sedang memproses request. Tidak ada biaya untuk container yang idle.

Bandingkan dengan hosting tradisional:

Hosting Tradisionalgetlaunch.dev (Stateless)
Biaya idleTetap bayar 24/7Rp 0 saat idle
ScalingManual upgrade serverOtomatis
Data loss riskTinggi jika server crashTidak ada (data di external service)

2. Horizontal Scaling yang Mudah

Karena setiap container tidak menyimpan state, platform bisa dengan mudah menambah atau mengurangi jumlah container sesuai kebutuhan. Tidak perlu khawatir tentang sinkronisasi data antar instance.

3. Recovery yang Cepat

Jika container crash, platform langsung menjalankan container baru tanpa proses recovery yang rumit. Tidak ada data yang perlu di-restore dari container yang gagal.


Bagaimana Menyimpan Data?

Pertanyaan yang sering muncul: "Kalau container tidak menyimpan data, di mana datanya disimpan?"

Jawabannya: gunakan external service.

Database

Gunakan managed database seperti:

  • Supabase — PostgreSQL gratis hingga 500MB
  • PlanetScale — MySQL serverless dengan free tier
  • Neon — PostgreSQL serverless
  • MongoDB Atlas — MongoDB dengan free tier 512MB
// Koneksi ke database external
const { Pool } = require("pg");

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  ssl: { rejectUnauthorized: false },
});

File Storage

Untuk menyimpan file (gambar, dokumen, dll), gunakan:

  • Cloudflare R2 — S3-compatible, gratis 10GB
  • AWS S3 — Object storage yang reliable
  • Supabase Storage — Terintegrasi dengan Supabase

Session & Cache

Untuk session management dan caching:

  • Upstash Redis — Redis serverless dengan free tier
  • JWT Tokens — Stateless authentication tanpa perlu server-side session

Aplikasi yang Cocok untuk Stateless

Cocok:

  • REST API dan GraphQL server
  • Web server (Express, Fastify, Flask, Go)
  • Server-side rendering (Next.js, Nuxt.js)
  • Webhook handler
  • Microservices

Kurang cocok (butuh persistent state):

  • Database server
  • Message queue broker
  • Aplikasi yang menulis ke filesystem lokal
  • Long-running background jobs tanpa external queue

Contoh Migrasi ke Stateless

Misalnya kamu punya aplikasi Express.js yang menyimpan file upload ke folder lokal:

// ❌ SEBELUM: Menyimpan file ke filesystem lokal
app.post("/upload", upload.single("file"), (req, res) => {
  // File disimpan di /uploads — akan hilang saat container restart!
  res.json({ path: `/uploads/${req.file.filename}` });
});

Ubah menjadi menggunakan cloud storage:

// ✅ SESUDAH: Upload ke Cloudflare R2 / S3
app.post("/upload", upload.single("file"), async (req, res) => {
  const key = `uploads/${Date.now()}-${req.file.originalname}`;
  await s3Client.send(
    new PutObjectCommand({
      Bucket: process.env.S3_BUCKET,
      Key: key,
      Body: req.file.buffer,
    })
  );
  res.json({ url: `${process.env.CDN_URL}/${key}` });
});

Kesimpulan

Arsitektur stateless bukan hanya tentang penghematan biaya — ini tentang membangun aplikasi yang lebih reliable, scalable, dan mudah di-maintain. Dengan memisahkan data dari compute, kamu mendapat fleksibilitas penuh untuk scaling tanpa khawatir kehilangan data.


Baca Juga