Video YouTube Tidak Dapat Di Cache Squid
Saya sempat memposting tentang cara
memaksa agar squid proxy memaksa agar video di Youtube dapat di cache
dengan baik – silakan cek posting dynamic content caching.
Akan tetapi sejak awal Maret 2013, sepertinya teknik tersebut sudah
tidak dapat digunakan untuk melakukan cache video youtube. Bagaimana hal
ini bisa terjadi?
!! Silakan cek update storeurl terbaru di bagian bawah artikel ini !!
Story behind YouTube video cache
Video
YouTube memiliki sifat sebagai dynamic content (konten dinamik)
walaupun pada faktanya video yang ditampilkan di YouTube dengan resolusi
apapun adalah object web yang statik. Dikatakan content dynamic karena
setiap video yang ada di YouTube memerlukan beberapa parameter tertentu
(video ID, itag, range, dan sebagainya) untuk kemudian di eksekusi oleh
server lewat perantaraan server side scripting. Namun juga dapat
dikatakan statik karena video yang di host dan di distribusikan oleh CDN
adalah object yang sama persis dengan object yang di push dari server
asalnya.
Konsep
dibelakang dynamic content caching adalah menyimpan (kedalam cache)
object web yang di generate secara dinamik oleh server pada saat diakses
pertama kali. Pada saat akses selanjutnya, user tidak lagi mengambil
object tersebut ke internet, namun cukup mengambilnya dari cache lokal,
sehingga bandwidth dapat dihemat, dan konten/object dapat disampaikan
dengan kecepatan penuh – full speed.
Setidaknya
ada 2 metode duplikasi video YouTube yang di implementasikan dengan
proxy squid, pertama menyimpan video kedalam direktori cache squid itu
sendiri, dan yang kedua adalah menggunakan perantara aplikasi ketiga –
misalnya apache, nginx, dan sebagainya untuk menyimpan video-video
tersebut kedalam direktori lain. Kedua metode ini pada umumnya
menggunakan fitur storeurl_rewrite_program – fitur pada squid 2.7.
Working on Youtube’s videos caching
Metode
yang paling banyak digunakan untuk melakukan caching video Youtube
adalah metode yang fenomenal yang dipopulerkan oleh mas Chuddy
Fernandez. Eyang Chuddy menggunakan fitur storeurl untuk menduplikasi
video YouTube kedalam cache_dir squid. Silakan baca tutorial beliau disini.
Pada
awalnya, setiap video di youtube memiliki video id yang statik. Tidak
peduli apakah video tersebut non-range (full video) atau video yang
telah dipotong-potong (ranged). Setiap video atau potongan video
tersebut di host oleh server CDN yang tersebar diseluruh dunia, sehingga
bisa saja pada ranged video setiap potongan videonya di hosting oleh
server CDN yang berbeda.
Ide youtube
video caching adalah melakukan caching yang agresif untuk video-video
atau potongan video yang sering diakses atau populer.
Pada
squid versi 2.7 diperkenalkan konsep storeurl rewrite yang dibahas
tadi. storeurl rewrite memungkinkan kita untuk memanipulasi / me-rewrite
URL yang diakses oleh klien squid sebelum menyimpan atau mengakses
object didalam cache squid.
How it works
Contohnya
saya mengakses sebuah video youtube, dan secara otomatis youtube
menanayangkan sebuah video dengan URL berikut (ini cuman contoh… bukan
URL beneran.. hehehe)
http://r17—sn-npo7en7r.c.youtube.com/videoplayback?id=OkjnGF45&itag=34&ip=10.20.30.254®ion=id&signature=98JLJKDBQDAKHJHH553HKK4H432M3NB54J32LN42K455503.2KNAFAF5AF&sver=2&expire=87654321445&key=yt4&ipbits=0&range=1-878676
Sebagian
orang mungkin akan bingung melihat URL tersebut – karena cukup panjang
dan memiliki banyak parameter (id, itag, region, dsb), namun tahukah
anda, sebenarnya untuk mengakses video tersebut kita cukup
mendefinisikan beberapa parameter saja.
Untuk
video non-range, parameter yang diperlukan hanya id dan itag. Sedangkan
untuk video ranged/partial, parameter yang diperlukan hanya id, itag,
dan range. Parameter lainnya hanya bersifat tracking, penentuan
signature, dan sebagainya.
Quote dari eyang Chuddy :
UPDATE: &range suppose to be partial contents… you may redirect them without “&range=xxx-xxx” to cache the whole content
Sehingga dengan bantuan storeurl rewriter, kita dapat menyederhanakan URL tersebut.
Untuk video non-range :
http://r17—sn-npo7en7r.c.youtube.com/videoplayback?id=OkjnGF45&itag=34
Untuk video range :
http://r17—sn-npo7en7r.c.youtube.com/videoplayback?id=OkjnGF45&itag=34&range=1-878676
Lebih
pendek bukan? Selain itu, url pendek seperti ini lebih ‘cache-friendly’
alias lebih “enak” untuk di cache oleh squid. Video yang hit akan
tampak seperti ini pada di squid access.log
1362105243.589 17760 10.20.30.254 TCP_HIT/200 156611767 GET
http://r17—sn-npo7en7r.c.youtube.com/videoplayback? – NONE/- video/mp4
Teknik seperti ini bertahan sampai awal maret tahun 2013. :)
YouTube cache : March 2013 until today
Mimpi
buruk datang pada awal Maret tahun 2013 – Youtube merubah coding
mereka! Hal ini membuat para administrator / pengelola squid proxy
menjadi galau, dan frustasi, ada yang menjadi linglung, insomnia,
susah tidur, lupa cebok, berhalusinasi, ingin coli terus, kehilangan
fokus dan bahkan ada yang ingin gantung diri. Apalagi banyak video
youtube yang sedang booming, sebut saja X-Factor (Fatiiinn… I love
you!! ~~), Indonesia Mencari Bakat, video harlem shake, video bokep, dan banyak lagi.
Video
id (atau parameter sejenisnya) yang awalnya bersifat statik dirubah
menjadi dinamik alias berubah-ubah. Alhasil, hampir semua video youtube
tidak dapat di cache oleh squid. Jika anda menggunakan storeurl yang
seperti mirip eyang Chuddy, maka anda mungkin akan menemui video yang
dibuka tidak sesuai dengan video yang di inginkan, karena video id yang
tertukar, atau hal lainnya.
Contoh kegalauan di Facebook yang lucu
dan unik .. hehehe. (ane juga galau kok… sama seperti anda-anda semua,
mari kita bergalau riaaa…!!)
Youtube juga mengimplementasikan url redirection yang semakin mempersulit bagi squid untuk melakukan cache video-video youtube.
Kesimpulan
Untuk
sementara, sangat sulit untuk melakukan caching video Youtube oleh
squid. Belum ada teknik yang di publikasikan yang benar-benar efisien
untuk melakukan hal tersebut. :D
Jadi,
bagaimana cara mengatasi masalah ini? Jawabannya : silakan menunggu,
karena belum ada storeurl yang sip untuk hal ini. hehehehe…
New Update!! New Update!!
Mas ucok_karnadi pada posting dibawah menambahkan storeurl terbaru untuk caching video Youtube. Silakan download di :
Yang
perlu dicatat adalah untuk menggunakan storeurl tersebut anda harus
menginstal modul ReadBackwards untuk Perl. Silakan download di : http://search.cpan.org/~uri/File-ReadBackwards-1.05/ReadBackwards.pm
Untuk pemakai Ubuntu, anda juga dapat menginstal modul ini menggunakan apt-get.
nuff said. :)
sumber disini