本申请涉及的是计算机中php编程语言,rpc(远程过程调用)系统及方法。
背景技术:
1、rpc(远程过程调用),在分布式系统中实现跨网络边界的通信和协作。在分布式系统中,rpc 技术可以用于服务间的通信、集群管理、任务调度等方面。在微服务架构中 rpc技术是实现服务之间通信的重要手段。每个微服务可以作为一个独立的服务,并通过 rpc进行相互调用,实现服务间的解耦合灵活性。rpc 技术可以帮助构建高度可伸缩、松耦合的微服务体系。在 web 开发中,rpc 技术可以用于浏览器与服务器之间的通信。通过 rpc,浏览器可以向服务器发起请求并获取响应,实现前后端的数据交互和协作。常见的 web 开发框架如grpc、json-rpc 等都使用了 rpc 技术。总之,rpc 技术在许多领域都具有广泛的应用,特别是在分布式系统、微服务架构和 web 开发中。它可以帮助不同组件、服务或节点之间进行高效的通信和协作,实现系统的可扩展性、灵活性和性能优化。
2、在上述领域中,大部分编程语言都具有良好且成熟的解决方案,但就目前 php 语言还没有广泛的成熟方案以及对应方案,在基于tcp/ip协议请求的 rpc 调用,在 php 中有天然的弱势,无法保持长连接,性能方面就不具优势。
3、随着现代应用的发展,越来越多的公司业务规模上涨,单体架构无法应对高负载、高并发、高可用,其次是开发周期增加,迭代变慢。单体中任何服务的流量变大,会导致其他服务无法进行访问。单体架构也会导致运维成本的增加。
4、所以,目前的趋势是分布式系统和微服务架构。那么想完成分布式系统和微服务架构,rpc(远程过程调用)就是一个必需的手段。php 想要想完成分布式系统和微服务架构,rpc的研发势在必行。
5、就目前的 php rpc 发展趋势来看,虽然有几款不错的 rpc 框架,但是都在他们的生态下,比如:hyperf 框架,服务端和客户端都必须使用 hyperf 才能实现分布式系统和微服务架构。这就会导致需要将老项目进行重构和移植,那么开发成本和试错成本就非常高了。
技术实现思路
1、本发明的目的在于,提供一种 php 高性能远程过程调用(rpc)框架。能够让很多老项目或单体架构的项目快速完成分布式系统和微服务架构。
2、本发明的技术方案:
3、1.包括基于 swoole 的网络通信技术,提供实际的网络协议和异步、同步网络传输通信,多进程模式;
4、2.参数封装、序列化和反序列化,将rpc 客户端的请求参数封装并序列化成二进制,通过网络传输给rpc服务端,服务端进行二进制的反序列化获取客户端参数;
5、3.rpc 代理,提供了多种调用方式包括异步调用和同步调用,获取参数,调用上述参数封装与序列化步骤,进行网络传输通信;
6、4.rpc 服务处理,定义要暴露给客户端的服务接口,包括服务名、函数名、参数类型、返回值类型等,建立并开启网络连接,利用多进程模式监听客户端消息,通过反序列化和获取参数并且通过反射调用获取数据,再次通过参数封装与序列化以及网络通信发送回客户端;
7、5.服务注册与发现,注册服务、服务发现、服务列表返回、负载均衡、远程调用、失败处理、监听更新、服务下线;
8、6.链路追踪,rpc 调用时,多个服务相互调用会,如果有一个服务发生问题,排查问题非常困难。所以需要引入链路追踪功能。rpc 客户端在调用时需要访问链路追踪接口,接口将这次访问标记一个 64 位 id,当 a 服务调用 b 服务时,再生成一个 a 服务的 64位 id,依此类推。直到调用结束后,可以查看直到本次 rpc 客户端调用了一次调用了哪些服务;
9、7.rpc 代理生成,在rpc客户端使用代理之前可以将自动生成代理,将服务接口,包括服务名、函数名、参数类型、返回值类型等,自动封装成调用的代理类,可以进一步减少底层调用细节,简化调用步骤。
1.基于php的高性能远程过程调用(rpc)系统及方法,其特征在于,包括:
2.根据权利要求1中所述网络传输,其特征在于,所述方法:所述基于swoole网络通信提供 tcp/ip、http 的协议,以及同步和异步两种通信模式和基于swoole的多进程模型。以实现权利要求1中所述的rpc 代理和权利要求1中的rpc 服务处理之间的数据传输,和权利要求1中的rpc 服务处理多进程监听客户端消息。
3.根据权利要求1中所述的参数封装,其特征在于,所述方法:需要将权利要求1中所述的rpc 代理中的需要请求的服务名称、服务的接口、请求的参数、请求的文件参数封装成request对象。
4.根据权利要求1中所述的序列化和反序列化,其特征在于,所述方法:将权利要求1中所述的参数封装成request对象根据数据边界的size、数据报文包头、报文包体协议,如果是文件参数需要将二进制转成每一行带有单独的数据边界的size、数据报文包头、报文包体协议的信息,转成可以通过网络传输的字节流。反序列化则将字节流转成初始的request对象和文件参数。
5.根据权利要求1中所述的rpc 代理,其特征在于,所述方法:可以使用权利要求1中的rpc 代理生成的调用接口,其中隐藏了权利要求1中所述的网络传输、参数封装、序列化和反序列化、服务发现等相关逻辑,使得远程过程调用(rpc)变得简单,不复杂,对开发人员友好。
6.根据权利要求1中所述的rpc 服务处理,其特征在于,所述方法:将服务暴露的接口上传服务注册中心、绑定一个网络地址(如 ip 地址和端口)、在启动服务时候,使用swoole的多进程模型监听客户端的消息,再通过所述权利要求1中反序列化获取request请求对象,并反射调用暴露的接口,再将返回的数据通过权利要求1中所述的参数封装,封装成response对象,再通过所述权利1中序列化转成字节流,利用权利要求1中所述的网络传输发送给权利要求1中所述的rpc 代理。
7.根据权利要求 1 所述的服务注册与发现,其特征在于:在分布式系统中,自动发现和定位可用的上述 rpc 服务的过程。它可以帮助客户端找到可以调用的远程服务,并提供负载均衡和高可用性。其步骤包括:
8.根据权利要求 1 所述的链路追踪,其特征在于:rpc 调用时,多个服务相互调用会,如果有一个服务发生问题,排查问题非常困难。所以需要引入链路追踪功能。所述rpc 代理在调用时需要访问链路追踪接口,接口将这次访问标记一个 64 位 id,当 a 服务调用 b服务时,再生成一个 a 服务的 64 位 id,依此类推。直到调用结束后,可以直接查询到本次 所述rpc 代理调用了哪些服务。
9.根据权利要求 1 所述的rpc 代理生成。其特征在于:为了更进一步开发方便和隐藏细节,代理对象负责封装请求、发送到服务器,并处理响应结果。根据服务接口定义,可以使用自带工具自动生成代理类,简化客户端的代码编写。