Python中现在远程调用还流行吗?

我以前一直用的 restful,觉得也很不错,它能胜任我所接触到的需求。目前 python 也有很多成熟 restful 的框架。 后来,面试的时候,偶尔听到“你对远程调用熟悉吗?”。

后来, 换了一份工作,直接领导也让我去了解下远程调用。(目前项目中还没用到,为以后打算。)

我想了解下这两个种技术的历史,到底谁是古老技术,谁是现代流行?

确实见目前用的多的也是 restful,如果你认为远程调用, 也用的多, 能举下例子子吗?

也许它们的适用场景并不完全相同或重叠,你分别举下例子也行。


Python中现在远程调用还流行吗?

22 回复

云计算时代,你说流行不流行?
没有什么合理不合理,适用就合理 。


远程调用(Remote Procedure Call, RPC)在Python中依然非常流行,尤其是在微服务架构和分布式系统中。它允许不同服务或进程之间通过网络进行通信和调用,是构建现代可扩展应用的核心技术之一。

目前Python生态中主流的RPC框架和协议包括:

  1. gRPC:由Google开发的高性能、跨语言的RPC框架,基于HTTP/2和Protocol Buffers。它是当前最热门的选择之一,特别适合对性能要求高的微服务间通信。
  2. Apache Thrift:由Facebook开发,同样支持多种语言和高效的二进制通信协议。
  3. XML-RPC / JSON-RPC:基于HTTP和XML或JSON的较老、更简单的协议。xmlrpc库是Python标准库的一部分,json-rpc也有第三方库。它们适用于简单、轻量级的集成场景。
  4. ZeroMQ:虽然不完全是严格的RPC框架,但它提供了强大的消息模式,可以非常灵活地构建自定义的RPC-like通信。

简单来说,如果你在做微服务,gRPC是现在的首选。如果是简单的脚本或老系统集成,标准库的xmlrpcjson-rpc也完全够用。

远程调用没有过时,只是工具和协议在不断演进。

rpc 非常流行

很流行吧, 现在云时代都流行分布式

http 也是一种 rpc,只不过常用的 HTTP 1.1 浪费带宽、连接之类的资源。

有高并发场景很容易成为瓶颈,没高并发场景就无所谓了。

rpc 有代码生成, 写的是代码

http 是拼接字符串


至于其他的框架级别的特性要具体而言了

内部项目间的互相调用,用 rpc 还是蛮爽的

S3 就是 restful, 高并发没问题。

跨语言调用不都是在用 rpc 的吗? 这方面数据格式传输是个大问题,大部分瓶颈就是在数据格式转换上, 大部分数据都是在内存中从一个格式转换为另一个格式然后传递给另一进程,又得经过转换的过程。

你可以看看 Facebook Thrift, 或是 Apache Thrift, 还有就是 Protocol Buffer,FlatBuffers,Cap’n Proto 等等

最近正在把 RESTful 微服务用 gRPC 重构,不用费劲吧啦设计接口和写一堆 controller,很爽。
内部服务间用 RPC 比 RESTful 更环保。

早期的 EJB 项目不就是远程调用嘛

微服务时代就是搞 rpc

rpc 是基础啊。。。后台服务之间内部调用全都用 rpc 的

restful 只有几个特定的场景使用(openapi,客户端到服务端)


-

restful 也只是一种路由设计风格而已
两个不是一个层面的概念
比如某 dubbo 作为一个 rpc 框架支持 restful 风格的服务接口…

能堆硬件肯定不会有问题。

另外纠正一下:
http 是 rpc 的一种实现,restful 在这个场景应该是指 http 协议里通信的一种设计规范……

远程调用?是远程过程调用吧。


#15

“ http 是 rpc 的一种实现”改成“可以用 http 来实现 rpc"不是更好。因为 http 不是“ rpc 实现”,甚至不是“实现”

#8

当然不都是用 rpc 了。只是 rpc 用的比较多而已。

是的, 就是说的远程过程调用,rpc

不用写接口?那就得直接看代码咯。。。

流行倒是真的非常流行,主要是运用在微服务方面。不过能不能用得上,要得看公司业务吧,如果公司业务并发量不够,玩远程调用反而浪费了资源

微服务的时代 没有 RPC 什么都不存在 别说 http 这种字符串拼接了

grpc 算是 rpc 实现中的典范了,在微服务的场景下,用 grpc+pb 的传输效率比 http+json 高了很多。http 说到底也是 rpc 的一种实现,基于这个协议来用 xml、json 等等来简单交换数据;
楼主可以多了解一下,个人觉得其实当前还在用 python 来做主业务逻辑开发的公司,真的相对有点落伍了,怎么都得来个 gin ( golang )或者 springcloud ( java )了;

回到顶部