Lewati ke konten utama
menjadi.dev
Chapter 27.1 System Design Spesialisasi

Fundamental System Design: Scale dari 1 ke 1 Juta User

Prinsip-prinsip dasar mendesain sistem web yang scalable

Tujuan Pembelajaran

  • Mengerti komponen dasar arsitektur web scalable
  • Bisa mengidentifikasi bottleneck dalam sistem
  • Mengerti trade-off antara consistency, availability, dan partition tolerance

Analogi

Diagram

      Scale Evolution:
1 User -> Single Server (monolith)
100 Users -> Load Balancer + 2 App Servers
1,000 Users -> Database separate + Caching
10,000 Users -> CDN + Read Replicas
100,000 Users -> Microservices + Message Queue
1,000,000 Users -> Multi-region + Sharding
    

Scaling adalah proses evolusi — setiap level punya challenge dan solusi berbeda

Penjelasan Konsep

System design adalah kemampuan untuk merancang sistem software yang bisa menangani growth — dari ratusan user sampai jutaan user. Ini adalah skill yang sangat dicari di level senior engineer ke atas.

Single Server (1-100 users)

Semua komponen (web server, app logic, database) berjalan di satu mesin. Simple tapi tidak scalable.

Load Balancer (100-1,000 users)

Traffic didistribusikan ke beberapa app server. Horizontal scaling.

Session management jadi challenge — solusi: sticky session atau shared session store (Redis).

Database Separation (1,000-10,000 users)

Database dipisah dari app server. Masing-masing bisa di-scale independently. Read replicas untuk offload read queries.

Caching Layer (10,000-100,000 users)

Redis/Memcached untuk cache frequently accessed data. CDN untuk static assets.

Database query optimization.

Microservices (100,000-1,000,000 users)

Monolith dipecah ke services kecil.

Independent deploy, independent scale.

Tapi tambah complexity: service discovery, inter-service communication, distributed tracing.

CAP Theorem

Dalam distributed system,

Kamu hanya bisa pilih 2 dari 3 — Consistency (semua node lihat data sama), Availability (selalu respond), Partition Tolerance (tetap berfungsi meski network failure).

Inti yang Perlu Dipahami

Bagian ini berfokus pada mengerti komponen dasar arsitektur web scalable., bisa mengidentifikasi bottleneck dalam sistem., dan mengerti trade-off antara consistency, availability, dan partition tolerance. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Fundamental System Design, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Scaling adalah proses evolusi — setiap level punya challenge dan solusi berbeda. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa typescript. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. Round-robin adalah algoritma load balancing paling simple — distribusi sequential ke setiap server. Health check penting untuk mendeteksi server yang down dan menghindari mengirim traffic ke server mati.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

typescript
// Simple load balancer simulation dengan Hono
import { Hono } from 'hono';

const app = new Hono();

// Round-robin load balancer
const servers = ['http://server1:3000', 'http://server2:3000', 'http://server3:3000'];
let currentIndex = 0;

app.all('*', async (c) => {
  const target = servers[currentIndex];
  currentIndex = (currentIndex + 1) % servers.length;
  
  // Forward request ke target server
  const response = await fetch(target + c.req.path, {
    method: c.req.method,
    headers: c.req.header(),
    body: c.req.raw.body,
  });
  
  return response;
});

// Health check
setInterval(async () => {
  for (const server of servers) {
    try {
      await fetch(server + '/health', { signal: AbortSignal.timeout(5000) });
      console.log(`✅ ${server} healthy`);
    } catch {
      console.log(`❌ ${server} unhealthy — removing from pool`);
      // Remove unhealthy server and alert
    }
  }
}, 30000);

Penjelasan Kode

Round-robin adalah algoritma load balancing paling simple — distribusi sequential ke setiap server. Health check penting untuk mendeteksi server yang down dan menghindari mengirim traffic ke server mati.

Prompt AI

Desain arsitektur untuk aplikasi e-commerce yang mulai dari 1.000 user dan target 100.000 user dalam 6 bulan. Identifikasi bottleneck di setiap bagian growth.

Pertanyaan Reflektif

Tidak ada arsitektur yang sempurna — hanya arsitektur yang tepat untuk requirement dan constraint saat ini. Avoid premature optimization, tapi design for scale.