首页 » PHP教程 » 朱先生php技巧_RPC入门

朱先生php技巧_RPC入门

访客 2024-11-29 0

扫一扫用手机浏览

文章目录 [+]

一、RPC1. 什么是RPC

RPC(Remote Procedure Call Protocol)远程过程调用协议。
一个普通的描述是:客户端在不知道调用细节的情形下,调用存在于远程打算机上的某个工具,就像调用本地运用程序中的工具一样。
比较正式的描述是:一种通过网络从远程打算机程序上要求做事,而不须要理解底层网络技能的协议。

RPC是协议:既然是协议就只是一套规范,那么就须要有人遵照这套规范来进行实现。
目前范例的RPC实现包括:Dubbo、Thrift、GRPC、Hetty等。
网络协议和网络IO模型对其透明:既然RPC的客户端认为自己是在调用本地工具。
那么传输层利用的是TCP/UDP还是HTTP协议,又或者是一些其他的网络协议它就不须要关心了。
信息格式对其透明:我们知道在本地运用程序中,对付某个工具的调用须要通报一些参数,并且会返回一个调用结果。
至于被调用的工具内部是如何利用这些参数,并打算出处理结果的,调用方是不须要关心的。
那么对付远程调用来说,这些参数会以某种信息格式通报给网络上的其余一台打算机,这个信息格式是若何构成的,调用方是不须要关心的。
该当有跨措辞能力:为什么这样说呢?由于调用方实际上也不清楚远程做事器的运用程序是利用什么措辞运行的。
那么对付调用方来说,无论做事器方利用的是什么措辞,本次调用都该当成功,并且返回值也该当按照调用办法式措辞所能理解的形式进行描述。

朱先生php技巧_RPC入门

2. 为什么要用RPC

运用开拓到一定的阶段的强烈需求驱动的。
如果我们开拓大略的单一运用,逻辑大略、用户不多、流量不大,那我们用不着。
当我们的系统访问量增大、业务增多时,我们会创造一台单机运行此系统已经无法承受。
此时,我们可以将业务拆分成几个互不关联的运用,分别支配在各自机器上,以划清逻辑并减小压力。
此时,我们也可以不须要RPC,由于运用之间是互不关联的。

朱先生php技巧_RPC入门
(图片来自网络侵删)

当我们的业务越来越多、运用也越来越多时,自然的,我们会创造有些功能已经不能大略划分开来或者划分不出来。
此时,可以将公共业务逻辑抽离出来,将之组成独立的做事Service运用 。
而原有的、新增的运用都可以与那些独立的Service运用 交互,以此来完成完全的业务功能。

以是此时,我们急需一种高效的运用程序之间的通讯手段来完成这种需求,以是你看,RPC大显技艺的时候来了!

实在描述的场景也是做事化 、微做事和分布式系统架构的根本场景。
即RPC框架便是实现以上构造的有力办法。

2.1 常见的RPC框架Thrift:thrift是一个软件框架,用来进行可扩展且跨措辞的做事的开拓。
它结合了功能强大的软件堆栈和代码天生引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程措辞间无缝结合的、高效的做事。
gRPC:一开始由 google 开拓,是一款措辞中立、平台中立、开源的远程过程调用(RPC)系统。
Dubbo:Dubbo是一个分布式做事框架,以及SOA管理方案。
其功能紧张包括:高性能NIO通讯及多协议集成,做事动态寻址与路由,软负载均衡与容错,依赖剖析与降级等。
Dubbo是阿里巴巴内部的SOA做事化管理方案的核心框架,Dubbo自2011年开源后,已被许多非阿里系公司利用。
Spring Cloud:Spring Cloud由浩瀚子项目组成,如Spring Cloud Config、Spring Cloud Netflix、Spring Cloud Consul 等,供应了搭建分布式系统及微做事常用的工具,如配置管理、做事创造、断路器、智能路由、微代理、掌握总线、一次性token、全局锁、选主、分布式会话和集群状态等,知足了构建微做事所需的所有办理方案。
Spring Cloud基于Spring Boot, 使得开拓支配极其大略。
3. RPC事理3.1 RPC调用流程

要让网络通信细节对利用者透明,须要对通信细节进行封装:

做事消费方(client)调用以本地调用办法调用做事;client stub吸收到调用后卖力将方法、参数等组装成能够进行网络传输的体;client stub找到做事地址,并将发送到做事端;server stub收到后进行解码;server stub根据解码结果调用本地的做事;本地做事实行并将结果返回给server stub;server stub将返回结果打包成并发送至消费方;client stub吸收到,并进行解码;做事消费方得到终极结果。

RPC的目标便是要2~8这些步骤都封装起来,让用户对这些细节透明。

3.2 如何做到透明化远程做事调用

在 Go 措辞中,实现透明化的远程做事调用(RPC)可以通过类似于 Java 动态代理的办法来封装通信细节,使得用户可以像调用本地方法一样调用远程做事。
以下是一个大略的先容,解释如何在 Go 中实现这一点。

3.2.1 动态代理的观点

在 Go 中,虽然没有 Java 中的动态代理机制,但可以通过反射和接口来实现类似的功能。
我们可以创建一个代理工具,该工具实现了目标接口,并在方法调用时封装通信逻辑。

3.2.2 实现 RPC 代理

以下是一个大略的示例,展示如何在 Go 中实现一个 RPC 代理:

package mainimport ( "fmt" "reflect")// 定义一个接口type HelloWorldService interface { SayHello(name string) string}// RPC 代理构造体type RPCProxyClient struct { target interface{}}// 创建代理func NewRPCProxyClient(target interface{}) RPCProxyClient { return &RPCProxyClient{target: target}}// 实现代理方法func (p RPCProxyClient) Invoke(methodName string, args ...interface{}) (interface{}, error) { // 利用反射获取方法 method := reflect.ValueOf(p.target).MethodByName(methodName) if !method.IsValid() { return nil, fmt.Errorf("method %s not found", methodName) } // 准备参数 in := make([]reflect.Value, len(args)) for i, arg := range args { in[i] = reflect.ValueOf(arg) } // 调用方法 result := method.Call(in) return result[0].Interface(), nil}// 实现 HelloWorldService 的一个详细类型type HelloWorldServiceImpl struct{}func (h HelloWorldServiceImpl) SayHello(name string) string { return "Hello, " + name}func main() { // 创建做事实现 service := &HelloWorldServiceImpl{} // 创建代理 proxy := NewRPCProxyClient(service) // 调用代理方法 result, err := proxy.Invoke("SayHello", "test") if err != nil { fmt.Println("Error:", err) } else { fmt.Println("Result:", result) }}1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.3.2.3 序列化与反序列化

在 Go 中,常用的序列化方案包括 JSON、Protobuf、Gob 等。
选择得当的序列化方案须要考虑通用性、性能和可扩展性。
JSON:大略易用,适宜轻量级运用。
Protobuf:高效,适宜大规模分布式系统。
Gob:Go 内置的序列化方案,适宜 Go 内部通信。

3.2.4 做事注册与创造

在 Go 中,常用的做事注册与创造工具包括 ETCD 和 Consul。
它们可以帮助管理做事的注册、心跳和客户真个做事创造。
ETCD:分布式键值存储,支持高可用和同等性。
Consul:供应做事创造、配置和分布式锁等功能。

3.2.5 中的 requestID

requestID 用于唯一标识每个要求,确保在并发环境中能够精确匹配要乞降相应,避免稠浊。
通过以上步骤,可以在 Go 中实现一个大略的 RPC 框架,使得远程做事调用对用户透明化。

二、gRPC1. gRPC1.1简介

gRPC是一个高性能、通用的开源RPC框架,其由Google 2015年紧张面向移动运用开拓并基于HTTP/2协议标准而设计,基于ProtoBuf序列化协议开拓,且支持浩瀚开拓措辞。
由于是开源框架,通信的双方可以进行二次开拓,以是客户端和做事器端之间的通信会更加专注于业务层面的内容,减少了对由gRPC框架实现的底层通信的关注。

如下图,DATA部分即业务层面内容,下面所有的信息都由gRPC进行封装。

1.2 gRPC特点措辞中立,支持多种措辞;基于 IDL 文件定义做事,通过 proto3 工具天生指定措辞的数据构造、做事端接口以及客户端 Stub;通信协议基于标准的 HTTP/2 设计,支持双向流、头压缩、单 TCP 的多路复用、做事端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量;序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种措辞无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用的高性能。
1.3 gPRC 交互过程

交流机在开启gRPC功能后充当gRPC客户真个角色,采集做事器充当gRPC做事器角色;交流机会根据订阅的事宜构建对应数据的格式(GPB/JSON),通过Protocol Buffers进行编写proto文件,交流机与做事器建立gRPC通道,通过gRPC协议向做事器发送要求;做事器收到要求后,做事器会通过Protocol Buffers解译proto文件,还原出最先定义好格式的数据构造,进行业务处理;数据处理完后,做事器须要利用Protocol Buffers重编译应答数据,通过gRPC协议向交流机发送应答;交流机收到应答后,结束本次的gRPC交互。

大略地说,gRPC便是在客户端和做事器端开启gRPC功能后建立连接,将设备上配置的订阅数据推送给做事器端。
我们可以看到全体过程是须要用到Protocol Buffers将所须要处理数据的构造化数据在proto文件中进行定义。

标签:

相关文章

语言游戏聚会的魅力,跨界交流的盛宴

在繁忙的都市生活中,一场别开生面的语言游戏聚会悄然兴起。这不仅是一场简单的娱乐活动,更是一次跨界交流的盛宴,一场思想的碰撞与火花。...

PHP教程 2024-12-29 阅读0 评论0

语言序列逻辑在现代传播中的运用与影响

语言序列逻辑,作为现代传播学中的重要理论之一,对于理解语言传播的规律、提高传播效果具有重要作用。在信息化、网络化时代,语言序列逻辑...

PHP教程 2024-12-29 阅读0 评论0