2012-08-22 42 views
1

我正在使用Google App Engine作爲剛剛發佈的iOS遊戲的後端。Google App Engine和具有多個實例的數據複製

通過玩遊戲的行爲,玩家創建關卡,然後與朋友和整個世界共享。 GAE用於存儲和檢索這些級別。 GAE還管理玩家的高分,因爲他們比Game Center更復雜。

作爲一個整體,GAE工作得很好。我喜歡GAE如何根據需要旋轉新實例,而無需持續監控負載。對於這個遊戲,GAE正在運行10個實例,每秒鐘處理大約8次查詢。

但有一個小問題。

我注意到有時玩家會在高分榜上兩次。這應該是不可能的,因爲我在提出新分數之前刪除任何舊分數(這是在對GAE的一個查詢中完成的)。

經過一番測試後,似乎發生的事情是玩家會得到高分,實例1處理刪除舊分數和添加新分數。然後玩家獲得一個新的高分,但這次實例4是處理請求的實例,它不知道另一個分數。

以最快的速度,可能需要玩家10秒才能獲得新的高分。我的理解是數據的複製只需要2到3秒鐘。

我從來沒有在測試過程中看到這個問題,因爲加載很少導致2個實例啓動。

這似乎是一個合理的解釋發生了什麼以及如何爲每個實例存儲數據?

有沒有辦法保證在一個實例中添加,刪除或更改的數據在另一個實例中可用?高分不是「關鍵任務」,所以我並不太擔心,但我想用GAE來處理一些更復雜的情況,這些情況非常重要,數據是一致的。

GAE可能嗎?或者我應該考慮其他解決方案嗎?

回答

2

可以保證所有數據中心的數據一致(強一致性)。你需要使用祖先查詢來實現它。但是,這樣做會限制您可以實現每秒多少次寫入。目前限制是每秒寫入1次。

如果寫入限制對您來說太慢,另一種方法是添加緩存層。所以你仍然會使用最終的一致性模型,但是你會將這些結果與memcache中的結果混合在一起。

有關更多詳細信息,請參閱文檔Structuring for Strong Consistency

+0

感謝您的鏈接。這聽起來像我所看到的或正常的和預期的。我可能不得不爲未來的需求尋找更強大的解決方案。 –