全国|切换城市 小程序开发 · APP开发 · 网站建设首选小二CMS,专业高端品牌企业网站制作设计公司,欢迎来电:198-1095-0281 网站软件开发首选小二CMS
NEWS CENTER

运营推广

小二CMS · 专注企业数字化转型的资讯与干货

关于PHP高并发抢购系统设计

2017-08-18 864 阅读 运营推广 字号
文章摘要

高并发环境下,对于服务器cup、内存、网络宽带使用率会瞬间暴涨,需要注意对同服务器上其他应用的影响。

核心要点
内容
并发抢购系统注意事项
高并发架构设计描述
程序端核心代码实现
订单流程mysql 端并发解决方案


注意事项
(1)高并发环境下,对于服务器cup、内存、网络宽带使用率会瞬间暴涨,需要注意对同服务器上其他应用的影响。(项目解耦,高并发应用独立部署)
(2)服务器高负载运行,容易出现死机,重启服务器场景,要提前考虑内存(redis)数据备份与恢复,防止用户抢购数据丢失.
(3)高并发应用首先要注重稳定性,其次是性能上优化.


(4) 一台服务器能够支持多少并发量
nginx服务为例:
worker_processes 8;
worker_rlimit_nofile 102400;
use epoll;
worker_connections 102400;
ulimit -n
cat /proc/sys/fs/file-max 


架构设计

(1)LVS服务, 做负载均衡调度, 采用RD模式, 通过股修改数据包的目的MAC地址实现转发,该方式性能好, 对并发高应用,适合大规模部署负载均衡机器;抗负载能力强、是工作在网络4层仅作分发之用,没有流量的产生;工作稳定,自身有完整的双机热备方案
(2)keepalive(vrrp协议方式) 做心跳检测,支持应用具有高可用性。
(3)nginx工作在网络的7层,所以它可以针对http应用本身来做分流策略, 可用说对LVS负载的补充。nginx高效处理高并发请求在于采用异步非阻塞工作方式和epoll IO 模型。  
(4)页面动态数据,用户数据,抢购商品数据采用Redis存储。
(5)用户抢购记录标识存储在Redis服务器端。在nginx负载均衡端,应用lua脚本做用户抢购记录过滤。
(6)real server端部署 nginx与php, 同时 real server 可以参与负载端调度。
(7)mysql server cluster 端采用一主多从部署,master负载数据写及同步到slave, slave负责数据读取。推荐应用mysql代理组件atlas, 实现对php端对mysql读写透明操作。
核心代码实现
背景
假设每个用户只允许抢购一件商品。
预备数据
抢购商品总数存入redis中, 比如十万个数据
$redisObj = new redis();
$redisObj->set('goods_amount', 1000000);
$redis->watch('goods_amount'); //应用redis watch 乐观锁
$amount = $redis->get('goods_amount');
if($amount > 0)
{
 $userInfo = $reids->get('user_info_crc32(url_token)', array('userId'=>120, '....')); 
 
  if(empty($userInfo)){
      
        $ret = $redis->multi() ->decr('goods_amount') ->exec();
      if($ret){
$reids->set('user_info_crc32(url_token)', array('userId'=>120, '....')); 
       根据crc32(url_token)唯一索引创建改用户已抢过商品的标识。(同时标识可以设置一段时间有效期,例如10分钟);
    
write("user_id", {user_id}_success.log);
      }else {
                //提示抢购失败 
    }
 } else {
    $redis->unwatch(‘goods_amount');
    //提示抢购失败 
} else {
    //抢购结束, 封闭入口
}
}


(1)下一个抢购请求到来时,在nginx服务器lua端,检查googs_amount抢购商品数量,判断抢购有没有结束,在判断user_info_crc32(url_token)有没有抢过成功,如果成功跳转到下单页面,否则执行抢过流程。
(2)抢购首页直接高并发静态资源存储在cdn 服务端, 来减轻服务端访问请求的压力
mysql端并发解决
(1)抢购商品数据预热,提前存储在redis中,比如商品名称,属性等等。
(2)采用innodb 数据库引擎,在高并发场景读操作有优势,合理创建表结构,尽可能的减少链表查,可以适当设计表中冗余字段,sql查询能够必须走索引。
(3)用户浏览商品详情页(需要在redis端做动态数据缓存) 
(4)用户点击购买跳转到订单详情页(包括用户基本信息,商品信息,支付方式,积分消费等数据考虑对数据库并发查询压力,要采用redis缓存策略)
(5)订单数据提前生成,user_id留空,同时通过redis lpush,把连续订单id,提前同步到redis分布式集群,redis集群支持心调检测,能够自动做服务奔溃切换。
(6)用户提交订单后,  在redis服务lpop拿到一个订单id, 根据订单id条件更新用户user_id等信息。
   begin;
   update mt_account set user_id=100 where order_id=$orderId and user_id=0 li mit 1;
   commit;
文章声明

本文标题:关于PHP高并发抢购系统设计

文章内容来源于网络,文章表达观点不代表本站观点,文章版权归原作者所有。若有侵权,请联系本站站长处理!

小二CMS介绍

我们立足合肥,业务覆盖安徽、全国及全球市场。我们凭借一支经验丰富、富有创意、协作无间的专业技术团队,专注于将前沿技术通过高效简捷的途径呈现给客户,量身打造优质解决方案。我们致力于通过持续努力,成为客户在信息化领域值得托付、共创价值的长期战略合作伙伴,协助客户在新经济时代敏锐捕捉商机,拓展发展空间,构筑强大竞争力。小二CMS专注企业数字化转型的智能建站与营销系统,提供从官网搭建、品牌推广到运营增长的一站式服务,助力中小企业低门槛拥有专业级互联网阵地。

了解全部业务
小二CMS微信二维码
扫码咨询 · 关注微信

这篇文章对你有帮助吗?

你的每一次鼓励,都是我们持续打磨优质内容的动力

全部评论
0
ABOUT US

关于我们

以 AI 驱动创新,以品质铸造口碑

关于我们

小二CMS一家融合AI人工智能与前沿互联网技术的数字化解决方案服务商,专注于高端网站建设、微信小程序开发、移动端应用研发及企业数字化转型服务。我们将AI技术深度融入产品研发与服务流程,通过智能算法、大模型应用与自动化工具,为客户提供更高效、更精准的数字化解决方案。

自2013年成立以来,我们已成功交付3000+个精品项目,服务客户遍布金融、零售、制造、教育、医疗、互联网等多个行业领域。我们拥有资深的技术团队与丰富的实战经验,在AI智能应用、复杂业务建模、高性能架构设计、跨平台开发及企业级安全保障等方面具备专业能力。

我们相信,AI不是替代人,而是赋能人。选择小二CMS,就是选择一支懂技术、懂AI、更懂您业务痛点的数字化创新团队。让我们以AI之力,将您的品牌愿景与市场机遇转化为可落地的数字现实,共同驱动业务增长与品牌价值升级。

3000+ 精品项目 12年 行业深耕 98% 客户满意
我们的优势
01
AI深度融合大模型+智能自动化
02
十三年深耕专注高端网站建设
03
全栈技术能力前后端+跨平台开发
04
资深策划团队深度洞悉行业需求
05
SEO深度优化搜索引擎友好排名
06
完善售后体系全程无忧技术支持
07
数据安全保障多重防护体系
08
弹性架构灵活支持二次开发
我们的不同

我们是一支充满激情与创造力的团队,痴迷代码,沉醉设计,深耕AI技术。我们坚信:技术不是冰冷的工具,而是驱动商业增长的核动力。

AI先行

将AI融入产品与服务全流程

品质至上

客户第一,追求卓越用户体验

彼此成就

客户的成功,才是我们真正的成功

产品演示

产品演示二维码

请使用微信扫描二维码

查看产品演示

QQ 客服

扫码添加好友 · 专属客服在线

QQ二维码
QQ号:460623785

微信客服

扫码添加 · 一对一专属服务

微信二维码
微信号:yanboss0901
PROFESSIONAL SERVICE

联系我们

选择最适合您的方式 · 专属顾问 7×24 在线为您服务

微信客服

扫码添加 · 一对一专属服务

微信二维码
微信号 yanboss0901

QQ 客服

扫码添加 · 专属客服在线

QQ二维码
QQ号 460623785

电话咨询

工作日 9:00-21:00 · 极速响应

立即拨打

在线客服

智能 + 人工 · 即时沟通

遇到问题?点击进入在线客服,智能助手与人工顾问随时为您解答。

进入在线客服
微信咨询
QQ咨询
电话咨询
在线客服
回到顶部
预约演示 · FREE DEMO

预约产品演示

留下联系方式,顾问将尽快为您安排一对一演示

信息严格保密,仅用于与您联系

提交成功

我们已收到您的预约,顾问将尽快与您联系。