- Cloud Run Kullanarak Statik Dosya Sunumu - 1
- Google Cloud Run'ı kullanarak statik dosyaların nasıl sunulacağına dair bir blog yazısıdır. Yönlendirme ve performans iyileştirmelerine odaklanmaktadır.
AI tarafından çevrilmiş metin.
durumis AI tarafından özetlenen yazı
- Google Cloud Storage (GCS) ve Cloud Run'ı entegre ederek, görüntüler ve web kaynaklarını verimli bir şekilde yönettik ve web tarayıcısı ortamına göre optimize edilmiş dosyalar sağlayan bir CDN sistemi kurduk.
- Yüklenen görüntüler, webp, avif gibi çeşitli biçimlere dönüştürülür ve kaydedilir ve metin dosyaları, gzip, br gibi yöntemlerle sıkıştırılarak kullanıcılara optimize edilmiş içerik sağlanır.
- Dünya çapında 8 bölgede Cloud Storage ve Cloud Run'ı dağıtarak, kullanıcı konumuna göre en yakın bölgeden kaynaklar sağladık, böylece gecikmeyi en aza indirdik ve kullanıcı deneyimini iyileştirdik
Önceki Yazıda, Durumis'in Cloud Run'ı kullanarak statik dosya sunumu için kullandığı yöntemleri açıklamıştık.
Ancak, robots.txt veya favicon.ico gibi dosyaların aksine, bloga yüklenen resim dosyaları veya web sayfasının kendisinin kaynakları basitçe statik dosya olarak işlenemez.
Bu nedenle, bu tür dosyalar için Google Cloud Storage (bundan sonra GCS olarak anılacaktır) ile entegre olan Cloud Run'ı kullanmamız gerekir.
Temel kavram basittir. Gerçek zamanlı olarak yüklenen resim dosyaları veya site güncellendiğinde yüklenen yeni kaynaklar GCS'ye yüklenir ve dışarıdan bir istek geldiğinde Cloud Run, GCS'de dosyanın olup olmadığını kontrol eder ve varsa dosyayı gönderir.
Ancak, gerçekte işleyiş biçimi bundan çok daha karmaşıktır.
Durumis'te, resimleri GCS'ye yüklerken temel olarak üç farklı biçimde dönüştürürüz.
Yükleme sırasında jpeg veya png ise, ilgili resim dosyası varsayılan olarak webp ve avif olarak dönüştürülerek aynı anda kaydedilir.
Tüm resim dosyalarına URL aracılığıyla uzantısız olarak erişilir ve istek yapıldığında Cloud Run, isteği yapan web tarayıcısının başlıklarını kontrol ederek avif, webp sırasıyla web tarayıcısının alabileceği resim dosyasını kontrol eder ve her iki dosyayı da alamazsa jpeg veya png olarak iletir. Ayrıca, sadece biçim değiştirmenin yanı sıra, web sayfasında ihtiyaç duyulan boyuta göre yeniden boyutlandırma işlemi de önceden yapılarak saklanır/iletilir.
Diyagram
Metin dosyaları için de durum aynıdır.
Web sitesinde ihtiyaç duyulan birçok kaynak resim dosyalarının yanı sıra js ve css gibi metin dosyalarıdır.
Js ve css dosyaları da resimlere benzer şekilde yüklenirken gzip ve br ile sıkıştırılarak saklanır ve istek yapıldığında web tarayıcısının desteklediği dosya doğrudan gönderilir.
CDN'nin rolü yalnızca içeriği önbelleğe almaktan ibaret değildir. Google Cloud Platform (GCP) durumunda, Google Cloud Load Balancer (GCLB)'ye Cloud CDN işlevini doğrudan bağlayarak daha güçlü özellikler sunabiliriz.
Cloud CDN, arka uç hizmetinden (Backend Service) veri alır, depolar ve ardından istemciye iletir. Bu süreçte Cloud CDN, istemcinin istek başlıklarına göre optimize edilmiş dosyaları gönderebilir. Bu sayede aynı URL için farklı biçimlerde içerik sunulabilir.
Örneğin, '/image/tempImage' adlı aynı URL için
- Resim dosyaları durumunda
- Tarayıcının 'Accept' başlığına göre farklı biçimlerde resim gönderilir.
- Chrome tarayıcısı genellikle 'image/avif,image/webp,image/apng' sırasıyla önceliklendirir.
- CDN, bu sıraya göre mümkün olan resim biçimlerini sunar ve desteklenmiyorsa jpeg veya png biçimine dönüştürür.
- Benzer şekilde metin dosyaları için de
- Sıkıştırma yöntemine göre önceliklendirme yapılır.
- Chrome tarayıcısı 'gzip, deflate, br, zstd' gibi sıkıştırma yöntemlerini destekler.
- Örneğin, Durumis hizmeti şu anda gzip ve br'yi desteklediğinden, br sıkıştırılmış dosyalar öncelikli olarak gönderilir.
CDN'nin bu gelişmiş özellikleri sayesinde, kullanıcının ortamına göre optimize edilmiş içerik sunulabilir ve bu da web sitesinin performansını ve kullanıcı deneyimini büyük ölçüde artırabilir.
Cloud CDN olsa bile, temel olarak CDN'den de Cloud Run'a dosya talebi gönderilmesi gerektiğinden, Durumis, dünya çapında 8 bölgede Cloud Storage ve Cloud Run'ı önceden dağıtarak kaynakları önceden yerleştirir ve ilgili kaynakları gönderir. Bu nedenle, biraz maliyet artışı ve iş yükü olsa da, kullanıcılar çok daha iyi gecikme süresi (latency) deneyimi yaşar.
Cloud CDN kullanıldığında bile, temelde orijinal sunucudan (bu durumda Cloud Run) dosyaların alınması gerekir. Durumis, bu yapıyı optimize ederek küresel kullanıcılara daha iyi hizmet sunmaktadır.
Durumis'in küresel optimizasyon stratejisi:
- Dünya çapında 8 bölgede Cloud Storage ve Cloud Run'ı önceden dağıtma
- Her bölgeye gerekli kaynakları önceden dağıtma
- Kullanıcı talebi geldiğinde, en yakın bölgeden kaynakları gönderme
Bu yöntem, biraz maliyet artışı ve ek iş gerektirse de, kullanıcılara şu avantajları sağlar:
- Önemli ölçüde iyileştirilmiş gecikme süresi (latency)
- Daha hızlı içerik yükleme süresi
- Genel kullanıcı deneyiminin iyileştirilmesi
Bu yapıyı görselleştirirsek şöyle olur:
Bu yapı sayesinde Durumis, küresel kullanıcılara tutarlı bir şekilde hızlı hizmet sunabilir. Kullanıcının konumuna bakılmaksızın, en yakın bölgeden içerik sağlandığı için, dünya çapında her yerden düşük gecikme süresiyle hizmet kullanılabilir.
Bu yaklaşım, başlangıç kurulumu ve bakımı için daha fazla çaba gerektirse de, son kullanıcı deneyimini büyük ölçüde iyileştiren avantajlara sahiptir. Özellikle küresel hizmet sunan şirketler için bu yapı, rekabetçi hizmet sunmada büyük fayda sağlayabilir.
Bugünkü CDN konusundaki yazımızda sadece temel kavramları ele aldık.
Aslında, ayrıntılı ayarlama kısmını da ele alabilirdik, ancak bulut sağlayıcılar (GCP, Azure, AWS) arasında farklılıklar bulunmakta ve biraz daha... sıkıcı olduğu için kavramsal açıklamalar yaptık.
Gelecekte fırsat olursa, daha ayrıntılı bölümlere de değineceğiz.
Peki bir sonraki yazımızda neyi ele alacağız? Birden fazla (bizim durumumuzda tam 8 tane!) Cloud Storage bölgesi nasıl senkronize edilir? İşte bir sonraki yazımızda bu konuyu ele alacağız.
Teşekkürler.