Apa Itu Load Balancing? Cara Menjaga Website Tetap Stabil saat Traffic Tinggi
Apa Itu Load Balancing?
Load balancing adalah proses mendistribusikan request pengguna ke beberapa server atau application instance.
Tanpa load balancer:
Pengguna
↓
Server A
Semua traffic masuk ke satu server.
Dengan load balancer:
┌─ Server A
Pengguna → Load Balancer ─ Server B
└─ Server C
Load balancer menerima request terlebih dahulu, kemudian memilih server yang akan memprosesnya.
NGINX menjelaskan bahwa load balancing dapat digunakan untuk meningkatkan pemanfaatan resource, throughput, skalabilitas, performa, dan ketahanan aplikasi dengan mendistribusikan request ke beberapa application server.
Mengapa Website Bisa Down saat Traffic Tinggi?
Setiap server memiliki kapasitas tertentu.
Ketika jumlah request terlalu besar, server dapat mengalami:
CPU tinggi.
RAM penuh.
PHP-FPM kehabisan worker.
Database menerima terlalu banyak koneksi.
Response menjadi lambat.
Request mengalami timeout.
Website menghasilkan error 502 atau 503.
Server berhenti merespons.
Menambah spesifikasi server dapat membantu, tetapi terdapat batas seberapa besar satu server dapat ditingkatkan.
Load balancing memungkinkan aplikasi menggunakan beberapa server sekaligus.
Cara Kerja Load Balancer
Misalnya terdapat tiga application server:
App Server 1
App Server 2
App Server 3
Ketika 3.000 request masuk, load balancer mencoba mendistribusikan request tersebut berdasarkan algoritma yang digunakan.
Contohnya:
Request 1 → Server 1
Request 2 → Server 2
Request 3 → Server 3
Request 4 → Server 1
Dengan demikian, seluruh request tidak menumpuk pada satu server.
Load balancer modern juga dapat memeriksa kondisi target dan menghentikan sementara pengiriman traffic ke server yang dianggap tidak sehat. AWS Elastic Load Balancing, misalnya, hanya merutekan traffic ke target sehat dan berhenti mengirim request ke target yang gagal health check.
Jenis Algoritma Load Balancing
1. Round Robin
Round Robin membagikan request secara bergantian.
Contohnya:
Request 1 → Server A
Request 2 → Server B
Request 3 → Server C
Request 4 → Server A
NGINX menggunakan Round Robin secara default ketika metode load balancing lain tidak ditentukan.
Metode ini cocok jika setiap server memiliki kapasitas yang relatif sama.
2. Least Connections
Request berikutnya diberikan kepada server yang memiliki jumlah koneksi aktif paling sedikit.
Contohnya:
Server A = 100 koneksi
Server B = 40 koneksi
Server C = 70 koneksi
Request berikutnya akan diarahkan ke Server B.
Metode ini berguna ketika waktu pemrosesan setiap request berbeda.
3. IP Hash
IP Hash menggunakan alamat IP pengguna untuk menentukan server tujuan.
Dengan metode ini, pengguna yang sama cenderung diarahkan kembali ke server yang sama selama server tersebut tersedia.
Metode ini dapat digunakan ketika aplikasi membutuhkan session persistence.
4. Weighted Load Balancing
Tidak semua server harus menerima jumlah request yang sama.
Misalnya:
Server A = 8 Core
Server B = 8 Core
Server C = 4 Core
Server A dan B dapat diberikan bobot lebih besar dibandingkan Server C.
Pendekatan ini cocok ketika kapasitas setiap server berbeda.
Health Check
Load balancing tidak hanya membagi traffic.
Sistem juga sebaiknya melakukan health check.
Contohnya:
Server A → Healthy
Server B → Healthy
Server C → Down
Ketika Server C tidak merespons:
┌─ Server A
Traffic → LB ───┤
└─ Server B
Server C tidak menerima traffic hingga kembali sehat.
Cloudflare Load Balancing menyediakan active monitoring untuk memeriksa endpoint berdasarkan status code, response, dan timeout serta melakukan failover ketika endpoint tidak sehat.
Load Balancing dan High Availability
Load balancing sering digunakan sebagai bagian dari arsitektur High Availability.
Tujuannya adalah mengurangi ketergantungan terhadap satu server.
Contohnya:
Internet
↓
Load Balancer
↓
┌─────────────┬─────────────┐
Server 1 Server 2 Server 3
↓ ↓ ↓
Database Cluster
Jika satu application server mengalami masalah, server lainnya masih dapat menerima traffic.
Namun, load balancing saja belum membuat seluruh sistem otomatis high availability.
Komponen lain juga perlu diperhatikan, seperti:
Database.
Storage.
Cache.
Queue.
DNS.
Load balancer itu sendiri.
Network.
Backup.
Contoh Load Balancing Menggunakan NGINX
NGINX dapat digunakan sebagai HTTP load balancer.
Contoh konfigurasi sederhana:
upstream aplikasi_backend {
server 10.0.0.11:80;
server 10.0.0.12:80;
server 10.0.0.13:80;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://aplikasi_backend;
}
}
Pada konfigurasi tersebut:
example.com
↓
NGINX
↓
10.0.0.11
10.0.0.12
10.0.0.13
NGINX akan menggunakan Round Robin secara default untuk membagi request ke server dalam upstream tersebut.
Menggunakan Least Connections
Tambahkan:
upstream aplikasi_backend {
least_conn;
server 10.0.0.11:80;
server 10.0.0.12:80;
server 10.0.0.13:80;
}
Sekarang request akan diarahkan ke server dengan koneksi aktif paling sedikit.
Load Balancing untuk Laravel
Arsitektur Laravel dapat dibuat seperti berikut:
User
↓
Cloudflare / Load Balancer
↓
NGINX
↓
┌─────────────────────┐
Laravel App Server 1
Laravel App Server 2
Laravel App Server 3
└─────────────────────┘
↓
Redis
↓
Database
Pada arsitektur multi-server, Laravel perlu dirancang agar application server tidak terlalu bergantung pada data lokal.
Session Laravel Harus Terpusat
Masalah yang sering muncul pada load balancing adalah session.
Misalnya:
Login → Server A
Request berikutnya → Server B
Jika session hanya tersimpan pada file Server A, Server B mungkin menganggap pengguna belum login.
Hindari:
SESSION_DRIVER=file
untuk arsitektur multi-server.
Lebih baik menggunakan penyimpanan bersama seperti:
SESSION_DRIVER=redis
atau database, tergantung kebutuhan aplikasi.
Cache Harus Terpusat
Masalah yang sama berlaku pada cache.
Jika masing-masing server memiliki cache berbeda:
Server A → Cache A
Server B → Cache B
Server C → Cache C
data dapat menjadi tidak konsisten.
Untuk sistem multi-server, cache terpusat seperti Redis sering digunakan:
Server A ─┐
Server B ─┼→ Redis
Server C ─┘
File Upload Jangan Hanya Disimpan Lokal
Misalnya pengguna mengupload:
foto.jpg
dan file tersebut tersimpan hanya di Server A.
Ketika request berikutnya diarahkan ke Server B, file mungkin tidak ditemukan.
Gunakan shared storage seperti:
Object storage.
Amazon S3.
Compatible S3 storage.
Network File System.
Dedicated file storage.
Prinsipnya, file harus dapat diakses semua application server.
Queue Worker Dapat Dipisahkan
Pada aplikasi dengan traffic besar, proses berat sebaiknya tidak dikerjakan langsung melalui web request.
Contohnya:
Generate laporan
Kirim email
Kirim WhatsApp
Generate PDF
Import data
Proses gambar
Gunakan queue:
Web Server
↓
Queue
↓
Worker Server
Dengan demikian, application server dapat lebih fokus menangani request pengguna.
Database Bisa Menjadi Bottleneck
Menambahkan banyak application server tidak akan membantu apabila seluruh server tetap membebani satu database yang sudah penuh.
Contohnya:
10 App Server
↓
1 Database
↓
CPU Database 100%
Website tetap dapat lambat.
Karena itu, pantau:
Slow query.
Index.
Jumlah connection.
CPU database.
RAM.
Disk I/O.
Query per second.
Cache.
Load balancing harus menjadi bagian dari optimasi arsitektur secara keseluruhan.
Horizontal Scaling vs Vertical Scaling
Vertical Scaling
Meningkatkan spesifikasi satu server.
Contohnya:
4 CPU → 8 CPU
8 GB RAM → 32 GB RAM
Cara ini sederhana, tetapi terdapat batas hardware dan biaya.
Horizontal Scaling
Menambahkan jumlah server.
Contohnya:
1 Server
↓
3 Server
↓
10 Server
Load balancing digunakan untuk membagi traffic ke server-server tersebut.
Arsitektur dengan horizontal scaling lebih fleksibel ketika jumlah pengguna terus bertambah.
Cloud Load Balancer
Selain menggunakan NGINX sendiri, bisnis dapat menggunakan managed load balancer dari cloud provider.
Contohnya:
AWS Elastic Load Balancing.
Google Cloud Load Balancing.
Azure Load Balancer.
Cloudflare Load Balancing.
Load balancer dari penyedia VPS.
Managed load balancer biasanya menyediakan kombinasi health check, failover, routing, dan integrasi infrastruktur yang lebih mudah dikelola. Cloudflare, misalnya, dapat mendistribusikan traffic berdasarkan kesehatan endpoint, latency, dan wilayah.
Kapan Website Membutuhkan Load Balancing?
Tidak semua website langsung membutuhkan tiga atau lima server.
Load balancing mulai layak dipertimbangkan ketika:
Traffic meningkat signifikan.
CPU server sering tinggi.
RAM sering penuh.
Website sering timeout.
Downtime tidak dapat ditoleransi.
Aplikasi digunakan banyak cabang.
Jumlah transaksi meningkat.
Terdapat banyak request API.
Bisnis membutuhkan high availability.
Satu server sudah mendekati kapasitas maksimal.
Untuk website company profile dengan traffic rendah, satu server yang dikonfigurasi dengan baik biasanya masih mencukupi.
Load Balancing Tidak Menggantikan Optimasi
Kesalahan yang sering dilakukan adalah menambahkan server tanpa memperbaiki aplikasi.
Sebelum melakukan scaling, periksa:
Query database.
Database index.
Cache.
PHP-FPM.
NGINX.
Queue.
File gambar.
API eksternal.
Source code.
Monitoring.
Aplikasi yang tidak efisien tetap dapat menghabiskan resource meskipun server ditambah.
Monitoring Tetap Diperlukan
Setelah load balancing diterapkan, monitor:
CPU setiap server.
RAM.
Response time.
Error rate.
Request per second.
Database connection.
Slow query.
Queue.
Health check.
Disk usage.
Tujuannya adalah mengetahui kapan kapasitas harus ditambah atau masalah aplikasi perlu diperbaiki.
Contoh Arsitektur Website Traffic Tinggi
Arsitektur sederhana dapat dibuat seperti berikut:
Internet
↓
Cloudflare
↓
Load Balancer
↓
┌─────────────────────┐
App Server 1
App Server 2
App Server 3
└─────────────────────┘
↓
Redis
↓
Database
↓
Object Storage
Kemudian tambahkan:
Queue Worker
Monitoring
Backup
Logging
sesuai kebutuhan aplikasi.
Kesalahan yang Perlu Dihindari
Menggunakan Session File
Session lokal dapat menyebabkan pengguna logout ketika request berpindah server.
Menyimpan Upload di Server Lokal
File harus dapat diakses seluruh application server.
Tidak Menggunakan Health Check
Load balancer dapat terus mengirim traffic ke server bermasalah.
Database Tidak Dioptimalkan
Database dapat menjadi bottleneck baru setelah application server ditambah.
Tidak Memiliki Monitoring
Tanpa monitoring, sulit mengetahui server mana yang mengalami masalah.
Menganggap Load Balancing Sama dengan Backup
Load balancing meningkatkan ketersediaan layanan, tetapi bukan pengganti backup data.
Load Balancing Bersama Ovla Media
Ovla Media dapat membantu bisnis membangun dan mengoptimalkan infrastruktur aplikasi melalui:
Setup NGINX Load Balancer.
Optimasi Laravel.
Konfigurasi Redis.
Optimasi database.
Setup Laravel Queue.
Monitoring server.
Implementasi Laravel Pulse.
Migrasi shared hosting ke VPS.
Arsitektur multi-server.
Pengembangan aplikasi bisnis custom.
Arsitektur dapat disesuaikan dengan jumlah pengguna, traffic, jumlah cabang, kebutuhan uptime, serta anggaran bisnis.
Kesimpulan
Load balancing adalah metode membagi traffic ke beberapa server agar satu server tidak menerima seluruh beban aplikasi.
Alur sederhananya:
Pengguna
↓
Load Balancer
↓
Server 1
Server 2
Server 3
Beberapa metode load balancing yang umum digunakan adalah:
Round Robin.
Least Connections.
IP Hash.
Weighted Load Balancing.
Untuk aplikasi Laravel multi-server, pastikan session, cache, storage, database, dan queue juga dirancang dengan tepat.
Load balancing bukan hanya solusi untuk traffic tinggi. Teknologi ini juga membantu meningkatkan skalabilitas, ketersediaan, dan ketahanan aplikasi ketika salah satu server mengalami gangguan.
Artikel Terkait
Apa Itu Progressive Web App? Kelebihan dan Kekurangannya untuk Bisnis
Progressive Web App atau PWA adalah aplikasi berbasis teknologi web yang dapat memberikan pengalaman menyerupai aplikasi mobile. PWA dapat dibuka melalui browser, dipasang pada perangkat, dan dikembangkan menggunakan satu basis kode. Namun, dukungan fitur dapat berbeda pada setiap browser dan sistem operasi.
Single Page Application vs Multi Page Application: Apa Perbedaannya?
Single Page Application atau SPA memperbarui isi halaman menggunakan JavaScript tanpa memuat ulang seluruh dokumen. Sementara itu, Multi Page Application atau MPA memuat halaman baru dari server setiap kali pengguna berpindah menu. Keduanya memiliki kelebihan masing-masing dan perlu dipilih berdasarkan fungsi, SEO, anggaran, serta kebutuhan pengguna.
Headless CMS vs Traditional CMS: Mana yang Lebih Cocok untuk Website?
Traditional CMS menggabungkan pengelolaan konten dan tampilan website dalam satu sistem, sedangkan Headless CMS memisahkan keduanya dan mengirimkan konten melalui API. Traditional CMS lebih praktis untuk website sederhana, sementara Headless CMS lebih fleksibel untuk website, aplikasi mobile, dan berbagai saluran digital.