为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
PHP MySQL NoSql

先说一下体会,这个老师讲的算是比较慢的了,而且语义化的地方很多,我推荐大家睡觉的时候听,老师主要时讲解代码,大家可以看一遍代码,然后就听就行了,我这样学习就是享受啊,因为我眼睛一直看电脑特累。

限时秒杀关键点有2个,1是公平,2是性能。为了防止外挂机器,可以使用验证码,验证问题等。
性能方面,一个是高并发,一个是请求处理。并发方面可以cache层只写不读,留又一定的空间, 比如100份的,你接受到200个请求,共同写入一个文件里,db方面处理前100个请求。

技术选型:

  1. Linux,Nginx,PHP,Mysql,redis
  2. CDN,智能DNS,分布式缓存(全国多节点),多线路接入
  3. 负载均衡LVS,大型Web集群

最近把Modern PHP过了一遍,其中作者提到了PHP组件化开发,讲师应该就是用的这个。这里我就不刨析代码了,之后我会发在git上的

Mysql封装类

  • PDO

https://github.com/indieteq/PHP-MySQL-PDO-Database-Class

Redis封装库

  • phpredis / Predis
  • 封装基本redis资源连接和命令

调试日志类

系统设计

  • 后台
    • 活动管理
    • 商品管理
      • 订单管理
      • 日志管理
      • 数据列表(增删改查)
        -前台
      • 商品展示
      • 秒杀(抢购)
      • 购物车
      • 我的订单
      • 登录
  • 安全
    • 验证码
    • 防攻击防作弊,防抢购机器人

      基本结构

      图片描述

      数据库

      图片描述
      图片描述
      图片描述
      图片描述

      自动加载器

class SYSCore {
    public static function registerAutoload($class = 'SYSCore') {
        spl_autoload_register(array($class, 'autoload'));
    }

    public static function unregisterAutoload($class) {
        spl_autoload_unregister(array($class, 'autoload'));
    }

    public static function my_callback($match){
        return DIRECTORY_SEPARATOR. $match[0];
    }

    public static function autoload($class_name) {
//        把以下类全部自动加载
        if (strpos($class_name, 'common') === 0
            || strpos($class_name, 'model') === 0
            || strpos($class_name, 'Mysql') === 0
            || strpos($class_name, 'Curl') === 0
            || strpos($class_name, 'controller') === 0
        ) {
        // 系统内部自定义的类域名空间
        } else {
            return true;
        }
        $class_name = str_replace('\\', '/', $class_name);

        $class_path = CUSTOM_CLASS_PATH . DIRECTORY_SEPARATOR . $class_name.'.php';
        // 为了保证不出现问题,再进行一次替换处理
        $class_path = str_replace('//', '/', $class_path);
        if(file_exists($class_path)) {
            return include_once($class_path);
        } else {
            echo "file not exists class_path=$class_path\n<br/>";
        }

        return false;
    }
}

SYSCore::registerAutoload();

商品几种状态控制

  1. Start,Processing,low stoks,end 通过获取商品的状态来显示商品的显示隐藏

    秒杀逻辑控制器

  2. 接收参数
  3. 验证掩护是否登录
  4. 验证问答信息是否正确
  5. 验证用户是否已经购买
  6. 验证活动信息,商品信息是否正确
  7. 验证商品数量是否在合理数量之中
  8. 验证商品剩余数量是否足够购买
  9. 扣除商品剩余数量
  10. 创建订单
  11. 返回提示信息

    单商品秒杀

  12. 简单
  13. 没有关联关系
  14. 验证逻辑少
  15. 万次秒杀 请求少,并发低 单机mysql没问题
  16. 百万秒杀 Web集群 Redis
  17. 过亿级秒杀 需要临时调配大量服务器资源

    组合商品秒杀

  18. 支持多商品选择,多商品库存,限购数量
    1. 验证和处理逻辑更多
    2. 百万秒杀
      图片描述

      提升速度

      图片描述
      图片描述
      图片描述
      图片描述

      防止机器人

      • 语音问答题,情绪,动作,运算(随机性大,防止题目预判)
      • 视听问答题,颜色,图片,语音,视频
      • 知识点问答题,地理,历史,人文
点击查看更多内容
11人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
1.6万
获赞与收藏
1807

关注作者,订阅最新文章

阅读免费教程

感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消