Penggunaan Reverse Proxy/Web Accelerator untuk situs dengan load tinggi


Apa itu Reverse Proxy? Menurut Wikipedia[0] adalah sebuah proxy yang berada di depan dari webserver, digunakan sebagai cache atau bisa juga sebagai load balancer. Gambar secara ascii-art sebagai berikut:

[internet]
|
[rev-proxy]
|
+--[webserver1]
+--[webserver2]
\--[webserver3]

Jadi kegunaannya selain load balancer juga bisa membantu meringankan kerja dari webserver, karena isi halaman dari web tersebut telah di cache di proxy. Terutama yang bisa kita hemat adalah penggunaan cpu dari webserver. Karena sebuah CMS/program untuk menampilkan sebuah halaman memerlukan beberapa proses.

Proses pertama adalah PHP, yang kedua query di database (dalam hal ini mysql), kemudian baru ditampilkan ke layar. Apabila hal ini bisa di cache di proxy, maka kita bisa lebih hemat penggunaan cpu, karena yang disimpan dalam cache yang notabene lebih cepat.

Nah kasus yang saya hadapi kemaren ini juga seperti itu. Bisa dilihat di gambar 1, penggunaan CPU dari server yang menunjukkan kenaikan hingga mencapai hampir 80% dalam 4 minggu. Dan seperti yang bisa dibayangkan, servernya kolaps pada saat CPU usage mencapai 100%.


[gambar1]

Saat CPU usage mencapai 100%, server menjadi sangat tidak responsif, bahkan koneksi ssh pun sampai putus beberapa kali. Waktu dilihat menggunakan 'top', terlihat process mysql yang sangat banyak menggunakan CPU dan memory. Sedikit tuning dari mysql. Tetap tidak menyelamatkan server tersebut.

Setelah googling mencari bagaimana meng-optimize CMS tersebut dengan underpowered server. Banyak yang menyarankan untuk mengoptimize mysqlnya. Namun hal tersebut tidak membantu. Setelah browsing kesana kemari, akhir dari suatu situs (lupa linknya), ketemu blognya Pak Harry Sufehmi[1] yang isinya tentang Meng-optimize Situs Wordpress dengan Traffic yang sangat tinggi.

Inti dari blog tersebut adalah menggunakan Squid dalam mode Reverse Proxy. Dan hasilnya manjur. Bisa turun banyak penggunaan CPU-nya.

Karena di blog tersebut tidak ada hal-hal teknis tentang setup Reverse Proxy, selain itu memang versi Squidnya juga bisa berbeda dengan yang saya gunakan, yang berakibat juga dengan adanya perbedaan sintaks-sintaks konfigurasi dari squid, mengharuskan saya membaca manual dari konfigurasi squid.

Di file squid.conf memang ada contoh-contoh dan penjelasan yang mendetail, namun saya lebih suka membacanya di situs visolve[2].

Berikut konfigurasi yang saya pakai, menggunakan squid 2.6.

http_port 80 vhost defaultsite=budiwijaya.or.id
cache_peer 202.154.57.62 parent 8080 0 no-query originserver
acl rootboxweb dstdomain .rootbox.or.id
acl budiwijayaweb dstdomain .budiwijaya.or.id

cache_peer_access 202.154.57.62 allow rootboxweb
cache_peer_access 202.154.57.62 allow budiwijayaweb
cache_peer_access 202.154.57.62 deny all

Diatas tersebut konfigurasi utama untuk Reverse Proxy. Konfigurasi yang membuat squid menjadi reverse-proxy untuk 2 buah domain. Dan untuk apachenya, diset supaya Listen di port 8080, tanpa ada perubahan konfigurasi yang lain.

Dan konfigurasi dibawah ini optional, dituning sesuai dengan kebutuhan server.

--optional--

cache_mem 24 MB
cache_dir aufs /var/spool/squid 500 16 256
check_hostnames off
refresh_pattern . 0 75% 4320
half_closed_clients off
memory_pools off
log_icp_queries off
client_db off

System operasi yang digunakan Debian Etch. Ya, debian yang old-stable itu. Dan bisa dilihat hasilnya di gambar 2, di hari senin(mon)-selasa(tue) CPU Usage bisa stabil di rata2 60-80%. Dan seperti yang terlihat juga digambar 2, pada hari Jumat, Sabtu dan Minggu server 'hang' setelah CPU usagenya 100%, terjadi .


[gambar2]

Dan pada gambar 3 bisa dilihat status kondisi squid. Hit-Ratio-nya bisa mencapai 70%. CPU Usage dari squid sendiri cukup kecil, sekitar maksimal 1.3%. Kondisi ini pada saat masih menggunakan konfigurasi default dari squid. Grafik untuk status squid menggunakan program squid-rrd[3]


[gambar3]

Oh iya, selain itu di sisi apachenya juga dipasang eaccelerator[4], sebuah caching untuk kode-kode php. Sehingga apache tidak perlu memproses php untuk mejadi byte-code.

Kesimpulan akhir, dengan menggunakan squid yang diset sebagai reverse proxy, dapat menghemat cpu usage selain juga bisa mempercepat akses ke server. CPU Usage yang dapat dihemat di server saya sekitar 20-30%. Mungkin butuh tuning yang lebih baik lagi.

--budiw
[0]http://en.wikipedia.org/wiki/Reverse_proxy
[1]http://harry.sufehmi.com/archives/2007-03-08-1428/
[2]http://www.visolve.com/squid/
[3]http://www.squid-cache.org/~wessels/squid-rrd/
[4]http://eaccelerator.net/

Comments

Wah telat saya

Wah telat saya... mohon maaf pesannya baru terbaca :)

Kebetulan juga sejak kemarin saya sedang demam, beberapa meeting juga saya batalkan.

Mudah2an nanti kita bisa ketemu ya. Trims.

@pak harry: Ah, terima kasih

@pak harry: Ah, terima kasih petunjuknya. Kebetulan akhir2 ini situs tersebut juga udah merangkak naik ke arah 99%. Jadi dalam 1 minggu sempat juga down. Mungkin karena memang di headernya cms belum di optimze.

Sekali lagi terima kasih. Satu hal tersebut yg terlupakan oleh saya.

Btw, Selasa besok saya kebetulan di jkt. Malemnya insyaAllah ke Wetiga. Kalo tidak keberatan bisa kopdar disana bareng teman2 wetiga pak?

--budiw

Website nya juga perlu di tuning :)

Halo mas, kita juga perlu meng optimize website yang di hsoting di server tsb :)

Secara ringkas - mayoritas CMS (Joomla, dll) dan default setup dari Apache & PHP itu menghasilkan header nocache.

Akibatnya bisa ditebak -- squid kemudian dengan patuh melewatkan URL tsb ke Apache, tidak meng cache URL ybs

Jadi, install squid saja tidak cukup.
Kita masih perlu lagi memastikan, bahwa HTTP header yang dihasilkan sudah cache-friendly.

Setelah ini dilakukan, maka siap-siap saja takjub.

Ada sebuah situs client saya yang membuat server dengan 8 (delapan) prosesor dan 8 GB RAM overload.
Server saya kemudian bisa meng hosting website tsb, dengan average utilization hanya 8% - padahal hanya dual-core dengan RAM 2 GB :-)

Thanks.

Syndicate content