我这里有这么一个场景,A 服务调 B 服务调 GRPC 接口,现在想对 A 服务做重构,因此新写了一个 C 服务来替换 A,因此 A 调 B 的接口想通过 istio 全部拦截下来由 C 来处理,C 处理完之后再调 B 。
C 服务相当于是个 GRPC 的代理网关。
我有试过 http 根据 header 或者 url 用 virtualservice 做路由转发,但是 grpc 怎么实现呢?
1
cxytz01 2021-10-12 14:50:57 +08:00
方法一:grcp 本质也是 http,也有 header 和 url,你的方法名字就是你的 url,代理网关肯定支持 http2 的反向代理
方法二:将 B 的接口通过 grpc gateway 暴露成 http1.1 |
2
Yoock 2021-10-12 15:11:47 +08:00
可能 Nginx 性能更好一点
|
3
sunkai0609 2021-10-12 15:30:36 +08:00
istio 对 qps 影响大吗
|
4
LichMscy 2021-10-12 15:38:53 +08:00
其实不用增加 c 服务 可以给 A 服务注入一个 istio sidecar,因为 envoy 本身可以劫持流量进行各种处理再转发流量给 B 服务,需要 header 就用 virtualservice 来控制,需要熔断限流控制负载策略就加个 destinationrule
我们目前常用架构是在应用层面,用一个应用网关( istio gateway )来控制应用下的多个服务的流量转发,包括一些对外的流量会用 egress,这种模式可以参考下。 |
5
janxin 2021-10-12 17:13:09 +08:00
|
6
kingfalse 2021-10-13 08:02:29 +08:00 via Android
grpc 用 Nginx 直接转
|