V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
itstudying
V2EX  ›  程序员

把公司内部服务通讯的 http 全改成了 grpc,看着连接数过山车式的下降,真舒坦

  •  2
     
  •   itstudying · 2020-01-07 20:04:45 +08:00 · 14210 次点击
    这是一个创建于 1808 天前的主题,其中的信息可能已经有所发展或是发生改变。

    改之前内部服务的连接数比用户的连接数还多

    lcafLd.jpg

    第 1 条附言  ·  2020-01-08 12:58:28 +08:00
    还是 java 开发者的天下啊,我们主要语言是 go
    59 条回复    2023-03-24 15:13:46 +08:00
    lxd152
        1
    lxd152  
       2020-01-07 20:12:43 +08:00
    棒棒棒
    optional
        2
    optional  
       2020-01-07 20:14:18 +08:00
    这 tps/qps 没变少吧,,只是 grpc 走了 http/2
    0ZXYDDu796nVCFxq
        3
    0ZXYDDu796nVCFxq  
       2020-01-07 20:14:22 +08:00 via Android
    有性能对比吗
    TypeError
        4
    TypeError  
       2020-01-07 20:19:05 +08:00 via Android
    连接复用了?
    meteor957
        5
    meteor957  
       2020-01-07 20:25:40 +08:00
    这也太夸张了吧
    fox1955
        6
    fox1955  
       2020-01-07 20:32:32 +08:00   ❤️ 5
    经历过 http -> grpc. 性能的提升远不及联调开发效率的降低, 最后换回去了.
    ofooo
        7
    ofooo  
       2020-01-07 20:32:41 +08:00
    不是只换了一种链接方式么? 通讯量应该一样才对吧?
    dcalsky
        8
    dcalsky  
       2020-01-07 20:33:21 +08:00 via Android
    各个服务之间共用 protoc 吗,protoc gen 等基础设施经验能分享一下吗?
    diveIntoWork
        9
    diveIntoWork  
       2020-01-07 20:44:26 +08:00
    改成 gRpc 后,不走 Http 协议了,统计出来的连接数当然变少了,要看 cpu 利用率、内存占用、吞吐才有意义
    outoftimeerror
        10
    outoftimeerror  
       2020-01-07 20:48:20 +08:00
    grpc 不也是基于 http2 吗
    itstudying
        11
    itstudying  
    OP
       2020-01-07 21:00:22 +08:00
    @TypeError #4 是的 http2 的多路复用
    itstudying
        12
    itstudying  
    OP
       2020-01-07 21:05:26 +08:00
    @ofooo #7
    @diveIntoWork #9
    是的 不过改造的目的就只是为了降低连接数,以及因为连接太多带来的内存占用大。监控平台中能最直观看出来改造前后区别的也就这个
    itstudying
        13
    itstudying  
    OP
       2020-01-07 21:15:24 +08:00
    @outoftimeerror #10 是呀 只是因为 http2 支持多路复用,不搞连接池的话也就只有一个连接
    luozic
        14
    luozic  
       2020-01-07 21:19:04 +08:00 via iPhone
    这种得开发配套的工具链,否则出问题联调,apm 接入,debug 等等一堆的工具链需要开发配套,如过涉及到 cdn,网络硬件等更深远的坑,就等着哭吧。restful with http 主要是生态,别的东西有个 JB 生态
    itstudying
        15
    itstudying  
    OP
       2020-01-07 21:38:50 +08:00 via Android
    @luozic 服务之间通讯使用 rpc 框架不是很正常的吗,grpc 虽然没 http 生态好但也是很成熟的了,也不至于差很多到了会踩很多深坑的地步。更不至于像你说的 JB 生态都没有
    luozic
        16
    luozic  
       2020-01-07 22:03:08 +08:00 via iPhone
    @itstudying 我的意思是边界约定好,大公司使用一部分特殊能性能的工具是他们能配套建立全链路的工具,小公司一般没有,而这种全链路的工具没听说过哪家开源的。rest 是因为文本的自然原因导致容易找到全链路的替代品。
    luozic
        17
    luozic  
       2020-01-07 22:10:21 +08:00 via iPhone
    最简单的 apm 用啥,API gateway 等最基础的服务治理有几个支持了,支持程度如何?
    wangyzj
        18
    wangyzj  
       2020-01-07 23:19:31 +08:00
    不喜欢 pb
    都是 http2
    会有很大变化吗
    itstudying
        19
    itstudying  
    OP
       2020-01-08 00:21:47 +08:00 via Android
    @luozic grpc 也就是个 http2 也有 header,也有请求 path 多说无益…… 搜索引擎第一页就有结果
    itstudying
        20
    itstudying  
    OP
       2020-01-08 00:23:36 +08:00 via Android
    @wangyzj 实际只是复用了连接,不想用 pb 不用就是~
    binbinyouliiii
        21
    binbinyouliiii  
       2020-01-08 00:33:35 +08:00
    http1.1 不也是可以走长连接
    wangyzj
        22
    wangyzj  
       2020-01-08 00:57:46 +08:00
    @itstudying 给个 demo 呗
    另外 grpc 有类似 postman 那种方便调试的客户端工具吗?
    KuroNekoFan
        23
    KuroNekoFan  
       2020-01-08 06:28:11 +08:00 via iPhone
    之前看一篇讲 uber 技术内幕的文章
    里面提到一件事
    就是某个系统本来用了自定义通讯协议(大概就是 grpc,thrift 什么的)后来遇到问题怎么都解决不了
    后来换成 http,问题不见了
    ebingtel
        24
    ebingtel  
       2020-01-08 08:40:38 +08:00
    GRPC 的负载均衡是怎么搞的? nginx 还不支持吧
    itstudying
        25
    itstudying  
    OP
       2020-01-08 09:03:54 +08:00
    @wangyzj #22 如果不用 pb 的话就不能用 grpc 了,只能客户端和服务端都支持 http2 才行,我们主要是 go 语言 demo 网络上有很多~,https://github.com/fullstorydev/grpcurl 可以使用这个库进行调试,不过我们都是会写个 client 打印输出。
    itstudying
        26
    itstudying  
    OP
       2020-01-08 09:05:29 +08:00
    @ebingtel #24 nginx1.13 版本就支持了 grpc 的负载均衡,不过我们用的是阿里云的 slb,
    itstudying
        27
    itstudying  
    OP
       2020-01-08 09:12:17 +08:00
    @ebingtel #24 哦 也用到了 nginx,不过没负载均衡只是做了转发 grpc 的请求,nginx 开启支持 http2 就好
    THaGKI9
        28
    THaGKI9  
       2020-01-08 09:16:16 +08:00 via iPhone
    为啥会有这么急剧的变化呢?你们的更替是直接全量上线吗?
    zunceng
        29
    zunceng  
       2020-01-08 09:16:22 +08:00
    @luozic 整个 cncf 半壁江山都是 grpc

    你说的 jb 生态几乎已经占据了业界主流了你还不知道吗?
    xxiu
        30
    xxiu  
       2020-01-08 09:25:15 +08:00
    grpc 是 http2 多路复用,连接数相当于以前的一对多变成一对一。
    whypool
        31
    whypool  
       2020-01-08 10:00:41 +08:00
    然后内存 boom 了?
    chennqqi
        32
    chennqqi  
       2020-01-08 10:13:20 +08:00
    http keepalive 也能复用啊
    SkyYu822
        33
    SkyYu822  
       2020-01-08 10:22:19 +08:00
    @zunceng cncf 半壁江山 = 业界主流 ?
    zunceng
        34
    zunceng  
       2020-01-08 10:24:44 +08:00
    @SkyYu822 说句不客气的话 在科技行业难道不是吗
    SkyYu822
        35
    SkyYu822  
       2020-01-08 11:26:34 +08:00
    @zunceng 我持保留意见 这块争论过大
    wysnylc
        36
    wysnylc  
       2020-01-08 11:33:20 +08:00
    都在从 rpc 升级到 http,你这往回走,是智者还是愚昧?待后来人评价
    反正 spring cloud 是主推 http,rpc 只是可选和备选
    fuxiaohei
        37
    fuxiaohei  
       2020-01-08 11:34:48 +08:00
    以前是 http 1 吗?直接升级到 http2 也许就有效果了
    realpg
        38
    realpg  
       2020-01-08 11:35:32 +08:00
    直接把接口服务器变成 h2 不也这效果
    tabris17
        39
    tabris17  
       2020-01-08 11:35:45 +08:00
    @fox1955 协议是可以替换的。开发调式时用 json-rpc,生产环境用 grpc,不就结了
    ebingtel
        40
    ebingtel  
       2020-01-08 11:39:57 +08:00
    @itstudying 哦 是我的提问提错了……在使用 nginx 做长连接的负载均衡,好像有点问题 不知道你们有没有这种长连接的场景
    leoaqr
        41
    leoaqr  
       2020-01-08 11:48:37 +08:00 via iPhone
    只看了连接数,cpu 使用量有变化么?
    guokeke
        42
    guokeke  
       2020-01-08 11:49:06 +08:00
    和 grpc 对标的不是 rest 和 graphql 吗? 如果 http 改 grpc ?指的是 http 1.1 升 2 ? 那其实 nginx 改个参数就行了。
    dbskcnc
        43
    dbskcnc  
       2020-01-08 12:01:57 +08:00
    grpc 语法方面确实方便
    luozic
        44
    luozic  
       2020-01-08 12:47:46 +08:00 via iPhone
    现在更合适的通用连接方式 rsocket 基本会成为后续更主流的方式,协议层和传输层解耦合,协议和应用捆死的模型最大规模的应用不是 servlet 么,吹了那么多,servlet 啥时候换 http2 协议性能提升了不少了?
    hyperbin
        45
    hyperbin  
       2020-01-08 12:58:02 +08:00 via Android
    换 http2 不就行了?
    DanielYao
        46
    DanielYao  
       2020-01-08 13:09:40 +08:00
    我司.net ,java,node ,go 上 grpc 两年了,美滋滋,谁用谁知道
    luozic
        47
    luozic  
       2020-01-08 13:47:07 +08:00
    cncf 用 grpc 的原因还用说么,k8s 等基础设施是抄谁的? 并且当时没有造足够多的 rpc,大家也不知道如何设计一个通用性能高而且和传输协议解耦合的传输层 rpc,gprc 好歹是当时的唯二中的一个半自动化 rpc,比 facebook 的 thrift 友好一点,
    janxin
        48
    janxin  
       2020-01-08 14:11:51 +08:00
    @KuroNekoFan uber 用的 thrift
    KuroNekoFan
        49
    KuroNekoFan  
       2020-01-08 14:24:18 +08:00 via iPhone
    @janxin 可能我描述的不够仔细,不过我主要是提这么一个事情,而不是想表达“据我所知 uber 从 xxx 转向 http”
    ospider
        51
    ospider  
       2020-01-08 15:15:22 +08:00
    开始在公司用的 gRPC,可惜其他人理解不了,觉得还要编译好麻烦啊,竟然又换回了 http。我也是醉了
    wangyzj
        52
    wangyzj  
       2020-01-08 15:22:08 +08:00
    @wtof 我也查到这个了。。。多谢
    sophos
        53
    sophos  
       2020-01-08 17:19:56 +08:00
    @janxin uber 很多 grpc 相关的开源项目
    codewarrior
        54
    codewarrior  
       2020-01-09 02:03:18 +08:00 via Android
    换成 grpc 之后 authentication 怎么做的? passive authentication,ssl 之类的有类似的功能支持吗?
    duchengle001
        55
    duchengle001  
       2021-04-10 09:26:22 +08:00
    @itstudying 请教一下阿里云 SLB 怎么配置 gRpc 的监听呀?
    itstudying
        56
    itstudying  
    OP
       2021-04-12 08:20:12 +08:00
    @duchengle001 #55 就直接使用 tcp 协议监听就可以。但是在负载到新增节点时可能会有点延时,可以测试下。
    feelapi
        57
    feelapi  
       2022-01-10 22:46:25 +08:00
    另外一条可以云原生,桌面两条腿走路的模式,必须 gRPC.
    daoqiongsi1101
        58
    daoqiongsi1101  
       2022-02-18 00:32:50 +08:00
    比如 A 服务通过 grpc 请求 B 服务,100 个并发请求,那么连接数是多少?
    chaleaochexist
        59
    chaleaochexist  
       2023-03-24 15:13:46 +08:00
    @itstudying #20 不想用 pb 请问如何实现 有例子吗 最简单的就可以...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1014 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 21:08 · PVG 05:08 · LAX 13:08 · JFK 16:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.