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

GRPC 流量路由

  •  
  •   zzgy · 2021-10-12 14:22:31 +08:00 · 2269 次点击
    这是一个创建于 1168 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这里有这么一个场景,A 服务调 B 服务调 GRPC 接口,现在想对 A 服务做重构,因此新写了一个 C 服务来替换 A,因此 A 调 B 的接口想通过 istio 全部拦截下来由 C 来处理,C 处理完之后再调 B 。

    C 服务相当于是个 GRPC 的代理网关。

    我有试过 http 根据 header 或者 url 用 virtualservice 做路由转发,但是 grpc 怎么实现呢?

    6 条回复    2021-10-13 08:02:29 +08:00
    cxytz01
        1
    cxytz01  
       2021-10-12 14:50:57 +08:00
    方法一:grcp 本质也是 http,也有 header 和 url,你的方法名字就是你的 url,代理网关肯定支持 http2 的反向代理
    方法二:将 B 的接口通过 grpc gateway 暴露成 http1.1
    Yoock
        2
    Yoock  
       2021-10-12 15:11:47 +08:00
    可能 Nginx 性能更好一点
    sunkai0609
        3
    sunkai0609  
       2021-10-12 15:30:36 +08:00
    istio 对 qps 影响大吗
    LichMscy
        4
    LichMscy  
       2021-10-12 15:38:53 +08:00
    其实不用增加 c 服务 可以给 A 服务注入一个 istio sidecar,因为 envoy 本身可以劫持流量进行各种处理再转发流量给 B 服务,需要 header 就用 virtualservice 来控制,需要熔断限流控制负载策略就加个 destinationrule

    我们目前常用架构是在应用层面,用一个应用网关( istio gateway )来控制应用下的多个服务的流量转发,包括一些对外的流量会用 egress,这种模式可以参考下。
    janxin
        5
    janxin  
       2021-10-12 17:13:09 +08:00
    @zzgy 你的情况是 A->B 转成 A->C->B,你重构 A 服务为什么要加个 C 呢...
    @sunkai0609 istio 自己有个 benchmark 可以看一下,也可以自己跑一下
    kingfalse
        6
    kingfalse  
       2021-10-13 08:02:29 +08:00 via Android
    grpc 用 Nginx 直接转
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:20 · PVG 04:20 · LAX 12:20 · JFK 15:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.