2013-05-04 71 views
2

我有3個在Windows Azure上運行的Node.js工作者角色實例。我試圖維護所有實例之間的會話。在Azure上維護多個實例之間的Node.js會話

Azure隊列似乎是推薦的方法,但是如何確保所有實例都接收到會話,因爲隊列會在單個實例出隊後刪除會話?

Azure表不適合我的應用程序,因爲會話過於頻繁,無需存儲超過10秒鐘。

回答

1

隊列不是會話狀態的好機制;它用於消息傳遞。一旦一個實例讀取隊列消息,當特定角色實例正在處理該消息時,該消息就不再可見。另外:如果完成這個消息,你會怎麼做?更新它,然後再次使其可見?問題是你不能選擇閱讀哪個「會話」。這是一個幾乎是FIFO的隊列(未正確處理的消息可以重新出現)。它不像一個關鍵/價值商店。

要創建可訪問的會話存儲庫,您可以利用Azure的角色內(或專用角色)緩存,這是一個跨角色實例的分佈式緩存。您也可以使用表存儲 - 只是簡單的鍵/值類型的讀/寫。 Table Storage包含在node.js Azure SDK中。

這就是說:讓我們走這裏的緩存路線。由於你的會話是短暫的,並且(我猜測)不佔用太多內存,所以你可以從一個角色內緩存開始(緩存與你的節點代碼共享工作角色RAM,記憶)。緩存也是兼容memcache的,這很容易從節點應用程序訪問。

如果你看看this answer,我會顯示訪問緩存的位置。您需要以這種方式設置緩存,還需要通過添加名爲memcache_default的內部端點來設置memcache服務器網關。然後,將您的memcache客戶端類指向內部端點。完成。

完整說明(以及有關設置專用緩存角色時使用的memcache網關與客戶端填​​充的詳細信息)爲here。如果使用專用緩存,您會看到指令略有不同,因爲它建議您在節點應用程序的工作角色中使用客戶端填充。