Bagaimana Caching Dapat Mengurangi Biaya Server Kamu

Sekarang, opsi untuk nge-host aplikasi sudah bertebaran dimana-mana. Kalau dulu kita mungkin terbatas cuma punya opsi on-premise, sekarang kita punya alternatif nge-host aplikasi di cloud provider. Mulai dari AWS, GCP, Azure, DigitalOcean, Heroku, Vultr, Linode, hingga opsi serverless seperti Netlify dan Vercel. Dari sisi biaya, cloud provider ini memang menawarkan biaya yang lebih terjangkau dibanding nge-host on-premise. Biasanya, cloud provider akan menyediakan resources yang dapat berupa compute unit instances (umumnya diukur dengan core CPU dan/atau besaran RAM yang dapat kita gunakan, contohnya seperti AWS EC2) atau object storage instances (umumnya diukur dengan besaran storage yang dapat kita gunakan, contohnya seperti AWS S3). Sehingga, biaya cloud provider akan berbanding lurus dengan jumlah resources yang kita gunakan.

Jika kita menggunakan cloud provider untuk nge-host aplikasi kita, tentu saja salah satu pertimbangan yang harus dipikirkan adalah: apakah aplikasi kita masih bisa di-optimasi / dibuat lebih efisien sehingga dapat mengurangi resources yang digunakan? Mengingat lebih sedikit resources yang digunakan = mengurangi biaya, maka optimasi aplikasi akan menjadi topik yang tidak bisa dilewatkan jika kita ingin mengurangi biaya cloud.

Sebetulnya, ada banyak cara untuk dapat mengoptimasi aplikasi. Salah satu yang umum digunakan dan implementasinya cukup sederhana adalah penggunaan caching. Jenis caching pun sebetulnya beragam, dari mulai Static Asset Caching yang disimpan di browser masing-masing client, hingga Server Side Caching yang merupakan implementasi cache di sisi server. Di tulisan kali ini, kita akan fokus ke server side caching karena static asset caching sudah sangat lumrah digunakan. Server side caching ini dapat mengurangi beban server karena tidak semua request akan langsung diproses oleh server. Jika semua/sebagian request sudah ada dalam cache, maka server akan memberikan respon langsung dari cache tanpa harus melakukan komputasi ulang kembali. Hasilnya sebetulnya tidak hanya resource yang digunakan (berpotensi) lebih sedikit, tetapi juga pengguna aplikasi kita akan merasakan waktu respon yang lebih cepat dari server. Biaya bisa turun, user experience naik. Killing two birds with one stone.

Media Storage Server Side Caching

Jika cache memang sepenting itu, sekarang yang perlu kita pikirkan adalah, di media storage apakah cache akan disimpan?

Storage yang dapat digunakan untuk menyimpan cache bervariasi, tapi yang umum digunakan adalah text file, database, hingga memory/RAM. Storage yang kita pilih sebagai cache tentu saja harus yang dapat memberikan efek signifikan. Semakin cepat server mengakses cache, semakin cepat user mendapat respon dari server, user experience akan semakin baik. Sehingga, kecepatan dari masing-masing media storage harus menjadi salah satu faktor yang dipertimbangkan (tentu saja faktor lain seperti kemudahan implementasi juga tidak kalah penting).

Jenis KomputasiWaktu TeoritisWaktu Relatif
1 CPU cycle0.3 ns1 s
Level 1 cache access0.9 ns3 s
Level 2 cache access2.8 ns9 s
Level 3 cache access12.9 ns43 s
Main memory access120 ns6 min
Solid-state disk I/O50-150 μs2-6 days
Rotational disk I/O1-10 ms1-12 months
Internet: SF to NYC40 ms4 years
Internet: SF to UK81 ms8 years
Internet: SF to Australia183 ms19 years
OS virtualization reboot4 s423 years
SCSI command time-out30 s3000 years
Hardware virtualization reboot40 s4000 years
Physical system reboot5 m32 millenia

Tabel ini diambil dari tulisan Jeff Atwood disini. Angka pada kolom Waktu Teoritis, seperti namanya, mungkin bisa berbeda dengan angka sebenarnya. Namun setidaknya tabel tersebut dapat memberi gambaran kecepatan relatif antar media storage, yang dimudahkan dengan membaca angka-angka pada kolom Waktu Relatif. Bisa kita lihat disana bahwa kecepatan memory beberapa kali lipat lebih cepat bahkan jika dibandingkan dengan SSD sekalipun. Sehingga, akan sangat menguntungkan jika kita bisa memanfaatkan memory sebagai media untuk menyimpan cache. Karena text file dan database disimpan di disk, otomatis pilihan kita adalah mencari opsi in-memory caching. Disinilah Memcached dapat mengambil peran tersebut.

Apa Itu Memcached?

Memcached merupakan solusi in-memory caching yang dapat digunakan untuk mempercepat performance dari aplikasi web. Memcached dapat mengurangi beban server database dengan menyimpan data dan objek di dalam memory, sehingga dapat membantu server mempercepat pemrosesan request dari pengguna.

Beberapa keuntungan dalam penggunaan Memcached adalah sebagai berikut:

  1. Meningkatkan waktu respon server: Dengan menyimpan data yang sering digunakan di memory, aplikasi tidak perlu mengambil data langsung dari server database. Sehingga dapat meningkatkan waktu respon dari server ke pengguna, dan menjadikan aplikasi dapat memiliki user experience yang lebih baik.

  2. Skalabilitas: Memcached dapat dirancang sebagai sebuah cluster terdistribusi, sehingga dapat menangani traffic yang meningkat dengan ditambahkan server baru ke dalam cluster Memcached.

  3. Mengurangi beban server database: Penyimpanan data di Memcached dapat mengurangi frekuensi aplikasi dalam melakukan query langsung ke server database. Inilah yang pada akhirnya berpotensi dapat membantu mengurangi biaya server, karena dengan mengurangi beban server database dapat meminimalkan resource yang dibutuhkan dalam manajemen server database.

  4. Kemudahan konfigurasi: Memcached juga menawarkan beberapa konfigurasi yang dapat disesuaikan dengan kebutuhan aplikasi. Dari mulai alokasi memory, expiration time bagi data yang disimpan, hingga penggunaan key yang dapat di-custom.

  5. Kemudahan integrasi: Sudah banyak bahasa pemrograman yang memiliki ekstensi/library untuk integrasi Memcached, seperti PHP, Python, Java, dll. Sehingga tidak membutuhkan waktu yang lama jika ingin memulai menggunakan Memcached.

Memcached merupakan salah satu tool yang dapat membantu kita untuk mempercepat performance dari aplikasi dan meningkatkan user experience. Dengan menyimpan data yang sering digunakan, Memcached dapat membantu mengurangi beban dari server database. Sehingga, penggunaan Memcached berpotensi dapat menghemat biaya server karena dapat mengurangi jumlah resource yang dibutuhkan dalam mengelola server database. Mengingat Memcached bersifat gratis dan open source, menambah daftar alasan mengapa kita perlu implementasi Memcached untuk meningkatkan performance aplikasi kita.

Pada tulisan berikutnya, saya akan mencoba memberikan perbandingan sederhana antara waktu respon dari aplikasi yang menggunakan Memcached dengan yang tidak menggunakan Memcached. Stay tuned ya!

0
Subscribe to my newsletter

Read articles from Rhezatama Dwi Rendragraha directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Rhezatama Dwi Rendragraha
Rhezatama Dwi Rendragraha

A PHP wizard, SQL sorcerer, and Git ninja. Juggles nginx, PHP-FPM, and Linux bash like a circus act. 10+ years of turning coffee into code.