V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bbao
V2EX  ›  程序员

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

  •  2
     
  •   bbao · 2020-02-14 12:36:29 +08:00 · 10392 次点击
    这是一个创建于 1504 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很久之前使用 dubbo 配合 zk 使用;
    转了 golang 之后,使用 etcd,感觉比较方便一些,概念上也简单,比较好理解。
    springcloud 也有 eruaka 和 feign

    想了解了解,现在各位所在的公司中,使用哪种 rpc 多一些?都分别使用到了什么场景?
    46 条回复    2021-02-24 11:50:33 +08:00
    luren123
        1
    luren123  
       2020-02-14 13:30:01 +08:00
    dubbo
    chendy
        2
    chendy  
       2020-02-14 13:39:42 +08:00
    etcd、eruaka,feign 是 rpc 框架?
    zhch602
        3
    zhch602  
       2020-02-14 13:41:18 +08:00 via iPhone
    @chendy feign 怎么不是 rpc 框架了?
    manami
        4
    manami  
       2020-02-14 13:43:12 +08:00 via Android
    feign 不是 rpc 框架吧……
    manami
        5
    manami  
       2020-02-14 13:47:03 +08:00 via Android
    @zhch602 feign 正如其名,是“假装,捏造”之意,虽然可以实现 rpc,但是是假的
    gwybiaim
        6
    gwybiaim  
       2020-02-14 13:53:30 +08:00
    spring cloud via feign
    securityCoding
        7
    securityCoding  
       2020-02-14 13:58:07 +08:00
    spring cloud
    hantsy
        8
    hantsy  
       2020-02-14 13:59:11 +08:00
    谁用谁知道,RPC 就是坑爹的东西,十几年前就淘汰了。在 Java EE 里面,Soap Web Service 的出现本身就是代替 RPC,何况 SOAP 已经 game over 了。

    gRPC 有人用是因为:1.背后的公司是 Google 2. 还有它使用了高效的 Protobuf 协议。
    ledger
        9
    ledger  
       2020-02-14 14:10:28 +08:00   ❤️ 1
    brpc
    wangyzj
        10
    wangyzj  
       2020-02-14 14:14:56 +08:00
    grpc 只是叫做 rpc 而已
    davinci
        11
    davinci  
       2020-02-14 14:26:43 +08:00
    @hantsy 基于更高效的 http2 很关键
    OllyDebug
        12
    OllyDebug  
       2020-02-14 14:32:36 +08:00 via iPhone
    gprc
    gemini767
        13
    gemini767  
       2020-02-14 14:35:48 +08:00
    @hantsy 好奇,能说说 rpc 哪些地方坑了你
    TypeError
        14
    TypeError  
       2020-02-14 14:36:14 +08:00
    grpc
    PureWhiteWu
        15
    PureWhiteWu  
       2020-02-14 14:37:23 +08:00
    自研框架
    Y4ssss
        16
    Y4ssss  
       2020-02-14 14:51:51 +08:00
    grpc
    Ericcccccccc
        17
    Ericcccccccc  
       2020-02-14 15:14:14 +08:00
    @hantsy 你没懂 RPC 是啥意思.

    http 就是 RPC, 坑在哪?
    ezreal
        18
    ezreal  
       2020-02-14 15:15:03 +08:00
    自研
    dayeye2006199
        19
    dayeye2006199  
       2020-02-14 15:19:21 +08:00 via iPad
    Thrift 全家桶
    zhuawadao
        20
    zhuawadao  
       2020-02-14 15:20:28 +08:00
    hsf
    swulling
        21
    swulling  
       2020-02-14 15:21:44 +08:00
    你想要的是 RPC 还是 Service Discovery,两个确实可以配合起来使用,但是并不是强绑定,也可以单独使用。
    lqw3030
        22
    lqw3030  
       2020-02-14 15:25:28 +08:00   ❤️ 2
    自研,通用性和业务贴合性原本就矛盾的
    galaxyyao
        23
    galaxyyao  
       2020-02-14 16:55:03 +08:00   ❤️ 1
    这个引起争执的主题引出了几个问题。说一下我的理解
    # 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
        24
    zmxnv123  
       2020-02-14 16:59:30 +08:00
    我一直以及为 grpc 或者 thrift 早一统天下了,没想到还有这么多用 dubbo 和 spring 的,想知道是不需要跨语言吗?
    feelinglucky
        25
    feelinglucky  
       2020-02-14 17:20:25 +08:00
    @zmxnv123 不奇怪的,先不说孰优孰劣吧…国内纯 Java 技术栈的公司比想象得多,当然还有很多也是历史的问题
    arjen
        26
    arjen  
       2020-02-14 17:27:32 +08:00 via Android
    @zmxnv123 哈哈,其实现在 dubbo 也有多重语言支持,甚至能与其他 rpc 通信。历史遗留的问题也就没必要换了。
    20150517
        27
    20150517  
       2020-02-14 18:20:10 +08:00
    grpc,我觉得很好用啊,直接从 proto 生成 endpoint,只需要自己写业务逻辑,效率又高,单元测试又很容易写
    paragon
        28
    paragon  
       2020-02-14 20:27:21 +08:00
    thrift 现在还有一样的吗?
    sagaxu
        29
    sagaxu  
       2020-02-14 20:31:25 +08:00 via Android
    @zmxnv123 corba 也有人在用,rmi 也有人在用
    bbao
        30
    bbao  
    OP
       2020-02-14 21:33:31 +08:00
    @galaxyyao

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

    没有光使用 rpc 请求,不考虑高可用和相关场景的,所以就看看都是怎么选择搭配
    sarlanori
        41
    sarlanori  
       2020-02-15 10:50:12 +08:00
    偶尔用 thrift 和 ICE
    bbao
        42
    bbao  
    OP
       2020-02-15 10:50:28 +08:00
    @tt67wq 看了眼描述,golang 想提 grpc 配合 etcd,这样。
    sweat89
        43
    sweat89  
       2020-02-15 13:59:39 +08:00
    @hantsy 说得跟真的一样
    hantsy
        44
    hantsy  
       2020-02-16 13:02:56 +08:00
    RCP 需要 Client 和 Server 交互,Client 调用看起来和本地调用一样,为了 Client 和 Server 交互隐藏远程调用的复杂性,往往借助一些 IDL 中间语言来定义交换协议。RPC 即没规定你用什么传输协议,也没限定什么传输格式( json,xml,binary 均可)。RPC 框架百花齐放,你学会一种,到另一种框架下完全又是全新的东西,跟没有学一样。至于你非要将 Feign 都能归到 RPC,那只能说 RPC 是任人打扮的 BZ。

    任何一种 RPC 框架都是唱独角戏。

    在 Java EE 领域,J2EE 1.2 (大约是 2000 年左右,记不清楚了,大约 20 年前吧)最初有一个 XML RPC 规范,使用 XML 作为传输格式,基于 HTTP 协议,但它仅限于 j2ee 程序。很快企业应用快速增长,互通的问题摆在眼前,SOAP Web Service 规范取代 XML RPC,实现不同的平台( Java,.net, 等)的互通(虽然不是很好), 可以说 SOAP 取得空前的成功。当然现在 Jaxrs 规范已经在事实取代了复杂的 SOAP (虽然很长一段时间不会消失)。
    Jacky23333
        45
    Jacky23333  
       2020-03-11 23:51:07 +08:00 via Android
    @zmxnv123 需要服务治理啊
    RobberPhex
        46
    RobberPhex  
       2021-02-24 11:50:33 +08:00
    dubbo
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1649 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 16:47 · PVG 00:47 · LAX 09:47 · JFK 12:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.