Swoole 2020 :4.5 新版本的规划

2020年1月16日 233点热度 0人点赞 0条评论

转眼 Swoole 开源项目已经历 8 个年头。这 8 年里,有 116 位开发者为 Swoole 贡献了内核代码。有无数 PHP 开发者为 Swoole 提供 BUG 反馈和改进建议。也有大量 Swoole 用户活跃在 Swoole 的问答社区、SegmentFault Swoole 专栏、QQ/微信技术交流群。在 GitHub 平台也累积了 1.5万 + 的 star。作为 Swoole 的创始人、核心开发者,倍感荣幸。感谢各位开发者为 Swoole 生态所做出的贡献。我们一定会不忘初心,坚持开源。

Swoole 4.5 版本

2019年12月份我们规划了新的 4.5 版本,这个版本的主题是 “代码架构重构”。4.4 将作为LTS分支长期支持。在 4.5 版本之前,Swoole 底层更多地是偏向于快速实现,没有完整的代码架构设计,并且代码规范做的较差。编程语言方面也较为混乱,同时存在 C 和 C++ 的源文件。头文件的引用也不够规范,如在非 Server 模块中引用了 server.h 。其实社区中早已有很多 C/C++ 方面的开发者对此提出了建议。在此之前我们团队有很多优先级更高的工作需要完成,在代码规范方面投入的时间精力较少。在新的 4.5 版本中,我们将投入大量时间精力,重新设计代码架构,彻底改变这个局面。

主要工作包括以下几个方面:

  • 改造 Event API ,屏蔽 int 型 fd 的使用,统一为 swSocket 对象

  • 移除 socket_array 全局变量

  • Server Master 彻底移除锁的使用,大幅提升并行能力

  • 全面切换为 C++

  • 优化从 Reactor -> Worker -> PHP onReceive 数据传递方式,减少内存 Copy,onReceive 事件回调函数的性能提升 4 倍

根据社区用户的反馈,在 4.5 版本中将会增加一些新特性:

  • HTTP2\Client 支持 pipeline recv

  • 内置 FastCGI 协程客户端,与短生命周期 fpm 服务完美融合

  • 增加 Coroutine/Batch API,可以并行执行 N 个函数,并接收返回值数组

  • 增加 onReload 事件回调,在发生 reload 之前触发

另外,我们发现使用 gRPC 、Http2 的 Swoole 用户越来越多,Http2 模块存在一些 BUG,在 4.5 版本中我们会对 Http2 Client & Server 做一次大的重构工作,解决所有已知问题,稳定性和健壮性大幅提升。

4.5 版本也将移除一些已废弃的特性:

  • 移除 Buffer 模块

  • 移除 Runtime::enableStrictMode

Swoole 文档计划

由于Swoole是非常底层的软件,内核开发者大量精力都放在了添加新特性,处理BUG上面,对于大家一致吐槽的文档问题一直没有精力解决,现在我们有了更多的开发者以及背后的商业化支持公司,已经有精力解决文档问题了,新的文档旨在解决大家一直吐槽的文档问题,采用现代化的文档组织形式,只包含Swoole4的内容,修改了大量老文档中错误的内容,优化了文档细节,增加了示例代码,新的文档预计在年后发布。

Swoole 核心开发者

由于现在公司项目的工作任务较多,没有过多精力参与到内核开发中。从 4.5 版本开始,我将逐渐减少代码贡献,分阶段退出核心开发组。交给新一代开发者们:Twosee、Shiguangqi、CodingHuang & 其他更多伙伴 。

Twosee 会作为 Swoole 开源项目新一代灵魂人物,就像 PHP 开源的 Nikic 。

图片

图片

Swoole 商业化

从 2018 年起 Swoole 开始了商业化的探索。经过一年半的努力,在 Swoole 项目核心开发者郭新华的带领下,公司勉强达到了自负盈亏的状态。其实创建这个公司的初心是通过提供一些商业服务,带来资金收入,这样可以支持我们整个 Swoole 内核研发团队继续投入到 Swoole 开源事业。也能有更多资源投在文档、测试、社区运营、布道推广上

在 2019年 识沃公司(Swoole 商业公司)赞助了 PHPCon 大会,向 Swoole 社区很多活跃的贡献者和用户赠送了 T恤、帽衫 等小礼物,并通过对企业的深入合作发现了很多需求,给社区反馈了很多高质量bug。

新华是 Swoole 开源和商业的核心力量。在开源领域,新华贡献了:

  • php-cp:MySQL 连接池软件,在聚美优品被大量使用

  • swoole_serialize:专门为 PHP7 设计的高性能二进制序列化模块,性能比 JSON/PHP串化高出很多、内存占用更少

另外,Swoole 商业公司中很多核心的项目也是新华完成开发的:

  • Swoole Compiler

  • Swoole Tracker

图片

在 2019 年底 我们新开发了 Swoole Plus 软件,在 Swoole 社区版本之上,增加了一些性能调优的方案,以及安全防护、攻击检测、流量控制、Hbase/Solr-Cloud 支持。功能特性是其次的,主要是为企业提供商业支持服务。帮助企业解决 PHP & Swoole 项目的技术难题。让那些想大规模应用Swoole技术的公司可以放心的使用我们的技术。

明年我们将陆续推出很多应用级别的解决方案,即时通讯(IM)、安全网关、物联网(IOT)、游戏、客服系统等 Swoole 应用项目。

结语

即便我们没有 Google、Facebook、Microsoft 这些大厂那样的资金和光环,也绝不放弃。正是对开源技术的热爱,对 PHP 语言的热爱,才使得我们能够坚持下去。

我们的目标是将 Swoole 做成工业级的软件,作为 PHP 语言网络通信方向的基石。


桶哥后记:最近Swoole社区出现了一些不和谐的声音,其实完善的展示了一个纯碎的技术人员在措辞表达上的缺点。

比如关于不稳定性的理解,本质是指Swoole开源版本在加入一些新的特性后,虽然Swoole团队有测试或者流程保障,但毕竟没有经过社区的历练,打磨,就有可能存在未知的风险,这是任何软件都存在的,商业版本后置merge,也无可厚非,同样,商业版本中也会有些企业定制新的特性,经过验证后,同样反哺社区版本,这是一个双赢的过程,但很多人理解成社区版本是放出不稳定,来把用户转换为商业版,这完全是相反的解读,也不是Swoole团队的本意。

关于性能的理解,也是一样的,Swoole商业团队针对企业的用户,做专门的性能分析和指导,如通过应用代码的优化提升性能,这完全是附加服务,和Swoole本身性能无关,然后通过这企业用户的某些场景,优化了Swoole内核代码提升了性能,如果是通用的场景,也会反哺到社区版本,但如果是在特定的场景,如特定的系统下的优化,这并不适合merge回社区版本,属于纯粹的附加商业服务。

总之,两件引起大家有歧义的事情,本质上都是好的方向和双赢的。社区是基石,开源商业化是让开源能够走的更远的必要因素。希望大家多多理解和支持。

也相信郭新华可以在商业化上的路上越做越好,也可以成为一个优秀的CEO,这样Swoole开源项目也会更加速的向前跑。

----------伟大的分割线-----------


PHP饭米粒(phpfamily) 由一群靠谱的人建立,愿为PHPer带来一些值得细细品味的精神食粮!


饭米粒只发原创或授权发表的文章,不转载网上的文章


所发的文章,均可找到原作者进行沟通。


也希望各位多多打赏(算作稿费给文章作者),更希望大家多多投稿


投稿请联系:


[email protected]


本文由 韩天峰 授权 饭米粒 发布,转载请注明本来源信息和以下的二维码(长按可识别二维码关注)

图片

34650Swoole 2020 :4.5 新版本的规划

这个人很懒,什么都没留下

文章评论