0

我們基本上使用recommended cloud architecture,其中源圖像存儲在Azure Blob存儲中,imageresizer運行在Azure App Service上,而Azure CDN是CDN圖層。我們可以將Azure Blob存儲用於ImageResizer的ImageCache

不過,我們遇到了ImageResizer v3,Azure App Service deployment slots和DiskCache的問題。

我們使用Azure應用服務上的臨時插槽來防止中斷。我們也使用DiskCache插件。如果沒有任何配置,imagecache將被寫入D:\ home \ site \ wwwroot \ imagecache \,這是特定於插槽的。當我們交換插槽,使用imagecache是​​陳舊的和大量的圖片將丟失

  1. 這會產生兩個問題。

  2. 我們的應用程序服務計劃總是有一個陳舊的imagecache佔用磁盤空間,我們的Microsoft顧問建議使用Blob存儲而不是DiskCache的虛擬本地文件系統。

我注意到沒有BlobCachePlugin或S3CachePlugin,我想知道是否有一個很好的理由。

我的問題是:

  1. 有什麼理由不使用存儲實現將指令接口的自定義BlobStorageCachePlugin在Azure的Blob存儲的imagecache?
  2. 如果有充分的理由,建議您採取哪種替代架構來避免部署插槽問題?

回答

2

緩存需要低延遲。將緩存放在Blob存儲上會使緩存命中甚至會非常糟糕,可能會爲每個請求增加800-1800毫秒。如果Redis服務器可用,則有辦法使這項工作更好,但仍不如使用低延遲存儲的性能好。

解冷緩存問題:

  1. 熱身通過複製真實世界的請求它(理想的情況,因爲它也溫暖了非IR緩存)的升級插槽。
  2. 如果這是不可能的,那麼你可能會考慮在每個只添加文件的服務器上的imagecache文件夾之間的某種計劃拷貝。不要嘗試修改或刪除主動提供的文件或目錄。
  3. 使用低延遲分佈式文件系統或低延遲共享網絡驅動器。然而,衡量延遲,因爲這將是一個問題,除非你在服務器之間有非常好的網絡連接。有一些blob存儲可以足夠快地用於緩存,但通常只有當您自己管理它們以確保低延遲時纔會這樣做。

這確實意味着您將無法啓用autoClean自動清除緩存條目;設置磁盤使用情況的監視。

+0

根據http://www.azurespeed.com/,BlobStorage的延遲實際上並不那麼糟糕(大約40ms,有時峯值400ms)。特別是因爲我們的應用程序服務與BlobStorage處於相同的數據中心/地區。你有實踐經驗,否則會有所反映? – Wilgert

+0

我從來沒有見過40毫秒的延遲,也許是100美好的一天。如果你有很好的延遲,你可以看看第三方nuget包。但是,即使是40ms的緩存命中還可以嗎? –

0

如果您有一個CDN坐在您的Web App前面,那麼您是否需要DiskCache插件(或所需的Blob存儲緩存)?

一旦圖像被Web應用程序處理後,它將被其中一個CDN邊緣服務器緩存,那麼在Web App/Blob存儲中緩存它的目的是什麼?

+0

好吧,我們有來自世界各地的用戶,並結合超過300.000多種尺寸的可能圖像。我們的CDN緩存命中率還不足以完全依賴。此外調整圖像大小非常緩慢(秒),所以我們還將調整大小的版本存儲在本地緩存中。附:我不知道你是否知道,但如果某些邊緣服務器中的某些內容存在緩存中,它仍然從任何其他邊緣服務器的源中加載。 – Wilgert