编者按:今天的文章,由Bill Davidheiser,iVoteSports首席设计师和创始人所写。描述了公司如何使用Windows Azure来优化它的iVoteSports MLB-focused移动游戏。

让我们从一个详单简单的想法—大多数运动(如棒球)可以细分为游戏中的游戏,开始(了解)iVoteSports.com (在苹果、安卓和亚马逊应用超市上销售)。比如每局棒球有很多有效击球,每个单独的击球员又有许多针对他的有效击球可能的结果,如进球垒、一击和本垒打。

这个游戏的基本主题是让用户预测每个事件的结果并赢取正确猜测的点数。赢到的点数是基于很多因素的,如事件结果的概率。

确定一场直播比赛的获胜者是一个挑战,因为事件的次数和概率(各不相同)。使用棒球的一个例子:每次游戏都有至少9局,每局又有6次有效击打,每次有效击打又有至少3种事件(一击、坏球等等)。因此,伴随着每个常规赛每个队162场比赛的量,有一个巨大的事件总量不可被裁判员管理,至少在我们比赛中的实际资源约束。为了解决这个问题,我们使用人群采购概念创建了一个编程方式来决定结果。

WINDOWS AZURE设计和波动系数

就像提到的,直播赛事的实质是很多人在一个相对较短的时间段(大约3小时)里聚在一起然后很快又散去。由于iVoteSports应用程序是在直播比赛时使用,它需要支持这些急剧的使用高峰。

这种类型的波动需求对一个云端应用程序来说好极了。我们的空闲状态是我们维护两个小型的(单核)Windows Azure web role实例。然而有很多玩家在用,我们(需要)可以快速添加web实例,随着需求的加强而自由伸缩。即日添加额外实例的触发点大多数是基于处理器利用率:如果我们一直超过80%我们将会添加额外实例。

在未来版本,我们将会通过管理API 以编程方式添加实例,充分利用Microsoft企业库的自由伸缩应用程序块(WASABi),而不是现在的手动实现伸缩。当大量流行的赛事集中在某几天而需要获得增加的运算能力时我们可以主动地增加实例数。

iVoteSports的实际扩建比起一个手机游戏,更像是酷似多层企业应用程序。我们对介绍、应用程序和数据层有着完全不同的概念。

由于数据库是多租户的,用户id与所有事件(如保持分数、做出预测或者猜测一个结果)处理数据均有关系。我们的观点是UDF和存储过程开发很大程度上很像创建一个典型的.Net应用程序。由于只有用户预测和结果信息时刻保持最新的(统计信息和时间表才被存储),Windows Azure SQL Database的150GB限制不再是问题。

我们最初决定使用SQL Database很大程度上是因为创建一个优化的TSQL(可以在繁忙的日常运转中修改并且无需重新部署代码)的愿望。对于我们的下一代游戏来说,我们很可能会把我们的数据结构部分迁移到更物超所值的Windows Azure Table Storage (如果不能全部迁移的话)。

另外要注意的是,一个有很多逻辑处理在服务器端的移动应用程序有着很多好处。Web开发者钟爱于在近实时推出补丁修复bug的能力。不幸的是在移动应用程序代码中当一个bug被找到就没有时间用于修复。拿苹果来说,可能会花费多达一周的时间获取改动批准。

移动应用程序

当安全不再是游戏的主要问题时,我们实现了email地址和物理设备ID之间耦合的强制认证。如果将来需要,我们可以在某些功能上得到一个用于基于角色认证安全令牌。

所有来自移动设备的通讯都是无状态、有效同步的。每个移动设备都是一个轻量级的服务器,每秒钟都在检查是否有信息在等待。如果有信息在等待,就会有一次更为昂贵的数据交换调用。

概率和点

概率是我们游戏的重点。游戏结果的概率受关键影响力影响,如历史事件结果(飞出球比坏球更常见)、选手匹配(击跑员X比起投手Y做的更好)、选手资质(击跑员命中0.24)。当然还有其他如体育场、注射剂、天气以及选手在游戏中扮演角色的概率等因素,但是这些因素平均影响力很小,大多数适用于本地运动赌博。

混杂各种关键影响力在一起产生一个结合概率,可以让预测员将之转换为游戏结果的获胜点数。我们称之为预测一个iVote。例如,一个本垒打,Casey Jones的击球比起Joe Throwhard(的击球)会赚30点算作一个正确的iVote来说,然而,相比Casey对一个实力较弱的击球手做一个本垒打预测可能更有机会得100点。拉斯维加斯人通常称这为“point spread”。

更深层次,当很多人谈论同一场比赛,点动机可以被创建,以此鼓励非主流预测,保持iVote更为公平的分配。这一概念大概是模仿所谓的“Spread Betting”。

请注意,虽然iVoteSports.com处理很多赌博的概念,我们绝不是一款赌博应用程序。只有点数涉及,永远不会有真实资金。

统计数据远

添加当前统计信息,允许预加载击球员阵容,显示选手信息和细节,当然还有使用最新统计信息让我们的概率计算使用的是好数据,让游戏更加有趣一些。

我们从Stats.com获取两种类型的数据:日常的和赛前的。日常数据包括日程表、名册和球员统计信息,并在每个早上太平洋时间上午4点加载到我们的SQL Database。赛前数据会在每场棒球比赛开始前15分钟加载,包括每个队的开场击球员阵容和投手。

结果判定

编程判定一场事件结果却是挺困难的。当一个可信任的官方在记录每场赛事,这便不再是问题。但是正如之前提到的,使用个人官方不是我们移动应用程序的一个可伸缩的答案,因为我们一天中有很多比赛在不同时间发生。

群体设计模式对我们来说是一个极好的答案。正如许多优秀的文章和练习范例(如Truthsquad Experiment)所记载的,如果你听到足够多的人在说某件事是真的,那么他就可能是了。当然有关于“群体真理”一些注意事项,如确保(群体均为)合作者,小于临界值的人数。然而这些挑战可以减轻,整个群体数学上证明可行,对我们的目的相当有效。

如“Relation of
assertions to accuracy”图中所显示,在给定赛事中我们达到了选手临界值,我们增加断言结果会更有信心,此断言基本准确代表了结果。例如,如果我们有30%用户来自总人数说某一事件要发生(比如说一个选手三击不中出局),我们有信心超过50%确认比赛的真正结果。

大于60%的信心让我们不仅鼓励那些正确预测的人,同时惩罚那些骗人说他们ivote正确了,事实上并没有的人。

吸取的经验教训

我们对我们的整体设计很满意;尤其是我们游戏的很大部分组件运行在Windows Azure上,我们将可以快速发展至一个新的介绍平台。

我们发现Windows
Azure SQL Database查询优化过程比起常规SQL server更具有挑战。我们使用现在已停产的RedGate backup utility创建数据库的一个本地副本,然后运行SQL Profiler,吧结果送到SQL数据库优化顾问。我们通过SQL Management Studio 手动应用优化顾问的建议到我们的SQL Database。希望微软在不久的将来将会提供工具改善这些处理过程。在使用Windows Azure的开发中我们学到的主要东西就是部署。我们最初使用web role作为web部署选项,并未使用虚拟机(VM)定期重置。非永久性的web部署将会导致部署在web role VM被重新映射时还原为之塔最初状态。当重新映射时,微软不会发送通知,至少不会发送我们都知道的通知。这就会让我们的应用程序还原为之前的版本时造成混乱。

不过总的来说,我们拥有Windows Azure 非常好的体验。随着不可预测和快速的需求变化,Windows Azure将被证明是我们游戏的一个理想的操作平台。另外,开发工具给我们好的生产力和短的学习曲线。

在自然界的技术中,我们希望最终的结果是一个易于使用、富娱乐性的体育游戏。想要查看我们工作的结果,请访问www.ivotesports.com。

本文翻译自:

http://blogs.msdn.com/b/windowsazure/archive/2012/07/24/isv-guest-post-series-ivotesports-scales-its-baseball-focused-mobile-game-app-with-windows-azure.aspx

转载于:https://www.cnblogs.com/wuwa/archive/2012/08/02/6192177.html

ISV客户博客系列:iVoteSports通过Windows Azure扩展它的面向棒球的移动游戏应用程序...相关推荐

  1. ISV客户博客系列:Persistent Systems 使用Windows Azure交付基于Java的CloudNinja项目

    编者注:本文作者是Persistent Systems 的云计算助理副总裁Shreekanth Joshi,描述了该公司是如何使用Windows Azure为他们的ISV客户开发和交付基于Java的应 ...

  2. ISV 客户博客系列:Minitab通过Windows Azure推出云端Qeystone

    编者注: 本博客出自Minitab企业Web架构师Michael Yeaney之手,描述了公司如何使用Windows Azure以及持续集成为其客户快速构建分析解决方案. Minitab公司. 领先的 ...

  3. Windows Azure ISV博客系列:ReedRex 的sociobridge

    撰写Windows Azure ISV系列博客的目的是宣传来自ISV(独立软件供应商)在Windows Azure 应用程序的开发和部署过程中的一些成就.这篇文章是微软在日本的分公司的Windows ...

  4. 【Hexo搭建GitPage博客系列】02.环境搭建

    转载声明:商业转载请联系作者获得授权,非商业转载请注明出处.原文来自 © 呆萌钟[Hexo搭建GitPage博客系列]02.环境搭建 前言 Hexo搭建博客需要基于Node.js环境,而且依赖于Git ...

  5. 看板方法不是方法论 | David博客系列 | Agilean学院出品

    这篇David博客系列文章阐述了看板方法反模式之"Kanban是方法论",由Agilean学院刘永鹏翻译.张明评审,李淳审校 使用看板方法让我们的产品质量一团糟!因为我们不再做测试 ...

  6. 博客群发软件--用 Windows Live Writer完美发布新浪、网易、blogcn、blogbus、cnbl

    前言: 当今网络博客.微薄铺天盖地,相信即使一个普通的用户也都注册了很多家品牌的博客或者微薄等,那么困扰着大家一个很大的问题,同时在多家博客发布同样的内容,如果说只是简单的文字还好说,复制粘贴就完事了 ...

  7. 个人博客系列【Hexo】-实现在百度中搜索到自己的博客

    目录 1.添加站点 2.选择协议头"http:// ",填写网站域名,点击下一步: 3.设置站点领域,这里选择信息技术(按需选择),点击下一步: 4.验证网站,选择CNAME验证, ...

  8. 自动驾驶入门(一):博客系列简介

    极简自动驾驶感知入门 1. 课程介绍 近年来,自动驾驶的概念频繁出现在各大新闻媒体和社交网络上,引起了广泛的关注与讨论.同时随着新造车势力(特斯拉.蔚来.小鹏.理想等)和自动驾驶独角兽公司(图森.Mo ...

  9. 看板流程? | David博客系列 | Agilean学院出品

    这篇David博客系列文章阐述了看板方法反模式之"遵循Kanban流程",由Agilean学院郑美艳,颜秦进翻译,李淳审校 我们在遵循看板流程...... 问题是:没有所谓的&qu ...

最新文章

  1. 范式变革与规律涌现:世界科技发展新趋势
  2. postman显示服务器错误是什么原因,Postman 500内部服务器错误api错误
  3. HDLBits 系列(26)独热码有限状态机实现的两种方式
  4. 让 Linux 防火墙新秀 nftables 为你的 VPS 保驾护航
  5. python扫描ip的端口打开情况
  6. sql 分组统计_leetcode-sql面试题十七篇精讲合集
  7. mysql使用技巧,使用Mysql的小技巧总结
  8. C++:求区间内最大的因子和
  9. vim emmet插件
  10. JSK-383 是否闰年(课后)【入门】
  11. Lua学习笔记(1)
  12. 动作捕捉在运动科学领域的应用
  13. OpenStack 运维 - 环境部署 | 报错排查 [T版]
  14. 放慢脚步是为了走得更快
  15. 穷学生单片机能做什么毕业设计,怎么避坑,老师注重的点是什么
  16. simulink模块,提供xpctarget下驱动源码
  17. flask-socketio实现的网页聊天室(一)
  18. 原理+实战|7天带你学会GAN,生活从此乐无限
  19. Java中实现原子操作
  20. oppo a125 JAVA_游戏、娱乐、交友尽在掌中

热门文章

  1. 网站域名检测是否被QQ/微信拦截工具
  2. 全绿色版影视电影小程序源码-提供苹果CMS接口
  3. 苹果cms V8模板 价值200RMB时尚大气功能超强模板
  4. 最细致的Spring Boot结合Vue前后端分离项目打包部署步骤(搭配Nginx)
  5. Amazon Web Service 雲端運算平台攻略 【2】
  6. ArcEngine 9.3.1与64位操作系统 80040154
  7. 20条.net编码习惯 【转】
  8. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)
  9. 开启Windows或者Mac OSX 本地服务器 (非安装第三方服务器软件)
  10. Twitter开放平台api key申请流程 (Twitter Consumer Key)