2011-05-01 66 views
1

我將盡力清楚地描述我的問題。 假設我在Amazon EC2上運行了Java REST Web服務。 HTTP請求通過字符串「testString」獲取到我的服務之一。我將它保存在一些通用類的內存中,假設我將它添加到字符串的列表('stringsList')中。具有負載平衡的多個實例Web服務 - 保存請求數據

我的問題是:如果我有我的Web服務的多個實例,這個字符串可用於每個這些實例嗎? 如果用戶將產生一個調用「stringsList.getString('testString')」, 的HTTP請求,它會得到肯定的字符串?或者它可能會錯過它,因爲它是可用的,但是在我的Web服務的不同實例上是 ?

我希望能夠跑到我的Web服務作爲一個可擴展的一個與負載均衡和多 實例,但還是能夠節省一些特定的HTTP請求信息(也許這 就是爲什麼剩下的應該是無國籍,因此我的設計是錯誤的,如果我想這樣做 ?)。 Web服務我瞄準的是這樣的:

Scalable web service (from Heroku)

我會盡量給的細節,雖然我不是很確定:

  1. 如果我通過SSH運行Web服務以我的EC2實例,並且只有一個像 這樣,這不會是一個問題,對不對?
  2. 如果我這樣做,但對於很多實例,並且通過Amazon Elastic負載平衡?
  3. 如果2的答案是可以有一個小姐,但我仍想實現這個目標,那麼另一種方法是什麼?
  4. 也許這不是一個好主意,在亞馬遜EC2上這樣做,但在不同的服務?如果是這樣,哪一個?

    • 把它放到數據庫中並不是我想要的,我只想將它保存在內存中幾個小時以備我需要。

感謝,
麗然

回答

0

有亞馬遜沒有「共享內存」的概念,並沒有,該字符串將不會適用於所有情況。這是簡單的數據庫,但你說你不想使用數據庫。

總是可以引導用戶到他們第一次在負載均衡器上使用cookie的同一個實例,但它聽起來不像是解決了您的問題,我猜這個字符串不僅僅適用於用戶設置它。

Google App Engine可能更適合。它支持您使用的servlet實例中的Memcache,並且所有servlet實例都可以訪問相同的memcache。

1

Memcache似乎是這個問題的自然選擇。不過,它不僅適用於Google App Engine。如果您願意,您也可以在EC2上運行您自己的Memcache服務器。