Statik İçerik Barındırma düzeni

Azure Storage

Statik içeriği, bunları doğrudan istemciye teslim edebilecek bulut tabanlı bir depolama hizmetine dağıtın. Bu yüksek maliyetlere neden olabilecek işlem örneklerine yönelik ihtiyacı azaltabilir.

Bağlam ve sorun

Web uygulamaları genellikle bazı statik içerik öğeleri içerir. Statik içerikler istemci tarafından kullanılabilen HTML sayfaları ve resimler veya belgeler gibi diğer kaynakları bir HTML sayfasının parçası olarak (örneğin satır içi resimler, stil sayfaları ve istemci tarafı JavaScript dosyaları) veya ayrı indirmeler (örneğin PDF belgeleri) olarak içerebilir.

Web sunucuları dinamik işleme ve çıkış önbelleğe alma için iyileştirilse de, statik içeriği indirme isteklerini işlemeleri gerekir. Bu, daha verimli olarak kullanılabilecek işlem döngülerinin harcanmasına neden olur.

Çözüm

Çoğu bulut barındırma ortamına, bir uygulamanın kaynaklarından ve statik sayfalarından bazılarını depolama hizmetine yerleştirebilirsiniz. Depolama hizmeti bu kaynaklar için istekler seçerek diğer web isteklerini işleyen işlem kaynakları üzerindeki yükü azaltabilir. Bulutta barındırılan depolama için maliyetler genellikle işlem örneklerine göre çok daha düşüktür.

Bir uygulamanın bazı bölümlerini bir depolama hizmetinde barındırırken, dikkat edilmesi gereken konular uygulamanın dağıtılmasıyla ve anonim kullanıcılar tarafından kullanılmaması gereken kaynakların güvenliğinin sağlanmasıyla ilgilidir.

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:

  • Barındırılan depolama hizmeti kullanıcıların statik kaynakları indirmek için erişebileceği bir HTTP uç noktasını açığa çıkarmalıdır. Bazı depolama hizmetleri ayrıca HTTPS’yi de destekler, bu nedenle kaynakları SSL gerektiren depolama hizmetlerinde barındırmak mümkündür.

  • En yüksek performans ve kullanılabilirlik için, depolama kapsayıcısının içeriklerini dünyanın dört bir yanından birden fazla veri merkezinde önbelleğe almak üzere bir içerik teslim ağı (CDN) kullanmayı göz önünde bulundurun. Ancak CDN kullanmak için genellikle bir ücret ödemeniz gerekir.

  • Depolama hesapları genellikle bir veri merkezini etkileyebilecek olaylara karşı dayanıklılık sunmak üzere varsayılan olarak coğrafi olarak çoğaltılır. Bu, IP adresinin değişebileceği ancak URL’nin aynı kalacağı anlamına gelir.

  • Bazı içerikler bir depolama hesabında, diğer içerik ise barındırılan bir işlem örneğinde yer alıyorsa, uygulamayı dağıtmak ve güncelleştirmek daha zor hale gelir. Özellikle statik içerik betik dosyalarını veya kullanıcı arabirimi bileşenlerini içeriyorsa, ayrı dağıtımlar gerçekleştirmeniz ve uygulamayı ve içeriği daha kolay yönetmek için sürüm oluşturmanız gerekebilir. Ancak yalnızca statik kaynakların güncelleştirilmesi gerekiyorsa, uygulama paketini yeniden dağıtmaya gerek kalmadan depolama hesabına yüklenebilirler.

  • Depolama hizmetleri özel etki alanı adlarının kullanılmasını desteklemiyor olabilir. Bu durumda, bağlantıları içeren dinamik olarak oluşturulan içerikten farklı bir etki alanında yer aldıkları için bağlantılardaki kaynakların tam URL'sini belirtmek gerekir.

  • Depolama kapsayıcılarının genel okuma erişimi için yapılandırılması gerekir ancak kullanıcıların karşıya içerik yüklemesini önlemek üzere genel yazma erişimi için yapılandırılmamış olmadığından emin olmak önemlidir.

  • Anonim olarak kullanılamaması gereken kaynaklara erişimi denetlemek için bir vale anahtarı veya belirteç kullanmayı göz önünde bulundurun. Daha fazla bilgi için Vale Anahtarı düzenine bakın.

Bu düzenin kullanılacağı durumlar

Bu düzen aşağıdakiler için kullanışlıdır:

  • Bazı statik kaynaklar içeren web siteleri veya uygulamalar için barındırma maliyetlerini en aza indirme.

  • Yalnızca statik içerik ve kaynaklardan oluşan web siteleri için barındırma maliyetlerini en aza indirme. Barındırma sağlayıcısının depolama sisteminin özelliklerine bağlı olarak, tamamen statik bir web sitesini bir depolama hesabında barındırmak mümkün olabilir.

  • Diğer barındırma ortamlarında veya şirket içi sunucularda çalışan uygulamalar için statik kaynakları açığa çıkarma.

  • Depolama hesabının içeriklerini dünyanın dört bir yanından birden çok veri merkezinde önbelleğe alan bir içerik teslim ağı kullanarak içeriği birden çok coğrafi bölgede konumlandırma.

  • Maliyetleri ve bant genişliği kullanımını izleme. Statik içeriğin bir bölümü veya tamamı için aynı bir depolama hesabı kullanmak maliyetlerin barındırma ve çalışma zamanı maliyetlerinden daha kolay ayrılmasını sağlar.

Bu düzen aşağıdaki durumlarda kullanışlı olmayabilir:

  • Uygulamanın statik içeriği istemciye sunmadan önce içerik üzerinde işlem yapması gerekiyorsa. Örneğin, belgeye bir zaman damgası eklemek gerekebilir.

  • Statik içerik hacmi çok küçükse. Bu içeriği ayrı bir depolama alanından alma yükü, içeriği işlem kaynağından ayırmanın maliyet avantajından daha fazla olabilir.

İş yükü tasarımı

Bir mimar, Azure İyi Tasarlanmış Çerçeve yapılarında ele alınan hedefleri ve ilkeleri ele almak için statik içerik barındırma düzeninin iş yükünün tasarımında nasıl kullanılabileceğini değerlendirmelidir. Örneğin:

Yapı Taşı Bu desen sütun hedeflerini nasıl destekler?
Maliyet İyileştirme, iş yükünüzün yatırım getirisini sürdürmeye ve geliştirmeye odaklanır. Dinamik konaklar kodlanmış iş mantığınızı çalıştırabildiğinden dinamik uygulama konakları genellikle statik konaklardan daha pahalıdır. Statik içerik sunmak için bir uygulama platformu kullanmak uygun maliyetli değildir.

- CO:09 Akış maliyetleri
- CO:10 Veri maliyetleri
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Sorumluluğu dışlaştırılmış bir konağa boşaltmak, tıkanıklığı azaltmaya yardımcı olur ve uygulama platformunuzu yalnızca iş mantığı sağlamak için kullanmanıza olanak tanır.

- PE:07 Altyapıyı kodlayın

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer sütunların hedeflerine karşı herhangi bir dengeyi göz önünde bulundurun.

Örnek

Azure Depolama, statik içeriğin doğrudan bir depolama kapsayıcısından sunulmasını destekler. Dosyalar anonim erişim istekleri aracılığıyla sunulur. Varsayılan olarak, dosyaların gibi https://contoso.z4.web.core.windows.net/image.pngbir alt etki alanında bir URL'si core.windows.netvardır. Özel bir etki alanı adı yapılandırabilir ve dosyalara HTTPS üzerinden erişmek için Azure CDN'yi kullanabilirsiniz. Daha fazla bilgi için bkz. Azure Depolama'de statik web sitesi barındırma.

Bir uygulamanın statik parçalarını doğrudan depolama hizmetinden teslim etme

Statik web sitesi barındırma, dosyaları anonim erişim için kullanılabilir hale getirir. Dosyalara kimlerin erişebileceğini denetlemeniz gerekiyorsa, dosyaları Azure blob depolamada depolayabilir ve ardından erişimi sınırlandırmak için paylaşılan erişim imzaları oluşturabilirsiniz.

İstemciye teslim edilen sayfalardaki bağlantıların kaynağın tam URL'sini belirtmesi gerekir. Kaynak, paylaşılan erişim imzası gibi bir vale anahtarıyla korunuyorsa, bu imza URL'ye eklenmelidir.

Statik kaynaklar için dış depolamanın kullanılmasını gösteren örnek bir uygulama GitHub'da kullanılabilir. Bu örnek, statik içeriği barındıran depolama hesabını ve kapsayıcıyı belirtmek için yapılandırma dosyalarını kullanır.

<Setting name="StaticContent.StorageConnectionString"
         value="UseDevelopmentStorage=true" />
<Setting name="StaticContent.Container" value="static-content" />

StaticContentHosting.Web projesinin Settings.cs dosyasındaki Settings sınıfı, bu değerleri ayıklamak ve bulut depolama hesabı kapsayıcı URL’sini içeren bir dize değeri oluşturmak için yöntemleri içerir.

public class Settings
{
  public static string StaticContentStorageConnectionString {
    get
    {
      return RoleEnvironment.GetConfigurationSettingValue(
                              "StaticContent.StorageConnectionString");
    }
  }

  public static string StaticContentContainer
  {
    get
    {
      return RoleEnvironment.GetConfigurationSettingValue("StaticContent.Container");
    }
  }

  public static string StaticContentBaseUrl
  {
    get
    {
        var blobServiceClient = new BlobServiceClient(StaticContentStorageConnectionString);

        return string.Format("{0}/{1}", blobServiceClient.Uri.ToString().TrimEnd('/'), StaticContentContainer.TrimStart('/'));
    }
  }
}

Geçirilen URL ASP.NET kök yol karakteri (~) ile başlıyorsa, StaticContentUrlHtmlHelper.cs dosyası içindeki StaticContentUrlHtmlHelper sınıfı bulut depolama hesabına yolu içeren URL’yi oluşturan StaticContentUrl adlı bir yöntemi açığa çıkarır.

public static class StaticContentUrlHtmlHelper
{
  public static string StaticContentUrl(this HtmlHelper helper, string contentPath)
  {
    if (contentPath.StartsWith("~"))
    {
      contentPath = contentPath.Substring(1);
    }

    contentPath = string.Format("{0}/{1}", Settings.StaticContentBaseUrl.TrimEnd('/'),
                                contentPath.TrimStart('/'));

    var url = new UrlHelper(helper.ViewContext.RequestContext);

    return url.Content(contentPath);
  }
}

Views\Home klasöründeki Index.cshtml dosyası src özniteliği için URL’yi oluşturmak için StaticContentUrl yöntemini kullanan bir görüntü öğesi içerir.

<img src="@Html.StaticContentUrl("~/media/orderedList1.png")" alt="Test Image" />

Sonraki adımlar

  • Vale Anahtarı düzeni. Hedef kaynakların anonim kullanıcıların kullanımına açık olmaması gerekiyorsa, doğrudan erişimi kısıtlamak için bu düzeni kullanın.
  • Azure'da sunucusuz web uygulaması. Sunucusuz bir web uygulaması uygulamak için Azure İşlevleri ile statik web sitesi barındırma kullanan başvuru mimarisi.