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


      上一篇主要分析了数据库表结构这块,这一篇就直接分析解决方案这块吧。主要分为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、后面移植到专门的服务托管框架中去,让数据库尽量不参与业务逻辑运算,也就是数据库只负责数据存储。

  • 相关阅读:
    zabbix获取主从同步状态的shell
    Linux 线程占用CPU过高定位分析
    LVM
    zabbix添加端口连接数监控
    hadoop未授权访问漏洞
    nginx修改上传文件大小限制(413 Request Entity Too Large)
    官方Tomcat 7.0.81 漏洞整改记录
    python流程控制:while循环
    python流程控制:for循环
    python数据类型—列表(增改删查,统计,取值,排序)
  • 原文地址:https://www.cnblogs.com/wucj/p/5002375.html
Copyright © 2020-2023  润新知