【发布时间】:2014-05-28 13:46:20
【问题描述】:
我正在创建一个允许用户对事件进行投注的赌场类型游戏,并且我计划使用 Microsoft Azure 作为处理和数据存储(表格存储)的后端。我正在寻找有关如何验证信息并通知用户任何更新的任何想法。
理念: 该应用程序允许用户对事件下注,例如在线博彩公司(PaddyPower、Ladbrokes 等)。
工作流程:
- 用户对某事件下注
- 赛事结束后,投注结算并通知用户 任何奖金
- 转到第 1 步
情景(简化):
- 用户不应在赛事开始后下注
- 应通知用户任何问题和奖金
过程:
解决方案 1 - 使用队列: 当用户下注时,一条消息将被放入队列(所有用户使用)并由 Worker Role 处理。
如果下注对赛事来说太迟了,或者玩家最终赢得了赌注,则需要通知他们结果。
因此,每个活动用户都有自己的队列,客户端应用程序会轮询任何更新。这将允许客户端应用程序获取任何通知并将其显示给用户。
解决方案 2 - 使用 WCF 和队列: 当用户下注时,他们会连接到 WCF 服务,它会进行事件开始检查,如果有任何问题,他们会立即收到通知。
将任何通知返回给用户的唯一方法是使用解决方案 1 中的 Queue 方法。
注意:
- 以上场景为简化版游戏,但 机制是一样的,所以我只是在寻找好的架构 想法
- 我不打算使用通知服务,因为我计划 让此应用程序同时在移动设备和 Facebook 上运行,并希望 在所有设备上拥有相同的体验
- 我使用的是表存储而不是 SQL Azure
- 如果服务总线更有意义,我愿意使用它
那么哪种解决方案是理想的,还是有更好的解决方案?
【问题讨论】:
-
可扩展性要求如何?有多少用户、事件、每秒最大投注数、每秒最大通知数、投注大小(xml?)...这可能会对您的设计决策产生影响。
-
@Herve 我实际上正在寻找允许根据您描述的参数进行缩放的最佳方法。但要回答您的问题 - 我希望 Azure 根据需要扩大和缩小工作人员角色。没有办法真正知道我可以获得多少用户,但我使用的是 10,000 DAU 的庞大数字。我看不出有超过 500 个赌注/秒。通知队列将每 1-2 秒从客户端轮询一次。此外,下注的大小将在队列的 64kb 以内。
-
要做出两个重要决定:一个与客户有关,另一个与下注时间所需的精度有关。如果客户端是电话或移动设备,我建议您使用服务 (WCF),而不是将队列直接暴露给客户端应用程序。如果是网站,那么队列可能没问题。但是,在第二点上,如果您需要高水平的投注精确度,例如谁在何时下注,相对于其他更好的投注,这可能会影响投注池,例如,暂停可能比未处理的投注更好,因为队列处理延迟。
标签: c# wcf azure azure-storage azure-queues