更新內容
本週更新主要為新增 hyperf/retry 組件,網絡通訊天然是不穩定的,因此在分佈式系統中,需要有良好的容錯設計,無差別重試是非常危險的。當通訊出現問題時,每個請求都重試一次,相當於系統 IO 負載增加了 100%,容易誘發雪崩事故。重試還要考慮錯誤的原因,如果是無法通過重試解決的問題,那麼重試只是浪費資源而已。除此之外,如果重試的接口不具備冪等性,還可能造成數據不一致等問題。本組件提供了豐富的重試機制和各種策略(如 最大嘗試次數策略、錯誤分類策略、回退策略、睡眠策略、超時策略、熔斷策略、預算策略及自定義策略),同時您不僅可以通過鏈式調用的形式來實現邏輯重試,還可直接通過 @Retry 註解來實現重試,可以滿足多種場景的重試需求。
同時我們還修復了一些組件的 ?Bug,使 Hyperf 1.1.* 系列版本更加的健壯了,發佈於 1.1.7 版,建議使用 1.1 的用户更新。
直接訪問 官網 hyperf.io 或 文檔 hyperf.wiki 查看。
新增
- #860 新增 hyperf/retry 組件;
- #952 新增 ThinkTemplate 視圖引擎支持;
- #973 新增 JSON RPC 在 TCP 協議下的連接池支持,通過
Hyperf\JsonRpc\JsonRpcPoolTransporter來使用連接池版本; - #976 為
hyperf/amqp組件新增close_on_destruct選項參數,用來控制代碼在執行析構函數時是否主動去關閉連接;
變更
- #944 將組件內所有使用
@Listener和@Process註解來註冊的改成通過ConfigProvider來註冊; - #977 調整
init-proxy.sh命令的行為,改成只刪除runtime/container目錄;
修復
- #955 修復
hyperf/db組件的port和charset參數無效的問題; - #956 修復模型緩存中使用到
RedisHandler::incr在集羣模式下會失敗的問題; - #966 修復當在非 Worker 進程環境下使用分頁器會報錯的問題;
- #968 修復當
classes和annotations兩種 Aspect 切入模式同時存在於一個類時,其中一個可能會失效的問題; - #980 修復 Session 組件內
migrate,save和has方法無法使用的問題; - #982 修復
Hyperf\GrpcClient\GrpcClient::yield在獲取 Channel Pool 時沒有通過正確的獲取方式去獲取的問題; - #987 修復通過
gen:command命令生成的命令類缺少調用parent::configure()方法的問題;
優化
- #991 優化
Hyperf\DbConnection\ConnectionResolver::connection的異常情況處理;
關於 Hyperf
Hyperf 是基於 Swoole 4.4+ 實現的高性能、高靈活性的 PHP 協程框架,內置協程服務器及大量常用的組件,性能較傳統基於 PHP-FPM 的框架有質的提升,提供超高性能的同時,也保持着極其靈活的可擴展性,標準組件均基於 PSR 標準 實現,基於強大的依賴注入設計,保證了絕大部分組件或類都是 可替換 與 可複用 的。
框架組件庫除了常見的協程版的 MySQL 客户端、Redis 客户端,還為您準備了協程版的 Eloquent ORM、WebSocket 服務端及客户端、JSON RPC 服務端及客户端、GRPC 服務端及客户端、OpenTracing(Zipkin, Jaeger) 客户端、Guzzle HTTP 客户端、Elasticsearch 客户端、Consul 客户端、ETCD 客户端、AMQP 組件、Nats 組件、Apollo、ETCD、Zookeeper 和阿里雲 ACM 的配置中心、基於令牌桶算法的限流器、通用連接池、熔斷器、Swagger 文檔生成、Swoole Tracker、Blade、Smarty、Twig、Plates 和 ThinkTemplate 視圖引擎、Snowflake 全局ID生成器、Prometheus 監控 等組件,省去了自己實現對應協程版本的麻煩。
Hyperf 還提供了 基於 PSR-11 的依賴注入容器、註解、AOP 面向切面編程、基於 PSR-15 的中間件、自定義進程、基於 PSR-14 的事件管理器、Redis/RabbitMQ 消息隊列、自動模型緩存、基於 PSR-16 的緩存、Crontab 秒級定時任務、Session、i18n 國際化、Validation 表單驗證 等非常便捷的功能,滿足豐富的技術場景和業務場景,開箱即用。
框架初衷
儘管現在基於 PHP 語言開發的框架處於一個百花爭鳴的時代,但仍舊未能看到一個優雅的設計與超高性能的共存的完美框架,亦沒有看到一個真正為 PHP 微服務鋪路的框架,此為 Hyperf 及其團隊成員的初衷,我們將持續投入併為此付出努力,也歡迎你加入我們參與開源建設。
設計理念
Hyperspeed + Flexibility = Hyperf,從名字上我們就將 超高速 和 靈活性 作為 Hyperf 的基因。
- 對於超高速,我們基於 Swoole 協程並在框架設計上進行大量的優化以確保超高性能的輸出。
- 對於靈活性,我們基於 Hyperf 強大的依賴注入組件,組件均基於 PSR 標準 的契約和由 Hyperf 定義的契約實現,達到框架內的絕大部分的組件或類都是可替換的。
基於以上的特點,Hyperf 將存在豐富的可能性,如實現 單體 Web 服務,API 服務,網關服務,分佈式中間件,微服務架構,遊戲服務器,物聯網(IOT)等。
文檔齊全
我們投入了大量的時間用於文檔的建設,以解決各種因為文檔缺失所帶來的問題,文檔上也提供了大量的示例,對新手同樣友好。
Hyperf 官方開發文檔
生產可用
我們為組件進行了大量的單元測試以保證邏輯的正確,目前存在 1227 個單測共 3638 個斷言條件,同時維護了高質量的文檔,在 Hyperf 正式對外開放(2019年6月20日)之前,便已經過了嚴酷的生產環境的考驗,我們才正式的對外開放該項目,現在已有很多的大型互聯網企業都已將 Hyperf 部署到了自己的生產環境上並穩定運行。
官網及交流
Github ????? 點 Star 支持我們
Gitee 碼雲 ????? 點 Star 支持我們
Hyperf 官網
Hyperf 文檔
QQ 羣: 862099724