本文首发于云加社区我的个人专栏。受云加社区协议限制,未经许可不得转载。关于 Spiral 框架的这个系列文章,都会首发云加社区,之后过一段时间才会同步到个人博客。
春节期间,了解到一个“全新”的 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)…
特性
除了性能之外,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.
从官方的架构示意图可以看到,常驻内存的和每个工作进程持有的分别是什么部分。开发者需要注意的地方并不多,而且官方提供了 IoC 容器、ORM、配置管理、业务内核、路由和中间件等一系列的组件来处理这些需要注意的问题。
目前 Spiral 团队正在努力完善官方文档,在 spiral/docs 可以看到工作进展,中文文档也在持续翻译中。
接下来我会通过一个系列,介绍 Spiral 从安装、配置,开发,测试到上线部署的全过程。
下一篇文章会介绍 Spiral 框架的项目创建(安装)和配置。
作者:小李刀刀
原文链接:Spiral: 一个性能卓越的PHP/Golang混合开发框架
裁纸刀下版权所有,允许非商业用途转载,转载时请原样转载并标明来源、作者,保留原文链接。