Mengenal Memcached

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.

3 Comments

  1. mirma yudha said,

    July 13, 2010 at 4:48 pm

    wehehehe.. bagus euy cara menyampaikan materinya..

  2. GLG said,

    July 14, 2010 at 6:36 pm

    Hehehe yoa, gw pas baca juga ngerasa artikelnya bagus. Makanya gw translate deh ke indonesia… :D
    Kalau kata orang yang comment di situs aslinya, yang kaya gini disebut KISS principle. (Keep It Simple and Stupid) :D

  3. deche said,

    September 20, 2010 at 11:02 am

    Waah.. pakai Codeigniter + Memcached juga? Boleh ngobrol? Saya juga sedang belajar…


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.