继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

侠客岛的含笑
关注TA
已关注
手记 133
粉丝 1.6万
获赞 1807

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

限时秒杀关键点有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. 百万秒杀
      图片描述

      提升速度

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

      防止机器人

      • 语音问答题,情绪,动作,运算(随机性大,防止题目预判)
      • 视听问答题,颜色,图片,语音,视频
      • 知识点问答题,地理,历史,人文
打开App,阅读手记
11人推荐
发表评论
随时随地看视频慕课网APP

热门评论

课程的讲解速度确实比较慢,口语化反复强调的地方比较多,能坚持学下来就要给你点赞~

我后面也整理了一个文章,也可以参考,可能会有不一样的提炼总结。

课程的讲解速度确实比较慢,口语化反复强调的地方比较多,能坚持学下来就要给你点赞~

我后面也整理了一个文章,也可以参考,可能会有不一样的提炼总结。

查看全部评论