服务器框架: Scala,Play 2.2,ReactiveMongo,Heroku
我想我有很有趣的脑筋挑逗你:
在我的旅行规划应用程序中,我希望在地图上显示天气预报(类似于这)。我使用付费休息服务查询天气数据。为了加快用户体验并降低成本,我计划将每个位置的天气数据缓存一个小时。
有一些不那么明显的事情需要考虑:
来自Java背景,我可以使用Java堆栈找到一个非常好的解决方案。
但是,我想知道如何使用Scala/Play堆栈中更自然的东西来实现这一点: Akka。有一个类似问题的例子(google“”),但它不能解决一个问题:当多个用户同时查询相同的数据时,赛车条件。
您将如何实现这一点?
编辑:我已经决定,确保只更新天气数据一次的要求不是必要的。这种情况发生的频率太低,不足以成为真正的问题,而提出的所有解决方案都会给系统带来太多的开销和复杂性,使其无法成为可行的。
感谢大家的时间和努力。我希望这个问题的答案能帮助将来有类似问题的人。
发布于 2015-01-08 01:54:27
在Akka,您可以从多种路由策略中进行选择。在这种情况下,ConsistentHashingRoutingLogic可以很好地为您服务。因为参与者是单线程的,所以您可以轻松地在每个参与者中维护一个缓存。这个路由逻辑将确保两个相同的消息总是击中同一个参与者。
每个演员都可以以下列方式工作:
1. check local cache (for example apache commons LRUMap)
- if found, return
2. check global cache (distributed memcache or any other key-value store)
- if found, store the result in the local cache and return
3. query the REST service
4. store the result in the global and local caches你可以看看这问题,我的答案是基于这个问题。
发布于 2015-01-09 19:43:32
我决定也发布我的JMS解决方案。
处理天气请求的控制器执行以下操作:
https://stackoverflow.com/questions/27831194
复制相似问题