C# 赌场类型游戏的Azure体系结构

C# 赌场类型游戏的Azure体系结构,c#,wcf,azure,azure-storage,azure-queues,C#,Wcf,Azure,Azure Storage,Azure Queues,我正在创建一个赌场类型的游戏,允许用户在某个事件上下注,我计划使用Microsoft Azure作为处理和数据存储(表存储)的后端。我正在寻找关于如何验证信息和通知用户任何更新信息的想法 想法: 该应用程序允许用户在事件上下注,例如在线博彩公司(PaddyPower、Ladbrokes等) 工作流: 用户在事件上下注 事件完成后,下注结算并通知用户 有赢的钱吗 转到步骤1 场景(简化): 活动开始后,用户不应下注 任何问题和奖金都应通知用户 过程: 解决方案1-使用队列: 当用户下注时,

我正在创建一个赌场类型的游戏,允许用户在某个事件上下注,我计划使用Microsoft Azure作为处理和数据存储(表存储)的后端。我正在寻找关于如何验证信息和通知用户任何更新信息的想法

想法: 该应用程序允许用户在事件上下注,例如在线博彩公司(PaddyPower、Ladbrokes等)

工作流:

  • 用户在事件上下注
  • 事件完成后,下注结算并通知用户 有赢的钱吗
  • 转到步骤1
场景(简化):

  • 活动开始后,用户不应下注
  • 任何问题和奖金都应通知用户
过程:

解决方案1-使用队列: 当用户下注时,消息将被放入队列(由所有用户使用)并由工作者角色处理

如果发生下注时间太迟,或者玩家最终赢得下注,则需要将结果通知他们

因此,每个活动用户都有自己的队列,客户端应用程序将轮询该队列以获取任何更新。这将允许客户端应用程序拾取任何通知并将其显示给用户

解决方案2-使用WCF和队列: 当用户下注时,他们将连接到WCF服务,该服务将执行事件开始检查,并将立即通知他们任何问题

将任何通知返回给用户的唯一方法是使用解决方案1中的队列方法

注意:

  • 上面的场景是游戏的简化版本,但是 力学是一样的,所以我只是在寻找好的架构 想法
  • 我不打算使用通知服务,因为我计划 让此应用程序同时在手机和Facebook上运行,并希望 在所有设备上都有相同的体验
  • 我使用的是表存储,而不是SQLAzure
  • 如果服务巴士更有意义的话,我愿意使用

那么,哪种解决方案是理想的,还是有更好的解决方案

我做的事情和你几乎一样。经过仔细考虑后,我同意以下意见:

sqlazure/EF模型。因此更易于使用和扩展 服务总线队列。 具有工作角色控制台应用程序的VM。虽然我们将使用worker或web作业来实现这一点,但我们可以使用VM上的控制台应用程序和任务调度器快速监控和部署


当我们做对了并且所有可能的异常等都消失后,我们将转移到可扩展的工作人员角色或web作业。

我建议您查看CQRS模式,特别是本文档涵盖的参考实现的详细信息:


参考实现使用Azure,我认为它非常适合您描述的系统。此外,它还提供了一种可扩展性和弹性极高的体系结构。

如果我是你,我会花很长时间计划如何设置PartitionKey+RowKey组合,以支持来自表存储的快速查询。这只是因为从表中查询数据,特别是在没有PartitionKey/RowKey的情况下,速度相对较慢。我很难理解这一点:

< P>可能是一个新技术的早期,但也许可以考虑使用< /P>
哦,不要排除使用SQL Azure获取用户信息的可能性。。。特别是如果涉及到财务方面。NOSQL不是持久性的万能工具…

您的解决方案看起来不错,但是您可以考虑使用信号器进行轮询,这将提高性能。三件事的结合也应该起作用 1.网络角色 2.工人角色 3.WCF服务-在工作角色上自托管


使用SignalR很好,因为您永远不知道何时轮询,所以请将此任务委托给服务器/角色

可伸缩性要求如何?有多少用户、事件、每秒最大赌注、每秒最大通知、赌注大小(xml?)。。。这可能会对您的设计决策产生影响。@Herve我实际上在寻找基于您描述的参数进行缩放的最佳方法。但为了回答你的问题,我希望Azure能够根据需要放大和缩小员工角色。没有办法真正知道我能得到多少用户,但我使用的是10000 DAU的庞大数字。我看不出每秒投注超过500次。通知队列将每隔1-2秒从客户端轮询一次。此外,下注的大小,对于一个队列来说,将在64kb以内。需要做出两个重要的决定:一个与客户端有关,另一个与下注计时所需的精度有关。如果客户端是电话或移动设备,我建议您使用服务(WCF),而不是直接向客户端应用程序公开队列。如果是一个网站,那么排队就可以了。但是,在第二点上,如果您需要高水平的下注精度,例如,相对于其他下注者,谁下注,这可能会影响赌注池,例如,由于队列处理延迟,超时可能比未处理的下注更好。