Mengenal Memcached

Posted: 2 Mei 2011 in Lain-lain

Alkisah dua orang praktisi IT, seorang
Programmer dan Sysadmin sepakat untuk membangun sebuah website. Website
yang dibangung adalah website yang menggunakan webserver dan database.
User dari seluruh penjuru internet akan berkomunikasi dengan webserver
dan meminta webserver untuk menampilkan halaman yang mereka inginkan.
Selanjutnya webserver akan meminta kepada database data-data yang
dibutuhkan untuk menghasilkan halaman yang dimaksud. Si Programmer
bertugas melakukan coding, dan Sysadmin menyiapkan webserver dan
database server.

Suatu saat Sysadmin menyadari bahwa
database mereka sakit parah. Sistem monitoring terus menerus menampilkan
pesan berwarna merah yang akhirnya mereka pun memvonis bahwa database
mereka terkena demam tinggi. Beban rata-rata = 20. Kemudian Programmer
bertanya pada Sysadmin. “Well, apa yang bisa kita lakukan ?”, Sysadmin
menjawab “Sepertinya aku pernah mendengar sebuah program bernama
Memcached, konon katanya program inilah yang membantu mengatasi demam
pada database server Livejournal”

Si Sysadmin kemudian melirik mesin
webservernya, disana terdapat 6 buah mesin yang sedang running dan ia
memutuskan menggunakan tiga server untuk menjalankan Memcached server.
Sysadmin kemudian menambahkan RAM 1 gigabyte ke setiap server dan mulai
menjalankan Memcached dengan batas konfigurasi masing-masing adalah 1
gigabyte. Dengan ini Sysadmin akhirnya memiliki tiga Memcached instance,
dimana setiap instance nya dapat menampung data hingga 1 gigabyte. 
Kata Programmer dan Sysadmin “Behold the Glorious Memcached” .

Dan sekarang apa yang terjadi ?, Benda
ini tidak melakukan apapun. Memcached bahkan tidak berkomunikasi
kemanapun dan tidak menampung data sama sekali. Hal terburuk, kini
bahkan aktifitas rata-rata database server meningkat menjadi 25!

Tanpa ragu-ragu sang Programmer langsung
mengambil manual pecl/memcache client library. RTFM dan RTFM… dan
kemudian berkata, Aha, tidak usah takut kawan, aku punya ide. Ia kemudia
mencatat alamat IP dan port yang digunakan oleh ketiga Memcached tadi,
dan memasukkannya kedalam Array PHP

$MEMCACHE_SERVERS = array(
“10.1.1.1″, //web1
“10.1.1.2″, //web2
“10.1.1.3″, //web3
);

Kemudian ia membuat objek, sebut saja ‘$memcache’

$memcache = new Memcache();
foreach($MEMCACHE_SERVERS as $server){
$memcache->addServer ( $server );
}

Yup, selanjutnya tinggal
implementasi. Hmm.. pertama dicoba dimana ya ?. Setelah berpikir sejenak
si Programmer berkata “aha, aku tahu”, Kalau tidak salah dihalaman
depan website kita itu ada query “SELECT * FROM hugetable WHERE
timestamp > lastweek ORDER BY timestamp ASC LIMIT 50000;” dan butuh
waktu sekitar 5 detik buat dijalankan. Gimana kalau ini saja dulu yang
dicoba dimasukkan kedalam Memcached. Tanpa pikir panjang si Programmer
lalu melakukan sedikit modifikasi untuk menggunakan objek $memcache yang
telah dibuat sebelumnya. Jadilah potongan code seperti ini

$huge_data_for_frong_page = $memcache->get(“huge_data_for_frong_page”);
if($huge_data_for_frong_page === false){
$huge_data_for_frong_page = array();
$sql = “SELECT * FROM hugetable WHERE timestamp > lastweek ORDER BY timestamp ASC LIMIT 50000″;
$res = mysql_query($sql, $mysql_connection);
while($rec = mysql_fetch_assoc($res)){
$huge_data_for_frong_page[] = $rec;
}
// cache for 10 minutes
$memcache->set(“huge_data_for_frong_page”, $huge_data_for_frong_page, 600);
}

// use $huge_data_for_frong_page how you please

BAM!. Database load tiba-tiba turun
menjadi 10! Kecepatan akses ke website juga meningkat. Muncul pertanyaan
di benak si Sysadmin. Apa yang sebenarnya terjadi ?, Kok bisa ?. Segera
ia mengecek grafik monitoring Memcached. disini ia menggunakan cacti,
dan lihat ada trafik mengarah ke salah satu instance Memcached. Hmm..
“tapi bukannya aku menyediakan tiga instance Memcached” pikirnya. Karena
penasaran ia kemudian telnet ke port 11211 di setiap instance Memcached
dan bertanyalah dia :

Hei, “get huge_data_for_front_page” dirimu ada disitu atau tidak ?

Instance Memcached pertama tidak memberikan respon…

Instance Memcached kedua tidak memberikan respon…

Namun tiba-tiba ada respon dari Instance Memcached ketiga, “Iya gw
ada disini, nih buktinya (sambil melakukan dumping data yang dimilikinya
ke dalam sesi telnet)”

Nah ini dia datanya, tapi kenapa hanya ada di satu Memcached saja ya ?

Sedikit bingung ia kemudian bertanya kedalam milis namun jawaban yang
diterimanya selalu sama “Itu dikarenakan sistem cache terdistribusi
(distributed cache)”. Sekarang ia tahu penyebabnya namun masih sedikit
bingung dengan maksud dari “distributed cache” tadi. Lalu ia meminta si
Programmer untuk melakukan cache beberapa data tambahan. Mari kita
pecahkan misteri ini, aku yakin kita bisa.

Oke, selanjutnya ada query yang bisa dibilang masih cukup cepat, tapi
query ini dijalankan 100 kali per detiknya. Mungkin ini bisa digunakan.
Lalu si Programmer melakukan penyesuaian code untuk menggunakan
Memcahed terhadap query ini.

Voila, sekarang database load berkurang menjadi 8!.

Melihat ini si Programmer kemudian melakukan banyak penyesuaian
tambahan. Kali ini ia menggunakan teknik baru yang ia temukan di milis
dan FAQ. Wohoo.. database load berkurang secara drastis menjadi 7, 5, 3,
2, 1!

Sysadmin terus mengamati grafik lalu lintas data seiring dengan
turunnya load ke database. Lihat ketiganya kini bekerja, dan ketiganya
mendapatkan request. Ini hebat.

eits, tunggu dulu kalau aku memberikan setiap instance Memcached 1
gigabyte memori, artinya total aku bisa melakukan caching sebanyak 3
gigabyte. Ini luar biasa sekali. Benda ini bisa menghemat pengeluaran
kita. Oh Brad Fitzpatrick, I love your ass!

Masalah selanjutnya. Salah satu mesin yang digunakan untuk
menjalankan Memcached sudah tua dah membutuhkan perawatan. Mau tidak mau
aku harus mematikannya. Kalau demikian apa yang akan terjadi pada
cluster Memcached yang sedang berjalan ?. Hmm.. mari dicoba. Kemudian ia
mematikan salah satu mesin sembari mengamati grafik lalu lintas data,
Owh, load database melonjak. Kini bukan lagi 1 melainkan 2. Tapi
sepertinya masih dalam batas toleransi. Toh kedua Memcached masih
berjalan. Aku akan cuma kehilangan sedikit data dalam cache, tapi
pekerjaan maintenance tetap bisa dilakukan. Not bad lah.

Setelah selesai melakukan maintenance ia kemudian menghidupkan
kembali mesin memcache tersebut, dah kini load ke database turun kembali
menjadi 1. Hoho… great..

Si Programmer dan Sysadmin akhirnya terus melanjutkan pekerjaannya
dalam membangun website, sambil tetap menggunakan teknik cache. Disaat
mereka memiliki pertanyaan mereka tak segan-segan bertanya ke milis atau
membaca FAQ. Dan mereka pun hidup bahagia seterusnya (apa coba) :P

Courtesy :
http://code.google.com/p/memcached/wiki/TutorialCachingStory
Author: Dormando via IRC. Edited by Brian Moon for fun. Further fun
editing by Emufarmers . Editted and translated again into Indonesian by
me.

http://thesparkofinsanity.wordpress.com/2010/07/13/mengenal-memcached/

Iklan

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Google+

You are commenting using your Google+ account. Logout /  Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s