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

hyperf优点、缺点分析

前引hyperf我所熟悉的是基于swoole驱动的模式(协程)。hyperf完全取代了php-fpm,即是nginx转发请求不再转发给p




前引

hyperf 我所熟悉的是基于swoole驱动的模式(协程)。
hyperf 完全取代了php-fpm,即是nginx转发请求不再转发给php-fpm ,而是转发给hyperf启动的进程处理。(甚至于hyperf 也可越过nginx 直接处理用户请求,但一般我们会在前面加一个代理(nginx)来转接请求)


hyperf的优点


  • 协程的支持:基于swoole的请求协程化,一个请求对应一个协程。但因协程是用户线程(用户创建的线程,所以这个线程的声明周期及何时发生上下文切换均由我们自己管理)。所以无法使用多核cpu的特性(意为在一个含有协程的进程中同时运行多个协程)。如果要使用多核cpu的特性,就需要使用多进程模型(多个进程监听同一个端口,采用惊群现象处理请求,每个cpu负责一个含有协程的进程)
  • 微服务化:便捷简单微服务化支持,我仅了解json-http rpc协议,grpc太复杂暂不了解。且有完善的分布式事务支持(go 语言编写的DTM 事务协调器,使用这个协调器对接hyperf实现稳定的分布式事务)
  • 运行速度极快:因采用协程,所以运行速度快(但要注意阻塞问题,同一时刻只有一个协程在跑,如这个协程在运行时产生的阻塞是否会使cpu产生等待问题需要考虑。(比如与mysql建立连接是否会使cpu堵塞在这个协程上))
  • 与其他框架(laravel)在结构上、组件功能上无较大差异:路由、验证器、中间件、ORM、队列、请求、响应、控制器、命令、测试、异常处理等。(可快速上手)
  • 新增守护进程支持,一次启动,即可长时工作在任务后台(如队列监听守护进程,也可创建一个proccess 对象,自定义这个守护进程的逻辑)
  • mysql连接池,redis连接池 快捷实现(主要用户解决程序运行需要和mysql建立连接锁产生的阻塞问题,mysql连接数问题)

hyperf的缺点


  • 瞬时流量爆发(如秒杀、红包等场景)
    a、 此场景下会在进程中产生大量的协程,每个协程都需要建立mysql连接时会导致mysql连接数耗尽而导致mysql抛出连接数异常
    b、每个协程在创建成功后会被分配多少内存,当数量过多后是否会挤爆进程(受操作系统和配置的影响),导致无法对外提供服务
    c、当采用数据库连接池解决连接数问题后,mysql数据库的iops指标是否能满足需求。(单位时间内的读写能力是否能支撑这么高的迸发)
    d、当采用队列消息时,如果队列过长,且因意外原因,导致了服务器重启,如何恢复队列任务的执行(redis方案不可取,redis一旦重启,内存数据就没了,虽然可以采用数据持久化,但一般来说很少用redis来存储数据。查阅官方文档并无mysql数据库队列消息的实现,估计只有自己去封装一个包来实现mysql队列任务了)

还有其它很多需要考虑的问题点,本次就暂时整理这些。
写下这篇文章并不是反馈hyperf不好,反之,hyperf 很好。他实现了php 微服务化,且针对微服务也做了负载,nacos等的支持。他让php在框架选型的范围上有了更多的支持。
但是学习和使用hyperf框架需要较强的技术知识


关联技术知识


  • Linux操作系统基本命令的熟悉
  • lnmp环境搭建(开发环境一般采用宝塔来搭建)
  • windows上搭建linux虚拟机(我采用hyper-v Windows扩展工具搭建,但要cpu支持虚拟化,如不支持需要进入dos命令界面开启cpu虚拟化)如Ubuntu
  • phpstorm 搭载ftp协议与虚拟机ubuntu进行文件(达到本地修改直接自动同步至虚拟机ubuntu指定目录)
  • 进程方面的知识:进程的状态,进程的调度,cpu在线程和进程上发生上下文切换时所做的工作
  • nginx代理
  • nginx的工作模式(master-work),hyperf swoole 驱动的工作模式
  • 多线程编程知识:主要考虑同一进程中,线程之间共享内存(程序运行可能产生的内存溢出,脏数据的产生等问题)






推荐阅读
  • 电商系统设计艺术——秒杀业务设计
    一、秒杀场景人多货少,只有少量的人能够抢购成功。高并发,秒杀业务在开始之前流量比较平稳,开始后流量会直线性的上升。持续时间短࿰ ... [详细]
  • redis 获取不到_redis 缓存锁的实现方法
    1.redis加锁分类redis能用的的加锁命令分表是INCR、SETNX、SET2.第一种锁命令INCR这种加锁的思路是,key不存在,那么key的值 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • [翻译]微服务设计模式5. 服务发现服务端服务发现
    服务之间需要互相调用,在单体架构中,服务之间的互相调用直接通过编程语言层面的方法调用就搞定了。在传统的分布式应用的部署中,服务地 ... [详细]
  • 一面自我介绍对象相等的判断,equals方法实现。可以简单描述挫折,并说明自己如何克服,最终有哪些收获。职业规划表明自己决心,首先自己不准备继续求学了,必须招工作了。希望去哪 ... [详细]
  • PHP语言之所以能有今天的地位,得益于PHP语言设计者一直遵从实用主义,将技术的复杂性隐藏在底层。PHP语言入门简单,容易掌握,程序健壮性好。 ... [详细]
  • 在这分布式系统架构盛行的时代,很多互联网大佬公司开源出自己的分布式RPC系统框架,例如:阿里的dubbo,谷歌的gRPC,apache的Thrift。而在我们公司一直都在推荐使用d ... [详细]
  • 【宇润日常疯测007】Swoole 协程与传统 fpm 同步模式比较
    为什么80%的码农都做不了架构师?如果说数组是PHP的精髓,数组玩得不6的,根本不能算是会用PHP。那协程对于Swoole也是同理& ... [详细]
  • ASP.NET CORE 简介
    ASP.NETCore是一个跨平台的高性能开源框架,用于生成启用云且连接Internet的新式应用。使用ASP.NETCore,您可以:生成Web ... [详细]
  • 面试经验分享:华为面试四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试
    最近有朋友去华为面试,面试经历包括四轮电话面试、一轮笔试、一轮主管视频面试、一轮hr视频面试。80%的人都在第一轮电话面试中失败,因为缺乏基础知识。面试问题涉及 ... [详细]
  • 本文介绍了在无法联网的情况下,通过下载rpm包离线安装zip和unzip的方法。详细介绍了如何搜索并下载合适的rpm包,以及如何使用rpm命令进行安装。 ... [详细]
  • 阿里首席架构师科普RPC框架
    RPC概念及分类RPC全称为RemoteProcedureCall,翻译过来为“远程过程调用”。目前,主流的平台中都支持各种远程调用技术,以满足分布式系统架构中不同的系统之间的远程 ... [详细]
  • HotFrameLearning热门框架学习(目录)-I、项目介绍-II、专辑栏目一、RedisRedis简介Redis环境安装配置Redis客户端连接 ... [详细]
  • php怎么做rpc通信(RPC通信)
    导读:很多朋友问到关于php怎么做rpc通信的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
  • 分布式服务框架和原理简章
    应用架构演进这里的架构演进应该是从服务化的角度来说,应该说随着业务发展,应用规模扩大,系统的一些公共服务就会抽取出来,独立开发,部署,维护,用来解决并发,扩展,维护的问题。传统垂直 ... [详细]
author-avatar
xhhh5_236
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有