2016-01-24 102 views
2

在我的應用程序中,用戶可以在地圖上發佈事件。該應用程序的入口點是一個無狀態的Web API服務。爲了在內部代表用戶,我想要一個用戶服務。我應該何時使用Reliable Stateful Actors以及何時可靠的有狀態服務來存儲每個用戶的配置文件數據和發佈的事件?服務結構服務與用戶表示的服務結構參與者

當客戶端在前端創建新用戶時,參與者或服務應在內部創建新用戶。每次用戶登錄時,web api服務都應將所有用戶交互轉發給用戶的內部表示(Actor或Service)。例如。用戶發佈新事件,Web API服務找到用戶並將發佈的事件轉發給他。由於發佈的事件是公開的,我還希望擁有可靠的有狀態事件服務。在用戶存儲發佈的事件之後,用戶服務應將事件轉發給事件服務。

例如:

Client/User --> WebApiService --> UserService/UserActor --> EventService 

當用戶希望看到地圖上所有的公共事件應該是這樣的:

Client/User <-- WebApiService <-- EventService 

由於該事件具有地理參考,我想根據地理編碼或類似的東西對EventService進行分區。

對於這樣的應用程序,我應該選擇哪種編程模型(actor和/或service)?爲什麼?

回答

2

無論哪種方式可以適用於這種情況,但它聽起來並不像你需要這裏的Actor模式的功能,所以我建議先從可靠服務開始並將用戶存儲在Reliable Dictionary中。請記住,參與者是在可靠服務之上實施的特定模式,因此在某些方面,您將被限制在該模式的限制之下,如果不仔細計劃,稍後可能會出現問題。例如,對一組actor執行查詢並不能很好地工作,所以如果你稍後決定需要在你的用戶基礎上運行一個查詢,那麼如果你使用一個Reliable易於查詢的詞典。

對於您的活動服務,是的,您當然可以通過地理座標進行分區。我過去做過的一種方法是將地理座標轉換爲quadkeys,這是一種方便的方式來表示二維空間數據的一維密鑰。但是,請記住,您可能會獲得本地熱點,這可能會導致分區中出現一些集羣(大部分用戶是以大城市爲中心的?如果是這樣,這些分區的數據將比其他分區更多)。

+0

這個例子中使用actor的原因是什麼?我閱讀了您的文檔中的當地熱點。但對於地理座標給出的例子。我怎樣才能避免這些熱點?我知道以後我不能更改分區數量,但是以後可以設置新的分區名稱嗎? – CPA

+0

避免熱點的一種方法是使用良好的哈希算法來生成密鑰 – cdaq