- Menggunakan Cloud Run untuk Menyajikan File Statis - 1
- Artikel blog ini membahas tentang cara menggunakan Google Cloud Run untuk menyediakan file statis. Artikel ini berfokus pada pengalihan (redirect) dan peningkatan performa.
Teks yang diterjemahkan oleh AI.
Ringkasan posting oleh durumis AI
- Kami telah membangun sistem CDN yang mengintegrasikan Google Cloud Storage (GCS) dan Cloud Run untuk mengelola gambar dan sumber daya web secara efisien, serta memberikan file yang dioptimalkan untuk lingkungan browser web.
- Gambar yang diunggah dikonversi dan disimpan dalam berbagai format seperti webp, avif, dan file teks dikompresi menggunakan gzip, br, dll., untuk memberikan konten yang dioptimalkan bagi pengguna.
- Cloud Storage dan Cloud Run ditempatkan di 8 wilayah di seluruh dunia untuk mengirimkan sumber daya dari wilayah terdekat dengan lokasi pengguna, sehingga meminimalkan latensi dan meningkatkan pengalaman pengguna
Artikel Sebelumnyamenjelaskan tentang penyajian file statis menggunakan Cloud Run yang digunakan oleh durumis.
Namun, tidak seperti file seperti robots.txt atau favicon.ico, file gambar yang diunggah ke blog atau sumber daya halaman web itu sendiri tidak dapat ditangani hanya sebagai file statis.
Oleh karena itu, file-file ini harus menggunakan Cloud Run yang terintegrasi dengan Google Cloud Storage (selanjutnya disebut GCS).
Konsep dasarnya sederhana. File gambar yang diunggah secara real-time atau sumber daya baru yang diunggah saat situs diperbarui diunggah ke GCS, dan ketika permintaan masuk dari luar, Cloud Run akan memeriksa apakah file tersebut ada di GCS, dan jika ada, Cloud Run akan mengirimkan file tersebut.
Namun, cara kerjanya sebenarnya jauh lebih kompleks daripada itu.
Pada dasarnya, durumis mengubah file gambar menjadi 3 format saat mengunggah ke GCS.
Saat mengunggah, jika file tersebut adalah jpeg atau png, file gambar tersebut secara otomatis diubah menjadi webp dan avif dan disimpan secara bersamaan.
Semua file gambar diminta melalui URL tanpa ekstensi, dan ketika diminta, Cloud Run memeriksa header dari browser web yang meminta untuk mengidentifikasi file gambar mana yang dapat diterima browser (avif, webp), dan jika tidak ada, Cloud Run akan mengirimkan jpeg atau png. Selain itu, tidak hanya mengubah format, tetapi juga mengubah ukuran gambar sesuai dengan yang dibutuhkan halaman web dan menyimpan/mengirimkannya.
Diagram
Hal yang sama berlaku untuk file teks.
Banyak sumber daya yang dibutuhkan situs web adalah gambar, tetapi juga file teks seperti js dan css.
File js dan css juga dikompresi dengan gzip dan br saat diunggah, mirip dengan gambar, dan file yang didukung browser dikirimkan saat diminta.
Peran CDN tidak terbatas pada caching konten. Dalam kasus Google Cloud Platform (GCP), fungsi Cloud CDN dapat dihubungkan langsung ke Google Cloud Load Balancer (GCLB), yang memberikan fungsionalitas yang lebih kuat.
Cloud CDN menerima data dari Backend Service dan menyimpannya sebelum mengirimkannya ke klien. Selama proses ini, Cloud CDN dapat mengirimkan file yang dioptimalkan berdasarkan header permintaan klien. Dengan cara ini, berbagai format konten dapat disediakan untuk URL yang sama.
Misalnya, untuk URL yang sama '/image/tempImage',
- Untuk file gambar
- Kirimkan format gambar yang berbeda berdasarkan header 'Accept' browser.
- Browser Chrome biasanya menunjukkan preferensi dalam urutan 'image/avif,image/webp,image/apng'.
- CDN menyediakan format gambar yang memungkinkan dalam urutan ini, dan jika tidak didukung, akan diganti dengan format jpeg atau png.
- Demikian pula, untuk file teks
- Preferensi untuk metode kompresi juga dipertimbangkan.
- Browser Chrome mendukung metode kompresi seperti 'gzip, deflate, br, zstd'.
- Misalnya, layanan durumis saat ini mendukung gzip dan br, sehingga file yang dikompresi dengan br akan dikirimkan terlebih dahulu.
Dengan fitur canggih CDN ini, konten yang dioptimalkan untuk lingkungan pengguna dapat dikirimkan, yang secara signifikan meningkatkan kinerja situs web dan pengalaman pengguna.
Meskipun Cloud CDN, pada dasarnya, permintaan file masih diperlukan dari CDN ke Cloud Run, jadi dalam kasus durumis, Cloud Storage dan Cloud Run ditempatkan di 8 wilayah di seluruh dunia untuk menempatkan sumber daya terlebih dahulu dan mengirimkannya. Oleh karena itu, meskipun ada sedikit peningkatan biaya dan beban kerja, pengguna dapat merasakan latensi yang jauh lebih baik.
Bahkan dengan Cloud CDN, pada dasarnya file harus diambil dari server asal (dalam hal ini Cloud Run). Durumis telah mengoptimalkan struktur ini untuk memberikan layanan yang lebih baik kepada pengguna global.
Strategi optimasi global durumis:
- Tempatkan Cloud Storage dan Cloud Run di 8 wilayah di seluruh dunia terlebih dahulu
- Sebarkan sumber daya yang diperlukan ke setiap wilayah terlebih dahulu
- Kirim sumber daya dari wilayah terdekat saat pengguna melakukan permintaan
Metode ini memerlukan sedikit peningkatan biaya dan pekerjaan tambahan, tetapi memberikan keuntungan berikut kepada pengguna:
- Latensi yang sangat meningkat
- Waktu pemuatan konten yang lebih cepat
- Peningkatan pengalaman pengguna secara keseluruhan
Visualisasi struktur ini adalah sebagai berikut:
Melalui struktur ini, durumis dapat memberikan layanan yang cepat dan konsisten kepada pengguna global. Karena konten dikirimkan dari wilayah terdekat terlepas dari lokasi pengguna, layanan ini dapat diakses dengan latensi rendah di mana pun di dunia.
Pendekatan ini memerlukan lebih banyak upaya dalam pengaturan awal dan pemeliharaan, tetapi memiliki keuntungan yang secara signifikan meningkatkan pengalaman pengguna akhir. Terutama untuk perusahaan yang menyediakan layanan global, struktur ini dapat sangat membantu dalam memberikan layanan yang kompetitif.
Dalam pembahasan CDN hari ini, kami hanya membahas konsep dasar.
Sebenarnya, kami juga dapat membahas pengaturan detail, tetapi karena berbeda untuk setiap vendor cloud (GCP, Azure, AWS), dan agak membosankan, kami hanya membahas penjelasan konsep.
Kami akan membahas lebih detail di lain waktu jika ada kesempatan.
Jadi, topik pembahasan selanjutnya adalah bagaimana Cloud Storage di beberapa wilayah (kami memiliki 8!) disinkronkan...
Terima kasih.