Mengenal Load Balancing: Cara Satu Website Berjalan di Banyak Server

Ketika satu server sudah kewalahan, kamu tambah server lain — dan load balancer-lah yang menentukan siapa menjawab tiap permintaan. Pelajari apa itu load balancing, cara kerjanya, algoritma yang umum, sticky session, health check, dan kenapa ini jadi tulang punggung situs yang harus tetap hidup.

Diterbitkan 1 Oktober 202612 menit bacaOleh ACY Partner Indonesia
Load balancing — satu pintu masuk membagi permintaan ke beberapa server backend
300 × 250Slot Iklan TersediaPasang iklan Anda di sini

Hampir setiap proyek yang sukses akhirnya sampai di titik ketika satu server saja sudah tidak cukup. Trafik membesar, permintaan menumpuk, dan mesin yang tadinya menjawab seketika mulai melambat. Solusinya jelas: tambah server. Tapi langkah itu langsung memunculkan pertanyaan yang biasanya tidak terpikir sampai benar-benar kejadian — saat sepuluh ribu orang mengetik alamatmu, server yang mana sebenarnya yang menjawab masing-masing dari mereka?

Di situlah tugas load balancer. Dia berdiri di depan deretan server-mu, menerima setiap permintaan yang masuk, lalu menentukan ke mana permintaan itu dikirim. Kalau dilakukan dengan benar, pengunjungmu tidak pernah sadar bahwa di belakang sana ada lebih dari satu mesin — yang mereka rasakan cuma situs yang cepat dan andal. Yuk kita bedah cara kerjanya, kenapa ini penting, dan kompromi-kompromi yang bakal kamu temui di sepanjang jalan.

Load balancing itu sebenarnya apa

Load balancing adalah praktik membagi pekerjaan yang masuk ke beberapa server sekaligus, supaya tidak ada satu pun yang kewalahan sendirian. Perangkat lunak (atau perangkat keras) yang melakukan pembagian itu disebut load balancer.

Bayangkan sebuah bank yang ramai dengan satu kasir saja dan antrean mengular sampai ke pintu. Menyiksa. Sekarang bayangkan bank yang sama dengan lima kasir, ditambah satu orang di pintu masuk yang mengarahkan tiap nasabah ke kasir mana pun yang sedang kosong. Antrean bergerak lima kali lebih cepat, dan kalau satu kasir izin istirahat, empat yang lain tetap melayani. Orang di pintu itulah load balancer-mu. Para kasir itulah server-mu.

Dalam istilah web, load balancer adalah wajah publik situsmu — satu alamat yang dihubungi oleh dunia luar. Di belakangnya berdiri beberapa server backend yang identik (sering disebut “pool” atau “farm”), masing-masing menjalankan salinan aplikasimu. Seluruh tugas load balancer adalah menjawab pertanyaan “siapa yang menangani yang satu ini?” ribuan kali per detik.

                         ┌────────────────┐
       permintaan ─────► │  LOAD BALANCER │
                         └───────┬────────┘
              ┌──────────────────┼──────────────────┐
              ▼                  ▼                  ▼
        ┌───────────┐      ┌───────────┐      ┌───────────┐
        │ Server A  │      │ Server B  │      │ Server C  │
        │ (salinan  │      │ (salinan  │      │ (salinan  │
        │  aplikasi)│      │  aplikasi)│      │  aplikasi)│
        └───────────┘      └───────────┘      └───────────┘

Pengunjung terhubung ke satu alamat. Load balancer diam-diam menyebar permintaan itu ke backend mana pun yang paling pas saat ini. Jawabannya kembali lewat jalur yang sama. Bagi browser, seolah-olah dia hanya berbicara dengan satu server tunggal yang sangat cepat.

Load balancer vs reverse proxy

Dua istilah ini sering disebut bersamaan, dan keduanya memang beririsan. Reverse proxy adalah server mana pun yang menerima permintaan atas nama satu atau beberapa backend lalu meneruskannya. Load balancer adalah reverse proxy yang tugas khususnya membagi trafik ke beberapa backend memakai strategi tertentu. Singkatnya: setiap load balancer itu reverse proxy, tapi tidak setiap reverse proxy sedang membagi beban. Banyak tool di dunia nyata yang menjalankan dua peran ini sekaligus.

Kenapa satu server tidak cukup

Kalau satu mesin bisa menangani segalanya selamanya, semua ini tidak akan ada. Tapi server punya batas yang keras, dan kamu menabraknya lewat dua jalan.

Yang pertama adalah kapasitas. Setiap server punya langit-langit — seberapa besar memorinya, berapa banyak permintaan yang bisa diolah CPU-nya per detik, berapa banyak koneksi yang bisa dia buka bersamaan. Dorong melewati langit-langit itu, dan permintaan mulai mengantre, waktu respons membengkak, dan akhirnya mesinnya tumbang. Kamu memang bisa membeli mesin yang lebih besar (ini disebut scaling up), tapi selalu ada batas seberapa besar satu kotak bisa dibuat, dan kotak besar cepat sekali jadi mahal.

Yang kedua adalah keandalan. Satu server adalah satu titik kegagalan tunggal. Kalau dia crash, reboot saat update, atau data center-nya kehilangan listrik, seluruh situsmu langsung gelap. Tidak ada rencana cadangan. Satu mesin berarti cuma satu hal yang berdiri di antara kamu dan tumbangnya layanan.

Load balancing menyelesaikan keduanya sekaligus dengan membiarkanmu menjalankan banyak server yang lebih kecil dan lebih murah secara berdampingan — pendekatan yang disebut scaling out. Butuh kapasitas lebih? Tambahkan satu backend lagi ke pool. Satu server mati? Load balancer menyadarinya lalu berhenti mengirimkan trafik ke sana, sementara yang lain terus jalan. Situsmu tetap hidup.

SCALE UP                        SCALE OUT
(satu mesin lebih besar)        (lebih banyak mesin, dibagi)

   ┌─────────────┐                ┌──┐ ┌──┐ ┌──┐ ┌──┐
   │             │                │  │ │  │ │  │ │  │
   │   SERVER    │                └──┘ └──┘ └──┘ └──┘
   │   BESAR     │                  ▲    ▲    ▲    ▲
   │             │                  └────┴─┬──┴────┘
   └─────────────┘                    load balancer
   batas: seberapa besar     batas: nyaris tidak ada —
   satu kotak bisa dibuat?   tinggal terus tambah kotak

Bagaimana load balancer memilih server

Jadi load balancer punya, katakanlah, tiga backend yang sehat dan satu permintaan baru saja mendarat. Bagaimana dia memilih? Di sinilah algoritma masuk. Tiap algoritma adalah aturan berbeda untuk menentukan siapa giliran berikutnya, dan pilihan yang tepat bergantung pada seperti apa server dan trafikmu.

Round robin

Aturan paling sederhana dari semuanya: ikuti urutan saja. Permintaan pertama ke Server A, berikutnya ke B, berikutnya ke C, lalu balik lagi ke A, dan begitu seterusnya. Mudah ditebak, adil, dan tidak butuh informasi apa pun soal kondisi server.

permintaan 1 → A
permintaan 2 → B
permintaan 3 → C
permintaan 4 → A   (balik ke awal)
permintaan 5 → B

Round robin bekerja mulus ketika semua server-mu kira-kira sama kuat dan tiap permintaan butuh kerja yang kurang lebih sama. Kelemahannya muncul saat asumsi itu rontok — kalau satu permintaan butuh sepuluh detik dan berikutnya cuma sepuluh milidetik, berputar tanpa berpikir bisa membuat satu server terkubur sementara yang lain menganggur.

Least connections

Alih-alih bergiliran, kirim tiap permintaan baru ke server yang saat ini sedang menangani koneksi terbuka paling sedikit. Logikanya, server dengan koneksi aktif lebih sedikit kemungkinan besar sedang lebih senggang, jadi bisa menampung kerja lebih banyak.

Cara ini menangani perbedaan waktu permintaan jauh lebih baik daripada round robin. Kalau Server A tersangkut pada beberapa permintaan lambat, jumlah koneksinya tetap tinggi, jadi balancer secara alami mengarahkan trafik baru ke B dan C yang lebih lengang. Ini default yang lebih cerdas untuk kebanyakan aplikasi nyata, di mana biaya tiap permintaan bervariasi.

Varian berbobot (weighted)

Kedua aturan di atas punya versi berbobot untuk kondisi ketika server-mu tidak setara. Mungkin Server A mesin yang gahar dan B lebih kecil. Kamu beri A bobot 3 dan B bobot 1, lalu balancer mengirim trafik kira-kira tiga kali lebih banyak ke A. Ini membuatmu bisa mencampur perangkat keras dengan ukuran berbeda dalam satu pool tanpa membebani kotak yang lebih lemah.

IP hash

Di sini balancer mengambil alamat IP pengunjung, melewatkannya ke sebuah fungsi hash, lalu memakai hasilnya untuk memilih server. Bagian cerdiknya: pengunjung yang sama selalu mendarat di server yang sama, karena IP mereka selalu menghasilkan angka hash yang sama. Sebentar lagi kita lihat kenapa itu kadang justru yang kamu butuhkan.

Tidak ada algoritma 'paling baik' yang tunggal

Round robin dan least connections sudah mencakup sebagian besar kasus, dan kebanyakan setup mulai dari salah satunya. Jangan terlalu pusing memilih di awal — ambil default yang masuk akal (least connections cukup aman kalau waktu permintaan bervariasi), buat situsmu jalan dulu, dan baru sentuh opsi yang lebih canggih kalau memang ada alasan nyata. Menyetel terlalu dini di sini adalah cara klasik membuang-buang waktu seharian.

Masalah sticky session

Sekarang jebakan yang hampir selalu bikin orang tersandung saat pertama kali menaruh situs di belakang load balancer.

Bayangkan seorang pengguna login. Server yang menangani login itu menyimpan sesinya — “orang ini adalah Jane Doe, dia sudah terautentikasi” — di dalam memorinya sendiri. Pada klik berikutnya, load balancer (memakai round robin, misalnya) mengirimnya ke server yang berbeda, yang sama sekali belum pernah mendengar nama Jane. Tiba-tiba dia terlempar keluar tanpa alasan. Refresh, dan dia mungkin login lagi, lalu keluar lagi — kekacauan yang berkedip-kedip dan bikin frustrasi.

Akar masalahnya: data pengguna tadi tersimpan di memori satu server tertentu, padahal permintaannya disebar ke semua server. Ada dua jalan keluar yang rapi.

Sticky session (disebut juga session affinity) menyuruh load balancer untuk selalu mengirim pengguna yang sama kembali ke server yang sama selama kunjungan mereka — sering memakai trik IP-hash tadi, atau sebuah cookie kecil. Jane selalu kembali ke server yang mengenalnya. Cara ini berhasil, tapi agak rapuh: kalau server yang satu itu mati, semua orang yang dipasangkan padanya tetap kehilangan sesinya, dan distribusi trafikmu bisa jadi tidak merata.

Solusi jangka panjang yang lebih baik adalah membuat server-mu stateless — simpan data sesi di tempat bersama (sebuah database atau penyimpanan in-memory yang cepat) yang bisa dijangkau semua backend, bukan di memori lokal satu server. Sekarang tidak penting lagi server mana yang menjawab klik berikutnya Jane; mereka semua mengambil sesinya dari tempat bersama yang sama. Inilah pendekatan yang bisa diperbesar dengan rapi, dan layak dirancang sejak awal.

STICKY SESSION               STATELESS + PENYIMPANAN BERSAMA

Jane ─┐                      Jane ─┐
      └─ selalu → Server B          ├─ server mana pun
         (sesinya                       ▼      ▼      ▼
          tinggal di sini)          ┌───┐  ┌───┐  ┌───┐
                                    │ A │  │ B │  │ C │
   kalau B mati, sesi              └─┬─┘  └─┬─┘  └─┬─┘
   Jane ikut hilang                  └──────┼──────┘

                                    ┌──────────────────┐
                                    │ penyimpanan      │  ← sesi tinggal di sini
                                    │ bersama          │
                                    └──────────────────┘
                                    server mana pun bisa melayani Jane

Health check: tahu siapa yang masih hidup

Load balancer baru berguna kalau dia tidak mengirim trafik ke server yang sudah mati. Maka tiap load balancer yang layak menjalankan health check — secara berkala dia menyenggol tiap backend untuk bertanya “kamu baik-baik saja?” dan hanya mengarahkan trafik sungguhan ke yang menjawab dengan benar.

Health check bisa sesederhana membuka koneksi ke port server, atau seteliti meminta sebuah URL khusus (sering berupa sesuatu seperti /health) lalu mengecek apakah responsnya kembali dengan status yang benar. Kalau sebuah server gagal beberapa kali pemeriksaan berturut-turut, balancer menandainya tidak sehat dan diam-diam berhenti mengirim permintaan ke sana. Begitu dia pulih dan kembali lolos pemeriksaan, dia otomatis dimasukkan lagi ke rotasi.

   ┌──────────────┐
   │ LOAD BALANCER│  tiap beberapa detik: "masih hidup?"
   └──┬────┬────┬─┘
      │    │    │
     OK   OK   ✗ tidak menjawab
      ▼    ▼    ▼
   ┌───┐┌───┐┌───┐
   │ A ││ B ││ C │  ← C ditandai tidak sehat,
   └───┘└───┘└───┘     tidak diberi trafik sampai pulih

Mekanisme inilah yang mengubah “kita punya beberapa server” menjadi “kita punya situs yang selamat saat satu server mati.” Tanpa health check, backend yang crash akan terus menerima jatah permintaannya, dan tiap pengguna yang sialnya diarahkan ke sana akan menabrak error. Dengannya, kegagalan jadi nyaris tak terlihat oleh pengunjungmu.

Di lapisan mana load balancer bekerja

Load balancing bukan satu hal yang baku — dia bisa terjadi di lapisan yang berbeda-beda, dan kamu bakal menjumpai beberapa rasa.

Balancer layer 4 bekerja di tingkat transport (dunia TCP/IP dan nomor port). Dia mengambil keputusan murni berdasarkan info tingkat koneksi, tanpa mengintip ke dalam isi permintaannya. Dia cepat dan sederhana karena tidak membaca atau memahami trafiknya — dia tinggal melempar koneksi ke backend. Kalau nomor port dan bentuk dasar trafik jaringan masih terasa kabur, tulisan kami soal alamat IP dan port menyiapkan fondasinya.

Balancer layer 7 bekerja di tingkat aplikasi — dia benar-benar memahami HTTP. Karena bisa membaca permintaan, dia bisa mengambil keputusan yang lebih cerdas: mengirim semua permintaan untuk /images/ ke satu kelompok server dan /api/ ke kelompok lain, mengarahkan berdasarkan bahasa pengunjung, atau menangani HTTPS untuk seluruh pool. Lebih fleksibel, tapi sedikit lebih banyak kerja per permintaan. Untuk sebuah website, layer 7 biasanya yang kamu mau.

Ada juga perbedaan soal di mana balancer-nya berjalan. Software load balancer adalah program yang jalan di server biasa — fleksibel, murah, dan inilah yang dipakai kebanyakan proyek. Hardware load balancer adalah perangkat fisik khusus yang dibangun untuk kecepatan mentah, kebanyakan ada di perusahaan besar. Dan di cloud, penyedia layanan menawarkan load balancing sebagai layanan terkelola yang tinggal kamu nyalakan tanpa menjalankan apa pun sendiri, dan begitulah banyak setup modern menanganinya. Kalau bedanya antara menjalankan kotakmu sendiri dan menyewa infrastruktur terkelola masih buram, ulasan kami soal shared vs VPS vs dedicated vs cloud menempatkan opsi-opsi itu dalam konteks.

Balancer-nya sendiri bisa jadi titik kegagalan tunggal

Ada ironi yang perlu disebut: kalau semua trafikmu mengalir lewat satu load balancer dan mesin itu mati, kamu tumbang lagi — kamu cuma memindahkan titik kegagalan tunggal, bukan menghilangkannya. Setup yang serius menjalankan balancer-nya sendiri secara redundan (dua atau lebih, dengan failover otomatis di antaranya) supaya tidak ada satu kotak pun yang kematiannya menjatuhkan segalanya. Ini detail yang gampang terlupa sampai hari ketika dia menggigitmu.

Model pikir yang gampang nempel

Kalau kamu cuma boleh mengingat satu hal, peganglah ini: load balancer adalah pengatur lalu lintas yang berdiri di depan satu tim pekerja yang bisa saling menggantikan. Tiga tugas intinya adalah membagi pekerjaan dengan adil, menyadari ketika seorang pekerja tumbang lalu mengarahkan trafik melewatinya, dan menjaga agar tim itu tampak seperti satu layanan tunggal yang bisa diandalkan dari luar.

Selebihnya — algoritma, sticky session, layer 4 versus layer 7 — cuma detail yang ditumpuk di atas satu ide itu. Pasang gambaran intinya dengan kokoh, dan sisanya bakal masuk dengan sendirinya saat kamu membutuhkannya. Dan karena load balancer itu sendiri sejenis server yang menerima permintaan atas nama yang lain, ada baiknya kamu sudah mantap soal apa itu web server sebelum menyelam lebih jauh di sini.

Penutup

Mari kita kumpulkan semuanya dalam satu tempat:

  • Load balancing menyebar permintaan yang masuk ke beberapa server backend yang identik supaya tidak ada satu pun yang kewalahan. Load balancer adalah bagian yang menghadap publik dan menentukan siapa menjawab tiap permintaan.
  • Dia menyelesaikan dua masalah sekaligus: kapasitas (scale out dengan menambah banyak server murah ketimbang satu yang raksasa) dan keandalan (satu server mati tidak lagi menjatuhkan seluruh situs).
  • Server dipilih memakai sebuah algoritmaround robin (bergiliran), least connections (kirim ke yang paling lengang), versi berbobot untuk perangkat keras yang tidak setara, atau IP hash untuk kelengketan.
  • Menyebar pengguna ke banyak server merusak memori per-server, dan memunculkan masalah sticky session. Atasi dengan session affinity, atau lebih baik lagi, buat server stateless dengan penyimpanan sesi bersama.
  • Health check membuat balancer bisa mendeteksi backend yang mati dan mengarahkan trafik melewatinya — inilah yang benar-benar menepati janji “tetap hidup”.
  • Balancing bisa terjadi di layer 4 (cepat, tingkat koneksi) atau layer 7 (cerdas, paham HTTP), dan berjalan sebagai software, hardware, atau layanan cloud terkelola. Jangan lupa membuat balancer-nya sendiri redundan.

Begitu kamu nyaman dengan cara trafik disebar ke banyak mesin, langkah berikutnya yang wajar adalah melihat bagaimana satu server menampung beberapa situs berbeda sekaligus — dan untuk itulah virtual host ada.

Tag:serverweb-serversload-balancingscalingpemula
728 × 90Slot Iklan TersediaPasang iklan Anda di sini

Artikel Terkait

Lihat Semua Artikel

Artikel yang Mungkin Kamu Suka

SSL dan enkripsi at rest — data terlindungi saat berjalan dan saat tersimpan di disk
Server / Keamanan Server

SSL dan Enkripsi at Rest: Melindungi Data Saat Berjalan dan Saat Tersimpan

Enkripsi melindungi data di dua tempat: saat data lewat di jaringan (in transit) dan saat data nganggur di disk (at rest). Pahami bedanya, kenapa kamu butuh keduanya, bagaimana TLS, enkripsi disk, dan pengelolaan kunci sebenarnya saling melengkapi, plus kesalahan praktis yang sering bikin sia-sia.

9 Nov 202612 menit baca
Mengamankan port dan service — menutup pintu di server yang tidak kamu pakai
Server / Keamanan Server

Mengamankan Port dan Service: Menutup Pintu yang Tidak Kamu Pakai

Setiap port yang terbuka di server adalah satu pintu yang bisa dicoba orang lain. Pahami port dan service itu sebenarnya apa, kenapa service yang terekspos jadi risiko terbesarmu, dan kebiasaan sederhana menutup semua yang tidak kamu butuhkan — dijelaskan dari nol.

8 Nov 202610 menit baca
Prinsip least privilege — memberi hanya akses minimum yang dibutuhkan tiap user dan proses
Server / Keamanan Server

Prinsip Least Privilege: Beri Setiap Hal Hanya Akses yang Benar-Benar Dibutuhkan

Least privilege adalah aturan diam-diam di balik hampir semua setup keamanan yang solid: setiap user, proses, dan kunci hanya dapat akses minimum untuk menjalankan tugasnya, tidak lebih.

7 Nov 202612 menit baca
Fail2ban dan dasar intrusi — mengawasi log dan mem-banned otomatis pelaku yang menggedor berulang kali
Server / Keamanan Server

Fail2ban dan Dasar Intrusi: Mem-banned Otomatis Bot yang Terus Menggedor Server-mu

Penyerang tidak berhenti setelah sekali salah tebak — mereka terus menggedor, ribuan kali sehari. Pahami seperti apa sebenarnya percobaan intrusi, apa yang dikerjakan fail2ban, bagaimana ia mengawasi log dan mem-banned pelaku otomatis, dan cara menyetelnya dengan masuk akal tanpa mengunci dirimu.

6 Nov 202612 menit baca
Menjaga software tetap update — menutup lubang keamanan yang sudah diketahui sebelum penyerang memakainya
Server / Keamanan Server

Menjaga Software Tetap Update: Kebiasaan Membosankan yang Mencegah Sebagian Besar Pembobolan Server

Kebanyakan server tidak dibobol lewat serangan baru yang canggih — tapi lewat lubang lama yang sudah diketahui, yang sebenarnya cukup ditutup dengan update. Pelajari kenapa update itu penting, apa saja yang harus di-update, cara melakukannya dengan aman tanpa merusak apa pun, dan cara.

5 Nov 20269 menit baca
Konfigurasi firewall — aturan default-deny yang hanya membuka port yang kamu butuhkan
Server / Keamanan Server

Konfigurasi Firewall: Menyusun Aturan Default-Deny Tanpa Mengunci Diri Sendiri

Tahu apa itu firewall dan benar-benar mengonfigurasinya dengan rapi adalah dua keterampilan berbeda. Pelajari cara menyusun aturan default-deny, mengurutkan aturan dengan benar, membuka akses sendiri lebih dulu, menangani IPv6 dan security group cloud, lalu mengujinya sebelum dipakai — panduan.

4 Nov 202614 menit baca