春节期间, 了解到一个 "全新" 的 web 开发框架: Spiral https://spiral.dev/ , 最开始引起我的兴趣是从同事那里听说了 RoadRunner https://roadrunner.dev/ . 然后去了解 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 服务开发的方方面面. 在官方的框架介绍 https://spiral.dev/docs/about-spiral 页面, 可以看到官方组件分为 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 团队正在努力完善官方文档, 在 https://github.com/spiral/docs 可以看到工作进展, 中文文档也在持续翻译 https://github.com/spiral/docs/pull/127 中.
接下来我会通过一个系列, 介绍 Spiral 从安装, 配置, 开发, 测试到上线部署的全过程.
下一篇文章会介绍 Spiral 框架的项目创建 (安装) 和配置.
来源: https://www.qcloud.com/developer/article/1584014