GRPC 流量路由

2021-10-12 14:22:31 +08:00
 zzgy

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

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

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

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

我们目前常用架构是在应用层面,用一个应用网关( istio gateway )来控制应用下的多个服务的流量转发,包括一些对外的流量会用 egress,这种模式可以参考下。
janxin
2021-10-12 17:13:09 +08:00
@zzgy 你的情况是 A->B 转成 A->C->B,你重构 A 服务为什么要加个 C 呢...
@sunkai0609 istio 自己有个 benchmark 可以看一下,也可以自己跑一下
kingfalse
2021-10-13 08:02:29 +08:00
grpc 用 Nginx 直接转

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/807300

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX