Spiral: 性能卓越的PHP/Golang混合开发框架

春节期间,了解到一个“全新”的 WEB 开发框架:Spiral, 最开始引起我的兴趣是从同事那里听说了 RoadRunner. 然后去了解 RoadRunner 的时候看到了 Spiral. 之所以把“全新”用双引号引起来,是因为这个框架其实从 2013 年起就在它的开发团队以及一些企业客户中应用了,经历了各种实际应用场景的考验,Spiral 的功能及其丰富,性能与当前主流的 PHP 框架相比也相当出众。但这个框架源自白俄罗斯,在国内不算知名,他们团队开始重视和梳理开源,也应该是才开始的事情。

性能

Spiral 是一个基于 PHP 和 Golang 的混合开发框架,它的理念是让 PHP 负责业务逻辑(应用程序)的开发,而 Golang 负责底层基础服务,这样一来能够很好地把 Golang 的高性能和 PHP 的快速开发和快速部署结合起来。在 techempower.com 对 PHP 框架性能的测试 中,Spiral 排名第 6,远远超越了 laravel-swoole(13), phalcon(14), hyperf(15), symfony(17), laravel(18), codeigniter(21), cakephp(22)...

image.png

特性

除了性能之外,Spiral 的特性也很丰富,在服务方面,HTTP, Websocket, TCP, GRPC, Queue 一应俱全。组件也非常多,涵盖了 WEB 应用开发、命令行应用开发、GRPC 服务开发的方方面面。在官方的框架介绍页面,可以看到官方组件分为 11 个大类:

  • Skeletons(项目骨架)
  • Core(核心框架)
  • Dispatchers(任务调度)
  • HTTP Extentions(HTTP 扩展)
  • Security and Validation(安全和验证)
  • Database(数据库)
  • Cycle ORM(ORM 工具)
  • Stempler Template Engine(模板引擎)
  • Components(其它组件)
  • Integrations(与其它框架或工具的集成)
  • Development and Assembly(开发调试工具)

每一个大类下面都有多个组件,Spiral 的所有组件完全遵循 PSR-{2, 3, 4, 6, 7, 11, 15, 16,17} 规范来实现。开发者除了使用官方的应用骨架来快速开发 WEB 应用、命令行应用、GRPC 应用之外,也可以利用 Spiral 开源的一系列基础组件来构建自己的项目框架。

如果开发者只有 PHP 语言的知识,那么可以利用官方针对 Spiral 框架定制的二进制版本的应用服务器来获得 Golang 的高性能服务器优势。如果开发者同时还熟悉 Golang,那么除了利用 Spiral 快速开发 PHP 应用之外,还能自行定制 RoadRunner 服务器,在 HTTP, HTTPS/2, GRPC, TCP, WebSocket 等之外,加入更多的服务。

设计理念和架构

Spiral 的设计理念上面已经提到过,是 PHP 和 Golang 的混合运行时。可以理解为 Swoole 和 Laravel 的结合,但与目前的 LaravelS 或者 EasySwoole 这些框架不同之处在于,Spiral 框架下每一个工作进程是完全隔离的,所以你在开发过程中不用担心进程之间相互影响的问题。你在传统 PHP 模式下习惯的一切用法都不会改变,而所有的第三方 PHP 组件,你也可以随意使用。不用定制协程版本的数据库连接池、协程版本的队列服务和 Redis.

image.png

从官方的架构示意图可以看到,常驻内存的和每个工作进程持有的分别是什么部分。开发者需要注意的地方并不多,而且官方提供了 IoC 容器、ORM、配置管理、业务内核、路由和中间件等一系列的组件来处理这些需要注意的问题。

目前 Spiral 团队正在努力完善官方文档,在 spiral/docs 可以看到工作进展,中文文档也在持续翻译中。

接下来我会通过一个系列,介绍 Spiral 从安装、配置,开发,测试到上线部署的全过程。

下一篇文章会介绍 Spiral 框架的项目创建(安装)和配置。

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Spiral: 性能卓越的PHP/Golang混合开发框架
春节期间,了解到一个“全新”的 WEB 开发框架:Spiral, 最开始引起我的兴趣是从同事那里听说了 RoadRunner. 然后去了解 RoadRunner...
<<上一篇
下一篇>>