Elasticity vs Scalability #

Elasticity dan scalability adalah dua istilah yang sering digunakan bergantian, padahal keduanya merujuk pada konsep yang berbeda. Menggunakannya secara salah bukan hanya masalah semantik — ia bisa mengarahkan keputusan arsitektur ke arah yang keliru. Memahami perbedaannya dengan tepat membantu kamu merancang sistem yang efisien secara biaya sekaligus mampu menangani beban yang berubah-ubah.

Definisi Masing-Masing #

Mari mulai dengan definisi yang presisi sebelum membandingkan keduanya.

Scalability adalah kemampuan sistem untuk menangani peningkatan beban kerja dengan menambahkan sumber daya. Ini adalah sifat kapasitas — sistem yang scalable bisa ditingkatkan kapasitasnya untuk mengakomodasi pertumbuhan.

Elasticity adalah kemampuan sistem untuk secara otomatis menyesuaikan sumber daya yang dialokasikan sesuai dengan beban aktual saat itu — naik ketika beban tinggi, turun ketika beban rendah. Ini adalah sifat adaptasi otomatis terhadap permintaan yang berubah-ubah.

Analogi Sederhana:

  Scalability = Kapasitas jalan tol
      Jalan tol 2 jalur bisa "di-scale" menjadi 4 jalur
      dengan menambah jalur baru (butuh perencanaan dan waktu)

  Elasticity = Sistem buka-tutup jalur darurat
      Jalur darurat dibuka saat macet pagi hari,
      ditutup saat lalu lintas sepi
      → Otomatis, responsif terhadap kondisi real-time

Scalability — Tumbuh Seiring Kebutuhan #

Scalability bicara tentang kemampuan sistem untuk tumbuh. Ada dua bentuk utama: vertical dan horizontal.

Vertical Scaling (Scale Up) #

Menambah kapasitas dengan meningkatkan spesifikasi satu node — lebih banyak CPU, RAM, atau storage pada server yang sudah ada.

Sebelum Scale Up:
  Server: 4 vCPU, 8 GB RAM
  Beban mulai melebihi kapasitas

Setelah Scale Up:
  Server: 16 vCPU, 64 GB RAM
  
  Keuntungan:
  ✓ Sederhana — tidak ada perubahan arsitektur
  ✓ Cocok untuk aplikasi yang sulit didistribusikan (legacy DB)

  Keterbatasan:
  ✗ Ada batas maksimum hardware
  ✗ Downtime sering dibutuhkan untuk resize
  ✗ Single point of failure tetap ada
  ✗ Biaya tidak linear — server besar sangat mahal

Horizontal Scaling (Scale Out) #

Menambah kapasitas dengan menambah lebih banyak node yang bekerja bersama.

Sebelum Scale Out:
  [Server A] ← semua trafik

Setelah Scale Out:
  [Load Balancer]
      ├── [Server A]
      ├── [Server B]
      └── [Server C]

  Keuntungan:
  ✓ Tidak ada batas teoritis — tambah node sesuai kebutuhan
  ✓ Tidak ada single point of failure
  ✓ Biaya lebih linear
  ✓ Cocok untuk cloud-native architecture

  Keterbatasan:
  ✗ Aplikasi harus dirancang untuk distributed (stateless)
  ✗ Lebih kompleks untuk dikelola

Elasticity — Adaptasi Otomatis #

Elasticity adalah lapisan di atas scalability. Sistem yang elastic bisa scale out dan scale in secara otomatis berdasarkan kondisi real-time. Kata kunci di sini adalah: otomatis dan dua arah.

Pola Beban Kerja yang Tidak Elastis vs Elastis:

  Tanpa Elasticity (kapasitas tetap):
  
  Kapasitas: ████████████████████ (tetap di level puncak)
  Beban:     ██░░░░████░░░░██████ (berubah-ubah)
  
  Saat beban rendah → banyak resource terbuang (bayar tapi tidak dipakai)
  Saat beban puncak → masih aman karena selalu over-provisioned
  Biaya: tinggi dan konstan

  Dengan Elasticity (kapasitas mengikuti beban):
  
  Kapasitas: ██░░░░████░░░░██████ (mengikuti beban)
  Beban:     ██░░░░████░░░░██████
  
  Resource selalu sesuai dengan kebutuhan aktual
  Biaya: proporsional dengan beban aktual

Elasticity adalah yang membuat model pay-as-you-go cloud benar-benar efisien. Tanpa elasticity, kamu tetap membayar untuk kapasitas yang tidak digunakan.


Hubungan Antara Keduanya #

Elasticity membutuhkan scalability sebagai fondasi — sistem tidak bisa elastic jika tidak bisa di-scale. Tapi tidak semua sistem yang scalable itu elastic.

Matriks Scalability vs Elasticity:

  Scalable + Elastic:
    → Cloud-native application dengan auto-scaling
    → Ideal untuk beban yang fluktuatif
    → Contoh: web app e-commerce yang scale saat flash sale

  Scalable, Tidak Elastic:
    → Sistem yang bisa ditambah kapasitasnya tapi secara manual
    → Cocok untuk pertumbuhan yang predictable dan lambat
    → Contoh: database yang di-scale up saat data tumbuh

  Tidak Scalable, Tidak Elastic:
    → Sistem monolitik dengan resource tetap
    → Masalah ketika beban melampaui kapasitas
    → Umumnya: legacy application on-premise

Implikasi untuk Desain Sistem #

Untuk sistem bisa elastic, ada prasyarat arsitektur yang harus dipenuhi.

Prasyarat Sistem yang Elastic:

  1. Stateless application
     ✓ Tidak ada session state yang disimpan di memori server
     ✓ State disimpan di external store (Redis, database)
     → Jika stateful: instance baru tidak bisa langsung melayani
       request yang sedang berjalan

  2. Fast startup time
     ✓ Instance baru harus bisa melayani trafik dalam hitungan
       detik, bukan menit
     → Jika startup lambat: auto-scaling tidak bisa merespons
       lonjakan trafik dengan cepat

  3. Health check yang akurat
     ✓ Load balancer perlu tahu instance mana yang siap
     → Jika health check salah: trafik dikirim ke instance
       yang belum siap

  4. Graceful shutdown
     ✓ Instance yang dihapus harus bisa menyelesaikan request
       yang sedang ditangani sebelum mati
     → Jika tidak: request putus di tengah jalan saat scale in
Container dan arsitektur microservices sangat populer di cloud bukan tanpa alasan — keduanya secara natural mendorong pola stateless, startup yang cepat, dan deployment yang ringan. Ini semua adalah prasyarat untuk elasticity yang efektif.

Implikasi Biaya #

Pemahaman tentang elasticity langsung berdampak pada efisiensi biaya.

Skenario: Aplikasi web dengan pola trafik harian

  Trafik tinggi:  07:00–22:00 (15 jam) → butuh 10 instance
  Trafik rendah:  22:00–07:00 (9 jam)  → butuh 2 instance

  Tanpa Elasticity (selalu 10 instance):
    10 instance × 24 jam = 240 instance-jam/hari

  Dengan Elasticity:
    (10 × 15) + (2 × 9) = 150 + 18 = 168 instance-jam/hari

  Penghematan: 72 instance-jam/hari = ~30% lebih hemat
  Dan ini hanya untuk satu hari — berlipat ganda setiap bulan

Ringkasan #

  • Scalability = kemampuan untuk tumbuh — sistem bisa ditingkatkan kapasitasnya (scale up atau scale out) untuk mengakomodasi beban yang lebih besar.
  • Elasticity = adaptasi otomatis dua arah — kapasitas naik saat beban tinggi, turun saat beban rendah, secara otomatis tanpa intervensi manual.
  • Elasticity membutuhkan scalability sebagai fondasi — tapi tidak semua sistem scalable itu elastic.
  • Horizontal scaling adalah fondasi elasticity di cloud — vertical scaling memiliki batas dan tidak bisa di-automate seefektif horizontal scaling.
  • Stateless architecture adalah prasyarat elasticity — aplikasi yang menyimpan state di memori server tidak bisa di-scale out dengan mudah.
  • Elasticity adalah yang membuat pay-as-you-go benar-benar efisien — tanpa elasticity, kamu tetap membayar kapasitas puncak sepanjang waktu.

← Sebelumnya: Shared Responsibility   Berikutnya: Global Infrastructure →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact