2016-06-21 63 views
0

首先,我必須提到緩存的一些基本知識。如果你想在一個內存中緩存一個對象,那麼對象應該是可序列化的,因爲它必須通過網絡傳輸。因此,如果要緩存Image Magic對象,則必須將其轉換爲內存流,然後在讀取它時再次將內存流轉換爲Image Magic對象。在多於一臺服務器的內存中緩存圖像

但是,如果您要使用使用堆內存的MemoryCache,則可以緩存每個沒有可序列化的對象。

現在我的情況:我有兩臺AWS服務器,我們的網站有16個負載均衡器。所以我們在兩個不同的網站上有16個相同應用程序的實例。我有超過2000張在S3上的照片。目前,我正在閱讀它們並作爲內存流,然後將它們轉換爲Image magic,並將其與用戶圖片結合起來,並向最終用戶顯示組合圖像。爲了提高性能,我必須緩存圖像魔術圖像並從緩存中讀取它們,這會消除將內存流轉換爲圖像魔術的時間,但如果我使用Memorycache,則會有16個隔離的應用程序池,因此很快內存就會滿了,它不會有效,因爲負載均衡器將在兩臺服務器之間分配請求。所以如果第一個請求到達服務器一個而x在那裏被緩存,那麼第二個請求到達服務器兩個,然後再一次將x緩存在服務器二中。如果我使用memcache,那麼序列化是問題。

附加信息:Web應用程序在MVC中。

+0

你在哪個地區?你從AWS看過EFS http://docs.aws.amazon.com/efs/latest/ug/whatisefs.html? – JamesKn

+1

看看[這個](https://docs.asp.net/en/latest/performance/caching/distributed.html)頁面的一些靈感。 –

+0

2k圖片多久變化一次,爲什麼不將它們放在本地的盒子裏? – JamesKn

回答

0

我做了大量的研究。無法緩存堆中的對象,並將它們緩存在網絡上而無需序列化它們。任何通過網絡傳輸的對象都必須是可序列化的。所以這個問題沒有解決方案,我們可以如何將圖像放入不在堆中的緩存中。實際上你可以序列化圖像並緩存它,但是沒有必要這樣做,因爲它需要序列化和反序列化,這些序列化和反序列化在服務器上有很多過載。