fbpx
27.1 C
Jakarta
Rabu, 15 Mei 2024

Varnish, Memcached, Redis, dan HTTP Caching untuk Peningkatan Kinerja Aplikasi Web

Web tidak akan sama tanpa caching. Ini adalah elemen penting untuk setiap platform web dan apakah Anda menyadarinya atau tidak, kita semua mendapat manfaat dari berbagai bentuk caching setiap kali kita menjelajahi web. Sama seperti seseorang tidak lari ke toko kelontong setiap kali mereka membutuhkan susu, perangkat lunak tidak harus melewati seluruh siklus permintaan data setiap kali membutuhkan data.

Singkatnya, inilah ide caching – simpan data dalam memori akses cepat yang kemungkinan besar akan segera dibutuhkan. Mari kita periksa berbagai bentuk caching dan bagaimana caching dapat dimanfaatkan dengan sebaik-baiknya untuk meningkatkan kinerja web.

Cache web hadir dalam berbagai bentuk: di dalam browser web seseorang, melalui jaringan pengiriman konten (CDN), oleh penyedia layanan internet (ISP) yang menggunakan caching DNS, dan di dalam platform web melalui caching proxy dan caching basis data, untuk beberapa nama.

Caching melalui Browser dan CDN

Mari kita bahas caching browser dan CDN terlebih dahulu. Cache ini mengingat sumber daya yang telah dimuat sehingga pada permintaan halaman berikutnya, data seperti gambar, file CSS, dll. dapat digunakan kembali dan tidak diunduh ulang.

Ini memungkinkan pengurangan jumlah data yang diunduh dan mempercepat navigasi. Pengembang web dapat menginstruksikan browser dan jaringan pengiriman konten tentang berapa lama aset harus di-cache melalui file konfigurasi Apache atau Nginx seperti file .htaccess. File konfigurasi ini melakukan sejumlah tanggung jawab, salah satunya adalah mengatur header caching. Header caching tersebut mencakup header “Expires”, “Max-age”, “Last-modified”, dan “E-tag”, bersama-sama memungkinkan kontrol yang baik atas berapa lama aset akan di-cache.

Masing-masing memberikan kemampuan yang berbeda – tag kedaluwarsa, stempel waktu saat aset kedaluwarsa; tag umur-maksimum, jumlah detik untuk meng-cache aset; tag yang terakhir dimodifikasi, stempel waktu saat aset terakhir diubah; dan e-tag, pengidentifikasi unik untuk perbandingan aset. Sering kali konfigurasi caching akan dilakukan berdasarkan tipe per aset, meskipun tersedia kontrol yang lebih terperinci.

Misalnya aset yang tidak diharapkan sering berubah, seperti logo, mungkin memerlukan header caching usia maksimal yang besar; perubahan aset pada jangka waktu tertentu, seperti kartun Google yang berubah setiap hari, mungkin memerlukan tag kedaluwarsa; dan aset sering berubah dan secara sporadis, seperti avatar pengguna mungkin memerlukan e-tag atau tajuk caching yang terakhir dimodifikasi.

Saya tidak akan membahas terlalu banyak tentang caching DNS, hanya saja sistem nama domain (DNS) mencocokkan alamat web dengan alamat IP dan untuk mencegah kebutuhan untuk mencari ini di setiap permintaan halaman, ISP menggunakan caching DNS.

Baca Juga:  Memperkenalkan Freenginx, Fork dari Nginx Server Web Paling Populer

Sekarang mari kita periksa kembali arsitektur web kita untuk melihat bagaimana seseorang dapat memanfaatkan caching untuk meningkatkan kinerjanya.


Pada diagram di atas, Anda akan melihat beberapa tambahan baru dengan mekanisme caching baru kami, terutama caching proxy melalui Varnish dan caching basis data melalui Memcached atau Redis.

Caching dengan Varnish

Varnish adalah reverse proxy HTTP caching atau akselerator HTTP yang berada di depan lapisan aplikasi seseorang, menyimpan respons yang di-cache untuk digunakan kembali nanti. Saat Varnish menerima permintaan dari web, Varnish akan memeriksa apakah tanggapan tersebut baru-baru ini diminta dan apakah tanggapan yang valid telah disimpan dalam cache-nya, jika demikian, Varnish dapat melewati backend dan segera mengembalikan tanggapan yang telah disimpan.

Saat ini terjadi, respons biasanya dikirimkan dalam hitungan mikrodetik! Hal ini tidak hanya mempercepat waktu respons, tetapi juga mengurangi beban aplikasi dan tingkatan basis data seseorang. Seseorang dapat mengonfigurasi aset mana yang di-cache, sekali lagi, melalui header HTTP, kali ini header “Cache-Control”.

Mekanisme seperti itu sangat bermanfaat untuk platform yang sangat dinamis, seperti jejaring sosial dan sistem manajemen konten (CMS) seperti Drupal dan WordPress. Saat ini Anda akan sulit sekali menemukan platform web berskala besar yang tidak menggunakan Varnish, dengan perusahaan terkenal seperti Twitter, Facebook, dan Wikipedia semuanya menggunakannya.

Caching dengan Memcached

Membuat kueri ke database relasional seperti MySql, Oracle, atau PostgreSql biasanya merupakan hambatan dalam hal kecepatan dan kinerja dalam platform web. Ini membutuhkan data untuk dibaca dari disk dan kemudian ditanyakan.

Meskipun sebagian besar database siap-produksi sudah menggunakan teknik caching lanjutan untuk kumpulan data, indeks, dan kumpulan hasil kueri; mekanisme caching dalam memori untuk menyimpan objek yang benar-benar terpisah dari database memberikan peningkatan kinerja yang luar biasa. Dua alat yang sangat populer adalah Memcached dan Redis.

Memcached dengan cepat meningkat popularitasnya karena kemudahan penyiapan dan sifatnya yang terdistribusi. Biasanya Memcached dikonfigurasikan dengan instance di setiap webhead atau di dalam bank mesin. Anda dapat menganggap masing-masing instance ini sebagai keranjang di dalam tabel hash Memcached menyeluruh.

Fungsi hash kemudian memetakan kunci ke ember. Setelah berada di bucket tertentu, Memcached menggunakan fungsi hash kedua untuk menemukan kunci di dalam bucket tersebut. Hal ini memungkinkan Memcached untuk menyimpan dan mengambil data dalam waktu konstan O(1), sekaligus menjaga agar instance tetap independen satu sama lain. Node tambahan dapat ditambahkan dengan mudah dan node yang gagal dapat dialihkan aksesnya.

Baca Juga:  Tuning NGINX Untuk Performa Terbaik

Menyiapkan Memcached itu mudah. Setelah menginstal melalui manajer paket favorit Anda, Memcached akan dimulai secara otomatis setiap kali server Anda melakukan booting. Untuk mengintegrasikannya, seseorang hanya perlu memperbarui setiap panggilan database mereka dengan panggilan tambahan ke Memcached. Tulis operasi lalu tulis ke database dan Memcached; Operasi baca pertama kali dilakukan dalam Memcached dan hanya jika data sudah basi atau tidak ada, basis data akan diminta. Dengan asumsi seseorang telah mengabstraksi panggilan akses data mereka di dalam basis kode mereka, ini akan menjadi tugas yang relatif tidak menyakitkan.

Caching dengan Redis

Redis lebih baru dari Memcached, meskipun telah mendapatkan adopsi massal dengan merek-merek besar seperti Twitter, GitHub, dan Airbnb semuanya memanfaatkannya. Redis mirip dengan Memcached karena juga merupakan penyimpanan caching dalam memori, tetapi memiliki beberapa manfaat tambahan yang membantu pengadopsiannya.

Fitur pembeda kunci pertama yang diperkenalkan Redis adalah kemampuan untuk menyimpan nilai non-string seperti daftar, set, dan bahkan tabel hash. Bersamaan dengan tipe data ini, Redis mendukung operasi atomik seperti persimpangan dan gabungan, serta pengurutan.

Fitur utama kedua yang ditawarkan Redis adalah persistensi ke disk. Meskipun Redis memang merupakan penyimpanan data dalam memori, Redis menawarkan kemampuan untuk menyimpan data ke disk baik melalui snapshotting (RDB) dan memelihara log dari semua operasi yang dilakukan (AOF).

Ini sangat berguna karena beberapa alasan. Manfaat yang jelas adalah jika terjadi kegagalan layanan, data yang di-cache tidak akan hilang. Manfaat yang tidak begitu jelas tetapi tetap penting adalah bahwa ini memungkinkan platform seseorang untuk menghindari kelebihan permintaan terhadap database saat layanan dimulai ulang dan cache tidak memiliki data.

Di masa lalu, Redis biasanya diimplementasikan sebagai contoh tunggal, tetapi rilis yang lebih baru (3.0+) telah mengaktifkan penyiapan terdistribusi yang serupa dengan Memcached. Ini memungkinkan Redis mengakomodasi set data yang jauh lebih besar melalui pengelompokan. Beberapa instans memberikan peningkatan memori, peningkatan kapasitas komputasi, dan peningkatan kapasitas jaringan.

Apakah seseorang menggunakan Memcached atau Redis, keduanya akan memberikan dorongan luar biasa untuk kinerja dan efisiensi platform web, menyimpan objek dalam memori dan mengurangi beban pada tingkat basis data seseorang.

Ketersediaan tinggi yang modern, platform web berskala besar harus menggunakan berbagai bentuk caching, beberapa di antaranya telah kami singgung di sini secara singkat. Bersama-sama mekanisme caching ini akan membuat arsitektur seseorang secara signifikan lebih dapat diskalakan dan memungkinkan platform web seseorang untuk menangani peningkatan jumlah lalu lintas.

Web tidak akan sama tanpa caching. Ini adalah elemen penting untuk setiap platform web dan apakah Anda menyadarinya atau tidak, kita semua mendapat manfaat dari berbagai bentuk caching setiap kali kita menjelajahi web. Sama seperti seseorang tidak lari ke toko kelontong setiap kali mereka membutuhkan susu, perangkat lunak tidak harus melewati seluruh siklus permintaan data setiap kali membutuhkan data.

Singkatnya, inilah ide caching – simpan data dalam memori akses cepat yang kemungkinan besar akan segera dibutuhkan. Mari kita periksa berbagai bentuk caching dan bagaimana caching dapat dimanfaatkan dengan sebaik-baiknya untuk meningkatkan kinerja web.

Cache web hadir dalam berbagai bentuk: di dalam browser web seseorang, melalui jaringan pengiriman konten (CDN), oleh penyedia layanan internet (ISP) yang menggunakan caching DNS, dan di dalam platform web melalui caching proxy dan caching basis data, untuk beberapa nama.

Caching melalui Browser dan CDN

Mari kita bahas caching browser dan CDN terlebih dahulu. Cache ini mengingat sumber daya yang telah dimuat sehingga pada permintaan halaman berikutnya, data seperti gambar, file CSS, dll. dapat digunakan kembali dan tidak diunduh ulang.

Ini memungkinkan pengurangan jumlah data yang diunduh dan mempercepat navigasi. Pengembang web dapat menginstruksikan browser dan jaringan pengiriman konten tentang berapa lama aset harus di-cache melalui file konfigurasi Apache atau Nginx seperti file .htaccess. File konfigurasi ini melakukan sejumlah tanggung jawab, salah satunya adalah mengatur header caching. Header caching tersebut mencakup header “Expires”, “Max-age”, “Last-modified”, dan “E-tag”, bersama-sama memungkinkan kontrol yang baik atas berapa lama aset akan di-cache.

Masing-masing memberikan kemampuan yang berbeda – tag kedaluwarsa, stempel waktu saat aset kedaluwarsa; tag umur-maksimum, jumlah detik untuk meng-cache aset; tag yang terakhir dimodifikasi, stempel waktu saat aset terakhir diubah; dan e-tag, pengidentifikasi unik untuk perbandingan aset. Sering kali konfigurasi caching akan dilakukan berdasarkan tipe per aset, meskipun tersedia kontrol yang lebih terperinci.

Misalnya aset yang tidak diharapkan sering berubah, seperti logo, mungkin memerlukan header caching usia maksimal yang besar; perubahan aset pada jangka waktu tertentu, seperti kartun Google yang berubah setiap hari, mungkin memerlukan tag kedaluwarsa; dan aset sering berubah dan secara sporadis, seperti avatar pengguna mungkin memerlukan e-tag atau tajuk caching yang terakhir dimodifikasi.

Saya tidak akan membahas terlalu banyak tentang caching DNS, hanya saja sistem nama domain (DNS) mencocokkan alamat web dengan alamat IP dan untuk mencegah kebutuhan untuk mencari ini di setiap permintaan halaman, ISP menggunakan caching DNS.

Baca Juga:  Membersihkan dan menghapus cache Redis menggunakan CLI

Sekarang mari kita periksa kembali arsitektur web kita untuk melihat bagaimana seseorang dapat memanfaatkan caching untuk meningkatkan kinerjanya.


Pada diagram di atas, Anda akan melihat beberapa tambahan baru dengan mekanisme caching baru kami, terutama caching proxy melalui Varnish dan caching basis data melalui Memcached atau Redis.

Caching dengan Varnish

Varnish adalah reverse proxy HTTP caching atau akselerator HTTP yang berada di depan lapisan aplikasi seseorang, menyimpan respons yang di-cache untuk digunakan kembali nanti. Saat Varnish menerima permintaan dari web, Varnish akan memeriksa apakah tanggapan tersebut baru-baru ini diminta dan apakah tanggapan yang valid telah disimpan dalam cache-nya, jika demikian, Varnish dapat melewati backend dan segera mengembalikan tanggapan yang telah disimpan.

Saat ini terjadi, respons biasanya dikirimkan dalam hitungan mikrodetik! Hal ini tidak hanya mempercepat waktu respons, tetapi juga mengurangi beban aplikasi dan tingkatan basis data seseorang. Seseorang dapat mengonfigurasi aset mana yang di-cache, sekali lagi, melalui header HTTP, kali ini header “Cache-Control”.

Mekanisme seperti itu sangat bermanfaat untuk platform yang sangat dinamis, seperti jejaring sosial dan sistem manajemen konten (CMS) seperti Drupal dan WordPress. Saat ini Anda akan sulit sekali menemukan platform web berskala besar yang tidak menggunakan Varnish, dengan perusahaan terkenal seperti Twitter, Facebook, dan Wikipedia semuanya menggunakannya.

Caching dengan Memcached

Membuat kueri ke database relasional seperti MySql, Oracle, atau PostgreSql biasanya merupakan hambatan dalam hal kecepatan dan kinerja dalam platform web. Ini membutuhkan data untuk dibaca dari disk dan kemudian ditanyakan.

Meskipun sebagian besar database siap-produksi sudah menggunakan teknik caching lanjutan untuk kumpulan data, indeks, dan kumpulan hasil kueri; mekanisme caching dalam memori untuk menyimpan objek yang benar-benar terpisah dari database memberikan peningkatan kinerja yang luar biasa. Dua alat yang sangat populer adalah Memcached dan Redis.

Memcached dengan cepat meningkat popularitasnya karena kemudahan penyiapan dan sifatnya yang terdistribusi. Biasanya Memcached dikonfigurasikan dengan instance di setiap webhead atau di dalam bank mesin. Anda dapat menganggap masing-masing instance ini sebagai keranjang di dalam tabel hash Memcached menyeluruh.

Fungsi hash kemudian memetakan kunci ke ember. Setelah berada di bucket tertentu, Memcached menggunakan fungsi hash kedua untuk menemukan kunci di dalam bucket tersebut. Hal ini memungkinkan Memcached untuk menyimpan dan mengambil data dalam waktu konstan O(1), sekaligus menjaga agar instance tetap independen satu sama lain. Node tambahan dapat ditambahkan dengan mudah dan node yang gagal dapat dialihkan aksesnya.

Baca Juga:  Tuning NGINX Untuk Performa Terbaik

Menyiapkan Memcached itu mudah. Setelah menginstal melalui manajer paket favorit Anda, Memcached akan dimulai secara otomatis setiap kali server Anda melakukan booting. Untuk mengintegrasikannya, seseorang hanya perlu memperbarui setiap panggilan database mereka dengan panggilan tambahan ke Memcached. Tulis operasi lalu tulis ke database dan Memcached; Operasi baca pertama kali dilakukan dalam Memcached dan hanya jika data sudah basi atau tidak ada, basis data akan diminta. Dengan asumsi seseorang telah mengabstraksi panggilan akses data mereka di dalam basis kode mereka, ini akan menjadi tugas yang relatif tidak menyakitkan.

Caching dengan Redis

Redis lebih baru dari Memcached, meskipun telah mendapatkan adopsi massal dengan merek-merek besar seperti Twitter, GitHub, dan Airbnb semuanya memanfaatkannya. Redis mirip dengan Memcached karena juga merupakan penyimpanan caching dalam memori, tetapi memiliki beberapa manfaat tambahan yang membantu pengadopsiannya.

Fitur pembeda kunci pertama yang diperkenalkan Redis adalah kemampuan untuk menyimpan nilai non-string seperti daftar, set, dan bahkan tabel hash. Bersamaan dengan tipe data ini, Redis mendukung operasi atomik seperti persimpangan dan gabungan, serta pengurutan.

Fitur utama kedua yang ditawarkan Redis adalah persistensi ke disk. Meskipun Redis memang merupakan penyimpanan data dalam memori, Redis menawarkan kemampuan untuk menyimpan data ke disk baik melalui snapshotting (RDB) dan memelihara log dari semua operasi yang dilakukan (AOF).

Ini sangat berguna karena beberapa alasan. Manfaat yang jelas adalah jika terjadi kegagalan layanan, data yang di-cache tidak akan hilang. Manfaat yang tidak begitu jelas tetapi tetap penting adalah bahwa ini memungkinkan platform seseorang untuk menghindari kelebihan permintaan terhadap database saat layanan dimulai ulang dan cache tidak memiliki data.

Di masa lalu, Redis biasanya diimplementasikan sebagai contoh tunggal, tetapi rilis yang lebih baru (3.0+) telah mengaktifkan penyiapan terdistribusi yang serupa dengan Memcached. Ini memungkinkan Redis mengakomodasi set data yang jauh lebih besar melalui pengelompokan. Beberapa instans memberikan peningkatan memori, peningkatan kapasitas komputasi, dan peningkatan kapasitas jaringan.

Apakah seseorang menggunakan Memcached atau Redis, keduanya akan memberikan dorongan luar biasa untuk kinerja dan efisiensi platform web, menyimpan objek dalam memori dan mengurangi beban pada tingkat basis data seseorang.

Ketersediaan tinggi yang modern, platform web berskala besar harus menggunakan berbagai bentuk caching, beberapa di antaranya telah kami singgung di sini secara singkat. Bersama-sama mekanisme caching ini akan membuat arsitektur seseorang secara signifikan lebih dapat diskalakan dan memungkinkan platform web seseorang untuk menangani peningkatan jumlah lalu lintas.

Untuk mendapatkan Berita & Review menarik Saksenengku Network
Google News

Artikel Terkait

Populer

Artikel Terbaru