☀️Siang
Software Engineering

System Design untuk Developer: Panduan Lengkap

Scalability, load balancing, database design, caching strategies, message queue, microservices, dan pattern arsitektur distributed system

Artikel: Skill System Design Artikel: Skill System Design

1. Pengenalan System Design

System Design adalah proses mendefinisikan arsitektur, komponen, module, interface, dan data flow dari suatu sistem untuk memenuhi kebutuhan spesifik. Ini adalah skill krusial yang membedakan developer junior dari senior.

Bayangkan kamu diminta mendesain sistem seperti Twitter, Uber, atau Netflix. Tidak cukup hanya bisa coding — kamu harus memahami bagaimana sistem menangani jutaan pengguna, terabyte data, dan latency rendah.

Mengapa System Design Penting?

Alasan Penjelasan
Interview Teknis80% interview senior/staff di FAANG menguji system design
Karir Level SeniorNaik ke senior/staff membutuhkan kemampuan desain sistem
Produk Skala BesarSistem yang tidak scalable akan gagal saat user bertambah
Kolaborasi TimMemahami keseluruhan sistem membantu komunikasi antar tim
Decision MakingMembuat keputusan teknis yang tepat untuk trade-off
Diagram: High-Level System Architecture

Client (Browser)

CDN (Static)

Load Balancer (Nginx/ALB)

App Server 1 (Node.js)

App Server 2 (Node.js)

App Server 3 (Node.js)

Cache (Redis Cluster)

Database (Primary + Replica)

Message Queue (RabbitMQ/Kafka)

💡 Framework System Design Interview

Saat menghadapi system design problem, gunakan framework ini: 1) Requirements (functional & non-functional), 2) Estimation (users, data, bandwidth), 3) High-level Design, 4) Detailed Design, 5) Trade-offs & Bottlenecks.

2. Scalability

Scalability adalah kemampuan sistem untuk menangani peningkatan beban tanpa menurunkan performa. Ada dua jenis scaling:

Vertical Scaling vs Horizontal Scaling

Aspek Vertical (Scale Up) Horizontal (Scale Out)
CaraTambah resource ke 1 server (RAM, CPU)Tambah server baru
BatasHardware limitHampir tidak terbatas
Kompleksitas🟢 Rendah🟡 Tinggi (perlu load balancer, distributed state)
CostNaik eksponensialLinear scaling
Single Point of Failure⚠️ Ya✅ Tidak (redundancy)
Cocok untukStartup kecil, database awalProduksi skala besar, high availability

Contoh: Scalability Calculation

Diagram

Clients

Load Balancer (L4/L7) Round Robin / Least Conn ...

Server 1 (App)

Server 2 (App)

Server 3 (App)

Database (Primary + Replicas)

4. Database Design & Scaling

Database sering menjadi bottleneck pertama saat sistem mulai scale. Memahami strategi scaling database sangat penting.

Database Scaling Strategies

1. Read Replicas

Diagram

Consistency

CP (Consistency + Partition): MongoDB, HBase

Data konsisten tapi bisa reject request saat pa...

AP (Availability + Partition): Cassandra, DynamoDB

Selalu available tapi data bisa inconsistency s...

CA (Consistency + Availability): PostgreSQL (si...

Konsisten dan available, tapi tidak partition-t...

5. Caching Strategies

Caching adalah teknik menyimpan data yang sering diakses di tempat yang lebih cepat diakses. Ini salah satu optimasi paling powerful untuk mengurangi latency dan beban database.

Caching Levels

Level Teknologi Latency Use Case
Browser CacheHTTP headers (Cache-Control)~0msStatic assets, API responses
CDN CacheCloudflare, CloudFront~5msStatic files, global distribution
Application CacheIn-memory (HashMap)~0.1msConfig, computed values
Distributed CacheRedis, Memcached~1msSession, user data, API results
Database CacheQuery cache, buffer pool~5msFrequent queries

Caching Patterns

Diagram

API GATEWAY — Authentication, Rate Limiting, Ro...

User Service - Register - Auth - Profile

Product Service - Search - CRUD - Stock

Order Service - Create - Status - History

Payment Service - Process - Refund - Invoice

User DB (Postgres)

Product DB (Postgres)

Order DB (Postgres)

Payment DB (Postgres)

Communication: Sync: REST/gRPC antar service As...

⚠️ Jangan Mulai dari Microservices

Banyak startup membuat kesalahan dengan langsung pakai microservices padahal belum perlu. Mulai dari modular monolith — pisahkan kode ke module yang jelas, dan baru pecah jadi microservices ketika benar-benar butuh (tim besar, service perlu scaling independen, tech stack berbeda).

8. Design Patterns untuk Distributed System

1. Circuit Breaker Pattern

Diagram

Load Balancer (Nginx/ALB)

API Server (Node.js / Go)

Cache (Redis)

URL DB (Postgres/DynamoDB)

Analytics (Kafka → Clickhouse)

Read Flow (99.9% traffic) 1. User buka short UR...

Write Flow (0.1% traffic) 1. User submit long U...

Short URL Generation Base62 encode dari auto-in...

CREATE TABLE urls (id, short_code, long_url, us...

10. Quiz Pemahaman

Uji pemahaman kamu tentang system design:

Pertanyaan 1: Apa keuntungan utama horizontal scaling?

a) Lebih murah dari vertical scaling
b) Skala hampir tanpa batas dengan redundancy
c) Tidak perlu load balancer
d) Database tidak perlu sharding

Pertanyaan 2: Apa itu CAP Theorem?

a) Sistem harus memilih 2 dari 3: Consistency, Availability, Partition Tolerance
b) Semua sistem harus konsisten
c) Pola caching untuk database
d) Algoritma load balancing

Pertanyaan 3: Kapan menggunakan message queue?

a) Untuk semua komunikasi antar service
b) Ketika operasi tidak perlu selesai secara synchronous
c) Hanya untuk mengirim email
d) Saat database down

Pertanyaan 4: Apa fungsi Circuit Breaker?

a) Mengenkripsi koneksi antar service
b) Mencegah cascade failure dengan memblokir request ke service yang gagal
c) Mendistribusikan traffic ke beberapa server
d) Menyimpan data sementara

Pertanyaan 5: Apa yang dimaksud dengan cache-aside pattern?

a) Cache selalu update duluan sebelum database
b) Aplikasi check cache dulu, kalau miss baru query database lalu simpan ke cache
c) Cache dihapus setiap kali database update
d) Database mengirim data ke cache secara otomatis
 ad-slot-wide">
🔍 Zoom
100%
🎨 Tema