PHP7+Swoole开发超高性能后台程序--韩天峰@PHPCon2016

2020-02-27 328浏览

  • 1.PHPCon 2016 PHP7+Swoole开发超高性能后台程序 @hantianfeng Rango- /
  • 2.
  • 3.•  车轮互联总架构师 •  Swoole开源项目创始人 •  PHP官方PECL扩展开发组成员 •  微博:@hantianfeng •Github:https://github.com/matyhtf
  • 4.1.  C10K, C100K,C1M 2.  1W+ QPS
  • 5.C10k 1.  基于epoll实现异步IO处理 2.  选择nginx和swoole 3.  并发100万TCP连接不是难事
  • 6.1W+ QPS 1.  单台服务器每日可处理超过10亿次动态请求 2.  类似淘宝秒杀系统、微信抢红包、刷朋友圈这样全民 级应用。如果PHP程序能达到1W+ QPS,只用几百台机 器就能支撑。
  • 7.如何实现1W+ QPS 1.  IO操作要足够快 或者 异步 常见的IO操作:Redis、MySQL、CURL、磁盘读写 2.  CPU消耗足够少 应用服务器、PHP框架、PHP应用程序
  • 8.同步阻塞模型 100 进程 10次操作 IO类型 耗时 单进程 100 进程 Redis 1ms 1000qps 100000qps 10000qps MySQL 5ms 200qps 20000qps 2000qps CURL 100ms 10qps 1000qps 100qps 磁盘IO 10ms 100qps 10000qps 1000qps
  • 9.同步阻塞模型 1.  多开进程就能增加处理能力 2.  增加进程会带来额外的进程切换开销
  • 10.CPU CPU消耗 耗时 单核 24核 kernel - - - php-fpm 2ms 500qps 12000qps PHP 10ms 100qps 2400qps PHP 20ms 50qps 1200qps + 30ms 33qps 800qps
  • 11.C++ 1.  程序员学习时间+3年 2.  开发调试软件时间 x 3 3.  QPS提升2倍 C++ 机器的时间可以用钱购买,人的时间无法用钱买
  • 12.01 提升PHP程序性能
  • 13.PHP7 CPU消耗 耗时 单核 24核 PHP 5ms 200qps 4800qps PHP 10ms 100qps 2400qps + 15ms 67qps 1600qps · 程序员不需要做任何事情,升级PHP7就立即提升1倍性能
  • 14.Yaf/Phalcon CPU消耗 耗时 单核 24核 C 1ms 1000qps 24000qps
  • 15.Swoole 1.  使用Swoole\Http\Server取代php-fpm将部分PHP对象常驻 内存,减少传统LAMP架构每次请求创建销毁对象的开销 2.  Swoole\Http\Server使用纯C编写,网络通信引擎和协议解析 性能非常强悍。 3.  Swoole最新版本可稳定运行在PHP7环境
  • 16.PHP7+Swoole 软件 QPS Golang 166838.68 PHP7+Swoole 287104.12 Nginx-1.9.9 245058.70 ab -c 100 -n 1000000 -khttp://127.0.0.1:8080/
  • 17.Zend
  • 18.Zend php program.php 词法分析->生成Token 语法分析->生成OpCode 执行OpCode 创建HashTable,添加数据
  • 19.Zend 1.  APC/OpCache只能优化PHP代码编译生成 OpCode的 开销 2.  OpCode执行构建内存中可用HashTable需要消耗CPU 资源 3.  LAMP每次请求结束会释放掉HashTable,下一次请求 再次构建HashTable内存
  • 20.Swoole 1.  大数组、对象、常量等常驻内存,节省大量重复创建销 毁的CPU消耗 2.  PHP框架的环境路径计算、常量定义、初始化框架、类 载入、解析注释语法等操作仅启动时执行一次 3.  业务代码仅剩最干净的请求处理逻辑
  • 21.PHP7 Swoole Yaf Phalcon Redis 快如闪电
  • 22.02 PHP7+Swoole超高性 能程序开发实践
  • 23.uhttp://chelun.com/url/D2M2qXu  3位检验码 + 自增ID(62进制) u  swoole_http_server + redis 单机性能高达 5W+ QPS u  作为车轮互联商业广告的流量入口和出口 u  统计设备号、UID、IP、UV、PV、地理位置等信息,为运营 部门提供数据 u  统计逻辑基于Swoole Task功能实现,不影响核心逻辑
  • 24.
  • 25.MySQL-Proxy 1.  基于swoole_mysql实现,支持php-fpm长连接 2.  后端使用连接池可以有效减少MySQL服务器的连接数。 100台PHP机器 x 500进程 = 5W MySQL连接 100台PHP机器 x 500进程 = 共用4000 MySQL连接 3.  支持MySQL后端服务路由,php-fpm到MySQL-Proxy只需要 建立一个连接,即可向到多台MySQL服务器发送SQL 4.  近期会开源出来
  • 26.MySQL-Proxy 1.  早期版本基于 MYSQLI_ASYNC、mysqli::reap_async_query、 swoole_mysqli_get_sock 2.  存在3个问题,1) connect连接是阻塞的,2) 结果较大可能会阻塞, 3) 缓存区设置较小,有大量read, poll 系统调用导致sys很高 3.  新的API swoole_mysql 自行解析MySQL二进制协议,阻塞时自动 让出,实现了真正的异步非阻塞。并且改为 64K 缓存区,大大减少 了系统调用次数。
  • 27.MySQL (query ) u  3字节长度+ 1字节packet_id + 1字节cmd + n字节SQL语句 uhttp://blog.csdn.net/wind520/article/details/43964821
  • 28.MySQL (ResuleSet)
  • 29.MySQL API
  • 30.
  • 31.
  • 32.
  • 33.超高性能统计运算程序 1.  单机日均计算100亿条统计数据 2.  使用PHP Array 全内存 存储、计算数据。超大规模读写Redis会成为 瓶颈 3.  使用Worker/Task进程实现数据的Map-Reduce 4.  推荐使用PHP的SPL数据结构,性能很好 5.  中间数据可以使用MySQL内存表,汇总计算后删除数据 6.  PHP的GC非靠谱,及时unset掉不用的数据,连续运行无内存泄漏
  • 34.超高性能统计运算程序
  • 35.Swoole 2.0 1.  Swoole底层内置协程,不依赖PHP的Yield、Generator 2.  同步的代码,异步的IO 3.  告别callback hell,告别Go语言
  • 36.Swoole 2.0 PHP 1.  由TSF团队研发完成,提交到Swoole开源项目 2.  2.0预计在7月份发布,新版TSF 2.0预计8月发布 开发者列表 •  司超 chalesi chalesi@tencent.com •  朱新宇 alvinzhu alvinzhu@tencent.com •  王广超 winterswang winterswang@tencent.com •  袁易之 markyuan markyuan@tencent.com •  杨锡坤 roketyyang roketyyang@tencent.com
  • 37.THANK YOU - 2017 - Q&A