panduan refresh pattern

18
  fazar.net  digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected] Squid Cache : Optimising Web Delivery Panduan Refresh Pattern Squid Cache 2.7

Upload: jayapermai

Post on 21-Jul-2015

1.744 views

Category:

Documents


0 download

TRANSCRIPT

Squid Cache : Optimising Web Delivery

Panduan Refresh Pattern Squid Cache 2.7

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Latar Belakang Tulisan

Squid cache adalah proxy daemon yang paling popular di Indonesia bahkan didunia yang sering digunakan dengan tujuan optimasi penyampaian konten internet pada gamecenter, warnet, kantor, perusahaan besar, bahkan sampai ke tingkat ISP (Internet Service Provider). Tujuan utama penggunaan squid tidak lain untuk mengimprovisasi akses internet dalam kondisi keterbatasan bandwidth yang tersedia. Dengan memasang squid dalam sebuah jaringan internet diharapkan terjadi penghematan bandwidth sebesar 30 60% - secara signifikan browsing akan terasa menjadi lebih cepat. Akan tetapi, terkadang kekuatan yang ada didalam squid cache belum sepenuhnya kita gunakan. Sebagaimana yang kita ketahui, squid cache sepenuhnya dikendalikan oleh sebuah file konfigurasi (biasanya terletak di /etc/squid.conf) yang didalamnya banyak tag dan memiliki fungsi-fungsi tersendiri. Salah satu tag terpenting dalam squid.conf adalah refresh_pattern. Tulisan ini saya buat dengan dasar keinginan untuk berbagi sedikit pengetahuan tentang refresh_pattern yang terdapat didalam konfigurasi squid cache. Banyak konfigurasi squid cache yang bisa kita ambil dari internet, namun yang saya sayangkan adalah kebanyakan squid.tersebut terdapat kesalahan penulisan refresh_pattern yang mungkin di karenakan keterbatasan literatur yang menjelaskan fungsi dan tujuan dari refresh_pattern. Letak kesulitan penulisan refresh_pattern adalah opsi untuk menentukan regular expression (regex). Mempelajari regex akan sangat membantu penulisan refresh_pattern yang efisien dan efektif. Jangan ragu untuk membeli dan mempelajari buku-buku tentang regex agar anda bisa memiliki refresh_pattern yang mumpuni. refresh_pattern menentukan secara signifikan angka HIT yang akan didapat oleh squid. Oleh karena itu, penulisan yang tepat dikombinasi dengan tuning beberapa konfigurasi lainnya dapat membuat squid anda mencapai performa terbaiknya. Dalam tulisan ini saya menggunakan squid 2.7 dan Lusca (yang masih berbasis squid 2.7), dan ada beberapa istilah yang akan sering digunakan, antara lain :

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

-

Object Object adalah berkas / file yang diambil oleh squid dari internet, yang kemudian disimpan didalam direktori cache yang ditentukan di dalam squid.conf (tag : cache_dir)

-

Cache Cache dalam bahasa Indonesia memiliki arti harfiah sebagai tembolok. Tembolok / cache squid dapat diumpamakan sebagai tempat penyimpanan sementara object-object yang diambil squid dari internet.

-

Fresh Kondisi dimana object didalam squid masih segar dan belum kadaluarsa. Nilai kadaluarsa suatu object biasanya disertakan oleh webserver saat object tersebut diambil dari internet, namun nilai kadaluarsa ini bisa dimanipulasi oleh refresh_pattern.

-

Stale Stale adalah kondisi dimana object sudah kadaluarsa dan seharusnya di ambil oleh browser (firefox, opera, internet explorer, dll) langsung dari internet. Sebagaimana dijelaskan

sebelumnya, nilai kapan kadaluarsanya suatu object dapat dimanipulasi dan ditentukan oleh refresh_pattern. Object stale didalam cache akan secara otomatis di hapus (purge) oleh squid berdasarkan ketentuan dari refresh_pattern. Dalam tulisan ini akan saya berikan beberapa tips dan peringatan. Setiap tips akan ditandai dengan gambar ceklist. Sedangkan peringatan akan ditandai dengan gambar tanda seru.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

refresh_pattern : Apa dan Kenapa?

Fungsi utama refresh_pattern adalah mengatur bagaimana squid akan menangani object yang berada didalam cache. Dan sebagaimana yang dijelaskan sebelumnya, dengan sedikit trik, kita dapat menggunakan refresh_pattern, untuk menentukan atau memanipulasi validitas object (fresh atau stale) yang ada didalam cache squid sehingga nilai HIT dapat menjadi lebih maksimal. Sebelum mendalami refresh_pattern lebih lanjut, kita sebaiknya mengetahui bagaimanakah cara validitas object di periksa oleh squid. Browser (firefox, opera, dan sebagainya) sebenarnya juga memiliki cache tersendiri, dan biasanya menggunakan browser metode tertentu untuk memeriksa validitas object didalam cache mereka dengan mengirimkan request tertentu ke webserver (langsung ke internet). Bagaimana proses terjadinya penampakan object didalam browser? Perhatikan ilustrasi berikut dengan cermat.

Pada saat client memasukkan yahoo.com kedalam address bar browsernya dan menekan tombol enter, maka browser akan mengirimkan HTTP request ke server yahoo.com meminta akses halaman utama website yahoo.com. Webserver yahoo.com menerima HTTP request tersebut, dan mengirimkan HTTP response yang berisi informasi tentang halaman utama website yahoo.com. Response ini dengan segera diterjemahkan oleh browser dan kemudian browser akan menampilkan halaman utama website yahoo.com.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

HTTP request dan HTTP response akan dikirimkan setiap terjadi permintaan sebuah object. Bayangkan, halaman website yahoo.com mungkin memiliki puluhan gambar, teks dan beberapa animasi flash. Setiap file gambar, teks dan animasi tersebut pada dasarnya di request ke webserver satu per satu. Akan tetapi koneksi internet kita sudah cukup cepat, oleh karena itu proses pengiriman HTTP request dan HTTP response juga terjadi cukup cepat. Hanya perlu beberapa detik menampilkan sebuah halaman website. Wuzzz wuzzzz wuzzzzz.!!! Teknis HTTP request (HEAD) dan HTTP response adalah sebagai berikut :Object : http://www.google.co.id/images/srpr/logo3w.png Sending request: HEAD / images/srpr/logo3w.png HTTP/1.1 Host: www.google.co.id User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20120201 Firefox/10.0.1 Connection: close Receiving Header: HTTP/1.1 200 OK Content-Type: image/png Content-Length: 7007 Last-Modified: Fri, 05 Aug 2011 02:40:26 GMT Date: Fri, 17 Feb 2012 07:20:57 GMT Expires: Fri, 17 Feb 2012 07:20:57 GMT Connection: close 20% maka object dianggap STALE. Silakan dipelajari lebih lanjut dan dimengerti sebelum melanjutkan ke topik yang lebih jauh.Quick Tips : Pelajarilah regex lebih dalam untuk menghasilkan refresh_pattern yang efisien dan optimal.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Opsi-Opsi Tuning refresh_pattern

Opsi tuning refresh_pattern berikut ini saya ambil berdasarkan konfigurasi squid 2.7 dan lusca-head. Opsi tuning dituliskan sesudah nilai min, max dan lm-factor ditentukan.refresh_pattern [-i] min percentage max [tuning options]

Berikut adalah opsi tuning yang dapat kita gunakan : override-expire Opsi ini membuat squid mengabaikan header EXPIRE yang dikirimkan webserver. Hal ini memaksa berlakunya nilai min, persentasi, dan max walaupun server sudah MENENTUKAN WAKTU EXPIRE object didalam HTTP response-nya. override-lastmod Opsi ini mengabaikan header last modified date (waktu modifikasi terakhir) yang dikirimkan webserver. Squid akan menganggap object masih valid sampai min tercapai walaupun object pada server SUDAH DIMODIFIKASI. Untuk memaksa mengambil object yang baru, browser dapat menggunakan force reload (mengirim HTTP request dengan No-Cache). Opsi ini tidak berguna jika kita memberikan nilai 0 pada min. reload-into-ims Mengubah request no-cache request klien (force reload) menjadi request If-Modified-Since. Tujuannya adalah hanya melakukan validasi ulang terhadap object. Jika object telah dimodifikasi maka squid akan mengambil object dari internet, jika tidak maka squid akan menyampaikan object dari dalam cache ke klien. Opsi ini hanya berguna jika server mengirimkan response Last-Modified. ignore-reload Saat klien melakukan reload atau force reload, request akan dilakukan seperti biasa (tanpa mengirim no-cache request) ignore-no-cache Saat melakukan validasi object terkadang terdapat response Pragma: no-cache atau Cache-Control : no-cache yang mencegah object di disimpan dalam cache. Opsi ini mengabaikan respon tersebut, dan membuat object akan tetap disimpan kedalam cache.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

ignore-no-store Mirip seperti diatas, tapi opsi ini akan mengabaikan response pragma dan cache-control no-store. nostore pada header menandakan bahwa object bersangkutan sebenarnya tidak boleh disimpan. ignore-must-revalidate Terkadang server mengirim response Cache-Control: must-revalidate yang memaksa agar object harus di validasi saat direquest ulang. Opsi ini akan mengabaikan Cache-Control: must-revalidate, dan akan memvalidasi object berdasarkan nilai min. ignore-private Sama seperti diatas, squid akan mengabaikan response cache-control private. Cache-control = Private pada header menandakan object memiliki informasi privat atau data yang sensitive (rahasia). ignore-auth Opsi ini memaksa squid mengabaikan response otorisasi Cache-control: public Pada Lusca terdapat beberapa opsi tambahan : stale-while-revalidate=NN Squid akan melakukan validasi terus menerus jika object tidak kadaluarsa kurang dari NN menit. Oia.. secara default, squid memiliki default interval validasi 120 menit. ignore-stale-while-revalidate Terkadang server mengirim response cache-control= stale-while-revalidate=NN, opsi ini akan memaksa squid mencueki hal tersebut. Biasanya dikombinasi dengan stale-while-revalidate=NN pada refresh_pattern untuk menentukan waktu revalidate. max-stale=NN Menentukan waktu terlama object stale (busuk) yang tersimpan didalam cache. Object stale akan dihapus apabila melewati max-stale, walaupun nilai max lebih tinggi dari ini. Nilai max-stale didefinisikan dalam bilangan menit. negative-ttl=NN Mengganti parameter negative_ttl secara global untuk pattern URL yang sesuai. Tag negative_ttl berfungsi untuk menentukan seberapa lama halaman request yang gagal (404 Not Found atau Connection Refused) akan di cache. Satuan yang digunakan adalah detik.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

store-stale Opsi ini mengijinkan squid untuk menyimpan dari server yang tidak memiliki informasi validitas eksplisit termasuk object yang sudah stale. Secara umum gambaran kondisi object yang fresh dan stale adalah sebagai berikut : STALE jika usia object telah melewati waktu expire dari HTTP response. FRESH jika waktu expire masih belum terlewati. STALE jika response age telah melewati nilai max. FRESH jika lm-factor kurang dari persentasi %. FRESH jika lm-factor kurang dari min. Selain penjelasan diatas, object dianggap STALE.

Persiapan Sebelum Menentukan refresh_pattern

Sebelum menyusun refresh_pattern pada file squid.conf ada beberapa hal yang harus diperhatikan, antara lain : 1. Kondisi klien yang dilayani oleh squid.

Jika klien yang dilayani squid adalah warnet atau wifi hotspot, maka akan lebih efektif jika squid di setting untuk melakukan object caching yang ukurannya tidak terlalu besar. Tujuannya adalah memfokuskan HIT pada object yang sering diakses seperti gambar, javascripts, css dan sejenisnya.

Berbeda jika klien yang dilayani squid adalah sebuah gamecenter. Pada gamecenter fokus HIT ditujukan untuk melakukan object caching yang ukurannya besar seperti patch pada game-game online.

Bagaimana untuk warnet yang sekaligus dipakai untuk gamecenter? Fokus HIT adalah object-object kecil dan besar. Untuk mengurangi network load, bisa dilakukan load balancing menggunakan 2 atau lebih line internet.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Untuk klien perkantoran kecil atau Small Office Home Office (SOHO), squid akan lebih efisien digunakan untuk content caching file-file kecil (seperti pada warnet) kemudian di diimplementasikan menggunakan content filtering (seperti blocking iklan dan situs-situs tertentu) serta pembuatan access control list untuk mengendalikan kapan klien bisa browsing secara normal dan kapan akses browsing akan diblokir secara total.

Bagaimana squid untuk kelas perusahaan besar atau enterprise yang menggunakan akses internet secara masif dengan jumlah klien lebih dari 100 users atau bahkan perusahaan sekelas ISP? Untuk kasus seperti ini idealnya squid berfokus untuk content caching object besar dan kecil serta di tweak menggunakan dynamic content caching (Youtube, Vimeo, dan lain-lain).

2. Pola dan kebiasaan browsing klien

Perlu diperhatikan adalah tujuan umum klien saat melakukan aktivitas browsing. Misalnya untuk kalangan mahasiswa lebih efisien jika squid melakukan caching google, facebook, atau wordpress, ketimbang melakukan caching situs-situs berita.

Perlukah melakukan caching konten dinamik? Saya banyak melihat beberapa pengguna squid yang berusaha mati-matian mengusahakan HIT terhadap dynamic content seperti video youtube atau object yang di host oleh content delivery network (CDN). Apakah hal tersebut penting? Menurut saya, semua harus dilihat berdasarkan scope klien yang dilayani squid. Untuk klien yang jumlahnya sedikit dan jarang mengakses youtube (seperti halnya lingkungan kantor), akan lebih efisien jika prioritas HIT adalah konten-konten web pada umumnya seperti gambar, javascript, css, atau sejenisnya. Daripada mengorbankan resource yang lebih besar untuk menjalankan beberapa redirector dan memparsing regex yang rumit untuk mendapatkan HIT yang tinggi untuk dynamic content. Lain halnya jika klien yang dilayani squid jumlahnya besar, seperti pada RT/RW net atau ISP, caching dynamic content bisa saja dilakukan, karena ada kemungkinan yang signifikan object akan di HIT. Misalnya pada saat sebuah video di youtube booming, maka klien akan beramai-ramai mengunjungi video tersebut.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Oke cukup untuk intro implementasi refresh_pattern. Sebelum menambahkan refresh_pattern lainnya, saya sangat merekomendasikan menggunakan refresh_pattern default squid, setelah itu baru ditambahkan satu per satu refresh_pattern tambahan. Periksa HIT ratio setiap kali kita menambahkan refersh_pattern baru. Berikut adalah refresh_pattern default dari Lusca yang dapat digunakan untuk memulai penyusunan refresh_pattern lebih lanjut :refresh_pattern ^ftp: refresh_pattern -i (/cgi-bin/|\?) refresh_pattern . 1440 0 0 20% 0% 20% 10080 0 4320

Bagi anda yang ingin melakukan optimasi refresh_pattern secara serius, gunakan refresh_pattern ini terlebih dahulu. Kemudian ditambah sedikit demi sedikit sesuai dengan analisa anda terhadap perilaku browsing dan kebutuhan klien. Refresh_pattern diatas akan melakukan caching object FTP selama maksimum seminggu (10.080 menit). Tidak akan melakukan caching konten dari URL yang mengandung konteks cgi-bin untuk menghindari konflik terhadap CGI script dan konten dinamik. Sedangkan konten lain akan di cache selama maksimum 3 hari (4320 menit). refresh_pattern dasar ini tetap memperhatikan sepenuhnya response yang dikirim oleh server. Oleh karena itu, refresh_pattern ini dapat dijadikan acuan dasar dalam penulisan selanjutnya.

Ingat, tujuan squid adalah menjadikan akses internet lebih efisien. Cache farming (menumpuk object dalam cache) memang penting, tapi bukan merupakan tujuan utama implementasi squid. Adry Catalyst (2011)

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Contoh refresh_pattern Untuk Situs-Situs Populer

refresh_pattern efektif digunakan jika tidak ada expire header dari server asal object, atau refresh_pattern menggunakan opsi override-expire. Untuk situs-situs tertentu, pelajari terlebih dahulu konten apa saja yang berada didalamnya, sekaligus periksa URL sumber-sumber kontennya. Bagaimana cara memeriksa URL konten sebuah situs? Teknik sederhananya adalah menggunakan melihat page source-nya. Jika anda menggunakan Firefox, klik kanan pada sebuah halaman situs kemudian pilih View Page Source. Sedikit capture page source facebook.com :

Berikut beberapa contoh refresh_pattern untuk situs-situs besar (perlu dicatat saya menggunakan Lusca untuk refresh_pattern ini) : 1. Contoh refresh_pattern untuk Facebook

Facebook menggunakan CDN (Content Delivery Network) untuk menyimpan konten (gambar, css, javascript, dsb). CDN yang mereka gunakan antara lain fbcdn.net dan akaiamaihd.net, oleh karena itu konten dari CDN tersebut juga akan kita fokuskan untuk masuk cache.refresh_pattern i \.((facebook.com)|(fbcdn.net)|(akamaihd.net)).*\.(jpg|gif|png|mp(4|3))$ 1440 300% 10080 override-expire ignore-no-cache ignore-private reload-into-ims

Sedikit agak ekstrim, karena benar-benar melanggar kaidah HTTP. Tapi asumsi saya adalah setiap foto yang di host oleh CDN facebook bersifat statik. Ekstensi mp4 atau mp3 juga di cover oleh refresh_pattern ini.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

2. Kaskus

Saya mengamati path object-object di Kaskus juga bersifat statis walaupun di page source nya terdapat HTTP meta Pragma dan Cache Control no-cache. Dan saya rasa cukup aman jika menggunakan opsi tuning di refresh_pattern nya.

refresh_pattern

\.kaskus.us.*\/

43200

90%

129600

override-expire

override-lastmod ignore-reload ignore-no-cache store-stale

3. Situs berita Detik

Situs berita detik memiliki beberapa subdomain antara lain oto.detik.com, inet.detik.com, hot.detik.com, dan sebagainya. Sedangkan kontennya juga cukup aman di cache. Sebagian besar kontennya berisi gambar, beberapa animasi flash, javascript dan css.refresh_pattern \.detik.com.*\.(jpg|png|gif|css|js|swf)$ 10080 200% 43200 override-

expire override-lastmod ignore-no-cache store-stale

4. Patch game online

Sebelumnya, periksa secara seksama ekstensi apa saja yang merupakan patch game online. Kemudian tentukan nilai max maksimal 1 minggu karena biasanya game online melakukan patch dengan periode mingguan.refresh_pattern i \.(zip|exe|dll|ini|rar)$ 1440 100% 10080 overrideexpire ignore-no-cache ignore-private reload-into-ims

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

5. Object-object umum

Untuk meningkatkan probabilitas HIT, kita dapat tetapkan refresh_refresh untuk object-object yang sering di akses.refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i \.(gif|png|jpg|jpeg|ico)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(iso|avi|wav|mp3|mp4|mpeg|swf|flv)$ 43200 90% 432000 override-expire ignore-no-cache ignore-no-store ignore-private refresh_pattern -i \.(exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$ 10080 90% 43200 override-expire ignore-no-cache ignore-no-store ignore-private

refresh_pattern -i \.index.(html|htm)$ 0 40% 10080 refresh_pattern -i \.(html|htm|css|js)$ 1440 40% 40320 refresh_pattern . 0 40% 40320

Quick Tips :

Untuk mengecek validitas regular expression yang digunakan pada refresh_pattern, anda dapat menggunakan web berikut : Demikian sedikit ulasan tentang squid refresh_pattern. Silakan bereksperimen sendiri, dan jangan lupa - http://tools.netshiftmedia.com/regexlibrary/ di share kalo hasilnya memuaskan. - http://regexpal.com/

6. Dynamic contents

Perlu diketahui bahwa squid mencocokkan path object terhadap refresh_pattern secara berurutan dari refresh_pattern teratas ke refresh_pattern yang berada di barisan bawah. Oleh karena itu biasanya terdapat refresh_pattern untuk ftp dan gopher di bagian refresh_pattern teratas agar regex yang cocok terhadap protocol tersebut lebih cepat terproses.

Secara default, squid tidak akan menyimpan object dinamik kedalam cache konten atau object dinamis ditentukan dicocokkan dengan path cgi-bin atau ? yang terdapat pada URL nya. Pada squid 2.7 kebawah konten dinamik tidak di cache menggunakan tag hierarchy_stoplist dan cache_deny. Sedangkan pada versi 2.7 (khususnya Lusca) dan 3 keatas, konten dinamik tidak dicache dengan refresh_pattern -i (/cgi-bin/|\?) 0 0%0.

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Tujuan hal ini adalah kita dapat menentukan secara spesifik domain apa saja yang konten dinamiknya akan kita cache. Contoh :refresh_pattern -i movies.com/.* 10080 90% 43200 refresh_pattern (/cgi-bin/|\?) 0 0% 0

Dengan refresh_pattern tersebut, semua object dari movies.com walaupun terdapat ? dalam URL, objectnya tetap bisa di cache oleh squid.

Agar lebih aman biasanya di buatkan acl cache allow untuk domain yang diizinkan untuk di cache terutama untuk squid versi 3 kebawah. Contoh acl dan refresh_pattern nya :# izinkan youtube agar di cache acl youtube dstdomain .youtube.com cache allow youtube # selain youtube, kita paksa agar tidak masuk cache hierarchy_stoplist cgi-bin ? acl QUERY urlpath_regex cgi-bin \? cache deny QUERY refresh_pattern -i (get_video\?|videodownload\?|videoplayback\?) 161280

50000% 525948 override-expire ignore-reload

Setiap object dynamic content pada situs web video semacam Youtube, Vimeo dan sejenisnya di host pada server CDN yang memiliki path URL khususnya subdomain yang berbeda. Untuk memastikan object dapat di HIT kita dapat menggunakan url redirector. Jabaran diatas hanyalah sedikit contoh untuk beberapa situs popular dan dapat di optimasi, dan dioprek lebih lanjut agar squid lebih agresif dan bekerja maksimal.

Demikian tulisan kecil ini saya buat. Semoga bermanfaat untuk rekan-rekan yang lainnya. Jika ada penambahan, koreksi, atau pertanyaan silakan menghubungi saya di alamat email berikut ini.

Salam opensource! Fajar Ramadhan [email protected]

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]

Greets fly to : Adry Catalyst, Yo2d, Awey (Klinik Data crews @ http://www.klinikdata.com/) All members forum ClearOS Indonesia dan Forum Mikrotik Indonesia. You all rock, guys!!

Powered by :

networking / programming / web development

Sumber : Squid Proxy Server 3.1 Beginners Guide, Packt Publishing. February 2011 Squid The Definitive Guide, Oreilly. January 2004 Speed Up Internet Access Using Refresh Patterns, Solomon Asare, DelXy. squid.default.conf

fazar.net digital lifestyle and inspiration web: http://www.fazar.net/ - email : [email protected]