资讯专栏INFORMATION COLUMN

Swoole 2019 :化繁为简、破茧成蝶

adam1q84 / 700人阅读

摘要:开发负责人创建分支,编写单元测试脚本,编写代码,实现提案中的所有内容,最终发起交叉评审,检查代码,提出改进意见,反馈给开发负责人,继续完善细节。

Swoole开源项目从2012年开始发布第一个版本,到现在已经有近7年的历史。在这七年的时间里:

提交了8821次代码变更

发布了287个版本

收到并解决1161issue反馈

合并了603pull request

共有100位开发者贡献代码

GitHub收获了11940颗星

协程

2018年我们推出了全新的Swoole4版本,在此之前Swoole主要的编程方式还是同步阻塞模式或异步回调。新的基于协程实现的CSP编程逐渐成为我们唯一推荐使用的编程模式。协程将纷繁复杂异步编程大大简化。使用Swoole4协程,既简单又强大。在未来的Swoole5版本,我们计划删除非协程的相关特性和代码,减少历史包袱,提升稳定性,降低复杂度,减少不必要的选项,纯粹协程化。

过去6年我们的团队主要以兼职开发为主,团队成员大多来自于腾讯、阿里、滴滴、百度、360、小米等国内一线互联网企业,还有一部分是国外的PHP开发者,甚至PHP语言ZendVM内核作者Dmitry Stogov也曾向Swoole贡献了代码。除此之外,我们还招募了一些在校大学生为Swoole编写代码,逐步培养年轻一代开发者。

20187月份我们组建了全职开发团队,专注于Swoole内核以及Swoole Cloud云原生组件和生态链的开发。告别过去的草莽班子,转变为专业化的开源技术研发团队。

我们的目标是让Swoole项目成为Node.jsGo这样的工业级技术,成为PHP编程语言的在异步IO和网络通信方面的基石。

研发管理

成立全职研发团队后,我们逐渐建立了非常完善的研发管理体系,提升Swoole的软件质量。主要包括以下几个方面:

测试驱动(TDD)

现在我们投入大量精力实现单元测试脚本、压测脚本、自动化测试,提升单元测试覆盖率。目前已有680项测试用例,17项压测项目,在Travis-CI平台可以看到每一次CommitPull Request的编译、测试结果。

研发工作也基于TDD进行,在开发新特性、重构、Bug Fix时,会先编写对应的单元测试脚本,测试覆盖到代码变更的所有场景。

代码审查(Code Review)

团队成员之间进行代码交叉审查、互相Code Review,对于代码变更的细节进行充分的评估和讨论。

重大变更,会进行团队Review,花费数小时甚至数天讨论每一行代码变更细节。

RFC 机制

对于非Bug Fix、非性能提升、非重构,新特性或有可能改变底层行为的变更,我们会分为4个步骤进行。

发起RFC的提案,https://github.com/swoole/rfc...,提案内容会详细阐述此项变更的前因后果、相关配置项、影响的范围、使用方法、示例。

提案讨论,我们会对提案进行充分的讨论,刨根问底,分析优劣,推敲细节。所有问题均讨论清楚后,最终立项,开始实现。

开发负责人创建git分支,编写单元测试脚本,编写代码,实现提案中的所有内容,最终发起Pull Request

交叉评审,检查代码,提出改进意见,反馈给开发负责人,继续完善细节。最终合并到主干。

整个过程均是在GitHub平台公开进行的,对Swoole项目感兴趣的PHPer均可参与。

灰度测试

为了保证正式版本的稳定性,我们在发布前会在内部项目上进行灰度测试,检验新版本的稳定性。

另外我们与大部分Swoole框架作者建立了联系,新版本会先发给各大框架的作者提前试用。有重大底层变更、或不兼容项会提前与其他Swoole之上的开源项目作者进行沟通。

总结

在过去的几年,Swoole项目做的并不是很专业,存在较多BUG和难用的地方,也让很多使用者踩到了不少坑。最近半年成立全职研发团队后,我们在研发管理方面进步飞快,Swoole的稳定性、成熟度方面已今非昔比。稳定性始终是第一位的,我们在未来将会更加谨慎、严谨,保证质量。

重构

2018年下半年我们对底层的代码进行了多次重构,在代码结构、可读性、复用性、封装度方面进行了很多优化。使得Swoole软件更为简洁、优雅。

编程语言方面,我们现在逐渐使用C++替代C语言。C++提供的面向对象、智能指针、容器、模板等特性能够帮助我们进一步提升团队的开发效率。

在此也欢迎各位PHPer参与Swoole项目,贡献代码。

文档

Swoole的文档也是广为开发者诟病的一个方面。在2018年我们团队在文档方面逐渐加大投入。重新编写梳理文档,加入丰富的例子程序,加入更详细的配图,修复细节问题,删除带有感情色彩的语句,更加客观中立严谨。

2019 未来

新的一年我们主要有3个方向上发力。

做减法

删除非协程的特性,删除不必要的模块,减少历史包袱,提升稳定性、降低复杂度,减少不必要的选项,化繁为简,更简单。

Swoole内核层面仍然会继续不断重构、精简,减少代码行数,清理冗余代码,尽可能地实现代码复用。

深入项目

2018年底,我们已经开始逐渐与在生产环境上大量使用Swoole的企业建立联系,包括腾讯云阅文好未来陌陌优信等企业。了解实际应用场景、业务模式,进行深度交流合作,提供建议,帮助企业技术团队更好的解决业务问题,接受反馈改进底层。

生态链

2019年我们会基于Swoole4协程开发一些配套的工具和组件,弥补PHPCloud Native时代生态链方面的不足。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/29996.html

相关文章

  • 从简历被拒到收割今日头条 offer,我用一年时间破茧成蝶

    摘要:正如我标题所说,简历被拒。看了我简历之后说头条竞争激烈,我背景不够,点到为止。。三准备面试其实从三月份投递简历开始准备面试到四月份收,也不过个月的时间,但这都是建立在我过去一年的积累啊。 本文是 无精疯 同学投稿的面试经历 关注微信公众号:进击的java程序员K,即可获取最新BAT面试资料一份 在此感谢 无精疯 同学的分享 目录: 印象中的头条 面试背景 准备面试 ...

    tracymac7 评论0 收藏0
  • 从简历被拒到收割今日头条 offer,我用一年时间破茧成蝶

    摘要:正如我标题所说,简历被拒。看了我简历之后说头条竞争激烈,我背景不够,点到为止。。三准备面试其实从三月份投递简历开始准备面试到四月份收,也不过个月的时间,但这都是建立在我过去一年的积累啊。 本文是 无精疯 同学投稿的面试经历 关注微信公众号:进击的java程序员K,即可获取最新BAT面试资料一份 在此感谢 无精疯 同学的分享目录:印象中的头条面试背景准备面试头条一面(Java+项目)头条...

    wdzgege 评论0 收藏0
  • webpack4 化繁为简(二)

    摘要:书接上文,继续干,配置一些常用的插件使支持压缩插件默认已经有,所以只需要引入就可以使用在中配置生成将的目录下面的移入目录,并且删除以及的引入标签,然后安装包。在中添加后续抽空补上打包以及第三方插件的的配置。。。。。。 书接上文,继续干,配置一些常用的插件使支持 uglifyjs js压缩插件 webpack默认已经有uglifyjs,所以只需要引入就可以使用. 在webpack...

    graf 评论0 收藏0
  • webpack4 化繁为简(二)

    摘要:书接上文,继续干,配置一些常用的插件使支持压缩插件默认已经有,所以只需要引入就可以使用在中配置生成将的目录下面的移入目录,并且删除以及的引入标签,然后安装包。在中添加后续抽空补上打包以及第三方插件的的配置。。。。。。 书接上文,继续干,配置一些常用的插件使支持 uglifyjs js压缩插件 webpack默认已经有uglifyjs,所以只需要引入就可以使用. 在webpack...

    shiyang6017 评论0 收藏0
  • webpack4 化繁为简(一)

    摘要:从最简单的到项目中的实践。指令是平台下,并且使用了来安装包的依赖一基础初始化项目会在项目目录下创建文件安装下面来写最简单的一个入门。 webpack4前言背景用途不多说,上来就干。从最简单的demo到项目中的实践。(指令是window 平台下,并且使用了cnpm 来安装包的依赖.)一.基础demo 1.初始化项目 npm init -y 会在项目目录下创建package.json 文件...

    arashicage 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<