Bagaimana Caching Dapat Mengurangi Biaya Server Kamu
Siapa sih yang ga mau biaya server jadi lebih murah?
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 Komputasi | Waktu Teoritis | Waktu Relatif |
1 CPU cycle | 0.3 ns | 1 s |
Level 1 cache access | 0.9 ns | 3 s |
Level 2 cache access | 2.8 ns | 9 s |
Level 3 cache access | 12.9 ns | 43 s |
Main memory access | 120 ns | 6 min |
Solid-state disk I/O | 50-150 μs | 2-6 days |
Rotational disk I/O | 1-10 ms | 1-12 months |
Internet: SF to NYC | 40 ms | 4 years |
Internet: SF to UK | 81 ms | 8 years |
Internet: SF to Australia | 183 ms | 19 years |
OS virtualization reboot | 4 s | 423 years |
SCSI command time-out | 30 s | 3000 years |
Hardware virtualization reboot | 40 s | 4000 years |
Physical system reboot | 5 m | 32 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:
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.
Skalabilitas: Memcached dapat dirancang sebagai sebuah cluster terdistribusi, sehingga dapat menangani traffic yang meningkat dengan ditambahkan server baru ke dalam cluster Memcached.
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.
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.
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!