2013-08-18 55 views
2

我在尋找實現本地內存存儲它可以在一個藍色的.NET實例上Azure的實例

我一直在尋找Azure Co-located Caching使用一種簡單的方式實現一個簡單的本地內存緩存它似乎支持我的所有要求:兩個Web角色和輔助角色

  1. 工作

  2. 實現一個簡單的LRU

  3. 保持高速緩存的對象存儲器(RAM)

  4. 請允許我來定義緩存大小爲整個機器的總RAM

  5. 的百分比保持高速緩存中的網頁/輔助角色的同一臺機器上(共同定位模式)

  6. 請允許我在同一臺機器上運行多個應用程序域訪問相同的緩存(Web角色可我處理程序分成不同的AppDomain)

我與Azure Co-located緩存唯一的問題是不同的實例進行通信並嘗試共享緩存 - 而我並不需要所有這些。

我希望每臺機器都有自己獨立的內存中緩存。當我查詢這個緩存時,我不想浪費任何時間向其他實例的緩存發出網絡請求。

Local Cache config?

我已經看到了Azure的緩存配置設置,以使Local Cache - 但它仍然看起來像機器可以相互(即在高速緩存未命中)通信。此配置還需要一個ttlValueobjectCount,我希望TTL爲「永久」,並且對象數爲「直到填滿整個緩存」。感覺在兩種情況下都指定maxInt似乎是錯誤的。

那麼簡單的靜態變量呢?

當我真正想到它時,所有這些Azure緩存對我所需要的東西來說似乎有點矯枉過正。我基本上只需要一個應用程序/角色級別的靜態變量..除了不適用於需求#6(不同的AppDomains)。在這種情況下,要求#4也有點難以實施。

Memcached的

我覺得好老memcached似乎做正是我想要的。問題是我使用Azure作爲PaaS,而我並不想管理自己的虛擬機。我不認爲我可以在我的角色上安裝memcached .. [更新]似乎可以在我的角色上本地運行memcached。沒有使用memcached本身,是否有更優雅的「原生」解決方案?

+0

你緩存什麼樣的東西?請記住,只有字符串和一些特殊對象(線程,appdomains)真的在appdomains之間共享,所有其他東西在穿越appdomain邊界時被序列化和反序列化。然後是MarshalByRefObject - 它不完全共享,但來自不同appdomain的調用被封送到其本地appdomain。你可以創建一個MarshalByRef字典,把它放在一個靜態的地方,並在各個appdomains中使用它。 –

+0

@AntonTykhyy我想緩存簡單的JSON對象(一個大約8個字符串的扁平字典,每個字符大約100-200字節)。你可以用你的想法的一個實例來指出我的位置,這聽起來很完美 – talkol

+0

我找不到任何東西。但是,你真的需要這個嗎?角色入口點在與Web角色不同的進程中運行[(1)](http://blogs.msdn.com/b/windowsazure/archive/2010/12/02/new-full-iis-capabilities-differences -from-hosted-web-core.aspx),但是如果你的web角色只有一個站點,它將在一個appdomain中運行。把你的靜態緩存放在Global.asax裏,你應該全部設置好。 –

回答

1

您當然可以在Web和Worker角色上安裝memcached。幾年前,史蒂夫馬克思在虛擬機功能出現之前就博客了getting memcached running on Azure Cloud Service。這是一個較舊的帖子,因此您可能會遇到其他方式處理此問題,例如使用start up tasks而不是RoleEntryPoint中的OnStart方法等。

+0

謝謝,我不知道memcached是可能的。您是否知道除了memcached之外的更「本地」解決方案? – talkol

+0

開箱即用。您提到的位於同一地點的Windows Azure緩存功能已經是最接近的了。你可以編寫自己的服務在本地啓動,並且是一個使用.NET Framework緩存命名空間的內存緩存,它可以跨應用程序域訪問,但是如果你可以使用已經創建的緩存框架,那似乎有點過分。我沒有問你爲什麼不真的想要一個分佈式緩存,因爲我認爲你有你的理由。如果這是你所關心的,我至少會測試延遲。 – MikeWo

0

我已經使用「免費」版本的SQL Server進行本地緩存他們工作得很好。這取決於你在做什麼,但我已經運行了SQL Server Express/Compact,用於存儲我編寫的包含5年統計數據的幻想足球網站的全部小靜態數據集。由於佔地面積小,它們即使在小型/中型Azure實例上工作也非常好。

http://blogs.msdn.com/b/jerrynixon/archive/2012/02/26/sql-express-v-localdb-v-sql-compact-edition.aspx

最好的部分是你可以使用T-SQL。您的緩存需求可能會更復雜或無法擴展至此。