PHP秒杀系统高并发高性能的极致挑战


秒杀系统



特点:

    1.人多,商品少

    2.时间短,流量高

    3.外挂机器


技术:

    1.高并发

    2.多层次的 分布式处理

    3.人机交互与对抗


技术选择/开源免费/普及

    Lnix Nginx PHP MySQL Redis

技术选型分析

    CDN,智能DNS

    分布式缓存,全国节点

    多线路接入

    

    负载均衡LVS

    大型Web集群

    高效稳定

开发环境

    编辑器

    环境

    代码管理工具 Git


封装类

    MySQL

    Redis  phpredis/Predis

    debug

系统设计

    后台

    活动管理/商品管理/订单管理/日志管理

    前台

    商品展示/秒杀/购物车/我的订单

基本功能流程

                                                    成功 

                                                     ^

                                                    /|\

    秒杀->问答验证->库存验证->生成订单

                \|/                  \|/       \|/

                 V                   v         v

                错误          不足        异常

抢购逻辑

    1.验证登录

    2.验证传递参数是否合法

    3.验证问答(验证)信息

    4.验证活动信息状态

    5.验证商品是否已经被购买

    6.验证购买商品数量

    7.验证剩余数量

    8.扣除商品数量

    9.创建订单

    10保存订单 

单商品秒杀

        特点

            简单,没有更多的选择

            独立,没有关联关系

            容易,验证逻辑更少

    万次秒杀

        请求少,并发低,实现基本功能即可

        不需要太多的优化考虑

        单机,MySQL数据库就可以支持

    百万秒杀

        请求量和并发量都开始有明显提升,需要做部分优化

        Web服务器集群

        引入Redis 

        

        带宽 静态化

    过亿秒杀

        极端考虑

        没有的问题也有可能发生

        需要零时调配大量服务器

        

        网络 机器 运算处理

组合商品秒杀

    特点

        支持多商品

        多商品的库存,限购数量

        验证和逻辑处理更多

    万次秒杀

        增加验证逻辑

        不需要太多的优化

        单机 MySQL基本就可以支持

    百万秒杀

        1期的商品相当于多期

        增加了验证逻辑,代码复杂度,增加了异常处理

        严格验证商品 数量 规格等等

    过亿秒杀

        组合商品简单化

        引入中控服务群

        多机房,多数据重新

优化单机性能

        提高页面访问速度

            减少页面大小,启用gzip压缩

            nginx设置

                gzip on;
                gzip_min_length 1k;
                gzip_buffers 4 16k;
                gzio_comp_level 6;
                gzip_type text/plain application/json text/javascript application/xml;

    减少资源请求数量,合并压缩 css/js

    Minify

    设置浏览器缓存,利用CDN资源加速 360cdn加速

                nginx设置
                location ~ .*\.(js|css|jpg|jpeg|gif|png)${  指定缓存文件类型
                expires 7d;  #设置浏览器缓存过期时间
                }

    提高秒杀接口速度

        开抢前页面静态化

    数据处理速度  

        数据库 创建索引 (不能少 不能乱)    太多插入会变慢

        先把数据放到 redis缓存里

分布式方案

    多个接入层服务器

    本地session 本地文件 不能用分布式

    

    多个机房,每个机房一个部署一个集群,每个集群一个lvs

    智能DNS为不同的网络不同的地域的用户解析到不同的LVS

    部分接口引入DNS

 





附件:  001.zip   
---------------------
作者:前世的我
来源:前世的我
原文:http://www.w55.site/blog/article/look/id/30.html
版权声明:本文为博主原创文章,转载请附上博文链接!