Apakah website anda mengalami overload dengan ribuan request per hari? Atau aplikasi web anda super berat sehingga 1 server tidak mampu lagi menangani request yang datang? Mungkin solusi Load Balancing dengan beberapa server bisa meringankan beban load yang tinggi. Permasalahnnya adalah: Bagaimana

Salah satu aplikasi yang lumayan handal untuk kerjaan load balancer adalah Nginx, Nginx adalah HTTP server yang compact, mudah dikonfigurasi dan ringan di resource. Saya membuat contoh kasus sederhana dengan 2 python script yang bisa kita anggap 2 buah web server yg bekerja berdampingan.

Script server1.py menggunakan CherryPy sebagai httpserver.

#server1.py
import wsgiserver, os
PORT = 8070
def my_crazy_app(environ, start_response):
    start_response('200 OK', [('Content-type','text/plain')])
    return [("n".join(["%r: %r" % (k, environ[k]) for k in environ.keys()]))]
server = wsgiserver.CherryPyWSGIServer(
            ('0.0.0.0', PORT), my_crazy_app,
            server_name='www.cherrypy.example')
if __name__ == '__main__':
    try: 
        print "CherryPy WSGIServer started at port %d" % PORT
        server.start()
    except KeyboardInterrupt: 
        server.stop()

Script server2.py menggunakan wsgiref-nya python sebagai http server.

#server2.py
from wsgiref.simple_server import make_server

def hello_world_app(environ, start_response):
    start_response('200 OK', [('Content-type', 'text/plain')])
    return [("n".join(["%r: %r" % (k, environ[k]) for k in environ.keys()]))]

httpd = make_server('', 8000, hello_world_app)
print "Serving on port 8000..."
httpd.serve_forever()

Pemilihan bahasa dan dua modul diatas tanpa alasan tertentu. Hanya untuk simulasi load balancing saja. Sekarang, anda bisa menginstall nginx. Dan konfigurasi sebagai berikut:

upstream test {
	server 127.0.0.1:8070; #cherrypy
	server 127.0.0.1:8000; #python wsgiref module
}

server {
	listen 80;
	server_name localhost;
	root /var/www/nginx-default;
	client_max_body_size 10m;

	location / {
		proxy_pass http://test/;
		proxy_redirect off;
		proxy_set_header  Host  $host;
		proxy_set_header  X-Real-IP  $remote_addr;
		proxy_set_header  X-Forwarded-For  $proxy_add_x_forwarded_for;
        }
}

Restart Nginx anda, jalankan script server1.py dan server2.py, kemudian buka browser ke http://localhost/. Anda akan melihat output berganti2 dari server1.py ke server2.py. Begitu juga berlaku untuk apache anda — karena kebanyakan orang memakai apache. Prosedurnya:

Setting apache anda untuk jalan di port selain 8080 — misalnya ke port 8080 Listen 8080, kemudian konfigurasi nginx untuk load balance ke server2 anda, dan anda siap untuk menghandle request yang lebih banyak lagi.