当前位置: 首页 > 后端技术 > PHP

干货-PHPCon上TARS-PHP综合解读及PPT下载

时间:2023-03-29 20:24:40 PHP

2018年5月19日,在上海召开的第六届中国PHP开发者大会(PHPCon)上,腾讯开源项目TARS首次全面发布PHP版本。温氏集团高级开发工程师梁晨分享了PHP如何通过TARS构建高性能RPC框架的经验。分享内容:TARS作为腾讯开源的RPC框架,自发布以来就备受开源界的关注。它对微服务、协议、多语言和操作系统的支持非常完备。在微服务方面,实现了服务自动发现、智能调度、容灾容错、灵活熔断、路由灰度等功能。同时,通过使用私有二进制协议,可以有效降低服务间调用的流量。在语言支持方面,TARS为C++、Java、Nodejs、PYTHON提供了更好的解决方案。考虑到PHP广泛应用于WEB后台领域,TARS-PHP的出现势在必行。那么在设计TARS-PHP的时候,就要考虑到现有的PHP开发生态,至少要做到功能齐全、灵活、轻量、高效。在功能上,TARS-PHP对标了C++、JAVA、NodeJS现有的功能体系,支持CLIENT和SERVER的能力。在灵活性方面,PHP一直是出类拔萃的。作为一种通用的脚本语言,谁用谁就知道开发过程。在轻量级设计方面,TARS-PHP遵循最简化、轻量级、可插拔的设计思想,使整个解决方案能够自成一体,同时具有最大程度的可扩展性。最后,也是最重要的,高效。通过引入PHP业界优秀的SWOOLE框架,结合SWOOLE2.0的协程能力,让TARS-PHP插上协程的翅膀。TARS-PHP解决方案按照功能模块分为以下四个部分:TARS-CLIENTTARS-EXT扩展TARS-SERVER开发效率模块之前已经开源,可以使用。TARS-PHP的重新设计也梳理了TARS-CLIENT已有的能力。全新设计的TARS-CLIENT具有统一配置、一键调用、多种网络能力等特点。在功能方面,集成也更加丰富。现有的TARS-CLIENT由以下功能模块组成:自动寻址:CLIENT不再需要上报关系服务地址的主调用:默认上报调用,服务情况一目了然Remotelogs:日志可以写入远程服务,然后落地,减少文件IO的损失网络能力:SOCKET,SWOOLE同步,SWOOLE协程全新设计的TARS-CLIENT可以满足后台系统的SOCKET请求需求,也可以满足SWOOLE中同步和协程两种调用需求。用户只需要根据配置灵活选择自己需要的即可。同时,全新集成的自动寻址、主旨汇报、远程日志功能,让用户在使用时更无意识、更顺畅。下面是现有TARS-CLIENT的demo:可以清楚的看到统一配置层次更加清晰,调用者无需关心底层细节,寻址和主调用上报已经悄然完成.从整体上看TARS-CLIENT方案:从图中可以更清楚的看到底层实现的细节。对于自动寻址,实现自动并不能完全解决问题。因为每次都要请求服务的地址,会给主控服务带来很大的压力。因此结合PHP自身能力后,选择SWOOLETABLE和本地文件作为缓存方式。缓存时间是在服务启动时默认指定的,所以在这段时间内,不会再进行主控请求。在减轻主控压力的同时,也减少了本地获取服务地址的耗时。如下图:在主调度器上报的策略中,还可以根据实际网络收发,及时上报耗时、失败率、超时率、服务端异常条件,便于业务尽快发现和定位问题。TARS-EXT扩展位于TARS-CLIENT的底层,包含了很多二进制协议的打包和解包工作。这些字符串的拼接和复制操作正是PHP的弱项,因此非常有必要将其抽象出来,开发成一个独立的PHP扩展模块。在现有的扩展系统中,主要包括高性能和稳定性的考虑。在高性能方面,字符串操作完全用纯C语言实现。同时,通过合理设计界面,可以避免一个包的多次操作,进一步提高效率。在扩展的稳定性方面,使用phpt的扩展标准测试和Valgrind工具进行内存泄漏测试。测试代码覆盖率达到80%以上。同时,每次提交内部版本代码,都会自动触发从PHP5.6~PHP7.2主流版本的自动构建测试,并在构建异常时发送邮件。下图可以清楚的看到,与原来使用纯PHP打包解包的方法相比,使用扩展的方法,在协议简单的情况下,打包效率提升了16倍,解包效率提高了增加了14倍。在复杂协议的情况下,同样的效率提升达到了12和9倍。TARS-SERVERPHP作为SERVER走过了一段比较曲折的路。最早的时候,PHP是作为Apache的一个模块来提供HTTP-SERVER服务的。后来Nginx越来越流行,PHP_FPM应运而生。比Apache的预申请所有进程的方式稍微好一点,但是还是受限于进程资源和接受请求的能力,所以效率不是很高。在此背景下,SWOOLE应运而生。它基于多进程模型,驻留在内存中,使用epoll的事件驱动模型来处理传入的请求。因此,之前的方案在IO能力上相差了好几个街区。而去年,SWOOLE2.0的出现,内置协程,同步编程的同时享受异步IO,更是如虎添翼。基于此,TARS-SERVER方案还将使用SWOOLE作为底层运行环境,开发TARS-HTTP-SERVER、TARS-TIMER-SERVER和TARS-TCP-SERVER,并将三个框架合二为一,只是一个简单的配置好,就可以顺利使用了。在上图中,可以清晰的看到强大的TARS-SERVER能力。除了提供最底层的三种基本SERVER类型。我们还提供了处理配置文件解析的TARS-UTILS、定时上报服务保活的TARS-Report、拉取平台下发的配置的TARS-Config、特性上报的TARS-Property、以及TARS-Deploy模块封装业务代码。整套系统使得TARS-SERVER的用户可以实现自己的业务逻辑,并有针对性地进行扩展。可谓一箭双雕。总的来说,我们的TARS-SERVER,基于SWOOLE1.x和2.x,可以平滑的支持灵活的配置,比如SWOOLE的配置和用户自己的配置。另外,TARS-SERVER通过自动生成的注解进行请求路由,开发者完全不需要关心,只需要专注于实现自己的业务逻辑。另一方面,TARS-SERVER还额外提供了一个管理端口,用于接收平台下发的命令,如SHUTDOWN、配置下发等。TARS-HTTP-SERVER专为满足逻辑层服务需求而设计。第一阶段包括GET/POST基础支持、Cookie/Status标准支持、极简路由组件实现、FILE上传功能模块和服务可用性检测接口模块。TARS-TIMER-SERVER的使用也很方便,只需要如下代码:可以灵活控制时间,同时也很方便将所有的计时服务统一管理。TIMER也会在服务启动时自动启动,无需再次触发。TIMER的个数只受SWOOLE启动时的进程数限制,开发者可以灵活部署。对于开发者非常关心的服务性能,我们也针对不同的接口、版本、客户端进行了压测。结果如下:从数据来看,还是很满意的。空的HTTPSERVERQPS达到最大230,000。使用协程CLIENT后,在混合RPC调用的情况下,依然有20001的QPS,比同步CLIENT提升了50%左右。充分说明了协程CLIENT对性能提升的显着效果。开发效率在设计TARS-PHP时,必须考虑的一个问题就是开发效率。为了沿用TARS本身的设计理念,TARS2PHP工具也进行了全新的升级。通过配置文件,兼容客户端代码和服务端代码的生成。配置文件将包含服务信息、TARS文件信息和命名空间。信息等:从下图可以更清晰的看出整个开发路径:由此,通过TARS文件和TARS2PHP工具,可以完全实现客户端和服务端的代码生成,两端完全通过协议解耦,大大提高开发效率。阅读中的TARS-PHPTARS-PHP在阅读中经过一年多的验证和使用,逐渐成熟。越来越多的企业开始了解和使用TARS-PHP解决方案,并为他们提供切实可行的解决方案,为他们的开发和运营带来收益。从下图可以清楚的看到TARS和TARS-PHP在运维中的使用情况:有10+个模板拼接的NodeHTTP服务,40+个逻辑API层PHP服务和定时服务,100+个后台TCP服务。每天有数亿个电话。后续规划随着TARS-PHP包越来越成熟,希望有更多的企业和开发者加入进来,共同建设。考虑到不同公司使用的框架不尽相同,我们的模块化设计的非常周密。在接入SWOFT框架的过程中,模块化的方式取得了很好的效果,只需要半天到一天的时间就可以完成。后续的TARS-PHP将进一步丰富CLIENT的能力,同时支持更多已有的框架。在提高稳定性的同时,也会提升SERVER自身功能的丰富度。TARS-PHP,等你来!现场问答摘录:问:中小型公司如何使用TARS答:其实tars本身并不是很重量级。主要包括集成运维系统和专注于业务开发的rpc系统。阅文集团自身也有使用TARS的新业务。该项目的机器规模只有几十台左右,所以对于中小型公司来说,TARS也是一个可行的方案。Q:搭建TARS平台的成本比较高。如何解决这个问题呢?A:我们看到dockerhub上已经有开发者了。热心的开发者制作了一套包含该环境的Docker容器。我们会考虑功能是否完备,放到Merge里面或者做成官方镜像,这样用户在运行的时候会很方便。Q:TARS-PHP如何支持不同的通信和二进制协议?A:目前TARS-PHPTCP服务支持的协议仅限于TARS二进制协议本身。但同时,我们也提供了一些配置方法和接口供您实现自己的协议。如果使用HTTPSERVER,可以自己选择协议,比如JSON等。Q:将已有的PHP+Swoole1.x项目迁移到TARS,需要注意哪些问题,是否有更合适的解决方案A:之前阅文集团每个PHP项目都是独立部署在服务器上,无法访问TARS平台,不过经过去年一个月左右的改造,已经全部迁移到TARS平台。将现有项目迁移到TARS平台,除了需要对项目进行一些必要的改造外,还需要保证后端的TCP服务也已连接。TARS,迁移可能会产生一些成本,但是之后你可以享受到TARS平台带来的一系列红利。PPT下载:https://github.com/Tencent/Ta...对TARS的使用有任何疑问,欢迎加入QQ交流群:TARS交流群:群号669339903TARS-PHP交流群:群号:769531734