Scalability

Scalability #

Dalam sistem backend modern, database hampir selalu menjadi bottleneck utama ketika traffic dan volume data mulai meningkat. Banyak aplikasi terlihat baik-baik saja di awal, namun mulai melambat, timeout, atau bahkan down ketika user bertambah, data membesar, dan query semakin kompleks.

Di sinilah konsep scalability menjadi krusial. Artikel ini membahas secara mendalam:

  • Apa itu scalability
  • Mengapa scalability di level database sangat penting
  • Perbedaan vertical scalability dan horizontal scalability
  • Implementasi nyata scalability di database
  • Best practice yang sering diabaikan namun berdampak besar

Artikel ini ditulis dengan sudut pandang praktis: apa yang benar-benar terjadi di lapangan dan kesalahan umum yang sering menyebabkan database tidak scalable.

Apa Itu Scalability? #

Scalability adalah kemampuan sistem untuk menangani peningkatan beban (load) tanpa mengalami degradasi performa yang signifikan.

Di level database, beban ini biasanya berupa:

  • Jumlah query per detik (QPS)
  • Volume data yang terus bertambah
  • Query yang semakin kompleks
  • Concurrent connection yang meningkat

Database yang scalable mampu:

  • Tetap cepat saat data tumbuh dari ribuan ke miliaran row
  • Tetap stabil saat user meningkat drastis
  • Tidak memerlukan rewrite besar setiap kali skala naik

Scalability berbeda dengan performance:

  • Performance → seberapa cepat sistem saat ini
  • Scalability → seberapa baik sistem saat beban meningkat

Database bisa cepat hari ini, tapi tidak scalable untuk besok.


Mengapa Scalability di Level Database Sangat Penting? #

Beberapa alasan utama:

Database adalah Shared Resource #

Semua service bergantung pada database:

  • API
  • Worker
  • Cron
  • Admin panel

Satu query lambat dapat mempengaruhi seluruh sistem.

Scaling Database Lebih Sulit dari Scaling Service #

Scaling backend stateless service relatif mudah. Scaling database:

  • Mahal
  • Kompleks
  • Penuh trade-off (consistency, latency, operational cost)

Kesalahan Desain Awal Sulit Diperbaiki #

Contoh kesalahan fatal:

  • Tidak memikirkan index sejak awal
  • Query bergantung pada COUNT(*) besar
  • Tabel tumbuh tanpa strategi partition

Semua ini membuat scalability menjadi utang teknis besar.


Dua Pendekatan Utama Scalability Database #

Secara umum, ada dua pendekatan:

  1. Vertical Scalability (Scale Up)
  2. Horizontal Scalability (Scale Out)

Keduanya bukan saling menggantikan, tapi sering dikombinasikan.


Vertical Scalability (Scaling Up) #

Apa Itu Vertical Scalability? #

Vertical scalability adalah meningkatkan kapasitas satu node database dengan cara:

  • Menambah CPU
  • Menambah RAM
  • Menggunakan storage lebih cepat (NVMe, SSD)

Contoh:

  • Dari 4 CPU → 16 CPU
  • Dari 16 GB RAM → 64 GB RAM

Kelebihan Vertical Scalability #

  • Implementasi paling mudah
  • Tidak perlu perubahan besar di aplikasi
  • Cocok untuk sistem kecil–menengah

Kekurangan Vertical Scalability #

  • Ada batas maksimum hardware
  • Semakin mahal secara eksponensial
  • Single point of failure
  • Tidak menyelesaikan masalah arsitektural

Vertical scaling sering hanya menunda masalah, bukan menyelesaikannya.

Kapan Vertical Scaling Masuk Akal? #

  • MVP atau early-stage product
  • Traffic masih relatif rendah
  • Bottleneck jelas di resource (CPU/RAM)
  • Belum siap kompleksitas distributed system

Namun, jangan mengandalkan vertical scaling sebagai strategi jangka panjang.


Horizontal Scalability (Scaling Out) #

Apa Itu Horizontal Scalability? #

Horizontal scalability adalah meningkatkan kapasitas database dengan:

  • Menambah node
  • Membagi beban data atau query
  • Mendukung distributed workload

Pendekatan ini jauh lebih kompleks, tapi lebih sustainable.


Bentuk Implementasi Horizontal Scalability #

Read Replica (Read Scaling) #

  • Satu primary (write)
  • Banyak replica (read)

Digunakan untuk:

  • Dashboard
  • Report
  • Admin panel
  • Query berat non-transaksional

Catatan penting:

  • Replica bersifat eventually consistent
  • Jangan gunakan untuk data yang butuh real-time consistency

Database Sharding #

Data dibagi ke beberapa database berdasarkan shard key:

  • user_id
  • region
  • tenant_id

Contoh:

  • user_id % 4 → shard 0–3

Kelebihan:

  • Skala data dan write
  • Mengurangi ukuran tabel per shard

Kekurangan:

  • Query lintas shard kompleks
  • Transaction lintas shard sulit
  • Operational complexity tinggi

Partitioning (Table-Level Scalability) #

Partitioning membagi tabel besar menjadi beberapa bagian:

  • By range (tanggal)
  • By hash
  • By list

Manfaat:

  • Query lebih cepat
  • Index lebih kecil
  • Maintenance lebih mudah

Partitioning bukan sharding, tapi sering jadi langkah awal sebelum sharding.

CQRS (Command Query Responsibility Segregation) #

Pisahkan:

  • Database untuk write
  • Database untuk read

Biasanya dikombinasikan dengan:

  • Event-driven architecture
  • Async replication

Cocok untuk sistem dengan read-heavy workload.


Best Practice Scalability di Level Database #

Desain Query untuk Skala, Bukan untuk Mudah #

  • Hindari SELECT *
  • Hindari COUNT(*) besar di runtime
  • Batasi pagination berbasis offset besar

Query yang nyaman ≠ query yang scalable.

Indexing dengan Strategi, Bukan Insting #

  • Index mengikuti access pattern
  • Jangan over-index
  • Audit index secara berkala

Index yang salah bisa memperlambat write dan replication.

Kurangi Beban Database Sejak Awal #

  • Cache hasil query (Redis)
  • Gunakan async processing
  • Hindari query di loop (N+1)

Database seharusnya opsi terakhir, bukan default.

Pisahkan Beban OLTP dan OLAP #

  • OLTP → transaksi harian
  • OLAP → reporting, analytics

Jangan jalankan query report berat di database transaksi.

Observability adalah Kunci #

Tanpa visibility, scalability hanya tebakan:

  • Slow query log
  • Query latency
  • Connection usage
  • Lock dan wait time

Scalability tanpa observability = blind scaling.

Scale Bertahap, Jangan Over-Engineer #

  • Mulai dari vertical
  • Optimasi query
  • Tambahkan replica
  • Baru pertimbangkan sharding

Over-engineering sejak awal sering lebih berbahaya daripada under-scaling.


Kesalahan Umum dalam Scalability Database #

  • Mengandalkan hardware untuk menutupi query buruk
  • Menganggap ORM otomatis scalable
  • Menjalankan analytic query di production DB
  • Tidak memikirkan growth data

Scalability gagal bukan karena database-nya, tapi karena desain dan kebiasaan developer.


Penutup #

Scalability di level database adalah kombinasi antara:

  • Arsitektur
  • Disiplin query
  • Pemahaman workload
  • Trade-off yang disadari

Tidak ada solusi tunggal yang sempurna. Yang ada adalah keputusan teknis yang tepat untuk konteks yang tepat.

Database yang scalable bukan yang paling canggih, tapi yang dirancang dengan kesadaran akan masa depan.

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