Kali ini membahas mengenai Docker sebagai Load Balancer. Seperti yang kita tahu
bahwa load balancing adalah sebuah teknik untuk mendistribusikan beban trafik pada 2 buah
jalur atau lebih jalur koneksi agar seimbang, agar trafik berjalan optimal, memaksimalkan
throughput, dan menguhindari overload pada salah satu jalur koneksi. Load Balancing juga
mendistribusikan beban kerja secara merata di dua atau lebih komputer, link jaringan, CPU,
hardisk, ataupun sumber daya lainnya untuk mendapatkan performa yang maksimal.
Setelah memahami pengertian dari Docker, juga bagaimana cara menginstall dan
menjalankannya maka akan melakukan penerapan Load Balancing pada Docker. Konsep
yang digunakan pada kali ini adalah konsep dari High Availability. Sebenarya Docker sudah
menggunakan konsep ini pada swarm cluster. Tetapi saya tidak akan menggunakan swarm
cluster, karena saya menggunakan Nginx pada sebuah container sebagai load balancer
container yang lainnya.
Sebelum membahas mengenai apa itu Nginx, akan lebih baik jika memahami terlebih
dahulu fungsi dari web server. Salah satu komponen penting di dalam website adalah web
server. Web server berfungsi sebagai penerima request dari browser yang kemudian
memberikan tanggap dengan mengirimkan halaman situs web dalam bentuk dokumen
HTML.
Pada awal munculnya, web server ini hanya dipakai untuk server HTTP saja. Seiring
perkembangan teknologinya, sekarang Nginx juga dipakai sebagai HTTP cache, load
balancer (HTTP, TCP, dan UDP), dan server proxy (IMAP, POP3, dan SMTP). Selain
kemampuan di atas, Nginx juga dapat berjalan di berbagai macam sistem operasi, seperti
Linux, Mac OS X, HP-UX, BSD Varian, dan Solaris.
Nginx menawarkan penggunaan memori yang kecil dengan konkurensi yang tinggi.
Jadi Nginx tidak membuat proses baru ketika ada permintaan (web request), tapi ditangani di
dalam satu thread (asynchronous dan pendekatan event-driven). Jika menggunakan Nginx,
satu proses utama (master process) dapat mengontrol berbagai proses lainnya (worker
process). Jadi proses utama tetap menjalankan tugasnya sambil mengontrol proses lain yang
ada di bawahnya. Karena Nginx menggunakan asynchronous, setiap web request dapat
dieksekusi oleh proses lain tanpa mengganggu web request lainnya.
Dalam menjalankan tugasnya, Nginx juga mempunyai beberapa fitur yang dapat
dimanfaatkan untuk mendukung performa web server yang andal seperti:
Reverse proxy dengan proses cache
Dukungan IPv6
Load balancing
Dukungan FastCGI dengan proses cache
WebSockets
Menangani file statis, file index, dan auto-indexing
TLS/ Sertifikat SSL dengan SNI (Server Name Indication)
Topologi yang akan digunakan seperti dibawah ini :
Dari gambar diatas dapat di lihat segala traffic HTTP yang mengarah ke node akan di
handle oleh container NGINX Load Balancer. Kemudian dari container NGINX Load
Balancer tersebut akan me-redirect traffic HTTP ke salah satu container Hello World di
node1 maupun node2. Pemilihan container Hello World mana yang akan dipakai sebagai
tujuan redirect dilakukan dengan algoritma Round-Robin. Round Robin berarti server akan
dipilih secara berurutan. Penyeimbang beban akan memilih server pertama dalam daftar
untuk permintaan pertama, lalu turunkan daftar secara berurutan, mulai dari atas saat
mencapai akhir.
Container Hello World disini adalah sebuah container yang menjalankan service
NGINX di dalamnya dengan halaman web yang berisi hanya tulisan Hello World sebagai uji
coba. Disini akan menggunakan image tutum/hello-world sebagai container Hello World.
Langkah-langkah untuk Node1
1. Download image tutum/hello-world
Dengan menggunakan command $docker pull tutum/hello-world dan tunggu sampai
proses download selesai.
4. Kemudian membuat 3 container yaitu 2 container Hello World dan sebuah container
Nginx yang nantinya akan dipakai sebagai load balancer. Saat menjalankan ketiga
container nanti juga akan melakukan porting dari container ke docker host.
6. Pastikan container yang telah kita buat dapat berjalan melalui web browser. Dengan
mengisikan alamat menggunakan alamat IP.
http://192.168.126.128
http://192.168.126.128:8080
http://192.168.126.128:8081
Jika tampilan halaman web browser sudah seperti gambar diatas yang merupakan
tampilan Nginx dan tutum/hello-world, maka container yang telah dibuat tadi berhasil
berjalan.
4. Pastikan container yang telah kita buat dapat berjalan melalui web browser. Dengan
mengisikan alamat menggunakan alamat IP.
http://192.168.126.129:8080
http://192.168.126.129:8081
Jika tampilan halaman web browser sudah seperti gambar diatas yang merupakan
tampilan tutum/hello-world, maka container yang telah dibuat tadi berhasil berjalan.
Untuk mengecek apakah load balancing yang sudah dibuat berhasil atau belum buka
alamat http://192.168.126.128 pada web browser. Kemudian lakukan beberapa kali refresh
pada browser, maka otomatis halaman website IP address tersebut akan berganti hostname.
Tampilan pada saat menjalankan alamat IP 192.168.126.128 pada browser, mendapatkan
hostname 9fc0a79911d5.
Tampilan halaman saat setelah di refresh pertama kali, mendapatkan hostname 31af4c1a4c8d.
Tampilan halaman saat setelah di refresh kedua kali, mendapatkan hostname cb85c9fdadf7.
Tampilan halaman saat setelah di refresh ketiga kali, mendapatkan hostname c53ef92479e8.