热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

优化后的标题:PHP分布式高并发秒杀系统设计与实现

PHPSeckill是一个基于PHP、Lua和Redis构建的高效分布式秒杀系统。该项目利用php_apcu扩展优化性能,实现了高并发环境下的秒杀功能。系统设计充分考虑了分布式架构的可扩展性和稳定性,适用于大规模用户同时访问的场景。项目代码已开源,可在Gitee平台上获取。

PHP Seckill是使用php_apcu扩展、Lua、Redis实现的简单分布式秒杀项目


🔗 1.项目地址

https://gitee.com/imbee/php-seckill


🔍️ 2.业务分析

1.抢购秒杀时本地服务器进行库存验证
2.本地和远端同时进行库存扣减
3.扣减成功后将用户ID和产品ID写入MQ
4.异步创建订单
5.告知用户抢购成功


⚡️ 3.项目架构

请添加图片描述


📜 4.项目结构

api.php 业务接口
base.php 基类

🔧 5.php_apcu扩展安装


window安装

1.下载地址:https://windows.php.net/downloads/pecl/releases/apcu/
2.php_apcu.dll放置’\php\php7.x.x\ext’目录
3.修改php.ini

extension = php_apc.dll

4.重启服务


linux ubuntu 安装

1.安装php_apcu

apt install -y php-apcu

2.安装apcu向后兼容扩展

apt install -y php-apcu-bc

3.配置中启用

extension = apcu.so
apc.enabled = on
apc.shm_size = 256M
apc.enable_cli = on #测试环境启用

4.重启php-fpm进程

systemctl restart php7.x-fpm

🧪 6.测试案例


6.1 初始化远端库存数据

HTTP Request


GET …/api.php?act=initRemoteStock&product_id=1&user_id=1


请求参数


参数数据类型描述
actString方法名称 initRemoteStock:初始化远端库存数据
product_idInt产品ID
user_idInt用户Id

请求案例

curl --location --request GET '../api.php?act=initRemoteStock&product_id=1&user_id=1'

响应结果

Status: 200 OK

6.2 查询远端库存数据

HTTP Request


GET …/api.php?act=getRemoteStock&product_id=1&user_id=1


请求参数


参数数据类型描述
actString方法名称 getRemoteStock:查询远端库存数据
product_idInt产品ID
user_idInt用户Id

返回参数


参数数据类型描述
codeString状态码
msgString返回信息
元素<响应>data
remote_total_countString远端原始总库存
remote_use_countString已用库存
remote_total_stockInt剩余库存

请求案例

curl --location --request GET &#39;../api.php?act&#61;getRemoteStock&product_id&#61;1&user_id&#61;1&#39;

响应结果

{"code": "200","msg": "success","data": {"remote_total_count": "1000","remote_use_count": "0","remote_total_stock": 1000}
}

6.3 初始化本地库存数据

HTTP Request


GET …/api.php?act&#61;initLocalStock&product_id&#61;1&user_id&#61;1


请求参数


参数数据类型描述
actString方法名称 initLocalStock:初始化本地库存数据
product_idInt产品ID
user_idInt用户Id

请求案例

curl --location --request GET &#39;../api.php?act&#61;initLocalStock&product_id&#61;1&user_id&#61;1&#39;

响应结果

Status: 200 OK

6.4 查询本地库存数据

HTTP Request


GET …/api.php?act&#61;getLocalStock&product_id&#61;1&user_id&#61;1


请求参数


参数数据类型描述
actString方法名称 getLocalStock:查询本地库存数据
product_idInt产品ID
user_idInt用户Id

返回参数


参数数据类型描述
codeString状态码
msgString返回信息
元素<响应>data
local_countInt本地总库存
local_useInt本地已用库存
local_stockInt本地剩余库存

请求案例

curl --location --request GET &#39;../api.php?act&#61;getLocalStock&product_id&#61;1&user_id&#61;1&#39;

响应结果

{"code": "200","msg": "success","data": {"local_count": 150,"local_use": 0,"local_stock": 150}
}

6.5 抢购

HTTP Request


GET …/api.php?act&#61;buy&product_id&#61;1&user_id&#61;1


请求参数


参数数据类型描述
actString方法名称 buy:抢购

请求案例

curl --location --request GET &#39;../api.php?act&#61;buy&product_id&#61;1&user_id&#61;1&#39;

响应结果

{"code": 200,"msg": "success"
}

6.6 查询订单信息

HTTP Request


GET …/api.php?act&#61;searchOrders&product_id&#61;1&user_id&#61;1


返回参数


参数数据类型描述
actString方法名称 searchOrders:查询订单信息

请求案例

curl --location --request GET &#39;../api.php?act&#61;searchOrders&product_id&#61;1&user_id&#61;1&#39;

响应结果

{"code": 200,"msg": "success","data": [{"user_id": "1","product_id": "1"},...]
}

6.7 远端和本地同步库存

HTTP Request


GET …/api.php?act&#61;sync&product_id&#61;1&user_id&#61;1


返回参数


参数数据类型描述
actString方法名称 sync:远端和本地同步库存

请求案例

curl --location --request GET &#39;../api.php?act&#61;sync&product_id&#61;1&user_id&#61;1&#39;

响应结果

{"code": 0,"msg": "同步库存成功","data": {"local_stock_1": 849}
}

7.TODO


  • 异步创建订单
  • 告知用户请购成功

推荐阅读
  • 欢迎来到Netgen新时代:探索网络生成技术的无限可能
    欢迎进入Netgen的新时代:探索网络生成技术的无限潜力。本文将详细介绍如何编译下载的Netgen源代码,生成Netgen程序,并提供开发所需的库nglib。此外,还将探讨Netgen在现代网络设计与仿真中的应用前景,以及其在提高网络性能和可靠性方面的关键作用。 ... [详细]
  • Windows环境下详细教程:如何搭建Git服务
    Windows环境下详细教程:如何搭建Git服务 ... [详细]
  • 本文介绍了在Windows 10系统下使用VirtualBox虚拟机环境部署CentOS 7.2,并在其上安装Docker的具体步骤。针对宝塔面板在Docker容器中磁盘空间限制为8GB的问题,提供了详细的解决方案和优化建议,确保用户能够高效利用有限的存储资源。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
  • 在无网络环境下于CentOS 7系统中离线部署Nginx服务器
    nginx背景俄罗斯程序员IgorSysoev创建,于2004年NGINX首次发布,来解决C10K问题(10000并发客户端连接到单个服务器,导致服务器连接数过多崩溃的问题),是一 ... [详细]
  • 利用PaddleSharp模块在C#中实现图像文字识别功能测试
    PaddleSharp 是 PaddleInferenceCAPI 的 C# 封装库,适用于 Windows (x64)、NVIDIA GPU 和 Linux (Ubuntu 20.04) 等平台。本文详细介绍了如何使用 PaddleSharp 在 C# 环境中实现图像文字识别功能,并进行了全面的功能测试,验证了其在多种硬件配置下的稳定性和准确性。 ... [详细]
  • 点云技术初探(三):PCL基础知识与学习路径指南本文首先介绍了点云库(PCL)的基本概念,PCL是一个在前人点云研究成果基础上发展而来的大型跨平台开源C++编程库,旨在为点云数据处理提供全面的支持。文章详细阐述了PCL的核心功能及其在三维数据处理、特征提取、分割与配准等方面的应用,并为初学者提供了系统的学习路径和资源推荐,帮助读者快速掌握PCL的使用方法。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 利用 Python 实现 Facebook 账号登录功能 ... [详细]
  • 本文详细介绍了在Ubuntu操作系统中使用GDB调试工具深入分析和调试标准库函数`printf`的源代码过程。通过具体步骤和实例,展示了如何设置断点、查看变量值及跟踪函数调用栈,帮助开发者更好地理解`printf`函数的工作原理及其内部实现细节。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • Android平台生活辅助应用的设计与开发实现
    随着移动互联网技术的迅猛发展,Android操作系统已成为移动设备中的主流平台。本文探讨了基于Android平台的生活辅助应用设计与开发,旨在通过创新的功能和用户友好的界面,提升用户的日常生活质量。研究不仅涵盖了应用的核心功能实现,还深入分析了用户体验优化的方法,为同类应用的开发提供了有价值的参考。 ... [详细]
  • 综合实训 201521440015
    Chinesepeople’publicsecurityuniversity网络对抗技术实验报告实验五综合渗透学生姓名常泽远年级15区队4指导教师高见信息技术与网络安全学院2018 ... [详细]
author-avatar
Xlady贩卖__铺
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有