Era Digital memaksa tersedianya layanan secara online baik membeli produk, memesan makanan, hingga layanan publik lainnya. Tingginya pengguna suatu layanan membuat para penyedia layanan merestrukturisasi server layanan untuk dapat melayani seluruh pengguna layanan online tersebut dengan menambahkan jumlah server suatu layanan online. Namun kemudian menjadi pertanyaan bagaimana membagi beban request ke kumpulan server-server tersebut ?. Konsep ini yang kemudian dikenal dengan istilah Load Balancing, yaitu menyeimbangkan beban request ke kumpulan server agar tidak terlalu lama penyelesaian request, dan tidak ada server yang bebannya terlalu tinggi sehingga over capacity.
Pekerjaan Load Balancing dikerjakan oleh komponen jaringan yang dikenal dengan sebutan Load Balancer. Jika anda dapat membayangkan suatu perusahaan, Load Balancer merupakan manajer yang membagi beban kerja ke karwayannya secara merata. Misal terdapat dua orang karyawan maka beban kerjanya dibagi menjadi dua sama rata agar tidak overwork, begitupun jika karyawannya tiga, empat, dan seterusnya.
Sebelum membagi beban request, memilah request untuk diberikan ke suatu server merupakan hal paling penting. Seperti hal-nya di perusahaan besar di mana terdapat divisi-divisi khusus, dan kadang setiap divisi memiliki karyawan yang sangat spesial dalam melakukan suatu pekerjaan, salah pembagian kerja dapat menjadi masalah baik inefisiensi hingga pekerjaan yang tidak selesai. Begitu pula di dunia IT terdapat dua macam Load Balancer yaitu Network Load Balancer (OSI Layer4) dan Application Load Balancer (OSI Layer 7) yang masing-masing memiliki cara memilah request yang spesifik. Salah menentukan jenis load balancer dapat berakibat inefektifitas maupun request gagal (bad request).
Network Load Balancer (OSI Layer 4)
Network Load Balancer bekerja pada OSI Layer 4 transport, yang hanya dapat membedakan protokol TCP dan UDP. Kembali ke analogi perusahaan, sering kali dalam pendelegasian manajer hanya melihat jenis pekerjaannya kemudian memberikan pekerjaan tersebut kepada suatu divisi khusus tanpa membaca isi pekerjaan tersebut guna mempersingkat waktu.
Begitupun Network Load Balancer, Load Balancer jenis ini hanya melihat protokol suatu request apakah TCP atau UDP untuk kemudian diberikan ke kumpulan server yang sudah diatur pendelegasiannya. Hal ini membuat Network Load Balancer bekerja dengan sangat cepat karena tidak perlu memperhatikan keseluruhan request.
Pada penggambaran NGINX syntax berikut dapat dilihat konfigurasi bahwa request udp pada port 53 akan dibagi ke suatu kumpulan server stream_backend_udp yang berisi server backend1, backend2, dan backend3. Sedangkan request tcp pada port 80 akan dibagi ke kumpulan server stream_backend_tcp yang berisi server backend4, backend5, dan backend6.
stream {
# upstream backend untuk server-server yang menghandle udp
upstream stream_backend_udp {
server backend1;
server backend2;
server backend3;
}
# load balancing udp dari port 53, diteruskan ke server-server stream_backend_udp
server {
listen 53 udp;
proxy_pass stream_backend_udp;
}
# upstream backend untuk server-server yang menghandle tcp
upstream stream_backend_tcp {
server backend4;
server backend5;
server backend6;
}
# load balancing tcp dari port 80, diteruskan ke server-server stream_backend_tcp
server {
listen 80 tcp;
proxy_pass stream_backend_tcp;
}
}
Application Load Balancer (OSI Layer 7)
Perkembangan protokol aplikasi yang semakin kompleks pada TCP membutuhkan suatu pemilahan yang lebih komprehensif. Maka dari itu lahirlah Application Load Balancer yang bekerja pada OSI Layer 7 yang dapat mencakup pengujian kemanan HTTPS, penyocokan domain, hingga spesifik URL untuk diteruskan ke server khusus. Application Load Balancer juga mengenal segal macam kode-kode HTTP request seperti 200 Success, 301 Redirect, 404 Not Found, 5xx Bad Server, dll.
Pada penggambaran NGINX syntax berikut dapat dilihat konfigurasi bahwa terdapat dua buah backend yaitu backend yang mengurus seluruh request-request general backend_general yang berisikan backend1, backend2, dan backend3; dan backend yang mengurus spesifik /home yaitu backend_home yang berisikan backend4. Selain itu kita juga melihat bahwa pada port 443 hanya diambil request menggunakan HTTPS dengan SSL certificate khusus. Sedangkan request pada port 80 diarahkan secara redirect menggunakan kode 301.
http {
# upstream backend untuk server-server yang menghandle application
upstream backend_general {
server backend1;
server backend2;
server backend3;
}
upstream backend_home {
server backend4;
}
# load balancing http dari port 443, diteruskan ke server-server backend spesifik
server {
listen 443 ssl;
domain your-domain.com www.your-domain.com;
ssl_certificate #your-ssl-certificate;
ssl_certificate_key #your-ssl-certificate-key;
# spesifik URI /home didelegasikan ke backend_home
location /home {
proxy_pass backend_home;
}
# URI general lainnya didelegasikan ke backend_general
location / {
proxy_pass backend_general;
}
}
server {
listen 80;
domain your-domain.com www.your-domain.com;
if ($host = your-domain.com) {
return 301 https://$host$request_uri;
}
if ($host = www.your-domain.com) {
return 301 https://$host$request_uri;
}
return 404;
}
}
Dewasa ini Load Balancer tersedia dalam berbagai bentuk baik: Hardware (F5, Cisco); Cloud (ALB & NLB milik AWS, Cloud Load Balancing milik GCP, Customized Load Balancer milik Digital Ocean), dan; Software (NGINX). Meskipun terdapat berbagai macam produk dengan merek dagang masing-masing, intinya hanya dua konsep load balancer yaitu Network Load Balancer, dan Application Load Balancer lah yang kerap digunakan untuk melakukan pembagian beban. Untuk mempelajari Load Balancer, sangat direkomendasikan untuk memulainya menggunakan NGINX yang dapat digunakan pada perangkat laptop masing-masing. Happy Coding.
———————
Fadhli Zakiy
Technology Enthusiast, IT Principal, Full Stack Developer, Project Manager, and Sustainable Innovator