MEMBANGUN HIRARKI CACHE 
MENGGUNAKAN SQUID

Luthfi Kisbiono Arif dan Onno W. Purbo *

Pada organisasi yang cukup besar, dengan menggunakan Squid sebagai software untuk proxy server kita bisa membangun sebuah hirarki cache. Yang dimaksud dengan hirarki di sini adalah beberapa proxy server yang menjalankan Squid bisa dikonfigurasi sehingga menyerupai suatu struktur organisasi. 

Ada beberapa istilah dalam Squid untuk membangun suatu hirarki cache, yaitu parent dan sibling  (Pada squid versi 1.1.x saja dan pada artikel ini digunakan software Squid versi 1.1.10).  Istilah ini digunakan untuk menjukkan posisi suatu proxy server relatif terhadap proxy server lainnya. 
•	Apabila sebuah proxy server (anggap proxy server 1) menjadi parent proxy server yang lain (anggap proxy 2), maka dia harus mendapatkan objek yang diminta oleh proxy 2 dengan jalan mentransfer objek yang diminta dari cache yang dimiliki (apabila objek ada dalam cache), meminta ke proxy server lain (yang menjadi parent atau sibling dari proxy 1) atau meminta langsung ke server tujuan (direct) .
•	Apabila sebuah proxy server (anggap proxy 3) menjadi sibling proxy server yang lain (anggap proxy 4), maka proxy 4 hanya akan mentransfer objek yang diminta dari proxy 3 apabila objek yang diminta dimiliki oleh proxy 4 (dalam cachenya). Bila objek yang diminta tidak terdapat dalam cache proxy 4, proxy 3 akan menghentikan proses pencarian data pada proxy 3 dan akan mencari keberadaan objek pada proxy server lain (sibling atau parent) atau langsung ke server tujuan. 

Untuk komunikasi antar proxy server digunakan protokol yang disebut sebagai ICP (Internet Cache Protocol). Protokol ini digunakan oleh proxy server untuk mengecek keberadaan suatu objek (dalam dunia proxy data biasa disebut sebagai objek) pada proxy server lain yang termasuk dalam hirarki proxy server pada suatu network. Objek itu sendiri dikirim melalui protokol HTTP. Overview dari cara kerja proxy server yang menggunakan ICP adalah sebagai berikut :

	gambar 1. Komunikasi antar proxy server

1. 	Proxy server 1 memberi ICP query yang berisi data tentang keberadaan suatu objek pada proxy server 2.
2. 	Berdasarkan permintaan dari porxy server 1, proxy server 2 akan melihat keberadaan objek yang diminta pada cache data yang telah dimilikinya. Cache data sendiri berasal dari permintaan pengguna sebelumnya.
3. 	Apabila objek yang diminta dimiliki oleh proxy server 2, maka proxy server 2 akan memberi ICP reply ke proxy server 1 yang berisi petunjuk bahwa objek yang diminta dimiliki oleh proxy server 2. 
4. 	Objek yang diminta oleh proxy server 1 akan ditransfer dari proxy server 2 dengan menggunakan protokol HTTP dan data ditransfer ke pengguna (selain dicache oleh proxy server 1 sendiri).
5. 	Apabila objek yang diminta tidak dimiliki oleh proxy server 2, proxy server 2 akan memberi ICP reply yang berisi petunjuk bahwa objek yang diminta tidak ada.
6. 	Apabila objek yang diminta tidak dimiliki oleh proxy server 2, maka proxy server 1 akan mengirimkan ICP query ke proxy server lain yang masih termasuk dalam hirarkinya (parent atau sibling proxy). Sebagai langkah terakhir, apabila objek tetap tidak dimiliki oleh proxy server dalam hirarkinya, maka objek akan diminta langsung ke server tujuan (direct) dan data akan dicache (selain ditransfer ke pengguna yang meminta). 

Hirarki cache pada Squid diatur pada file konfigurasi Squid.conf pada directive cache_host. Bentuk standar dari directive cache_host adalah sebagai berikut :

cache_host hostname type http_port icp_port option

•	 Hostname : nomer IP proxy server dalam hirarki atau nama mesin dalam FQDN.
•	 Type : isi sesuai dengan level dari proxy server yaitu parent, neighbor, atau sibling.
•	 Http_port : port di mana server tersebut mendengarkan permintaan protokol HTTP dan FTP       dari pengguna.
•	 ICP_port : port server akan mendengarkan (listen) permintaan atau mengirimkan permintaan keberadaan objek ke server lain dalam hirarki.
•	 Option : ada beberapa option yang bisa digunakan :
•	 proxy-only : data yang didapat dari proxy dengan option ini tidak akan dicache
•	weight = n : untuk pemilihan preference apabila terdapat multiple parent, n adalah bilangan integer, makin besar n berarti satu parent lebih disukai dibandingkan dengan parent yang lain.
•	 ttl=n : untuk memberikan TTL paket ICP query multicast (akan dibahas di bawah)
•	no-query : untuk tidak memberikan ICP query pada cache server yang disebutkan
•	default : default parent apabila terdapat multiple parent
•	multicast-responder : peer yang diberi option ini adalah anggota dari multicast        group.
•	Round-robin : apabila terdapat sejumlah parent, maka parent-parent akan di query secara round-robin/bergantian. 

	Harap dimengerti bahwa hirarki cache sendiri tidak ditentukan sepenuhnya oleh letak fisik satu proixy server terhadap proxy server yang lain, faktor-faktor kondisi dan utilisasi network serta hardware yang kita miliki menjadi faktor penentu ‘jabatan’ suatu proxy server  dalam hirarki cache. Tingkat kesuksesan hirarki cache yang kita buat ditentukan oleh hit rate (jumlah objek yang dapat ditransfer dari cache yang dimiliki proxy server yang ada). Hit rate yang tinggi dapat mereduksi traffic dari network yang anda miliki ke internet. Hit rate yang tinggi hanya dapat dicapai melalui perencanaan hirarki cache yang efisien dan efektif dengan mempertimbangkan kondisi-kondisi yang ada walaupun behaviour dari pengguna juga sangat menentukan hit rate.

Dari hal di atas dapat kita bentuk berbagai macam pola hubungan proxy server dalam network yang kita miliki. Bisa kita bentuk hubungan linier (satu proxy hanya mempunyai hubungan dengan proxy server yang lain), full-mesh (satu proxy mempunyai hubungan dengan semua proxy server yang ada), atau pola-pola lain sesuai dengan kondisi network yang anda miliki.

 Untuk memudahkan pengertian kita akan istilah-istilah yang ada, kita gunakan contoh kasus (lihat gambar) : 

		gambar 2. Contoh kasus dari hirarki cache

ket : nama proxy1, proxy2, proxy3, main_proxy, dan proxy_network adalah nama untuk memudahkan pengertian kita, dalam pelaksanaannya kita harus menggunakan nomer IP atau nama FQDN dari server tersebut.

Dari gambar di atas, proxy1 adalah proxy server untuk workgroup 1, proxy2 adalah proxy server untuk workgroup 2, dan proxy3 adalah proxy untuk workgroup 3. Proxy network membawahi proxy 2 dan 3. 

Ada banyak pola hubungan yang dapat kita buat untuk membuat suatu hirarki cache dengan kondisi fisik seperti di atas. Sebagai contoh apabila kita ingin Main Proxy adalah satu-satunya exit point dari semua traffic HTTP pada network yang anda miliki maka pola hubungan yang dapat dibuat dapat digambarkan sebagai berikut :

 
 gambar 3. Contoh Pola hirarki cache

Dari Pola di atas,  Main Proxy merupakan satu-satunya exit point ke dunia luar, di sini konfigurasi yang perlu ditambahkan , dengan anggapan bahwa main proxy terhubung ke proxy server lain di internet (bisa juga main proxy tidak terhubung ke proxy server lain tapi langsung meminta objek ke tujuan) dan icp port serta http port semua proxy server adalah 3128 dan 3130, adalah :

cache_host    proxy.server.lain    parent    3128 3130

Proxy 1 dan proxy network menggunakan Main Proxy sebagai parent dan proxy 1 serta proxy network sendiri sebagai sibling . Konfigurasi yang dibutuhkan adalah :

•	Pada proxy 1

cache_host     Main_Proxy        	parent	   	3128  3130
cache_host     proxy_network 		sibling      	3128  3130

•	Pada proxy network

cache_host	Main_Proxy		parent		3128  3130
cache_host  proxy_1		sibling		3128  3130

Proxy 2 dan proxy 3 menggunakan proxy network sebagai parent, maka konfigurasi yang dibutuhkan adalah :

•	Pada proxy 2

cache_host	proxy_network		parent		3128  3130

•	Pada proxy 3

cache_host	proxy_network		parent		3128  3130

Dengan konfigurasi di atas, dapat dibentuk pola seperti pada gambar 3. Selain contoh pola di atas, dapat kita buat pola yang lain. Pada contoh di atas anda nama host adalah contoh saja, dalam penulisan konfigurasi sebenarnya harus digunakan nama FQDN.
Pada versi Squid yang baru (mulai versi 1.1.6) , telah ditambahkan option baru, sehingga paket ICP query dikirimkan secara multicast melalui IP multicast (walaupun ICP reply dikirimkan secara unicast). Agar option ini dapat kita jalankan, maka yang kita perlukan adalah router yang mampu melewatkan paket-paket multicast (contoh : mrouted pada FreeBSD). Dengan adanya option ini maka kita dapat mengirimkan paket ICP query ke semua proxy server yang telah bergabung ke group multicast yang telah kita buat, cara konfigurasinya adalah sebagai berikut :

1.	Konfigurasi semua proxy server yang akan menerima paket ICP query multicast untuk bergabung pada satu IP-multicast yang telah kita assign, dengan mengisi directive ‘mcast_groups’ , contoh :

mcast_groups     224.1.0.18

2.	Proxy server (yang telah dikonfigurasi dengan step 1) yang ingin mengirimkan paket ICP query multicast, harus menambahkan directive ‘cache_host’, contoh :

	      cache_host      224.1.0.18   multicast    3128   3130 ttl=10
	
harap diingat bahwa port icp harus diisi dengan benar dan sama dengan port icp semua proxy yang bergabung dalam grup multicast ini, sehingga semua paket ICP query  multicast dapat diterima oleh semua proxy server yang bergabung.

3. 	Karena ICP reply hanya dikirimkan secara unicast, maka kita harus menyebutkan proxy server-proxy server yang kita harapkan akan mengirimkan ICP reply, dengan menambahkan option multicast-responder. Sebagai contoh :
	
cache_host contoh.itb.ac.id	 sibling 3128 3130 multicast-responder     cache_host contoh2.itb.ac.id sibling 3128 3130 multicast-responder	

CARA KONEKSI DENGAN PARENT/SIBLING YANG TIDAK MENSUPPORT ICP

	Apabila salah satu proxy server dalam hirarki cache tidak mensupport ICP, maka hal yang harus anda lakukan adalah menjalankan port echo UDP (UDP echo port) pada server yang tidak mensupport ICP . Squid tidak membedakan antara neighbor dan parent pada neighbor/parent yang tidak mensupport ICP.
Khusus untuk server yang tidak mensupport ICP, maka field icp_port pada cache_host harus diisi 7 (sesuai dengan port UDP echo pada server)

PROXY SERVER YANG BISA DIKONEKSIKAN DENGAN SQUID

Di bawah ini adalah daftar beberapa proxy server yang bisa dikoneksikan dengan Squid :
1. 	Harvest
2. 	Netscape (karena tidak mensupport ICP maka lakukan cara seperti di atas)

Untuk saat ini proxy server dari microsoft tidak dapat dikoneksikan dengan Squid.

Demikian ilustrasi singkat untuk membangun suatu hirarki cache dengan menggunakan Squid, informasi lebih lanjut dapat dilihat pada http://www.nlanr.net/Squid

*) Penulis adalah anggota dari Computer Network Research Group (CNRG) - ITB, pertanyaan lebih lanjut dapat dialamatkan ke cnrg@itb.ac.id