热门标签 | 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 驱动的工作模式
  • 多线程编程知识:主要考虑同一进程中,线程之间共享内存(程序运行可能产生的内存溢出,脏数据的产生等问题)






推荐阅读
  • 本文介绍了如何查看PHP网站及其源码的方法,包括环境搭建、本地测试、源码查看和在线查找等步骤。 ... [详细]
  • PHP 5.5.31 和 PHP 5.6.17 安全更新发布
    PHP 5.5.31 和 PHP 5.6.17 已正式发布,主要包含多个安全修复。强烈建议所有用户尽快升级至最新版本以确保系统安全。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • (1)前期知识:1. 单机架构:单一服务器计算机——其处理能力和存储容量有限。2. 集群架构(负载均衡器与多节点服务器)——通过增加节点数量来提升系统性能和可靠性,实现高效的任务分配和资源利用。 ... [详细]
  • 近年来,BPM(业务流程管理)系统在国内市场逐渐普及,多家厂商在这一领域崭露头角。本文将对当前主要的BPM厂商进行概述,并分析其各自的优势。目前,市场上较为成熟的BPM产品主要分为两类:一类是综合型厂商,如IBM和SAP,这些企业在整体解决方案方面具有明显优势;另一类则是专注于BPM领域的专业厂商,它们在特定行业或应用场景中表现出色。通过对比分析,本文旨在为企业选择合适的BPM系统提供参考。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
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社区 版权所有