grpc 到底好处在哪里? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hui9000
V2EX    问与答

grpc 到底好处在哪里?

  •  
  •   hui9000 2024-04-15 09:36:48 +08:00 5247 次点击
    这是一个创建于 592 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这边没用过 grpc ,之前用过 dubbo ,维护过一个大型 ToB 项目,简直折磨,如果大家都按照规范来,我觉得还好,但是这项目 5 年了,经历了好几代程序员的维护,现在打开都恶心。 后来所有的新项目都搞 Feign 了。但是这个也有点恶心的。最近新开了一个大型项目也是 ToB 。在做技术选型和对比,团队人员目前比较稳定,大概 40 人左右。 想问一下,有没有用 grpc 做过大型项目或维护过这种项目的,有多少坑,坑大小?对比 Feign 好处有哪些。 PS: 别杠,你杠就你对。

    32 条回复    2024-04-16 00:05:05 +08:00
    workqing2023
        1
    workqing2023  
       2024-04-15 09:46:43 +08:00
    grpc 也好,dubbo 也好,feign 也好,和项目恶心应该关系不大。。。。没啥区别,看公司内部对哪个的支持力度更大一点就好了
    deorth
        2
    deorth  
       2024-04-15 09:49:57 +08:00 via Android
    你说得对
    yannxia
        3
    yannxia  
       2024-04-15 09:50:48 +08:00
    滥用都好不到哪里去,因为 API 瞎定义的事情是框架解决不了的。
    GRPC 对比 Feign 的好处就是性能好一点,区别也不是很大,其实我觉得项目规模不大的情况下,我喜欢 HTTP ,容易调用。
    lsk569937453
        4
    lsk569937453  
       2024-04-15 09:51:18 +08:00
    grpc 的 protobuf 比 json 啥的占用空间小,传输速度快。所以对性能要求很高的可以用 grpc,其他的 Feign( http 协议+json)就可以了。
    tool2dx
        5
    tool2dx  
       2024-04-15 09:51:56 +08:00
    不太一样,feign 就只是 HTTP API 的声明,而 grpc 是对于 Protobuf 的封装。

    如果你们以前项目里不怎么用 Protobuf ,那用处并不是很大。
    cheng6563
        6
    cheng6563  
       2024-04-15 09:53:57 +08:00
    性能较高,没了。对于管理比较混沌的团队还是忍着恶心用 Feign 吧
    28Sv0ngQfIE7Yloe
        7
    28Sv0ngQfIE7Yloe  
       2024-04-15 09:56:07 +08:00
    @cheng6563

    方便说下 feign 恶心在哪里吗?
    QlanQ
        8
    QlanQ  
       2024-04-15 09:56:26 +08:00
    区别不是很大,那点性能可能对你的新项目也没多少影响,建议用团队以前用熟悉的
    cheng6563
        9
    cheng6563  
       2024-04-15 09:57:24 +08:00
    @Morii 不是 Feign 恶心,是项目恶心。
    yeyang5211
        10
    yeyang5211  
       2024-04-15 10:08:28 +08:00
    如果是个咸鱼项目 没多少人用 feign spring 全家桶风险小, 并发大 有异构调用的需要可以考虑 grpc
    Goooooos
        11
    Goooooos  
       2024-04-15 10:10:20 +08:00
    toB 项目,如果对序列化性能没要求,还是建议 http+json
    pkoukk
        12
    pkoukk  
       2024-04-15 10:18:10 +08:00
    项目恶心用什么都很恶心
    grpc 就是性能高,没啥别的
    bianhui
        13
    bianhui  
       2024-04-15 10:30:49 +08:00
    没啥特别突出的地方吧,就是优化了一些 rpc 的诟病吧,比如说序列化(类型? json 也有 Schema 版本),通讯(可以用 http3 ?),开箱即用,性能没有想象那么高,最业界比较公认性能有意的是 facebook 的 Thrift ,坑也挺多的。如果跑在内网可以,跑公网不建议(比如说 udp 国内丢包你懂得),就 json+http 最省心了,或者 Protobuf +http 也行吧。
    datoujiejie221
        14
    datoujiejie221  
       2024-04-15 10:31:17 +08:00
    主要 grpc 对多语言支持比较好,如果其他语言比如 python 或者 go 用 feign 调用的话就比较麻烦了
    还有就是 grpc 支持流式传输,feign 就不太了解了
    hui9000
        15
    hui9000  
    OP
       2024-04-15 10:39:17 +08:00
    @yannxia
    @pkoukk
    @cheng6563
    主要是啥东西刚开始都挺好的,无论是 dubbo 还是 grpc ,还有 feign ,过几个月就完了。老实回去用 http+json 吧
    hui9000
        16
    hui9000  
    OP
       2024-04-15 10:43:35 +08:00
    @QlanQ ToB 的对快没什么太大需求,主要是有些传输内容较大,而且需要稳定。这样是不是就不适合了。
    justplaymore
        17
    justplaymore  
       2024-04-15 11:07:34 +08:00   1
    OMGZui
        18
    OMGZui  
       2024-04-15 11:43:15 +08:00
    还是继续 Feign 吧
    shilyx
        19
    shilyx  
       2024-04-15 14:21:45 +08:00
    gRPC 在 C++环境下尤其烂

    污染性很强,完全不如 thrift
    Akitora
        20
    Akitora  
       2024-04-15 14:28:33 +08:00
    一个是跨语言,一个是自带 schema
    me1onsoda
        21
    me1onsoda  
       2024-04-15 14:32:54 +08:00
    feign 是七层 http 协议,grpc 是四层 tcp 。
    对性能来说,那肯定是 rpc 性能好,你见过和哪个中间件通信用 http 的?
    易用性可维护性,那还是 feign 这种声明式更好。
    kenvix
        22
    kenvix  
       2024-04-15 14:35:44 +08:00
    grpc 恶心是因为 protobuf 恶心,这个玩意生成的代码就是一坨屎,污染整个项目
    tf2
        23
    tf2  
       2024-04-15 14:38:27 +08:00   1
    grpc 的好处就是面向简历编程,以及技术选型有「 google 都在用」这个黄金招牌。

    你选别的 rpc 方案,出了问题就是你选型的责任;

    你选 grpc ,出了问题,那得你们公司反思为啥 google 能你们就不能。

    这根 yylx 一样的底层逻辑。
    tf2
        24
    tf2  
       2024-04-15 14:40:26 +08:00
    @kenvix u1s1 ,pb 是有好处的。如果写 C 艹 ,没 pb 你会写出来更恶心的代码。

    问题就在于 c 艹本来就是个很傻的生态。pb 属于补救,但是别的语言无脑套用 pb 这就纯跟风和巨厂号召力吧。
    hui9000
        25
    hui9000  
    OP
       2024-04-15 14:59:01 +08:00
    @lambdaq 有道理,后期项目复盘,锅都是自己买的。太惨了,现在 tm 都是这样,有啥事都能把锅甩到技术上,你跟他们解释也解释不通,说白了,人家已经把答案写好了。
    flowerains
        26
    flowerains  
       2024-04-15 15:28:42 +08:00   1
    我感觉代码恶心不恶心和人关系很大,和架构关系不大
    kenvix
        27
    kenvix  
       2024-04-15 15:35:25 +08:00
    @lambdaq #24 RPC 领域,论生成的代码质量,thrift 比 grpc 好得多
    论数据交换 msgpak 把 pb 按在地上打
    tf2
        28
    tf2  
       2024-04-15 15:46:33 +08:00
    @kenvix 所以这两者也有一定市场占有率吧。thrift 也自带巨长光环,让使用者自适应自带反思。
    coderxy
        29
    coderxy  
       2024-04-15 15:49:54 +08:00
    grpc 最大的优点就是有一个好亲爹, 超强背书。
    migu
        30
    migu  
       2024-04-15 16:13:40 +08:00
    @me1onsoda #21 请教一下,GRPC 不是基于 HTTP2 的吗,为什么是四层
    hui9000
        31
    hui9000  
    OP
       2024-04-15 16:58:07 +08:00
    @flowerains 软件工程的思想在国内大部分公司都是没有的,基本都不会按照规范写,每个人的理解又不一样。又不是不能跑,要是有一个人在工程里拉了一坨大的,其他人是不会管的,因为谁都是看见屎都想吐。
    jsq2627
        32
    jsq2627  
       2024-04-16 00:05:05 +08:00
    目前公司用 grpc + thrift ,甩开了 protobuf 的负担,感觉体验良好。

    有 schema 对项目长期维护很重要。
    跨语言也很重要。因为保不准团队里就有人想用其他语言来写一部分服务。
    我公司内主要是 go ,后来陆续引入了 java/python/nodejs ,大家都在 grpc+thrift 下工作良好。thrift 的代码生成效果也不错。
    不过缺点是 thrift 生态还是比 protobuf 差了一些。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1245 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:13 PVG 01:13 LAX 09:13 JFK 12:13
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86