1
echoless 2023-02-19 11:27:57 +08:00 via Android
gRPC
|
3
Red998 2023-02-19 11:35:45 +08:00 1
算 rpc 是一个概念、http 也算是一种 rpc
|
4
jorneyr 2023-02-19 11:39:31 +08:00
不算
|
5
chanchan 2023-02-19 12:47:43 +08:00
我觉得 rpc 就不应该有这么多讨论,一个程序通过网络调用另一个程序得到结果,就叫 rpc
|
6
tt67wq 2023-02-19 13:05:09 +08:00
不叫 rpc 叫啥?
|
7
OldCarMan 2023-02-19 13:56:27 +08:00
rpc 只是个概念,feign,grpc,thrift 等你可以理解都是 RPC 的一个个实例,只是他们所支持的序列化方式 /通信协议,特性或功能,想达成的目的等可能不一样而已。
|
8
hsymlg OP @OldCarMan https://zh.wikipedia.org/wiki/%E9%81%A0%E7%A8%8B%E9%81%8E%E7%A8%8B%E8%AA%BF%E7%94%A8
这是 wiki 的中文版,上来第一句话就是 rpc 是个计算机通信协议,我 google 半天也不知道协议内容在哪里。如果只是字面意思的概念的话,那服务之间 feign 调用确实算得上 remote procedure call |
9
OldCarMan 2023-02-19 14:29:18 +08:00
|
10
zachlhb 2023-02-19 15:27:43 +08:00
Feign 是一种用于创建基于 HTTP 的客户端的框架,通常用于通过 REST API 进行服务之间的调用。虽然它使用了网络协议,但它不是 RPC ( Remote Procedure Call ,远程过程调用)。
RPC 是一种协议,它允许在不同进程或网络中的计算机之间进行远程调用。它的目的是使分布式系统中的应用程序能够像本地调用一样访问服务。RPC 通常使用编码的二进制协议进行通信,而 Feign 则使用基于 HTTP 的 REST API 进行通信。 因此,虽然 Feign 可以用于服务之间的调用,但它不是 RPC 。 |
11
hsymlg OP @zachlhb “Feign 则使用基于 HTTP 的 REST API 进行通信”,基于 HTTP 的 REST API 进行通信是 Feign 不属于 rpc 的原因?
|
12
Ericcccccccc 2023-02-19 16:00:14 +08:00
经典问题, http 是不是 rpc?
|
13
rrfeng 2023-02-19 16:01:25 +08:00 via Android
http 和 rpc 不在一个维度。
|
14
ql562482472 2023-02-19 16:24:11 +08:00
算
|
15
alexleee 2023-02-19 20:19:59 +08:00
认为 http 不算 rpc 的朋友可以陈述下观点吗,谢谢了
|
16
lrvinye 2023-02-19 21:41:25 +08:00
举个例子来类比下:
http: 普通人都听得懂的官方语言(普通话、英语) rpc:行业内(圈子内)约定黑话(方言、气象报文...) |
17
cnxobo 2023-02-19 21:41:44 +08:00
Feign 调用属于远程过程调用(RPC)的一种。RPC 是指通过网络实现不同进程或不同机器之间相互调用的过程,包括远程调用、远程方法调用、远程过程调用等。在微服务架构中,服务之间通过 RPC 进行通信是非常常见的做法,而 Feign 就是一种优雅的 RPC 调用方式,它允许开发人员使用简单的接口描述来定义服务之间的调用,隐藏了底层的通信细节,方便开发人员进行调用和维护。因此,可以说服务之间的 Feign 调用是 RPC 的一种实现方式。
|
18
lambdaq 2023-02-19 21:49:15 +08:00
如果拿来调用得到返回,那么就是 rpc 。比如拿来传输文件,那么就不是 rpc 。
|
19
hidemyself 2023-02-19 22:03:50 +08:00
算啊,fegin 算 rpc 的一种实现
|
20
mercurius 2023-02-19 22:04:58 +08:00
Feign 底层实际上是 HTTP 请求的封装实现
RPC 本质上不算是协议,而是一种调用方式,并且 HTTP 协议只是 RPC 的一种实现 |
22
dcsuibian 2023-02-19 22:32:47 +08:00
个人觉得吧,可以算是
毕竟普通的 http 请求也确实可以算是把参数传过去,把结果传回来,跟调函数一样 但大部分时候,如果说 rpc 框架,更多地是想强调“在调一个远程的服务时,代码方面表现地像在调用一个本地的函数一样”,就像 grpc 做的 而如果是普通的 http ,你可能还得考虑 get/put/post/delete ,content-type ,以及需要显式地注意 request 、response 等概念 所以我也觉得这东西应该不需要过度讨论 |
23
wangxiaoaer 2023-02-19 22:39:44 +08:00
广义的 RPC 包含 HTTP 。
狭义的 RPC 指的是本地调用(函数)背后是通过调用远程服务实现,这个调用方式可以是 HTTP ,也可以是 TCP 、UDP 。 |
24
xy90321 2023-02-19 22:42:39 +08:00 via iPhone
rpc 的精髓是远程服务的本地化调用,应该用起来像本地函数调用一样丝滑(不是指处理执行、响应的速度,而是单纯指调用方式)
用现成框架 /实现也好,你自己通过各种包装造轮子也好,只要能实现让调用端仿佛是在调用一个本地处理 /函数一样,那就是 rpc |
26
jinliming2 2023-02-20 09:34:25 +08:00 via iPhone
@alexleee #15 我觉得 HTTP 不算的原因是,HTTP 只是一个传输协议,在这个概念上可以看作是和 TCP 一个层面的东西,它本身不能算 RPC 。(注:不是按 OSI 模型去划分的
而 RPC 字面意思就是调用远程的函数就像调用本地的函数一样,那么至少得有一个“调用本地函数”这样一个动作。 所以,一个算是 传输层 的概念,一个算是 表示层 /应用层 的概念。 所以,我觉得可以基于 HTTP 这个协议来封装成 RPC ,比如写一堆 function ,然后内容就是 fetch xxx ,这可以算作是 RPC 。但至于这个 fetch 下面是 HTTP 还是 TCP UDP ,甚至你愿意的话用 ICMP ping 来传输都没啥问题。 比如 gRPC Web 也是基于 HTTP 的,但重点强调的不是基于 HTTP 传输,而是传输的内容是经过编码的“函数调用”,使用者就像调用本地函数一样。 |
28
xlzyxxn 2023-02-20 11:31:37 +08:00
RPC 比 HTTP 要年老,因为 web 和浏览器通用的需求,需要一个通用的协议;可以说 PRC 是个调用方式,HTTP 是他的其中一个实现方式;因为用的人太多了,也可以把他两放到一块做对比(服务发现、底层连接协议、序列化协议等等);最后,用一个表情包说说我的观点:嗯......怎么不算呢
|
29
cpszgy 2023-02-20 16:35:53 +08:00
一个 RPC 的要素,协议商定,序列化,反序列化,过程调用,结果返回。feign 的工具包实现了这一过程的客户端功能。当然他欠缺了一点服务端的能力。因为服务端的使用了标准的的 http 协议。所以我感觉算是一个基于 http 协议的 rpc 客户端。
|