我有一個問題,關于什么時候使用Redis集群和獨立Redis是有意義的。
假設有一個real-time游戲應用程序允許多個游戲實例,并希望為每個實例實現實時排行榜(游戲由用戶社區創建)。
假設在任何時候都有100場同時進行的比賽。
基于這里概述的用例:
https://d0.awsstatic.com/whitepapers/performance-at-scale-with-amazon-elasticache.pdf
https://redislabs.com/solutions/use-cases/leaderboards/
我們可以使用內存中的排序集數據集實現每個排行榜。
現在我想實現某種持久性,其中排行榜狀態保存在每個游戲結束時作為快照。因此,每個獨立的排序集都保存為快照文件。
我有一個關于設計選擇的問題:
- redis集群對這個場景有意義嗎?或者,擁有獨立的redis實例并為每個游戲創建一個新的數據庫更有意義嗎?
據我所知,一個redis集群只有一個數據庫0(https://redis.io/topics/cluster-spec)在這種情況下,如何才能在不同的時間為每個排行榜快照數據集工作?
https://redis.io/topics/cluster-spec
據我所見,使用Redis集群只對large-scale單片應用程序有意義,可能不是上述場景的最佳方法。是這樣嗎?
或者如果使用AWS Elasticache for Redis Cluster模式,我可以為單個數據集配置快照嗎?
你說得對,集群是一種向外擴展的方法,可以處理非常高的請求負載并存儲大量的數據。
聽起來你真的不需要為集群而煩惱。如果一個獨立的Redis設置在擁有數萬個同時運行的播放器之前會成為你的瓶頸,我會非常驚訝。
如果您不確定,可以模擬一些模擬負載,看看它能處理什么。我的猜測是,你最好把注意力集中在你的游戲的其他復雜性,直到你開始達到相當嚴重的使用。這是一個很好的問題。:)
但是,您可能需要考慮使用一個或兩個副本實例,這是另一回事。
其次,不管集群與否,為什么要使用snap-shots(
SAVE
或BGSAVE
)來保存記分板?如果您希望每個游戲都有單獨的快照,并且每個游戲只有幾個鍵,那么為什么不讓應用程序在需要時讀取這些鍵并將其持久化到傳統的數據庫中呢?例如,您可以使用
MULTI
、DUMP
和RESTORE
來實現與快照非常相似的功能,但是要使用特定的鍵。聽起來不需要多個數據庫。
集群Redis上的多個數據庫僅在企業版中受支持,因此在ElastiCache上不受支持。但上述方法應該可以很好地發揮作用。