前言
首先感激所有 Hyperf 的支持者,从公布至今两年的工夫里,咱们保持每周公布一个小版本,截止至今曾经公布了超过 106 个版本,这是 Hyperf 团队传播对用户保持和负责任精力最间接的一种形式,咱们用口头来阐明所有,往后咱们仍将判若两人地持续放弃 Hyperf 的迭代与保护。
同时咱们也很荣幸看到越来越多的公司抉择了 Hyperf 作为公司我的项目的框架来应用,并反哺了很多的 Pull Request 和 Bugfixs 给 Hyperf,以后 Hyperf 的 Contributors 已超 200 人,感激大家一起共造了生态的凋敝,咱们必然不负众望!
Thanks ALL
在继续迭代的过程中,咱们又产生了一些新的思路。咱们对这些思路进行迭代、验证,并最终积淀到了 2.2 版本中,明天很荣幸向大家颁布,Hyperf 2.2 版本公布!
次要性能迭代
DI 底层实现重构
在 2.0-2.1 版本时,为了实现 AOP 作用于非 DI 治理的对象(如 new
关键词实例化的对象时),底层实现采纳了BetterReflection
组件来实现相干性能,带来新的编程体验的同时,也还是存在一些此前未攻克的问题,如下:
- 无扫描缓存时我的项目启动很慢
- 非凡场景下 Inject 和 Value 不失效
BetterReflection
尚未反对 PHP 8 (截止发版时)
在新的版本里,咱们弃用了 BetterReflection
的利用,采纳了 子过程扫描的形式
来解决此前的问题, 以上这些痛点,咱们全副解决了~
用正向的角度来形容这个性能的变更:
- 无缓存下,启动工夫缩减一个数量级,以笔者所在公司的某个巨型我的项目为例,原启动工夫长达 5 分钟,新版本只需 10 秒!
- 丰盛了
Inject
注解注入的实用场景,但惋惜仍有一种状况下有效(父类private
属性注入时生效,与此前版本体现统一),咱们会持续致力攻克该场景的实现 - 反对
PHP 8
及Attributes
原生注解个性
简而言之,DI 组件作为 Hyperf 的外围组件之一,当初曾经达到了一个全新的阶段,翻新与实用值满格~
反对 PHP 8
Hyperf 2.2 各组件曾经适配 PHP 8
,注解亦兼容 PHP 8
的 Attributes
原生注解个性。
<?php
namespace App\Controller;
#[Controller]
class IndexController
{#[GetMapping("/test")]
public function index()
{...}
}
须要留神的是,同一区域同时 应用 注解 (Annotations)
和 原生注解 (Attributes)
,底层将 疏忽注解(Annotations) (即便注解不同)
<?php
namespace App\Controller;
/**
* @Controller
* 同一区域同时应用,注解(Annotations) 有效
*/
#[Middleware(TestMiddleware::class)]
class IndexController
{
// 独自应用,能够反对
#[Inject]
protected StdoutLoggerInterface $logger;
/**
* 独自应用,能够反对
* @GetMapping("/test")
*/
public function index()
{...}
}
须要留神的是,框架尽管曾经反对 PHP8
,然而降级时仍须要自行确认业务代码和依赖的第三方组件是否满足 PHP 8 不兼容变更。
可反复注解
在之前版本中,同一区域雷同Annotation
无奈重复使用:
/**
* @AutoController()
* @Middleware(FooMiddleware::class)
* @Middleware(BarMiddleware::class)
* 反复 @Middleware 只有一个失效!
*/
class IndexController
{}
此前,重复使用雷同注解只能通过注解嵌套形式实现:
/**
* @AutoController()
* @Middlewares({* @Middleware(FooMiddleware::class)
* @Middleware(BarMiddleware::class)
* })
* 十分繁琐,减少额定心智累赘
*/
class IndexController
{}
在 2.2 中,咱们实现了 可反复注解:
<?php
namespace App\Controller;
#[AutoController]
#[Middleware(FooMiddleware::class)]
#[Middleware(BarMiddleware::class)]
class IndexController
{}
当用户自定义的注解须要可反复时,将注解的父类更改为 Hyperf\Di\Annotation\AbstractMultipleAnnotation
即可,具体可参考框架 Middleware
注解的实现。
配置核心齐全重构
在此前的版本,配置核心的实现是由各个零散的组件自行实现的,各组件的实现参差不一,都有一些细节实现的区别,各组件间的代码重合度也是十分高的,在 2.2 版本,咱们 齐全重构 了相干组件,减少了 hyperf/config-center
组件,该组件将作为配置核心的对立接入层和形象层,通过联合其余配置核心的 Driver 组件来实现相干贮存引擎的能力驱动,如 hyperf/config-center
+ hyperf/config-apollo
组件联合应用的形式来实现对 Apollo 配置核心的应用,其余驱动只需更换对应的驱动即可。这样的革新使咱们极大的缩小了驱动的代码量,当初简略几行代码几个类就能实现一个新的驱动的接入了。
在降级应用时,留神相干配置文件的变更,新版本将由 config/autoload/config_center.php
配置文件来管控所有相干信息,首次创立该文件可通过运行 php bin/hyperf.php vendor:publish hyperf/config-center
命令生成。
服务治理组件重构
在此前的版本,hyperf/service-governance
组件跟配置核心所面临的问题也是统一的,咱们在此版本也做了与配置核心相似的扭转,比方通过 hyperf/service-governance
+ hyperf/service-governance-nacos
组件来实现 nacos 作为服务中心的应用。
在降级应用时,留神相干配置文件的变更,新版本将由 config/autoload/services.php
配置文件来管控所有相干信息,内部结构有肯定的扭转,首次创立该文件可通过运行 php bin/hyperf.php vendor:publish hyperf/service-governance
命令生成。
Nacos 组件齐全重构
重要:肯定要重读该组件文档!!!
咱们对 Nacos 组件做了 齐全的重构,使该组件的代码实现、构造分层和 API 更加的正当,并对原来整合在一个组件内的配置核心逻辑、服务中心逻辑和客户端代码进行了拆分,如下面两个次要迭代性能介绍所示。
具体应用到 Nacos 组件的肯定要从新浏览新的文档,并依据新的文档批示来应用。
AMQP 组件连贯机制重构
咱们发现应用 AMQP 组件的用户十分的多,而作为一个音讯队列组件,其性能速度对系统的削峰成果和音讯投递 / 生产速度影响是十分大的,咱们通过 协程通道(Channel)
实现了一个多路复用的机制,使该组件的音讯投递性能晋升了将近一倍!在性能晋升的同时,还使得客户端与服务端间的连贯稳定性失去了晋升。
该组件降级后会间接切换为新的连贯机制,无需做任何调整。
以下是抽取压测比照中的要害信息:
非 Confirm 模式投递
2.1 版本
连接池内最大数量设置为 10
$ ab -c 32 -n 10000 http://127.0.0.1:9501/
Requests per second: 5340.80 [#/sec] (mean)
Time per request: 5.992 [ms] (mean)
Time per request: 0.187 [ms] (mean, across all concurrent requests)
Transfer rate: 928.38 [Kbytes/sec] received
2.2 版本
设置 2 个多路复用的连贯
$ ab -c 32 -n 10000 -k http://127.0.0.1:9501/
Requests per second: 9101.44 [#/sec] (mean)
Time per request: 3.516 [ms] (mean)
Time per request: 0.110 [ms] (mean, across all concurrent requests)
Transfer rate: 1626.53 [Kbytes/sec] received
Confirm 模式投递
2.1 版本
连接池内最大数量设置为 10
$ ab -c 32 -n 5000 -k http://127.0.0.1:9501/
Requests per second: 797.73 [#/sec] (mean)
Time per request: 40.114 [ms] (mean)
Time per request: 1.254 [ms] (mean, across all concurrent requests)
Transfer rate: 142.56 [Kbytes/sec] received
2.2 版本
设置 2 个多路复用的连贯
$ ab -c 32 -n 5000 -k http://127.0.0.1:9501/Requests per second: 1595.94 [#/sec] (mean)Time per request: 20.051 [ms] (mean)Time per request: 0.627 [ms] (mean, across all concurrent requests)Transfer rate: 285.21 [Kbytes/sec] received
3 个 Incubator 组件毕业进入主库
自从采纳 Incubator 机制来孵化组件后,产生了大量的新组件,很荣幸在 2.2 版本时,有 3 个 Incubator 组件毕业进入主库,这也意味着这些组件进入了生产可用阶段~
以下为各个毕业的组件及其简介
hyperf/dag
该组件是一个轻量级有向无环图 (Directed Acyclic Graph) 工作编排库,通过该组件能够很轻松的实现工作的编排和运行。
hyperf/rpc-multiplex
该组件是一个实现多路复用的 RPC 协定连贯组件,通过应用该库能够失去性能更高和连贯更稳固的 RPC 性能;
hyperf/rpn
该组件是一个 逆波兰表示法 的实现组件,RPN
是一种是由波兰数学家扬·武卡谢维奇 1920 年引入的数学表达式形式,在逆波兰记法中,所有操作符置于操作数的前面,因而也被称为后缀表示法。逆波兰记法不须要括号来标识操作符的优先级。通过该组件能够实现 逆波兰表达式 的解析。
依赖降级
- 降级
friendsofphp/php-cs-fixer
为^3.0
; - 降级
psr/container
为^1.0|^2.0
; - 降级
egulias/email-validator
为^3.0
; - 降级
markrogoyski/math-php
为^2.0
; - 降级
league/flysystem
为^1.0|^2.0
;
依赖项已更改
- #3577
domnikl/statsd
废除,不再保护。作者倡议改用slickdeals/statsd
包;
行将弃用 API
- #3636
Hyperf\Utils\Resource
将在v2.3
中被弃用,请改用Hyperf\Utils\ResourceGenerator
;
变更明细
- #3334 将
LengthAwarePaginator::toArray()
的返回值更改为与Paginator::toArray()
的统一; - #3550 从
kafka
删除了broker
和bootstrap_server
,请应用brokers
和bootstrap_servers
代替; - #3580 将切面的默认优先级更改为 0;
- #3582 将
AMQP
的消费者标签更改为空字符串; -
#3634 应用
Fork Process
策略替换BetterReflection
策略;- #3649 在
hyperf/database
应用gen:model
时移除了roave/better-reflection
; - #3651 在
LazyLoader
中移除了roave/better-reflection
; - #3654 在其余组件中移除了
roave/better-reflection
;
- #3649 在
- #3676 应用
promphp/prometheus_client_php
代替endclothing/prometheus_client_php
; -
#3694 更改
Hyperf\CircuitBreaker\CircuitBreakerInterface
为反对PHP8
;- 改
CircuitBreaker::inc*Counter()
到CircuitBreaker::incr*Counter()
; - 更改了
AbstractHandler::switch()
办法的类型提醒;
- 改
- #3706 在
PHP8
中将@Middlewares({@Middleware(FooMiddleware::class)})
的书写格调更改为#[Middlewares(FooMiddleware::class)]
; - #3715 重构
nacos
组件,肯定 要重读文档; - #3722 删除了
config_apollo.php
配置,请改用config_center.php
; - #3725 删除了
config_etcd.php
配置,请改用config_center.php
; - #3730 从
kafka
中删除了brokers
和update_brokers
配置; - #3733 删除了
zookeeper.php
配置,请改用config_center.php
; - #3734 #3772 宰割了
nacos
为config-nacos
和service-governance-nacos
; - #3734 重命名
nacos-sdk
组件名为nacos
; -
#3737 重构配置核心和配置驱动程序
- 增加
AbstractDriver
并将反复的代码并合到抽象类中 - 增加
PipeMessageInterface
以对立配置获取过程的音讯构造
- 增加
- #3817 #3818 从 service-governance 组件中拆散出 service-governance-consul 组件;
更多
- 其余变动
降级指南
咱们提供了详尽的降级指南,请查阅官网文档 – 2.2 降级指南
官网及交换
Github 👈👈👈👈👈 点 Star 反对咱们
Gitee 码云 👈👈👈👈👈 点 Star 反对咱们
Hyperf 官网
Hyperf 文档
Hyperf 交换群: 862099724(已满)
Hyperf 交换 2 群: 811414891(已满)
Hyperf 交换 3 群: 589051831
钉钉群 一群: 34538367(已满)
钉钉群 二群: 34488757