大家所在的公司都使用什么 RPC 框架?

2020-02-14 12:36:29 +08:00
 bbao
很久之前使用 dubbo 配合 zk 使用;
转了 golang 之后,使用 etcd,感觉比较方便一些,概念上也简单,比较好理解。
springcloud 也有 eruaka 和 feign

想了解了解,现在各位所在的公司中,使用哪种 rpc 多一些?都分别使用到了什么场景?
10509 次点击
所在节点    程序员
46 条回复
swulling
2020-02-14 15:21:44 +08:00
你想要的是 RPC 还是 Service Discovery,两个确实可以配合起来使用,但是并不是强绑定,也可以单独使用。
lqw3030
2020-02-14 15:25:28 +08:00
自研,通用性和业务贴合性原本就矛盾的
galaxyyao
2020-02-14 16:55:03 +08:00
这个引起争执的主题引出了几个问题。说一下我的理解
# 1 到底什么是 RPC
根据 wiki 上[Remote procedure call]( https://en.wikipedia.org/wiki/Remote_procedure_call)的定义,RPC 就是像调用本地方法一样调用共享网络上的方法( procedure 理论上应该被翻译成过程,但这里个人更倾向于翻译成方法,也符合 OOP 中 RMI 中的 M 的本意)。
可以看到这个定义里没有规定协议,所以 HTTP 方式的 spring cloud feign,我认为也可以被认定为 RPC。虽然 feign

# 2 RPC 的实现
RPC 的实现有语言限定的,诸如 Java RMI ;也有通用的,例如楼上提到过的 SOAP,Google 的 protobuf (用于 gRPC ),Apache 的 Thrift 和 Avro 等。这里的实现我理解和协议还是有差别的。
Hessian 在有些网站上也被认为是 RPC 实现,但 wiki 上的定义是二进制 web service 协议。

# 3 RPC 框架
RPC 框架我理解是对 RPC 实现的封装。
我理解 gRPC 和 thrift 本身就对 rpc 实现封装得不错了,所以没有一个专门的框架再包装一层。
根据 github 上的[RPC 框架 topic]( https://github.com/topics/rpc-framework),RPC 框架还包括腾讯的 Tars ( C++),蚂蚁的 sofa-rpc ( Java ),微博的 motan (有 go 实现)。
hprose 是跨语言的,在 Github 上有各种语言下的实现。
Dubbo 这种全家桶中也有 rpc 的部分,但称为 rpc 框架总觉得有点别扭。
Github 星数比较高的 Java 语言 RPC 框架还有 NettyRpc,Jupiter,xxl-rpc 等。

# 4 服务发现注册
主题里提到的 zk,etcd,eureka ( LZ 拼错了),从分类上术语服务发现注册,我认为不能混在 RPC 里讨论。
服务发现是辅助与 rpc client 找到 rpc server,但并不是 rpc 里必不可少的部分(如果不考虑高可用的话)
zmxnv123
2020-02-14 16:59:30 +08:00
我一直以及为 grpc 或者 thrift 早一统天下了,没想到还有这么多用 dubbo 和 spring 的,想知道是不需要跨语言吗?
feelinglucky
2020-02-14 17:20:25 +08:00
@zmxnv123 不奇怪的,先不说孰优孰劣吧…国内纯 Java 技术栈的公司比想象得多,当然还有很多也是历史的问题
arjen
2020-02-14 17:27:32 +08:00
@zmxnv123 哈哈,其实现在 dubbo 也有多重语言支持,甚至能与其他 rpc 通信。历史遗留的问题也就没必要换了。
20150517
2020-02-14 18:20:10 +08:00
grpc,我觉得很好用啊,直接从 proto 生成 endpoint,只需要自己写业务逻辑,效率又高,单元测试又很容易写
paragon
2020-02-14 20:27:21 +08:00
thrift 现在还有一样的吗?
sagaxu
2020-02-14 20:31:25 +08:00
@zmxnv123 corba 也有人在用,rmi 也有人在用
bbao
2020-02-14 21:33:31 +08:00
@galaxyyao

恩,理解的对,之所以把 zk、etcd、eureka 列出来,是想看看大家公司使用的哪种组合,毕竟没有单机使用场景,肯定都是要考虑高可用,从而选择技术和配对使用的。
manami
2020-02-14 21:37:20 +08:00
服务注册发现有用 consul 的么?发现挺香的
paoqi2048
2020-02-14 22:40:42 +08:00
自研
cabing
2020-02-14 22:44:33 +08:00
grpc
cabing
2020-02-14 22:45:31 +08:00
基础组件:consul
go 用 grpc
cpp 用 brpc
CoderGeek
2020-02-14 22:52:55 +08:00
dubbo 类的 厂子大点一般有不少遗留问题 不过有团队持续优化 233
binbinyouliiii
2020-02-14 23:56:21 +08:00
@hantsy #8 那服务间互相传输数据应该用什么方式呢?
Shawdon
2020-02-15 00:45:02 +08:00
@galaxyyao 这个理解很学术
feelinglucky
2020-02-15 00:51:21 +08:00
+1 @manami consul 是很香,网易这边严选重度使用
tt67wq
2020-02-15 00:53:40 +08:00
etcd 跟 rpc 有啥关系哟
bbao
2020-02-15 10:42:38 +08:00
@tt67wq

没有光使用 rpc 请求,不考虑高可用和相关场景的,所以就看看都是怎么选择搭配

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/644509

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX