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

关于 dubbo 的 rpc

  •  1
     
  •   zxc1234 · 2020-04-15 19:10:24 +08:00 · 2853 次点击
    这是一个创建于 1465 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习 dubbo,一个分布式服务治理框架(废话)

    为什么要用 RPC 协议来实现呢?

    RPC 跟 http 有什么区别呢,比较起来有什么优缺点呢

    怎么学习 RPC 比较好呢。。。

    32 条回复    2020-04-16 16:24:47 +08:00
    IamNotShady
        1
    IamNotShady  
       2020-04-15 19:30:39 +08:00
    RPC (远程过程调用),HTTP 只是实现 RPC 的一种方式,这俩东西概念完全不在同一个层次,没啥可比较的,好多初学者都没搞清楚这个。
    zxc1234
        2
    zxc1234  
    OP
       2020-04-15 19:34:33 +08:00
    @IamNotShady http 其实也可以实现通信,那么为什么还需要 rpc 呢
    IamNotShady
        3
    IamNotShady  
       2020-04-15 19:41:51 +08:00
    @zxc1234 我说的你没理解到意思啊 你可以把 RPC 理解成 REST 规范,实现 REST 的方式呢有很多,每个人对 rest 的理解也不同 在 RPC 领域也是一样 RMI 私有制协议(dubbo 、grpc) feign( http 协议) 这些都是实现 rpc 的一种方式 所以我说不要把 RPC 和 HTTP 放到一起比较
    lasuar
        4
    lasuar  
       2020-04-15 19:43:33 +08:00
    1. RPC 能让调用远程服务像调用普通函数一样简单
    2. RPC 基于长连接通信,省去每次使用 HTTP1.0/1.1 的握手开销
    zooo
        5
    zooo  
       2020-04-15 19:44:21 +08:00
    ˜赞同 1l

    rpc 是个比较宽泛的概念

    http 是一种具体的实现方式
    IamNotShady
        6
    IamNotShady  
       2020-04-15 19:44:30 +08:00
    @lasuar 基于 HTTP 协议也可以实现 RPC !
    IamNotShady
        7
    IamNotShady  
       2020-04-15 19:45:49 +08:00
    用来做 RPC 也只是 HTTP 的一种用途
    lasuar
        8
    lasuar  
       2020-04-15 19:47:42 +08:00
    @IamNotShady 是的,我可能没表达清楚。RPC 其实是分布式系统中催生的产物,它是一种调用概念。HTTP 是协议,RPC 可以基于 HTTP2.0 实现。
    zxc1234
        9
    zxc1234  
    OP
       2020-04-15 19:47:56 +08:00
    @lasuar

    1. RPC 能让调用远程服务像调用普通函数一样简单

    这句话怎么理解,http 不能像调用函数一样调用吗?能举个例子吗
    zxc1234
        10
    zxc1234  
    OP
       2020-04-15 19:48:31 +08:00
    @IamNotShady 像 dubbo 的 rpc 应该不是基于 http 实现的吧?
    IamNotShady
        11
    IamNotShady  
       2020-04-15 19:49:37 +08:00 via iPhone
    @zxc1234 基于 TCP 实现的私有制协议
    hallDrawnel
        12
    hallDrawnel  
       2020-04-15 19:50:09 +08:00
    理解一下 Remote Procedure Call 的意思就好了。远程过程调用。所以你可用 HTTP 协议来实现远程过程调用,对吧?同样的你也可以用其他协议来实现。
    IamNotShady
        13
    IamNotShady  
       2020-04-15 19:50:47 +08:00 via iPhone
    @zxc1234 你先了解下 netty 再去看看 dubbo 源码就都明白了
    zxc1234
        14
    zxc1234  
    OP
       2020-04-15 19:50:51 +08:00
    @IamNotShady 跟 socket 连接有关系?
    lasuar
        15
    lasuar  
       2020-04-15 19:51:58 +08:00
    @zxc1234 你先敲一个 dubbo 的 demo
    IamNotShady
        16
    IamNotShady  
       2020-04-15 19:53:15 +08:00 via iPhone
    @zxc1234 对呀 所以性能比 http 协议好
    Sayommy
        17
    Sayommy  
       2020-04-15 19:54:33 +08:00
    @zxc1234 Dubbo 可以选用 Http 作为通信协议,支持的协议可以看 org.apache.dubbo.rpc.protocol 包,也可以自己继承 AbstractProxyProtocol 接入私有协议。
    zxc1234
        18
    zxc1234  
    OP
       2020-04-15 19:55:50 +08:00
    @IamNotShady socket 是 TCP/IP 协议的 API 接口,我可以这么理解?
    zchlwj
        19
    zchlwj  
       2020-04-15 19:55:56 +08:00
    @zxc1234 #9 原文:“@lasuar 1. RPC 能让调用远程服务像调用普通函数一样简单这句话怎么理解,http 不能像调用函数一样调用吗?能举个例子吗”
    ======
    回复: http(restful 风格)就是 rpc 的一种啊?
    zxc1234
        20
    zxc1234  
    OP
       2020-04-15 19:56:16 +08:00
    @lasuar 敲了,java 版本的
    zchlwj
        21
    zchlwj  
       2020-04-15 19:56:25 +08:00
    @zxc1234 #10 原文:“@IamNotShady 像 dubbo 的 rpc 应该不是基于 http 实现的吧?”
    ======
    回复:grpc 就是基于 http2 实现的。dubbo 有好几种协议
    IamNotShady
        22
    IamNotShady  
       2020-04-15 19:58:29 +08:00
    @zxc1234 严格来说应该是传输层的抽象
    zxc1234
        23
    zxc1234  
    OP
       2020-04-15 19:59:37 +08:00
    @IamNotShady 大佬 能推荐一些 netty,dubbo,socket,rpc 相关的学习资料吗
    IamNotShady
        24
    IamNotShady  
       2020-04-15 20:02:19 +08:00
    @zxc1234 知识都在代码里 dubbo 太重 读它的源码容易找不到北 你可以在 github 搜下 Jupiter 这个项目
    lasuar
        25
    lasuar  
       2020-04-15 20:02:23 +08:00
    @zxc1234
    @zchlwj
    我用的 grpc,dubbo 应该差不多。使用之前先定义服务方要提供服务的函数签名,意思就是定义函数名,入参出参具体格式,然后框架自带的工具会帮你生成对应的服务端和客户端代码,客户端直接 import 对应服务的客户端代码,实际调用时就是:resp,err = someServiceMethod(arg1,arg2),是不是和调用本地函数一样?
    otakustay
        26
    otakustay  
       2020-04-15 22:39:40 +08:00
    其实不为了浏览器,HTTP ( 1.1 )在 RPC 里是很没效率的一个选择
    leafre
        27
    leafre  
       2020-04-16 09:04:24 +08:00
    应该说的是 TCP 和 HTTP 区别
    fanjianhang
        28
    fanjianhang  
       2020-04-16 09:28:04 +08:00
    不是同个概念,楼主误解了
    yeqizhang
        29
    yeqizhang  
       2020-04-16 11:20:59 +08:00 via Android
    你可以对两者进行比较,但不能说优缺点……因为应用场景不同没啥好说优缺点的……rpc 的实现包括使用 http 来进行客户端和服务端之间通信,早期的 web service 不知道你有没有使用过?
    zxc1234
        30
    zxc1234  
    OP
       2020-04-16 12:01:57 +08:00
    @yeqizhang web service 我没用过
    Jooooooooo
        31
    Jooooooooo  
       2020-04-16 16:22:23 +08:00
    建议极客时间找个课学一下
    Pythondr
        32
    Pythondr  
       2020-04-16 16:24:47 +08:00 via iPhone
    RPC 通信开销小,效率高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   953 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.