学习
实践
活动
工具
TVP
写文章
专栏首页PHP 开发Spiral: 性能卓越的PHP/Golang混合开发框架
原创

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 框架的项目创建(安装)和配置。

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • Spiral 详细上手指南之安装与配置

    在上一篇《Spiral: 一个性能卓越的PHP/Golang混合开发框架》 中,我介绍了 Spiral 这个基于 PHP/Golang 的高性能混合开发框架,这...

    小李刀刀
  • PHP 不会死 —— 我们如何使用 Golang 来阻止 PHP 走向衰亡

    在过去的十年中,无论是世界 500 强企业或是仅拥有 500 名用户的企业,我的团队都曾为他们开发过软件。在此期间,我的工程团队主要使用 PHP 进行后端开发。...

    猿哥
  • 『GCTT 出品』PHP 不会死 —— 我们如何使用 Golang 来阻止 PHP 走向衰亡

    在过去的十年中,无论是世界 500 强企业或是仅拥有 500 名用户的企业,我的团队都曾为他们开发过软件。在此期间,我的工程团队主要使用 PHP 进行后端开发。...

    brookwang
  • 最终,为什么选择go-kit

    前言 工作这些年,先后经历过两家公司,分别参与过php语言框架的设计和主导过golang技术栈的落地工作,在此过程中有一些感悟和总结。我想以之前我主导的gola...

    李海彬
  • Spiral 官方超完整实战教程

    我在写“Spiral 详细上手指南”的过程其实是一边做官方文档的翻译,一边验证英文版教程中内容的正确性,一边写的。而且涉及到每一个模块和组件,除了在演示项目中简...

    小李刀刀
  • Spiral 详细上手指南之请求和响应

    在上一篇《Spiral 详细上手指南之路由规则》中,相信大家对于 Spiral 框架中的路由配置已经完全掌握了。不过在文章结束的时候,我们创建的控制器针对各种请...

    小李刀刀
  • Spiral 详细上手指南之路由规则

    在上一篇《Spiral 详细上手指南之安装与配置》中,我们已经基于官方的 WEB 项目模板创建了自己的本地项目 "myapp" 并且已经配置好了数据库连接和用于...

    小李刀刀
  • 盘点7款顶级 PHP Web 框架

    2019年,PHP 代表超文本预处理器(Hypertext Pre-processor)是非常流行的 Web 服务端编程语言,小编今天就来和大家一起盘点7款顶级...

    物流IT圈
  • Go语言之旅:环境搭建

    我是一名做了近十年的dotnet程序员,当然其中还使用过PHP、Javascript(NODEJS)去做过后端开发,从donnet Framework到现在的d...

    杨子翔 josonyang
  • Grpc介绍 — ProToBuf基本使用

    RPC(Remote Procedure Call)远程过程调用,关注笔者的同学应该知道之前笔者出过关于Thrift对应的问题,这次主要来说的是Google开源...

    喵了个咪233
  • 大道至简—GO语言最佳实践

    被称为GO语言之父的Rob Pike说,你是否同意GO语言,取决于你是认可少就是多,还是少就是少。

    腾讯技术工程官方号
  • 大道至简-GO语言最佳实践

    2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语...

    嘉为蓝鲸
  • 一文让你知道为什么学了PHP的都要转学Go语言[通俗易懂]

    很多人将GO语言称为21世纪的C语言,因为GO不仅拥有C的简洁和性能,而且还很好的提供了21世纪互联网环境下服务端开发的各种实用特性,让开发者在语言级别就可以方...

    全栈程序员站长
  • 【Web后端架构】2022年10个最佳Web开发后端框架

    Web开发通常分为两类:前端开发和后端开发。后端开发人员负责构建web应用程序的服务器端。

    首席架构师智库
  • 【黄啊码】为什么我建议您选择go,而不选择php?

    很多开发者都认为php已经是“强弩之末”,是时候转go了,但在此之前,我们先好好了解一下这两者的差别到底在哪,如果连区别都不知道?那还谈什么转语言

    黄啊码
  • 从php到Golang系统的演变

    工作这些年,先后经历过两家公司,有参与过php语言框架的开发和主导过go语言技术栈的落地工作,在此过程中有一些感悟和总结。我想以之前我主导的go语言技术栈为线索...

    互联网老辛
  • Golang框架选型比较: goframe, beego, iris和gin

    原文地址:https://itician.org/pages/viewpage.action?pageId=3673375

    Golang
  • go go go - beego

    在上一篇文章What!!! so fast中,我介绍了golang这种语言,并使用golang开发了一个端口扫描工具。现在我的主要工作是做网络安全方面的开发与策...

    七夜安全博客

扫码关注腾讯云开发者

领取腾讯云代金券