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