依赖外部数据源准确性的活动设计

         最近团队做了一个世界杯的活动,活动的内容很简单:用户在比赛前进行竞猜比赛结果并支付一定的金额提交,如果比赛结束10分钟后,竞猜正确,则有机会获得一定的礼物赠送。
         那么这个活动中,很关键的一个问题是:系统如何准确的知道在比赛结束10分钟后的结果;基本思路有两种:
一,一个人值班,实时观察比赛,一旦有结果,马上录入系统;
       这个方法的好处是:不容易出错,因为是人工确认后录入的,但最大的问题是需要一个人通宵值班,如果同时几场比赛呢?所以运营成本比较大。

二,没错,大家肯定想到了,是不是有某个接口可以实时查询比赛结果,如有,系统可以开发一个批跑脚本,定时去查这个接口,比如10s一次,一旦发现有新的结果,则更新我们系统的比赛结果。
     perfect,看起来很不错,但请慢,这里是否有哪些陷阱?比如:
     1,如果接口失败呢?即关键时候查不出来?
     2,接口服务正常,但返回的结果是错误的,这个可能更致命,特别是业务关键路径严重依赖这个准确性的时候,比如购买彩票

   

       针对这些问题,基本的思路是:

      1,对接口进行定时的监控,一旦服务不可用则及时告警,当然这只是提前发现问题的第一步,但是否能够及时解决问题,可能依赖于发现问题后的沟通协调效率等;


      2,服务的接口尽量不要存在单点,提供类似集群模式的查询接口,则可以大大降低接口失败的概率;


      3,接口服务正常,但返回的结果是错误的,这个大家可能觉得这不可能吧?但笔者恰恰遇到了,接口提供方中间做了系统变更发布,引入了bug导致结果被回溯或者重置,这种 问题的解决思路是:既然拉一个地方可能 出现问题,那么为什么我们不同时从几个地方拉取比赛结果呢?比如拉取不同公司的接口进行比对,如果都一致,则我们认为出问题的可能性就小很多,这个结果是可信的,至于具体需要拉几个接口进行比对,这个 看条件了,当然至少是2个,好的可以3个,太多可能意义也不大,反而使得逻辑变复杂。那么假如我们是使用了3个接口,如果比对结果是一致的,则没问题,如果不一致呢?如何处理?这个时候可能没其他的办法,需要 人工确认了,当然具体的开发中,需要处理的细节还是比较多的,比如三方的时间不同步或者更新的节奏不一致,可能存在一定的误差。

 ps:其实好的接口是支持事件回溯记录的方式是最好的,是什么意思?即接口返回的不是当前的及时状态,而是一些列进球的时间点和进球比。


      4,还有一个重要的问题:既然后续的服务严重依赖这里的准确性,如果我们的比赛更新结果被绕开了,即有人随便修改了db的结果,那怎么办? 这里有许多的思路,当然最基本的是db核心数据需要防篡改保护,合法的脚本进行更新数据的时候,会对比赛的结果进行签名,而数据的使用者在使用前,需要验签。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值