• 一元夺宝项目设计(下)


      上一篇主要分析了数据库表结构这块,这一篇就直接分析解决方案这块吧。主要分为3大块,分别为夺宝整体流程,缓存流程,定时任务流程。

      一、夺宝整体流程

      

        备注:A、普适性流程。

         B、目前是单站点,IIS服务器,对IIS进行了优化,参考链接:http://www.cnblogs.com/xiongnanbin/p/3676350.html

         C、后面会设Ngnix专题,也就是后面会用Ngnix做负载均衡代理服务器,不过在这之前可以用多域名来实现负载均衡。

      二、缓存流程

      

      备注:A、缓存采用memcached1.4.13版本。

           B、运用其CAS特性,内部实现锁机制,无需外部加锁。主要是防止并发时,且剩下最后几注号码,多人抢注。单最后只会允许有一人成功。

           C、购物车数量、下单数量等全部从缓存中拿。

                  D、首页列表需要展示商品可用夺宝数、剩余夺宝数。对于这种实时性高的数据,采取缓存1分钟。等到购物车或者下单会重新判断数量是否充足。

           E、类似秒杀,这里没有采取排队机制,而是锁机制。系统允许有人在下单时失败,这种情况除了缓存之外,就是多人同时修改缓存数据,CAS版本号不一致。

    ps:所有的被发送到memcached的单个命令是完全原子的。如果您针对同一份数据同时发送了一个set命令和一个get命令,它们不会影响对方。它们将被串行化、先后执行。即使在多线程模式,所有的命令都是原子的。然是,命令序列不是原子的。如果首先通过get命令获取了一个item,修改了它,然后再把它set回memcached,系统不保证这个item没有被其他进程(process,未必是操作系统中的进程)操作过。

      memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果使用gets命令查询某个key的item,memcached会返回该item当前值的唯一标识。如果客户端程序覆写了这个item并想把它写回到memcached中,可以通过cas命令把那个唯一标识一起发送给memcached。如果该item存放在memcached中的唯一标识与您提供的一致,写操作将会成功。如果另一个进程在这期间也修改了这个item,那么该item存放在memcached中的唯一标识将会改变,写操作就会失败。

      三、定时任务

      

      备注:A、这里采用了Sql2008的代理任务实现定时任务,其实还是蛮方便的。

         B、后面移植到专门的服务托管框架中去,让数据库尽量不参与业务逻辑运算,也就是数据库只负责数据存储。

  • 相关阅读:
    python手写神经网络实现识别手写数字
    记录:tensoflow改错TypeError: Cannot interpret feed_dict key as Tensor: Can not convert a float into a Te
    6 TensorFlow实现cnn识别手写数字
    记录:python读取excel文件
    matlab手写神经网络实现识别手写数字
    把当前文件夹的xlsx或xls文件合并到一个excel文件中的不同sheet中
    Mac卸载go
    vue中axios的post和get请求示例
    vue配置请求拦截器和响应拦截器
    vue中main.js配置后端请求地址
  • 原文地址:https://www.cnblogs.com/wucj/p/5002375.html
Copyright © 2020-2023  润新知