今日(5月19日),在上海举行的第六届中国PHP开发者大会(PHPCon)上,腾讯开源项目TARS首次全面发布PHP版本,阅文集团高级开发工程师梁晨(Ted)对PHP如何通过TARS构建高性能RPC框架做了经验分享。

“现有PHP的开发生态,至少要做到功能完善、灵活、轻量和高效。 ”梁晨提道。他在分享中介绍了高性能RPC框架TARS的基本设计思想,以及通过客户端、二进制协议、服务端以及开发效率几个部分,分享了在PHP语言和框架层面的TARS解决方案TARS-PHP的设计与实现。

在客户端方面,TARS-PHP客户端具备配置统一化、一键调用以及多种网络能力的特点。功能上支持自动寻址、主调上报、远程日志以及SOCKET、SWOOLE同步、SWOOLE协程的网络能力。同时能够根据实际的网络收发情况,进行耗时、失败率、超时率、服务端异常的及时上报,方便业务尽快发现和定位问题

在二进制协议方面,TARS-PHP通过独立PHP模块扩展完成了对二进制协议的打包解包工作,同时考虑了高性能和稳定性两个方面。通过合理设计接口并完全通过纯C语言实现,提高性能。通过引入phpt的扩展标准测试及Valgrind工具测试等,覆盖80%以上的测试代码,提升稳定性。相比于原有的纯PHP打包解包方式,该扩展将打包效率提升了12-16倍,解包效率也提升了9-14倍。

在服务端方面,TARS-PHP服务端以SWOOLE作为底层的运行环境,只需要简单配置,即可顺畅使用。除此之外,TARS-PHP服务端通过自动生成的注解进行请求的路由,开发者完全不需要关心,只需要关注于实现自己的业务逻辑即可。除了提供基本的SERVER类型之外,还提供了配置文件解析、服务保活上报、拉取下发配置、特性上报、业务代码打包整套体系,使得使用者既能够实现自己的业务逻辑,也能够针对性的进行拓展。从测试数据看,空跑的HTTP SERVER QPS最高达到了23万。而使用了协程CLIENT之后,在混合RPC调用的情况下,仍有2万1的QPS,相比于同步CLIENT,提升了50%左右。

在开发效率方面,TARS-PHP升级了全新的TARS2PHP工具,通过TARS文件和TARS2PHP工具,就能够完全实现客户端和服务端的代码生成,并且两端通过协议完全解耦,大大提高了开发效率。

以阅文集团的实践为例,介绍TARS-PHP在阅文经过了一年多的验证和使用,目前支持十几个Node HTTP服务,40多个逻辑API层PHP服务与定时服务,以及100多个后台TCP服务,各服务之间每日亿级的调用,带来的开发、运维、性能的全面提升。

最后梁晨介绍了后续的规划,TARS-PHP会在提高稳定性的同时支持更多框架、丰富功能、再做提升。他同时呼吁更多公司和开发者加入进来一起共同建设,让TARS-PHP越来越好。

梁晨(Ted),阅文集团高级开发工程师,起点中文网WEB后台架构负责人。曾就职于腾讯,负责企业QQ与QQ公众号后台开发与优化工作。腾讯TARS开源项目贡献者,腾讯TSF开发组成员,对于构建高性能WEB后台、微服务治理有丰富的经验。